[llvm-commits] CVS: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/README blue bluef book bookf bsf bsf.lpg cprint cprintf diag diagf diagf.etc diagf.lpg doc docf dsf eiffel eiffelf eq eqf fig figf figf.lpg graph graphf graphf.etc graphf.lpg init langdefs latin2 modula modulaf mydefs pas pasf perl perlf picture picturef pod podf python pythonf report reportf russian russian.fd slides slidesf tab tabf tabf.lpg tbl tblf tblf.lpg ts

Chris Lattner sabre at nondot.org
Tue Jan 9 16:08:35 PST 2007



Changes in directory llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include:

README added (r1.1)
blue added (r1.1)
bluef added (r1.1)
book added (r1.1)
bookf added (r1.1)
bsf added (r1.1)
bsf.lpg added (r1.1)
cprint added (r1.1)
cprintf added (r1.1)
diag added (r1.1)
diagf added (r1.1)
diagf.etc added (r1.1)
diagf.lpg added (r1.1)
doc added (r1.1)
docf added (r1.1)
dsf added (r1.1)
eiffel added (r1.1)
eiffelf added (r1.1)
eq added (r1.1)
eqf added (r1.1)
fig added (r1.1)
figf added (r1.1)
figf.lpg added (r1.1)
graph added (r1.1)
graphf added (r1.1)
graphf.etc added (r1.1)
graphf.lpg added (r1.1)
init added (r1.1)
langdefs added (r1.1)
latin2 added (r1.1)
modula added (r1.1)
modulaf added (r1.1)
mydefs added (r1.1)
pas added (r1.1)
pasf added (r1.1)
perl added (r1.1)
perlf added (r1.1)
picture added (r1.1)
picturef added (r1.1)
pod added (r1.1)
podf added (r1.1)
python added (r1.1)
pythonf added (r1.1)
report added (r1.1)
reportf added (r1.1)
russian added (r1.1)
russian.fd added (r1.1)
slides added (r1.1)
slidesf added (r1.1)
tab added (r1.1)
tabf added (r1.1)
tabf.lpg added (r1.1)
tbl added (r1.1)
tblf added (r1.1)
tblf.lpg added (r1.1)
ts added (r1.1)
---
Log message:

continue adding mibench


---
Diffs of the changes:  (+35772 -0)

 README     |   86 
 blue       |  109 +
 bluef      |  390 +++
 book       |  396 +++
 bookf      | 1268 +++++++++++
 bsf        | 1609 +++++++++++++++
 bsf.lpg    |  139 +
 cprint     |  109 +
 cprintf    |  390 +++
 diag       |  479 ++++
 diagf      | 6459 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 diagf.etc  |  627 +++++
 diagf.lpg  | 2706 +++++++++++++++++++++++++
 doc        |  371 +++
 docf       |  779 +++++++
 dsf        | 4566 +++++++++++++++++++++++++++++++++++++++++++
 eiffel     |  109 +
 eiffelf    |  390 +++
 eq         |   27 
 eqf        | 1696 ++++++++++++++++
 fig        |   27 
 figf       |  909 ++++++++
 figf.lpg   | 1003 +++++++++
 graph      |   27 
 graphf     | 1084 ++++++++++
 graphf.etc |  295 ++
 graphf.lpg |  768 +++++++
 init       |   35 
 langdefs   |   17 
 latin2     |    9 
 modula     |   27 
 modulaf    |  137 +
 mydefs     |    9 
 pas        |   27 
 pasf       |  110 +
 perl       |  127 +
 perlf      |  390 +++
 picture    |  272 ++
 picturef   |   37 
 pod        |  176 +
 podf       |  550 +++++
 python     |  109 +
 pythonf    |  390 +++
 report     |  403 +++
 reportf    |  912 ++++++++
 russian    |   10 
 russian.fd |   38 
 slides     |  317 ++
 slidesf    |  371 +++
 tab        |   29 
 tabf       |  936 ++++++++
 tabf.lpg   |  115 +
 tbl        |   79 
 tblf       | 3175 +++++++++++++++++++++++++++++
 tblf.lpg   |   41 
 ts         |  106 +
 56 files changed, 35772 insertions(+)


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/README
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/README:1.1
*** /dev/null	Tue Jan  9 18:08:16 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/README	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,86 ----
+ Directory lout/include
+ 
+ This directory contains Lout source files for the standard packages.
+ The following listing classifies them into types of files.
+ 
+ Setup files (containing mainly lists of options settable by the user)
+ ---------------------------------------------------------------------
+ 
+    Setup files for basic document types (choose one):
+ 
+        doc              The OrdinarySetup package
+        report           The ReportSetup package
+        book             The BookSetup package
+        slides           The OverheadsSetup package
+        picture          The IllustrationSetup package
+ 
+    Setup files for special-purpose packages (choose any combination):
+ 
+        tbl              The Tbl table formatting package
+        tab              The Tab table formatting package (OBSOLETE, use tbl)
+        eq               The Eq equation formatting package
+        diag             The Diag diagram drawing package
+        fig              The Fig advanced graphics package (OBSOLETE, use diag)
+        graph            The Graph graph drawing package
+        pas              The Pas Pascal progam printing package
+        modula           The Modula Modula-2 progam printing package
+        latin2           The Latin2 (Eastern European characters) package
+        russian          The Russian language package
+ 
+    Setup files for program formatting packages (choose any combination):
+ 
+        cprint           C and C++
+        eiffel           Eiffel
+        blue             Blue
+        perl             Perl + Pod
+        pod              Pod
+        python           Python
+ 
+ Source files (containing Lout and PostScript source code for the packages)
+ --------------------------------------------------------------------------
+ 
+        bsf              The BasicSetup package
+        bsf.lpg          A PostScript prepend file needed by BasicSetup
+        dsf              The DocumentSetup package
+        docf             The OrdinarySetup package
+        reportf          The ReportSetup package
+        bookf            The BookSetup package
+        slidesf          The OverheadsSetup package
+        picturef         The IllustrationSetup package
+ 
+        tabf             The Tab table formatting package (OBSOLETE)
+        tabf.lpg         A PostScript prepend file needed by tabf (OBSOLETE)
+        tblf             The Tbl table formatting package
+        tblf.lpg         A PostScript prepend file needed by tblf
+        eqf              The Eq equation formatting package
+        figf             The Fig advanced graphics package (OBSOLETE)
+        figf.lpg         A PostScript prepend file needed by figf (OBSOLETE)
+        diagf            The Diag diagram drawing package
+        diagf.etc        A file included by diagf
+        diagf.lpg        A PostScript prepend file needed by diagf
+        graphf           The Graph graph drawing package
+        graphf.etc       A file included by graphf
+        graphf.lpg       A PostScript prepend file needed by graphf
+        pasf             Pascal
+        modulaf          Modula-2
+        latin2.fd        Latin2 font definitions file (placeholder file)
+        russian.fd       Russian font definitions file (placeholder file)
+ 
+        cprintf          C and C++
+        eiffelf          Eiffel
+        bluef            Blue
+        perlf            Perl
+        podf             Pod
+        pythonf          Python
+ 
+ Miscellaneous
+ -------------
+ 
+        langdefs         Standard language definitions file
+        mydefs           Empty file for if the user doesn't have a mydefs
+        ts               The ToySetup package (an expert users' intro. example)
+        init             A Lout source file used during installation (lout -x)
+ 
+ 
+ Jeffrey H. Kingston
+ 8 April 2000


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/blue
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/blue:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/blue	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,109 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for Blue program printing                                 #
+ #                                                                             #
+ #   Version 3.0                                                               #
+ #   Jeffrey H. Kingston                                                       #
+ #   10 April 2000                                                             #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude line                                                           #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for this programming         #
+ #  language, and should not be touched.                                       #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { bluef }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Use clause                                                                #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @BlueSetup
+   # pipe			{		} # pipe source through this
+   # numbered			{ No		} # No, Yes, or a line number
+   # style	     { varying @OrIfPlain fixed	} # fixed, varying, or symbol
+ 
+   # the following options apply when style is "fixed"
+ 
+   # fixedfont			{ Courier	} # font family
+   # fixedsize			{ -1.0p		} # font size
+   # fixedline			{ 1.0vx		} # line-space
+   # fixedtabin			{ 8		} # tab interval
+   # fixedtabout			{ 8s		} # tab width
+ 
+   # fixedidentifiers		{ Base		} # identifier face
+   # fixedkeywords		{ Base		} # keyword face
+   # fixedoperators		{ Base		} # operator face
+   # fixednumbers		{ Base		} # number face
+   # fixedstrings		{ Base		} # string face
+   # fixedcomments		{ Base		} # comment face
+   # fixedlinenumbers		{ Base		} # line numbers face
+ 
+   # fixedidentifiersformat	{ @Body		} # identifiers format
+   # fixedkeywordsformat		{ @Body		} # keywords format
+   # fixedoperatorsformat	{ @Body		} # operators format
+   # fixednumbersformat		{ @Body		} # numbers format
+   # fixedstringsformat		{ @Body		} # strings format
+   # fixedcommentsformat		{ @Body		} # comments format
+   # fixedlinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "varying"
+ 
+   # varyingfont			{		} # font family
+   # varyingsize			{ 1.0f		} # font size
+   # varyingline			{ 1.0vx		} # line-space
+   # varyingtabin		{ 8		} # tab interval
+   # varyingtabout		{ 3f		} # tab width
+ 
+   # varyingidentifiers		{ Slope		} # identifier face
+   # varyingkeywords		{ Bold		} # keyword face
+   # varyingoperators		{ Base		} # operator face
+   # varyingnumbers		{ Base		} # number face
+   # varyingstrings		{ Slope		} # string face
+   # varyingcomments		{ Base		} # comment face
+   # varyinglinenumbers		{ Base		} # line numbers face
+ 
+   # varyingidentifiersformat	{ @Body		} # identifiers format
+   # varyingkeywordsformat	{ @Body		} # keywords format
+   # varyingoperatorsformat	{ @Body		} # operators format
+   # varyingnumbersformat	{ @Body		} # numbers format
+   # varyingstringsformat	{ @Body		} # strings format
+   # varyingcommentsformat	{ @Body		} # comments format
+   # varyinglinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "symbol"
+ 
+   # symbolfont			{		} # font family
+   # symbolsize			{ 1.0f		} # font size
+   # symbolline			{ 1.0vx		} # line-space
+   # symboltabin			{ 8		} # tab interval
+   # symboltabout		{ 3f		} # tab width
+ 
+   # symbolidentifiers		{ Slope		} # identifier face
+   # symbolkeywords		{ Bold		} # keyword face
+   # symboloperators		{ Base		} # operator face
+   # symbolnumbers		{ Base		} # number face
+   # symbolstrings		{ Slope		} # string face
+   # symbolcomments		{ Base		} # comment face
+   # symbollinenumbers		{ Base		} # line numbers face
+ 
+   # symbolidentifiersformat	{ @Body		} # identifiers format
+   # symbolkeywordsformat	{ @Body		} # keywords format
+   # symboloperatorsformat	{ @Body		} # operators format
+   # symbolnumbersformat		{ @Body		} # numbers format
+   # symbolstringsformat		{ @Body		} # strings format
+   # symbolcommentsformat	{ @Body		} # comments format
+   # symbollinenumbersformat	{ @Body		} # line numbers format
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bluef
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bluef:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bluef	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,390 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @BlueSetup package for formatting Blue programs                       #
+ #                                                                             #
+ #  Version 3.0                                                                #
+ #  Jeffrey H. Kingston                                                        #
+ #  10 April 2000                                                              #
+ #                                                                             #
+ #  This package uses a filtered body parameter to convert program source      #
+ #  code into Lout source.  The filter program is prg2lout, which is           #
+ #  distributed with Lout and should be compiled and installed wherever        #
+ #  Lout itself is.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ export @Blue
+ def @BlueSetup
+     named pipe					{	}  # pipe through this
+     named numbered				{ No	}  # numbered lines?
+     named style
+ 	named @OrIfPlain left x right y
+ 	{ @BackEnd @Case { PlainText @Yield y else @Yield x } }
+ 				{ varying @OrIfPlain fixed }  # print style
+ 
+     # the following options apply when style is "fixed"
+     named fixedfont				{ Courier }# font family
+     named fixedsize				{ -1.0p	}  # font size
+     named fixedline				{ 1.0vx	}  # line-space
+     named fixedtabin				{ 8	}  # tab interval
+     named fixedtabout				{ 8s	}  # tab width
+ 
+     named fixedidentifiers			{ Base	}  # identifier face
+     named fixedkeywords				{ Base	}  # keyword face
+     named fixedoperators			{ Base	}  # operator face
+     named fixednumbers				{ Base	}  # number face
+     named fixedstrings				{ Base	}  # string face
+     named fixedcomments				{ Base	}  # comment face
+     named fixedlinenumbers			{ Base	}  # line numbers face
+ 
+     named fixedidentifiersformat right @Body	{ @Body	}  # identifier format
+     named fixedkeywordsformat right @Body	{ @Body	}  # keyword format
+     named fixedoperatorsformat right @Body	{ @Body	}  # operators format
+     named fixednumbersformat right @Body	{ @Body	}  # number format
+     named fixedstringsformat right @Body	{ @Body	}  # string format
+     named fixedcommentsformat right @Body	{ @Body	}  # comment format
+     named fixedlinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "varying"
+     named varyingfont				{	}  # font family
+     named varyingsize				{ 1.0f	}  # font size
+     named varyingline				{ 1.0vx	}  # line-space
+     named varyingtabin				{ 8	}  # tab interval
+     named varyingtabout				{ 3f	}  # tab width
+ 
+     named varyingidentifiers			{ Slope	}  # identifier face
+     named varyingkeywords			{ Bold	}  # keyword face
+     named varyingoperators			{ Base	}  # operator face
+     named varyingnumbers			{ Base	}  # number face
+     named varyingstrings			{ Slope	}  # string face
+     named varyingcomments			{ Base	}  # comment face
+     named varyinglinenumbers			{ Base	}  # line numbers face
+ 
+     named varyingidentifiersformat right @Body	{ @Body	}  # identifier format
+     named varyingkeywordsformat right @Body	{ @Body	}  # keyword format
+     named varyingoperatorsformat right @Body	{ @Body	}  # operators format
+     named varyingnumbersformat right @Body	{ @Body	}  # number format
+     named varyingstringsformat right @Body	{ @Body	}  # string format
+     named varyingcommentsformat right @Body	{ @Body	}  # comment format
+     named varyinglinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "symbol"
+     named symbolfont				{	}  # font family
+     named symbolsize				{ 1.0f	}  # font size
+     named symbolline				{ 1.0vx	}  # line-space
+     named symboltabin				{ 8	}  # tab interval
+     named symboltabout				{ 3f	}  # tab width
+ 
+     named symbolidentifiers			{ Slope	}  # identifier face
+     named symbolkeywords			{ Bold	}  # keyword face
+     named symboloperators			{ Base	}  # operator face
+     named symbolnumbers				{ Base	}  # number face
+     named symbolstrings				{ Slope	}  # string face
+     named symbolcomments			{ Base	}  # comment face
+     named symbollinenumbers			{ Base	}  # line numbers face
+ 
+     named symbolidentifiersformat right @Body	{ @Body	}  # identifier format
+     named symbolkeywordsformat right @Body	{ @Body	}  # keyword format
+     named symboloperatorsformat right @Body	{ @Body	}  # operators format
+     named symbolnumbersformat right @Body	{ @Body	}  # number format
+     named symbolstringsformat right @Body	{ @Body	}  # string format
+     named symbolcommentsformat right @Body	{ @Body	}  # comment format
+     named symbollinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+ @Begin
+ 
+     export
+     
+ 	@PI @PK @PO @PN @PS @PC @PL @PA @PM @PD
+ 	@A "$>"
+ 
+     def @Blue
+ 	named style        { style         }  # style
+ 	named numbered	   { numbered	   }  # want numbered lines?
+ 	named pipe         { pipe          }  # pipe through this first
+ 	named font         { dft           }  # font family
+ 	named size         { dft           }  # font size
+ 	named line         { dft           }  # line-space
+ 	named tabin        { dft           }  # tab interval
+ 	named tabout       { dft           }  # tab width
+ 	named identifiers  { dft           }  # ident. font
+ 	named keywords     { dft           }  # keyword font
+ 	named operators    { dft           }  # operator font
+ 	named numbers      { dft           }  # number font
+ 	named strings      { dft           }  # string font
+ 	named comments     { dft           }  # comment font
+ 	named linenumbers  { dft           }  # line numbers font
+ 	body @Body			      # filtered, see below
+     @Begin
+ 
+ 	def @Test	# returns x unless x is dft
+ 	    left x
+ 	    named iffixed {}
+ 	    named ifvarying {}
+ 	    named ifsymbol {}
+ 	{
+ 	    x @Case {
+ 		dft @Yield {
+ 		    style @Case {
+ 			fixed   @Yield { iffixed   }
+ 			varying @Yield { ifvarying }
+ 			symbol  @Yield { ifsymbol  }
+ 		    }
+ 		}
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @Else	# returns x, or y if x is dft
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		dft  @Yield y
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitTab
+ 	{
+ 	  tabin @Test
+ 	      iffixed   { fixedtabin   }
+ 	      ifvarying { varyingtabin }
+ 	      ifsymbol  { symboltabin  }
+ 	}
+ 
+ 
+ 	def @InitTabWidth
+ 	{
+ 	  tabout @Test
+ 	      iffixed   { fixedtabout   }
+ 	      ifvarying { varyingtabout }
+ 	      ifsymbol  { symboltabout  }
+ 	}
+ 
+ 
+ 	def @Filter
+ 	{
+ 	    def wantnumbered
+ 	    {
+ 		numbered @Case {
+ 		  { No no }	@Yield ""
+ 		  { Yes yes }	@Yield "-L"
+ 		  else          @Yield { "-L"numbered }
+ 		}
+ 	    }
+ 
+ 	    pipe @Case {
+ 		"" @Yield {
+ 	    	    "prg2lout -r -lBlue" wantnumbered -i{@FilterIn}
+ 		    -o{@FilterOut} -e{@FilterErr}
+ 		    -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 		else @Yield {
+ 	    	    "cat" @FilterIn "|" pipe "|"
+ 		    "prg2lout -r -lBlue" wantnumbered -o{@FilterOut}
+ 		    -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitFontFamily
+ 	{
+ 	  font @Test
+ 	      iffixed   { fixedfont   }
+ 	      ifvarying { varyingfont }
+ 	      ifsymbol  { symbolfont  }
+ 	}
+ 
+ 
+ 	def @InitSize
+ 	{
+ 	  size @Test
+ 	      iffixed   { fixedsize   }
+ 	      ifvarying { varyingsize }
+ 	      ifsymbol  { symbolsize  }
+ 	}
+ 
+ 
+ 	def @InitLine
+ 	{
+ 	  line @Test
+ 	      iffixed   { fixedline   }
+ 	      ifvarying { varyingline }
+ 	      ifsymbol  { symbolline  }
+ 	}
+ 
+ 
+ 	def @PI		# for formatting identifiers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedidentifiersformat {
+ 		    { identifiers @Else fixedidentifiers } @Font x
+ 		}
+ 		varying @Yield varyingidentifiersformat {
+ 		    { identifiers @Else varyingidentifiers } @Font x
+ 		}
+ 		symbol @Yield symbolidentifiersformat {
+ 		    { identifiers @Else symbolidentifiers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PK		# for formatting keywords
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedkeywordsformat {
+ 		    { keywords @Else fixedkeywords } @Font x
+ 		}
+ 		varying @Yield varyingkeywordsformat {
+ 		    { keywords @Else varyingkeywords } @Font x
+ 		}
+ 		symbol @Yield symbolkeywordsformat {
+ 		    { keywords @Else symbolkeywords } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PO		# for formatting operators
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedoperatorsformat {
+ 		    { operators @Else fixedoperators } @Font x
+ 		}
+ 		varying @Yield varyingoperatorsformat {
+ 		    { operators @Else varyingoperators } @Font x
+ 		}
+ 		symbol @Yield symboloperatorsformat {
+ 		    { operators @Else symboloperators } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PN		# for formatting numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixednumbersformat {
+ 		    { numbers @Else fixednumbers } @Font x
+ 		}
+ 		varying @Yield varyingnumbersformat {
+ 		    { numbers @Else varyingnumbers } @Font x
+ 		}
+ 		symbol @Yield symbolnumbersformat {
+ 		    { numbers @Else symbolnumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PS		# for formatting strings
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedstringsformat {
+ 		    { strings @Else fixedstrings } @Font x
+ 		}
+ 		varying @Yield varyingstringsformat {
+ 		    { strings @Else varyingstrings } @Font x
+ 		}
+ 		symbol @Yield symbolstringsformat {
+ 		    { strings @Else symbolstrings } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PC		# for formatting comments
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedcommentsformat {
+ 		    { comments @Else fixedcomments } @Font x
+ 		}
+ 		varying @Yield varyingcommentsformat {
+ 		    { comments @Else varyingcomments } @Font x
+ 		}
+ 		symbol @Yield symbolcommentsformat {
+ 		    { comments @Else symbolcomments } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PL		# for formatting line numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedlinenumbersformat {
+ 		    { linenumbers @Else fixedlinenumbers } @Font x
+ 		}
+ 		varying @Yield varyinglinenumbersformat {
+ 		    { linenumbers @Else varyinglinenumbers } @Font x
+ 		}
+ 		symbol @Yield symbollinenumbersformat {
+ 		    { linenumbers @Else symbollinenumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PA		# for formatting asterisks
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "*"
+ 		else @Yield { "0.5w" @VShift "*" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PM		# for formatting minus signs
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "-"
+ 		else @Yield style @Case {
+ 		    fixed   @Yield "-"
+ 		    else    @Yield { { Symbol Base } @Font @Char "minus" }
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PD		# for formatting dots, if wanted larger
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "."
+ 		else @Yield { "1.4f" @Font "+0.04f" @VShift "." &"0.05f" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @A		# get characters from the Adobe Symbol font
+ 	    left sym
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		symbol	@Yield { { Symbol Base } @Font @Char sym }
+ 		else	@Yield { x			}
+ 	    }
+ 	}
+ 
+ 
+ 	macro "$>" { {} & }
+ 
+ 
+ 	{ @InitFontFamily Base @InitSize } @Font
+ 	{ @InitLine lines nohyphen } @Break @Body
+ 
+     @End @Blue
+ 
+ @End @BlueSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/book
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/book:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/book	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,396 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for books                                                 #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   17 September 1999                                                         #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude commands for standard packages.                                #
+ #                                                                             #
+ ###############################################################################
+ 
+   @SysInclude { langdefs	} # language definitions
+   @SysInclude { bsf		} # BasicSetup package
+   @SysInclude { dsf		} # DocumentSetup package
+   @SysInclude { bookf		} # BookSetup extension
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Include command for reading personal definitions from current directory.  #
+ #                                                                             #
+ ###############################################################################
+ 
+   @Include { mydefs }
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @BasicSetup @Use clause - basics, lists, paragraphs, displays.         #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+  
+ @Use { @BasicSetup
+   # @InitialFont	{ Times Base 12p	} # initial font
+   # @InitialBreak	{{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}}
+   # @InitialSpace	{ lout			} # initial space style
+   # @InitialLanguage	{ English		} # initial language
+   # @InitialColour	{ black			} # initial colour
+   # @OptimizePages	{ No			} # optimize page breaks?
+   # @HeadingFont	{ Bold			} # font for @Heading
+   # @ParaGap		{ 1.3vx @OrIfPlain 1f	} # gap between paragraphs
+   # @ParaIndent		{ 2.00f	@OrIfPlain 5s	} # first-line indent for @PP
+   # @DisplayGap		{ 1.00v	@OrIfPlain 1f	} # gap above, below displays
+   # @DisplayIndent	{ 2.00f	@OrIfPlain 5s	} # @IndentedDisplay indent
+   # @DefaultIndent	{ 0.5rt			} # @Display indent
+   # @DisplayNumStyle	{ (num)			} # style of display numbers
+   # @WideIndent		{ 4.00f	@OrIfPlain 10s	} # @WideTaggedList indent
+   # @VeryWideIndent	{ 8.00f	@OrIfPlain 20s	} # @VeryWideTaggedList indent
+   # @ListOuterGap	{ 1.00v	@OrIfPlain 1f	} # gap before, after lists
+   # @ListGap		{ 1.00v	@OrIfPlain 1f	} # gap between list items
+   # @ListIndent		{ 0s			} # indent of list items
+   # @ListRightIndent	{ 0s			} # right indent of list items
+   # @ListLabelWidth	{ 2.00f	@OrIfPlain 5s	} # width allowed for list tags
+   # @NumberSeparator	{ .			} # separates nums like 2.3.7
+   # @CrossLinkFormat	{ @Body			} # format of cross links
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @DocumentSetup @Use clause - page layout plus figures, tables, etc.    #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @DocumentSetup
+   # @PageType		{ A4	@OrIfPlain Other} # page type (width, height)
+   # @PageWidth		{ 80s			} # page width if type Other
+   # @PageHeight		{ 66f			} # page height if type Other
+   # @PageOrientation	{ Portrait		} # Portrait, Landscape, etc.
+   # @PageBackground	{  			} # background of each page
+   # @TopMargin		{ 2.5c	@OrIfPlain 6f	} # top margin of all pages
+   # @FootMargin		{ 2.5c	@OrIfPlain 6f	} # bottom margin of all pages
+   # @OddLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of odd pages
+   # @OddRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of odd pages
+   # @EvenLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of even pages
+   # @EvenRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of even pages
+   # @OddLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @OddRightBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenRightBodyMargin{ 0c			} # extra margin for page body
+   # @PageBoxType	{ None			} # None Box CurveBox ShadowBox
+   # @PageBoxMargin	{ 1.00c			} # page box margin
+   # @PageBoxLineWidth	{			} # page box line thickness
+   # @PageBoxPaint	{ none			} # page box paint
+   # @PageBoxShadow	{ 0.60c			} # shadow margin if ShadowBox
+   # @PageEnclose	{ @Body			} # enclose every page in this
+   # @ColumnNumber	{ 1			} # number of columns (1 to 10)
+   # @ColumnGap		{ 1.00c	@OrIfPlain 6s	} # column gap
+   # @FigureLocation	{ PageTop		} # default figure location
+   # @TableLocation	{ PageTop		} # default table location
+   # @FigureFormat	{ @CC @Body		} # default figure format
+   # @TableFormat	{ @CC @Body		} # default table format
+   # @FigureWord		{ figure		} # "Figure" word else anything
+   # @TableWord		{ table			} # "Table" word else anything
+   # @FigureNumbers	{ Arabic		} # method of numbering figures
+   # @TableNumbers	{ Arabic		} # method of numbering tables
+   # @FigureCaptionPos	{ Below 		} # Above or Below
+   # @TableCaptionPos	{ Below			} # Above or Below
+   # @FigureCaptionFont  { -2p                   } # figure caption font
+   # @FigureCaptionBreak { adjust hyphen 1.2fx   } # figure caption break
+   # @FigureCaptionFormat{ {@B { word @NumSep number. &2s }} @Insert caption }
+   # @TableCaptionFont   { -2p                   } # table caption font
+   # @TableCaptionBreak  { adjust hyphen 1.2fx   } # table caption break
+   # @TableCaptionFormat { {@B { word @NumSep number. &2s }} @Insert caption }
+   # @MakeFigureContents { No                    } # list of figures at start
+   # @MakeTableContents  { No                    } # list of tables at start
+   # @MakeContents	{ No			} # make contents? Yes or No
+     @MakeContents	{ Yes			} # make contents? Yes or No
+   # @ContentsGap	{ 0.20v	@OrIfPlain 0f	} # extra gap above minor entry
+   # @ContentsGapAbove	{ 0.80v	@OrIfPlain 1f	} # extra gap above major entry
+   # @ContentsGapBelow	{ 0.00v	@OrIfPlain 0f	} # extra gap below major entry
+   # @ContentsFont       { Bold                  } # font for major entry
+   # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f	} # extra gap above `part' entry
+   # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f	} # extra gap below `part' entry
+   # @ContentsFormat	{ number @DotSep title	} # contents entry format
+   # @ContentsLeader	{ ..			} # leader symbol in contents
+   # @ContentsLeaderGap	{ 4s	@OrIfPlain 2s	} # gap between leaders
+   # @ContentsRightWidth	{ 3f	@OrIfPlain 6s	} # page numbers column width
+   # @MakeReferences	{ Yes			} # make references? Yes or No
+   # @RefCiteStyle	{ [cite]		} # citation style
+   # @RefCiteLabels	{ @RefNum		} # citation items
+   # @RefNumbers		{ Arabic		} # reference numbers
+   # @RefListFormat	{ Labels		} # NoLabels, Labels, etc.
+   # @RefListLabels	{ [@RefNum]		} # ref list label format
+   # @RefListTitle	{ references		} # title of reference list
+   # @ChapRefListTitle	{ references		} # title of chapter ref list
+   # @RefListIndent	{ 0s			} # indent to left of labels
+   # @RefListRightIndent	{ 0s			} # indent to right of items
+   # @RefListGap		{ @ListGap		} # gap between ref list items
+   # @RefListFont	{        		} # font used in reference list
+   # @RefListBreak	{        		} # break style of ref list
+   # @RefListLabelWidth 	{ @ListLabelWidth	} # Labels column width
+   # @RefListSortKey	{ @Tag			} # sorting key
+   # @MakeIndex		{ No			} # make index? Yes or No
+     @MakeIndex		{ Yes			} # make index? Yes or No
+   # @IndexFont		{			} # index entries font
+   # @IndexBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexColumnNumber	{ 2			} # index columns (1 to 10)
+   # @IndexColumnGap	{ 1.00c	@OrIfPlain 6s	} # index column gap
+   # @IndexCtd		{ Yes			} # include (ctd.) lines
+   # @IndexCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexA		{ No 			} # make index A? Yes or No
+   # @IndexAFont		{			} # index A entries font
+   # @IndexABreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexAColumnNumber	{ 2			} # index A columns (1 to 10)
+   # @IndexAColumnGap	{ 1.00c	@OrIfPlain 6s	} # index A column gap
+   # @IndexACtd		{ Yes			} # include (ctd.) lines
+   # @IndexACtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexACtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexB		{ No 			} # make index B? Yes or No
+   # @IndexBFont		{			} # index B entries font
+   # @IndexBBreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexBColumnNumber	{ 2			} # index B columns (1 to 10)
+   # @IndexBColumnGap	{ 1.00c	@OrIfPlain 6s	} # index B column gap
+   # @IndexBCtd		{ Yes			} # include (ctd.) lines
+   # @IndexBCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexBCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @TopGap		{ 0.75c	@OrIfPlain 2f	} # gap between figures
+   # @MidGap		{ 0.75c	@OrIfPlain 2f	} # gap above/below body text
+   # @FootNoteNumbers	{ Arabic		} # footnote numbers
+   # @FootNoteThrough	{ No			} # numbered through chapter?
+   # @FootNoteLocation	{ ColFoot		} # where the footnote appears
+   # @FootNoteFont	{ 0.80f			} # font for footnotes
+   # @FootNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for footnotes
+   # @FootNoteFormat     { { number &0.05f } @Insert body } # footnote format
+   # @FootLen		{ 2.00c	@OrIfPlain 10s	} # length of footnote line
+   # @FootAboveGap	{ @DisplayGap		} # gap above footnote line
+   # @FootGap		{ 0.20c	@OrIfPlain 1fx	} # gap between footnotes
+   # @MarginNoteFont	{ 0.80f			} # font of margin notes
+   # @MarginNoteBreak	{ ragged 1.10fx		} # break style of margin notes
+   # @MarginNoteHGap	{ 0.5c   		} # horizontal gap to notes
+   # @MarginNoteVGap	{ @DisplayGap		} # min vertical gap between
+   # @MarginNoteWidth	{ 1.50c  		} # width of margin notes
+   # @EndNoteNumbers	{ Arabic		} # endnote numbers
+   # @EndNoteFont	{ 0.80f			} # font of endnotes
+   # @EndNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for endnotes
+   # @EndNoteFormat	{ { number &0.05f } @Insert body } # endnote format
+   # @EndNoteGap		{ 0.20c	@OrIfPlain 1f	} # gap between endnotes
+   # @TheoremWord	{ theorem		} # "Theorem" word, etc.
+   # @TheoremTitleFormat	{ (title)		} # only if title present
+   # @TheoremFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @DefinitionWord	{ definition		} # "Definition" word, etc.
+   # @DefinitionTitleFormat { (title)		} # only if title present
+   # @DefinitionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ClaimWord		{ claim			} # "Claim" word, etc.
+   # @ClaimTitleFormat	{ (title)		} # only if title present
+   # @ClaimFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @PropositionWord	{ proposition		} # "Proposition" word, etc.
+   # @PropositionTitleFormat { (title)		} # only if title present
+   # @PropositionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @LemmaWord		{ lemma			} # "Lemma" word, etc.
+   # @LemmaTitleFormat	{ (title)		} # only if title present
+   # @LemmaFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @CorollaryWord	{ corollary		} # "Corollary" word, etc.
+   # @CorollaryTitleFormat { (title)		} # only if title present
+   # @CorollaryFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ExampleWord	{ example		} # "Example" word, etc.
+   # @ExampleTitleFormat	{ (title)		} # only if title present
+   # @ExampleFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ProofWord		{ proof			} # "Proof" word, etc.
+   # @PageHeaders	{ Simple		} # None Simple Titles NoTitles
+     @PageHeaders	{ Titles		} # None Simple Titles NoTitles
+   # @PageNumbers	{ Arabic		} # page numbers
+   # @FirstPageNumber	{ 1			} # number of first page 
+   # @IntroPageNumbers	{ Roman			} # intro page numbers
+   # @IntroFirstPageNumber{ 1			} # number of first intro page 
+   # @StructPageNums	{ No			} # make structured page numbers
+ 
+   # @OddTop		{ @Centre{- @PageNum -}	} # Simple page headers
+   # @OddFoot		{ @Null			}
+   # @EvenTop		{ @Centre{- @PageNum -}	}
+   # @EvenFoot		{ @Null			}
+   # @StartOddTop	{ @Null			}
+   # @StartOddFoot	{ @Null			}
+   # @StartEvenTop	{ @Null			}
+   # @StartEvenFoot	{ @Null			}
+   # @IntroOddTop	{ @Null			}
+   # @IntroOddFoot	{ @Centre @PageNum	}
+   # @IntroEvenTop	{ @Null			}
+   # @IntroEvenFoot	{ @Centre @PageNum	}
+   # @IntroStartOddTop	{ @Null			}
+   # @IntroStartOddFoot	{ @Null			}
+   # @IntroStartEvenTop	{ @Null			}
+   # @IntroStartEvenFoot	{ @Null			}
+ 
+ 						  # Titles, NoTitles headers
+   # @RunningOddTop  { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum }
+   # @RunningOddFoot		{ @Null					}
+   # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} }
+   # @RunningEvenFoot		{ @Null					}
+   # @RunningStartOddTop 	{ @Null					}
+   # @RunningStartOddFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+   # @RunningStartEvenTop	{ @Null					}
+   # @RunningStartEvenFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+   # @RunningIntroOddTop		{ @Null					}
+   # @RunningIntroOddFoot	{ @Right @PageNum			}
+   # @RunningIntroEvenTop	{ @Null					}
+   # @RunningIntroEvenFoot	{ @PageNum				}
+   # @RunningIntroStartOddTop	{ @Null					}
+   # @RunningIntroStartOddFoot	{ @Null					}
+   # @RunningIntroStartEvenTop	{ @Null					}
+   # @RunningIntroStartEvenFoot	{ @Null					}
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @BookSetup @Use clause - options specific to books.                    #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @BookSetup
+   # @TitlePageFont		{ Helvetica Base} # title page font (not size)
+   # @SeparateIntroNumbering	{ Yes		} # separate intro page numbers
+   # @PrefaceAfterContents  	{ No		} # Yes or No
+   # @ChapterStartPages		{ Any		} # Any, Odd, Even, SamePage
+   # @ReferencesBeforeAppendices	{ No		} # references before appendices
+   # @PrefaceWord		{ preface	} # word for "Preface"
+   # @ContentsWord		{ contents	} # word for "Contents"
+   # @FigureListWord		{ figurelist	} # word for "List of Figures"
+   # @TableListWord		{ tablelist	} # word for "List of Tables"
+   # @IntroductionWord		{ introduction	} # word for "Introduction"
+   # @AbbreviationsWord		{ abbreviations	} # word for "Abbreviations"
+   # @ChapterWord		{ chapter	} # word for "Chapter"
+   # @AppendixWord		{ appendix	} # word for "Appendix"
+   # @IndexWord			{ index		} # word for "Index"
+   # @IndexAWord			{ index		} # word for "Index" (A)
+   # @IndexBWord			{ index		} # word for "Index" (B)
+   # @ChapterNumbers		{ Arabic	} # kind of chapter numbers
+   # @FirstChapterNumber		{ 1		} # first chapter number (Arabic)
+   # @SectionNumbers		{ Arabic	} # kind of section numbers
+   # @FirstSectionNumber		{ 1		} # first section number (Arabic)
+   # @SubSectionNumbers		{ Arabic	} # kind of subsection numbers
+   # @FirstSubSectionNumber	{ 1		} # first subsect number (Arabic)
+   # @SubSubSectionNumbers	{ Arabic	} # kind of sub-subs. numbers
+   # @FirstSubSubSectionNumber	{ 1		} # first sub-sub number (Arabic)
+   # @AppendixNumbers		{ UCAlpha	} # kind of appendix numbers
+   # @FirstAppendixNumber	{ 1		} # first appendix num (Arabic)
+   # @SubAppendixNumbers		{ Arabic	} # kind of subappendix numbers
+   # @FirstSubAppendixNumber	{ 1		} # first sub-app num (Arabic)
+   # @SubSubAppendixNumbers	{ Arabic	} # kind of sub-subapp. numbers
+   # @FirstSubSubAppendixNumber	{ 1		} # first sub-sub num (Arabic)
+   # @PartHeadingFont		{ Helvetica Base 2.50f	} # part head font
+   # @PartHeadingBreak		{ clines 1.2fx nohyphen	} # part head break
+   # @PartHeadingFormat          { @CD number @DP @CD title } # part head format
+   # @ChapterHeadingFont		{ Bold 2.00f		} # chapter head font
+   # @ChapterHeadingBreak	{ ragged 1.2fx nohyphen	} # chapter head break
+   # @ChapterHeadingFormat	{ number @DotSep title	} # format of chap. head
+   # @SectionHeadingFont		{ Bold			} # section head font
+   # @SectionHeadingBreak	{ ragged 1.2fx nohyphen	} # section head break
+   # @SectionHeadingFormat	{ number @DotSep title	} # section head fmt
+   # @SubSectionHeadingFont	{ Bold			} # subs. head font
+   # @SubSectionHeadingBreak	{ ragged 1.2fx nohyphen	} # subs. head break
+   # @SubSectionHeadingFormat	{ number @DotSep title	} # subs. head fmt
+   # @SubSubSectionHeadingFont	{ Slope			} # sub-subs. head font
+   # @SubSubSectionHeadingBreak	{ ragged 1.2fx nohyphen	} # sub-subs. head break
+   # @SubSubSectionHeadingFormat	{ number @DotSep title	} # sub-subs. head fmt
+   # @AppendixHeadingFont	{ Bold 2.00f		} # appendix head font
+   # @AppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # appendix head break
+   # @AppendixHeadingFormat	{ number @DotSep title	} # appendix head fmt
+   # @SubAppendixHeadingFont	{ Bold			} # subapp. head font
+   # @SubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # subapp. head break
+   # @SubAppendixHeadingFormat	{ number @DotSep title	} # subapp. head fmt
+   # @SubSubAppendixHeadingFont	{ Slope			} # sub-suba. head font
+   # @SubSubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # sub-suba. head break
+   # @SubSubAppendixHeadingFormat{ number @DotSep title	} # sub-suba. head fmt
+   # @AbovePartGap		{ 4.00f			} # gap above part title
+   # @AboveChapterGap		{ 3.00f			} # above major titles
+   # @SectionGap			{ 2.0v	@OrIfPlain 3f	} # between sections
+   # @SubSectionGap		{ 1.5v	@OrIfPlain 2f	} # between subsects
+   # @SubSubSectionGap		{ 1.5v	@OrIfPlain 2f	} # between sub-subs.
+   # @SubAppendixGap		{ 2.0v	@OrIfPlain 3f	} # between subappendices
+   # @SubSubAppendixGap		{ 1.5v	@OrIfPlain 2f	} # between sub-subapps
+   # @PrefaceInContents		{ Yes		} # add preface to contents
+   # @AbbreviationsInContents	{ Yes		} # add abbreviations to contents
+   # @IntroductionInContents	{ Yes		} # add introduction to contents
+   # @PartInContents		{ Yes		} # add parts to contents
+   # @ChapterInContents		{ Yes		} # add chapters to contents
+   # @SectionInContents		{ Yes		} # add sections to contents
+   # @SubSectionInContents	{ Yes		} # add subsections to contents
+   # @SubSubSectionInContents	{ No		} # add sub-subsects to contents
+   # @AppendixInContents		{ Yes		} # add appendices to contents
+   # @SubAppendixInContents	{ Yes		} # add subappendices to contents
+   # @SubSubAppendixInContents	{ No		} # add sub-subapps to contents
+   # @ReferencesInContents	{ Yes		} # add ref. section to contents
+   # @IndexInContents		{ Yes		} # add index to contents
+   # @IndexAInContents		{ Yes		} # add index A to contents
+   # @IndexBInContents		{ Yes		} # add index B to contents
+   # @PartContentsIndent         { 0.5rt		} # indent of part contents entry
+   # @ChapterNumInTheorems	{ Yes		} # theorem num has chapter num
+   # @SectionNumInTheorems	{ No		} # theorem num has section num
+   # @SubSectionNumInTheorems	{ No		} # theorem num has subsect num
+   # @SubSubSectionNumInTheorems	{ No		} # theorem num has sub-ss. num
+   # @AppendixNumInTheorems	{ Yes		} # theorem num has appendix num
+   # @SubAppendixNumInTheorems	{ No		} # theorem num has sub-app num
+   # @SubSubAppendixNumInTheorems{ No		} # theorem num has sub-sa. num
+   # @ChapterNumInDisplays	{ Yes		} # display num has chapter num
+   # @SectionNumInDisplays	{ Yes		} # display num has section num
+   # @SubSectionNumInDisplays	{ No		} # display num has subsect num
+   # @SubSubSectionNumInDisplays	{ No		} # display num has sub-ss. num
+   # @AppendixNumInDisplays	{ Yes		} # display num has appendix num
+   # @SubAppendixNumInDisplays	{ Yes		} # display num has sub-app num
+   # @SubSubAppendixNumInDisplays{ No		} # display num has sub-sa. num
+   # @ChapterNumInFigures	{ Yes		} # figure num has chapter num
+   # @SectionNumInFigures	{ No		} # figure num has section num
+   # @SubSectionNumInFigures	{ No		} # figure num has subsect num
+   # @SubSubSectionNumInFigures	{ No		} # figure num has sub-ss. num
+   # @AppendixNumInFigures	{ Yes		} # figure num has appendix num
+   # @SubAppendixNumInFigures	{ No		} # figure num has sub-app num
+   # @SubSubAppendixNumInFigures	{ No		} # figure num has sub-sa. num
+   # @ChapterNumInTables		{ Yes		} # table num has chapter num
+   # @SectionNumInTables		{ No		} # table num has section num
+   # @SubSectionNumInTables	{ No		} # table num has subsect num
+   # @SubSubSectionNumInTables	{ No		} # table num has sub-ss. num
+   # @AppendixNumInTables	{ Yes		} # table num has appendix num
+   # @SubAppendixNumInTables	{ No		} # table num has sub-app num
+   # @SubSubAppendixNumInTables	{ No		} # table num has sub-sa. num
+   # @SectionNumInRunners 	{ Yes		} # runners have section num
+   # @SubSectionNumInRunners 	{ No		} # runners have subsect num
+   # @SubSubSectionNumInRunners 	{ No		} # runners have sub-ss. num
+   # @SubAppendixNumInRunners 	{ Yes		} # runners have sub-app num
+   # @SubSubAppendixNumInRunners { No		} # runners have sub-sa. num
+   # @PrefacePrefix		{		} # for structured page nums
+   # @ContentsPrefix		{		} # for structured page nums
+   # @FigureContentsPrefix	{		} # for structured page nums
+   # @TableContentsPrefix	{		} # for structured page nums
+   # @AbbreviationsPrefix	{		} # for structured page nums
+   # @IntroductionPrefix		{		} # for structured page nums
+   # @ChapterPrefix		{		} # for structured page nums
+   # @AppendixPrefix		{		} # for structured page nums
+   # @ReferencesPrefix		{		} # for structured page nums
+   # @IndexPrefix		{		} # for structured page nums
+   # @IndexAPrefix		{		} # for structured page nums
+   # @IndexBPrefix		{		} # for structured page nums
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Database (and @SysDatabase) clauses go here.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysDatabase @FontDef  { fontdefs }		  # font definitions
+ @SysDatabase @RefStyle { refstyle }		  # reference printing styles


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bookf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bookf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bookf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,1268 ----
+ 
+ ###########################################################################
+ #                                                                         #
+ #  @BookSetup extension to @DocumentSetup.                                #
+ #                                                                         #
+ #  Jeffrey H. Kingston                                                    #
+ #  17 September 1999                                                      #
+ #                                                                         #
+ #  This package extends DocumentSetup with definitions for books.         #
+ #                                                                         #
+ ###########################################################################
+ 
+ extend @BasicSetup @DocumentSetup
+ export @Book @Preface @Abbreviations @Introduction @Chapter @Appendix
+ def @BookSetup
+     named @TitlePageFont		{  Helvetica Base		}
+     named @SeparateIntroNumbering	{  Yes				}
+     named @PrefaceAfterContents		{  No				}
+     named @ChapterStartPages		{  Any				}
+     named @ReferencesBeforeAppendices	{  No				}
+ 
+     named @PrefaceWord			{  preface			}
+     named @ContentsWord			{  contents			}
+     named @FigureListWord		{  figurelist			}
+     named @TableListWord		{  tablelist			}
+     named @IntroductionWord		{  introduction			}
+     named @AbbreviationsWord		{  abbreviations		}
+     named @ChapterWord			{  chapter			}
+     named @AppendixWord			{  appendix			}
+     named @IndexWord			{  index			}
+     named @IndexAWord			{  index			}
+     named @IndexBWord			{  index			}
+ 
+     named @ChapterNumbers		{  Arabic			}
+     named @FirstChapterNumber		{  1				}
+     named @SectionNumbers		{  Arabic			}
+     named @FirstSectionNumber		{  1				}
+     named @SubSectionNumbers		{  Arabic			}
+     named @FirstSubSectionNumber	{  1				}
+     named @SubSubSectionNumbers		{  Arabic			}
+     named @FirstSubSubSectionNumber	{  1				}
+     named @AppendixNumbers		{  UCAlpha			}
+     named @FirstAppendixNumber		{  1				}
+     named @SubAppendixNumbers		{  Arabic			}
+     named @FirstSubAppendixNumber	{  1				}
+     named @SubSubAppendixNumbers	{  Arabic			}
+     named @FirstSubSubAppendixNumber	{  1				}
+ 
+     named @PartHeadingFont		{  Helvetica Base 2.50f		}
+     named @PartHeadingBreak		{  clines 1.2fx nohyphen	}
+     named @PartHeadingFormat
+ 	left number right title		{  @CD number @DP @CD title	}
+ 
+     named @ChapterHeadingFont		{  Bold 2.00f			}
+     named @ChapterHeadingBreak		{  ragged 1.2fx nohyphen   	}
+     named @ChapterHeadingFormat
+ 	left number right title		{  number @DotSep title    	}
+ 
+     named @SectionHeadingFont		{  Bold				}
+     named @SectionHeadingBreak		{  ragged 1.2fx nohyphen	}
+     named @SectionHeadingFormat
+ 	left number right title		{  number @DotSep title    	}
+ 
+     named @SubSectionHeadingFont	{  Bold				}
+     named @SubSectionHeadingBreak	{  ragged 1.2fx nohyphen	}
+     named @SubSectionHeadingFormat
+ 	left number right title		{  number @DotSep title    	}
+ 
+     named @SubSubSectionHeadingFont	{  Slope			}
+     named @SubSubSectionHeadingBreak	{  ragged 1.2fx nohyphen	}
+     named @SubSubSectionHeadingFormat
+ 	left number right title		{  number @DotSep title    	}
+ 
+     named @AppendixHeadingFont		{  Bold 2.00f			}
+     named @AppendixHeadingBreak		{  ragged 1.2fx nohyphen   	}
+     named @AppendixHeadingFormat
+ 	left number right title		{  number @DotSep title    	}
+ 
+     named @SubAppendixHeadingFont	{  Bold				}
+     named @SubAppendixHeadingBreak	{  ragged 1.2fx nohyphen   	}
+     named @SubAppendixHeadingFormat
+ 	left number right title		{  number @DotSep title    	}
+ 
+     named @SubSubAppendixHeadingFont	{  Slope			}
+     named @SubSubAppendixHeadingBreak	{  ragged 1.2fx nohyphen   	}
+     named @SubSubAppendixHeadingFormat
+ 	left number right title		{  number @DotSep title    	}
+ 
+     named @AbovePartGap			{  4.00f			}
+     named @AboveChapterGap		{  3.00f			}
+     named @SectionGap			{  2.0v  @OrIfPlain 3f		}
+     named @SubSectionGap		{  1.5v  @OrIfPlain 2f		}
+     named @SubSubSectionGap		{  1.5v  @OrIfPlain 2f		}
+     named @SubAppendixGap		{  2.0v  @OrIfPlain 3f		}
+     named @SubSubAppendixGap		{  1.5v  @OrIfPlain 2f		}
+ 
+     named @PrefaceInContents		{  Yes 				}
+     named @AbbreviationsInContents	{  Yes				}
+     named @IntroductionInContents	{  Yes				}
+     named @PartInContents		{  Yes				}
+     named @ChapterInContents		{  Yes				}
+     named @SectionInContents		{  Yes				}
+     named @SubSectionInContents		{  Yes				}
+     named @SubSubSectionInContents	{  No				}
+     named @AppendixInContents		{  Yes				}
+     named @SubAppendixInContents	{  Yes				}
+     named @SubSubAppendixInContents	{  No				}
+     named @ReferencesInContents		{  Yes				}
+     named @IndexInContents		{  Yes				}
+     named @IndexAInContents		{  Yes				}
+     named @IndexBInContents		{  Yes				}
+     named @PartContentsIndent		{  0.5rt			}
+ 
+     named @ChapterNumInTheorems		{  Yes				}
+     named @SectionNumInTheorems		{  No				}
+     named @SubSectionNumInTheorems	{  No				}
+     named @SubSubSectionNumInTheorems	{  No				}
+     named @AppendixNumInTheorems	{  Yes				}
+     named @SubAppendixNumInTheorems	{  No				}
+     named @SubSubAppendixNumInTheorems	{  No				}
+ 
+     named @ChapterNumInDisplays		{  Yes				}
+     named @SectionNumInDisplays		{  Yes				}
+     named @SubSectionNumInDisplays	{  No				}
+     named @SubSubSectionNumInDisplays	{  No				}
+     named @AppendixNumInDisplays	{  Yes				}
+     named @SubAppendixNumInDisplays	{  Yes				}
+     named @SubSubAppendixNumInDisplays	{  No				}
+ 
+     named @ChapterNumInFigures		{  Yes				}
+     named @SectionNumInFigures		{  No				}
+     named @SubSectionNumInFigures	{  No				}
+     named @SubSubSectionNumInFigures	{  No				}
+     named @AppendixNumInFigures		{  Yes				}
+     named @SubAppendixNumInFigures	{  No				}
+     named @SubSubAppendixNumInFigures	{  No				}
+ 
+     named @ChapterNumInTables		{  Yes				}
+     named @SectionNumInTables		{  No				}
+     named @SubSectionNumInTables	{  No				}
+     named @SubSubSectionNumInTables	{  No				}
+     named @AppendixNumInTables		{  Yes				}
+     named @SubAppendixNumInTables	{  No				}
+     named @SubSubAppendixNumInTables	{  No				}
+ 
+     named @SectionNumInRunners		{  Yes				}
+     named @SubSectionNumInRunners	{  No				}
+     named @SubSubSectionNumInRunners	{  No				}
+     named @SubAppendixNumInRunners	{  Yes				}
+     named @SubSubAppendixNumInRunners	{  No				}
+ 
+     named @PrefacePrefix		{				}
+     named @ContentsPrefix		{				}
+     named @FigureContentsPrefix		{				}
+     named @TableContentsPrefix		{				}
+     named @AbbreviationsPrefix		{				}
+     named @IntroductionPrefix		{				}
+     named @ChapterPrefix		{				}
+     named @AppendixPrefix		{				}
+     named @ReferencesPrefix		{				}
+     named @IndexPrefix			{				}
+     named @IndexAPrefix			{				}
+     named @IndexBPrefix			{				}
+ 
+ @Begin
+ 
+     #######################################################################
+     #                                                                     #
+     #  Lists of chapters, sections, sub(-sub)sections, and appendices.    #
+     #                                                                     #
+     #######################################################################
+ 
+     export num
+     def @ChapterList named @Tag {} right num
+     {
+ 	    @Galley
+         //  @ChapterList @Next num
+     }
+ 
+     export num
+     def @SectionList named @Tag {} right num
+     {
+ 	@Galley
+         //@SectionGap	@SectionList @Next num
+     }
+ 
+     export num
+     def @SubSectionList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubSectionGap    @SubSectionList @Next num
+     }
+ 
+     export num
+     def @SubSubSectionList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubSubSectionGap @SubSubSectionList @Next num
+     }
+ 
+     export num
+     def @AppendixList named @Tag {} right num
+     {
+ 	@Galley
+         //	@AppendixList @Next num
+     }
+ 
+     export num
+     def @SubAppendixList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubAppendixGap   @SubAppendixList @Next num
+     }
+ 
+     export num
+     def @SubSubAppendixList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubSubAppendixGap   @SubSubAppendixList @Next num
+     }
+ 
+     def @PrefacePlace { @Galley }
+     def @AbbreviationsPlace { @Galley }
+     def @IntroductionPlace { @Galley }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @Full - this sends text to a full-width place on a new page, even  #
+     #  if @ChapterStartPages is SamePage.                                 #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Full right x
+     {
+ 	def @Any  force into { @FullPlace&&following     } right x { x }
+ 	def @Odd  force into { @OddFullPlace&&following  } right x { x }
+ 	def @Even force into { @EvenFullPlace&&following } right x { x }
+ 
+ 	@ChapterStartPages @Case {
+ 	    { Any SamePage } @Yield @Any  x
+ 	    Odd  @Yield @Odd  x
+ 	    Even @Yield @Even x
+ 	}
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @ChapterFull - this sends text to a full-width place on a new      #
+     #  page, unless @ChapterStartPages is SamePage, in which case it      #
+     #  doesn't send the text anywhere.                                    #
+     #                                                                     #
+     #######################################################################
+ 
+     def @ChapterFull right x
+     {
+ 	def @Any  force into { @FullPlace&&following     } right x { x }
+ 	def @Odd  force into { @OddFullPlace&&following  } right x { x }
+ 	def @Even force into { @EvenFullPlace&&following } right x { x }
+ 
+ 	@ChapterStartPages @Case {
+ 	    Any  @Yield @Any  x
+ 	    Odd  @Yield @Odd  x
+ 	    Even @Yield @Even x
+ 	    SamePage @Yield x
+ 	}
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @IntroFull - this sends text to a full-width intro place.          #
+     #                                                                     #
+     #######################################################################
+ 
+     def @IntroFull right x
+     {
+ 	def @Any  force into { @IntroFullPlace&&following     } right x { x }
+ 	def @Odd  force into { @IntroOddFullPlace&&following  } right x { x }
+ 	def @Even force into { @IntroEvenFullPlace&&following } right x { x }
+ 
+ 	@ChapterStartPages @Case {
+ 	    { Any SamePage } @Yield @Any  x
+ 	    Odd  @Yield @Odd  x
+ 	    Even @Yield @Even x
+ 	}
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @ChooseFull - this sends either to introfull or ordinary full      #
+     #                                                                     #
+     #######################################################################
+ 
+     def @ChooseFull right x
+     {
+ 	@SeparateIntroNumbering @Case {
+ 	    No  @Yield @Full x
+ 	    Yes @Yield @IntroFull x
+ 	}
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Book.                                                              #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Book
+ 	named @Tag {}
+         named @Title {}
+         named @Author {}
+         named @Edition {}
+         named @Publisher {}
+         named @BeforeTitlePage {}
+         named @OnTitlePage {}
+         named @AfterTitlePage {}
+         named @AtEnd { dft }
+         named @AtAfter { dft }
+         named @InitialFont { @InitialFont }
+         named @InitialBreak { @InitialBreak }
+         named @InitialSpace { @InitialSpace }
+         named @InitialLanguage { @InitialLanguage }
+         named @PageOrientation { @PageOrientation }
+         named @PageHeaders { @PageHeaders }
+         named @ColumnNumber { @ColumnNumber }
+         named @FirstPageNumber { @FirstPageNumber }
+         named @IntroFirstPageNumber { @IntroFirstPageNumber }
+ 	named @OptimizePages { @OptimizePages }
+     {
+ 	def @Before
+ 	{
+ 	    @BeforeTitlePage @Case {
+ 		""   @Yield @Null
+ 		else @Yield @BeforeTitlePage
+ 	    }
+ 	}
+ 
+ 	def @On
+ 	{
+ 	    @OnTitlePage @Case {
+ 		"" @Yield {
+ 		    	//1i    |0.5rt 2.5f @Font {1.2fx clines} @Break @Title |
+ 			//2i    |0.5rt clines @Break @Author |
+ 			//1i    |0.5rt clines @Break @Edition |
+ 			//1rt   @OneRow @Publisher
+ 		}
+ 		else @Yield @OnTitlePage
+ 	    }
+ 	}
+ 
+ 	def @After
+ 	{
+ 	    @AfterTitlePage @Case {
+ 		""   @Yield @Null
+ 		else @Yield  { @AfterTitlePage // None @Runner }
+ 	    }
+ 	}
+ 
+ 	def @ContentsPart
+ 	    named @Tag {}
+ 	{
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { ExtraMajorIntro }
+ 		initiallanguage { @InitialLanguage }
+ 		title { contents @WordVal @ContentsWord }
+ 		aboveheadinggap { @AboveChapterGap }
+ 		headingfont { @ChapterHeadingFont }
+ 		headingbreak { @ChapterHeadingBreak }
+ 		headingformat { @Num @ChapterHeadingFormat @Body }
+ 		incontents { No }
+ 		pnprefix { @ContentsPrefix }
+ 		inrunners { Yes }
+ 		majortitle { contents @WordVal @ContentsWord }
+ 		sendheader { @ChooseFull @Body }
+ 		innergap { @SectionGap }
+ 		@ContentsSection
+ 	}
+ 
+ 	def @FigureContentsPart
+ 	    named @Tag {}
+ 	{
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { ExtraMajorIntro }
+ 		initiallanguage { @InitialLanguage }
+ 		title { figurelist @WordVal @FigureListWord }
+ 		aboveheadinggap { @AboveChapterGap }
+ 		headingfont { @ChapterHeadingFont }
+ 		headingbreak { @ChapterHeadingBreak }
+ 		headingformat { @Num @ChapterHeadingFormat @Body }
+ 		incontents { No }
+ 		pnprefix { @FigureContentsPrefix }
+ 		inrunners { Yes }
+ 		majortitle { figurelist @WordVal @FigureListWord }
+ 		sendheader { @ChooseFull @Body }
+ 		innergap { @SectionGap }
+ 		@FigureContentsSection
+ 	}
+ 
+ 	def @TableContentsPart
+ 	    named @Tag {}
+ 	{
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { ExtraMajorIntro }
+ 		initiallanguage { @InitialLanguage }
+ 		title { tablelist @WordVal @TableListWord }
+ 		aboveheadinggap { @AboveChapterGap }
+ 		headingfont { @ChapterHeadingFont }
+ 		headingbreak { @ChapterHeadingBreak }
+ 		headingformat { @Num @ChapterHeadingFormat @Body }
+ 		incontents { No }
+ 		pnprefix { @TableContentsPrefix }
+ 		inrunners { Yes }
+ 		majortitle { tablelist @WordVal @TableListWord }
+ 		sendheader { @ChooseFull @Body }
+ 		innergap { @SectionGap }
+ 		@TableContentsSection
+ 	}
+ 
+ 	def @ReferencesPart
+ 	    named @Tag {}
+ 	{
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { ExtraMajor }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @RefHeading @RefListTitle }
+ 		majortitle { @RefHeading @RefListTitle }
+ 		aboveheadinggap { @AboveChapterGap }
+ 		headingfont { @ChapterHeadingFont }
+ 		headingbreak { @ChapterHeadingBreak }
+ 		headingformat { @Num @ChapterHeadingFormat @Body }
+ 		incontents { @ReferencesInContents }
+ 		pnprefix { @ReferencesPrefix }
+ 		inrunners { Yes }
+ 		sendheader { @ChapterFull @Body }
+ 		innergap { @SectionGap }
+ 		@ReferencesSection
+ 
+ 	}
+ 
+ 	def @IndexPart
+ 	    named @Tag {}
+ 	{
+ 	    def @Run
+ 	    {
+ 		NonStart @Runner
+ 		    @MajorNum {}
+ 		    @MajorTitle { index @WordVal @IndexWord }
+ 		    @MinorNum {}
+ 		    @MinorTitle { index @WordVal @IndexWord }
+ 		    @Owner { @Tag }
+ 		    @Prefix { @IndexPrefix }
+ 	    }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Major }
+ 		initiallanguage { @InitialLanguage }
+ 		title { index @WordVal @IndexWord }
+ 		aboveheadinggap { @AboveChapterGap }
+ 		headingfont { @ChapterHeadingFont }
+ 		headingbreak { @ChapterHeadingBreak }
+ 		headingformat { @Num @ChapterHeadingFormat @Body }
+ 		incontents { @IndexInContents }
+ 		pnprefix { @IndexPrefix }
+ 		inrunners { Yes }
+ 		sendheader { @Full @Body }
+ 		innergap { @SectionGap }
+ 		wantindefinite { Yes }
+ 		@IndexSection @Run
+ 	}
+ 
+ 	def @IndexAPart
+ 	    named @Tag {}
+ 	{
+ 	    def @RunA
+ 	    {
+ 		NonStart @Runner
+ 		    @MajorNum {}
+ 		    @MajorTitle { index @WordVal @IndexAWord }
+ 		    @MinorNum {}
+ 		    @MinorTitle { index @WordVal @IndexAWord }
+ 		    @Owner { @Tag }
+ 		    @Prefix { @IndexAPrefix }
+ 	    }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Major }
+ 		initiallanguage { @InitialLanguage }
+ 		title { index @WordVal @IndexAWord }
+ 		aboveheadinggap { @AboveChapterGap }
+ 		headingfont { @ChapterHeadingFont }
+ 		headingbreak { @ChapterHeadingBreak }
+ 		headingformat { @Num @ChapterHeadingFormat @Body }
+ 		incontents { @IndexAInContents }
+ 		pnprefix { @IndexAPrefix }
+ 		inrunners { Yes }
+ 		sendheader { @Full @Body }
+ 		innergap { @SectionGap }
+ 		wantindefinite { Yes }
+ 		@IndexASection @RunA
+ 	}
+ 
+ 	def @IndexBPart
+ 	    named @Tag {}
+ 	{
+ 	    def @RunB
+ 	    {
+ 		NonStart @Runner
+ 		    @MajorNum {}
+ 		    @MajorTitle { index @WordVal @IndexBWord }
+ 		    @MinorNum {}
+ 		    @MinorTitle { index @WordVal @IndexBWord }
+ 		    @Owner { @Tag }
+ 		    @Prefix { @IndexBPrefix }
+ 	    }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Major }
+ 		initiallanguage { @InitialLanguage }
+ 		title { index @WordVal @IndexBWord }
+ 		aboveheadinggap { @AboveChapterGap }
+ 		headingfont { @ChapterHeadingFont }
+ 		headingbreak { @ChapterHeadingBreak }
+ 		headingformat { @Num @ChapterHeadingFormat @Body }
+ 		incontents { @IndexBInContents }
+ 		pnprefix { @IndexBPrefix }
+ 		inrunners { Yes }
+ 		sendheader { @Full @Body }
+ 		innergap { @SectionGap }
+ 		wantindefinite { Yes }
+ 		@IndexBSection @RunB
+ 	}
+ 
+         def @BookIntro force into { @IntroColPlace&&preceding }
+ 	    named @Optimize { @OptimizePages }
+         {
+ 		    @NoLinkPageMark @Tag
+ 	    //	    @Before
+             //1.1b  @TitlePageFont @Font @On
+             //1.1b  @After
+             //	    Start @Runner @Owner { @Tag }
+             //1.1b  @PrefaceAfterContents @NoDo @PrefacePlace
+             //      @MakeContents @Case {
+ 			{ Yes Bypass }	@Yield @ContentsPart
+ 			else		@Yield @Null
+ 		    }
+             //      @MakeFigureContents @Case {
+ 			{ Yes Bypass }	@Yield @FigureContentsPart
+ 			else		@Yield @Null
+ 		    }
+             //      @MakeTableContents @Case {
+ 			{ Yes Bypass }	@Yield @TableContentsPart
+ 			else		@Yield @Null
+ 		    }
+             //1.1b  @PrefaceAfterContents @Do @PrefacePlace
+         }
+ 
+         def @BookBody force into { @ColPlace&&preceding }
+ 	    named @Optimize { @OptimizePages }
+         {
+ 	    # The first component of @BookBody must be indefinite, so that
+ 	    # its flushing is delayed until we reach the body galleys, either
+ 	    # @Introduction or @Chapter.  If not, @BookBody will free up
+ 	    # @PrefacePlace etc. too soon, producing a "no @PrefacePlace
+ 	    # precedes this @PrefacePLace&&preceding" error message.
+ 
+ 	        @AbbreviationsPlace
+ 	    //  @IntroductionPlace
+ 	    //	@ChapterList @FirstChapterNumber
+ 	    //	@ReferencesBeforeAppendices @Do {
+ 		    @MakeReferences @Do @ReferencesPart
+ 		}
+             //	@AppendixList @FirstAppendixNumber
+ 	    //	@ReferencesBeforeAppendices @NoDo {
+ 		    @MakeReferences @Do @ReferencesPart
+ 		}
+ 	    //	@MakeIndexA @Do @IndexAPart
+ 	    //  @MakeIndexA @Case {
+ 		  Bypass  @Yield @BypassBeginIndexAPlace
+ 		  else    @Yield @Null
+ 		}
+ 	    //	@MakeIndexB @Do @IndexBPart
+ 	    //  @MakeIndexB @Case {
+ 		  Bypass  @Yield @BypassBeginIndexBPlace
+ 		  else    @Yield @Null
+ 		}
+ 	    //	@MakeIndex  @Do @IndexPart
+ 	    //  @MakeIndex @Case {
+ 		  Bypass  @Yield @BypassBeginIndexPlace
+ 		  else    @Yield @Null
+ 		}
+         }
+ 
+ 	def @BookCombined force into { @ColPlace&&preceding }
+ 	    named @Optimize { @OptimizePages }
+ 	{
+ 		    @NoLinkPageMark @Tag
+ 	    //	    @Before
+             //1.1b  @TitlePageFont @Font @On
+             //1.1b  @After
+             //	    Start @Runner @Owner { @Tag }
+             //1.1b  @PrefaceAfterContents @NoDo @PrefacePlace
+             //      @MakeContents @Case {
+ 			{ Yes Bypass }	@Yield @ContentsPart
+ 			else		@Yield @Null
+ 		    }
+             //      @MakeFigureContents @Case {
+ 			{ Yes Bypass }	@Yield @FigureContentsPart
+ 			else		@Yield @Null
+ 		    }
+             //      @MakeTableContents @Case {
+ 			{ Yes Bypass }	@Yield @TableContentsPart
+ 			else		@Yield @Null
+ 		    }
+             //1.1b  @PrefaceAfterContents @Do @PrefacePlace
+ 	    //  @AbbreviationsPlace
+ 	    //  @IntroductionPlace
+ 	    //	@ChapterList @FirstChapterNumber
+ 	    //	@ReferencesBeforeAppendices @Do {
+ 		    @MakeReferences @Do @ReferencesPart
+ 		}
+             //	@AppendixList @FirstAppendixNumber
+ 	    //	@ReferencesBeforeAppendices @NoDo {
+ 		    @MakeReferences @Do @ReferencesPart
+ 		}
+ 	    //	@MakeIndexA @Do @IndexAPart
+ 	    //  @MakeIndexA @Case {
+ 		  Bypass  @Yield @BypassBeginIndexAPlace
+ 		  else    @Yield @Null
+ 		}
+ 	    //	@MakeIndexB @Do @IndexBPart
+ 	    //  @MakeIndexB @Case {
+ 		  Bypass  @Yield @BypassBeginIndexBPlace
+ 		  else    @Yield @Null
+ 		}
+ 	    //	@MakeIndex  @Do @IndexPart
+ 	    //  @MakeIndex @Case {
+ 		  Bypass  @Yield @BypassBeginIndexPlace
+ 		  else    @Yield @Null
+ 		}
+ 	}
+ 
+         @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language
+ 	@InitialSpace @Space { @ColourCommand @InitialColour } @SetColour
+         {
+ 
+ 	    @SeparateIntroNumbering @Case {
+ 
+ 		No  @Yield {
+ 		        Yes @BeginAllCounters {}
+ 		        Yes @BeginDisplayCounter {}
+ 		        Yes @BeginFigureCounter {}
+ 		        Yes @BeginTableCounter {}
+ 		    //	@PageList
+ 			    @ColumnNumber { @ColumnNumber }
+ 			    @PageHeaders { @PageHeaders }
+ 			    @Orient { @PageOrientation }
+ 			    @FirstPageNumber
+ 		    //	@BookCombined
+ 		    //	NonStart @Runner @Owner { @Tag }
+ 		    //  @AtEnd @Case {
+ 			    dft @Yield @Null
+ 			    else @Yield
+ 				 @EvenPage @Orient { @PageOrientation } @AtEnd
+ 			}
+ 		}
+ 
+ 		Yes @Yield {
+ 		        Yes @BeginAllCounters {}
+ 		        Yes @BeginDisplayCounter {}
+ 		        Yes @BeginFigureCounter {}
+ 		        Yes @BeginTableCounter {}
+ 		    //  @IntroPageList
+ 			    @ColumnNumber { 1 }
+ 			    @PageHeaders { @PageHeaders }
+ 			    @Orient { @PageOrientation }
+ 			    @IntroFirstPageNumber
+ 		    # //	NonStart @Runner @Owner { @Tag }
+ 		    //	None @Runner @Owner { @Tag }
+ 		    //	@PageList
+ 			    @ColumnNumber { @ColumnNumber }
+ 			    @PageHeaders { @PageHeaders }
+ 			    @Orient { @PageOrientation }
+ 			    extra { Yes }
+ 			    @FirstPageNumber
+ 		    //	@BookIntro
+ 		    //	@BookBody
+ 		    //	NonStart @Runner @Owner { @Tag }
+ 		    //  @AtEnd @Case {
+ 			    dft @Yield @Null
+ 			    else @Yield
+ 				 @EvenPage @Orient { @PageOrientation } @AtEnd
+ 			}
+ 		}
+ 	    }
+         }
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Preface.                                                           #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Preface force into { @PrefacePlace&&preceding }
+         named @Tag {}
+         named @Title { preface @WordVal @PrefaceWord }
+         named @RunningTitle { dft }
+ 	named @InitialLanguage {}
+         body @Body
+     {
+ 
+ 	@LargeScaleStructure
+ 	    tag { @Tag }
+ 	    type { ExtraMajorIntro }
+ 	    initiallanguage { @InitialLanguage }
+ 	    title { @Title }
+ 	    runningtitle { @RunningTitle }
+ 	    aboveheadinggap { @AboveChapterGap }
+ 	    headingfont { @ChapterHeadingFont }
+ 	    headingbreak { @ChapterHeadingBreak }
+ 	    headingformat { @Num @ChapterHeadingFormat @Body }
+ 	    incontents { @PrefaceInContents }
+ 	    pnprefix { @PrefacePrefix }
+ 	    sendheader { @ChooseFull @Body }
+ 	    innergap { @SectionGap }
+ 	    inrunners { Yes }
+ 	    @Body
+ 
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Abbreviations.                                                     #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Abbreviations force into { @AbbreviationsPlace&&preceding }
+         named @Tag {}
+         named @Title { abbreviations @WordVal @AbbreviationsWord }
+         named @RunningTitle { dft }
+ 	named @InitialLanguage {}
+         body @Body
+     {
+ 
+ 	@LargeScaleStructure
+ 	    tag { @Tag }
+ 	    type { Major }
+ 	    initiallanguage { @InitialLanguage }
+ 	    title { @Title }
+ 	    runningtitle { @RunningTitle }
+ 	    aboveheadinggap { @AboveChapterGap }
+ 	    headingfont { @ChapterHeadingFont }
+ 	    headingbreak { @ChapterHeadingBreak }
+ 	    headingformat { @Num @ChapterHeadingFormat @Body }
+ 	    incontents { @AbbreviationsInContents }
+ 	    pnprefix { @AbbreviationsPrefix }
+ 	    sendheader { @Full @Body }
+ 	    innergap { @SectionGap }
+ 	    inrunners { Yes }
+ 	    @Body
+ 
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Introduction.                                                      #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Introduction force into { @IntroductionPlace&&preceding }
+         named @Tag {}
+         named @Title { introduction @WordVal @IntroductionWord }
+         named @RunningTitle { dft }
+ 	named @InitialLanguage {}
+         body @Body
+     {
+ 
+ 	@LargeScaleStructure
+ 	    tag { @Tag }
+ 	    type { Major }
+ 	    initiallanguage { @InitialLanguage }
+ 	    title { @Title }
+ 	    runningtitle { @RunningTitle }
+ 	    aboveheadinggap { @AboveChapterGap }
+ 	    headingfont { @ChapterHeadingFont }
+ 	    headingbreak { @ChapterHeadingBreak }
+ 	    headingformat { @Num @ChapterHeadingFormat @Body }
+ 	    incontents { @IntroductionInContents }
+ 	    pnprefix { @IntroductionPrefix }
+ 	    sendheader { @Full @Body }
+ 	    innergap { @SectionGap }
+ 	    inrunners { Yes }
+ 	    @Body
+ 
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Chapters containing sections and subsections.                      #
+     #                                                                     #
+     #######################################################################
+ 
+     export @BeginSections @EndSections @Section
+     def @Chapter force into { @ChapterList&&preceding }
+         named @Tag {}
+         named @Title {}
+         named @RunningTitle { dft }
+ 	named @InitialLanguage {}
+ 	named @PartNumber {}
+ 	named @PartTitle {}
+ 	named @PartText {}
+         named @BypassNumber { dft }
+         body @Body
+     {
+ 
+         def @EndSectionsPlace { @Galley }
+ 
+         def @EndSections force into { @EndSectionsPlace&&preceding }
+ 	{}
+ 
+         macro @BeginSections
+ 	{   //@SectionGap @SectionList @FirstSectionNumber
+ 	    // @EndSectionsPlace //
+ 	}
+ 
+ 	def @ChapterShortNum
+ 	{
+ 	    @ChapterNumbers @Then {
+ 		@BypassNumber @Dft {
+ 		    @ChapterNumbers @Num @ChapterList&&@Tag @Open { num }
+ 		}
+ 	    }
+ 	}
+ 
+ 	def @MajorNum
+ 	{
+ 	    @ChapterNumbers @Then @InitialLanguage @Language {
+ 		chapter @WordVal @ChapterWord @ChapterShortNum
+ 	    }
+ 	}
+ 
+ 	def @MajorTitle
+ 	{
+ 	    @InitialLanguage @Language {
+ 		@RunningTitle @Dft @Title
+ 	    }
+ 	}
+ 
+         export @BeginSubSections @EndSubSections @SubSection
+         def @Section force into { @SectionList&&preceding }
+             named @Tag {}
+             named @Title {}
+             named @RunningTitle { dft }
+ 	    named @InitialLanguage { @InitialLanguage }
+ 	    named @BypassNumber { dft }
+             body @Body
+         {
+ 
+             def @EndSubSectionsPlace { @Galley }
+ 
+             def @EndSubSections force into { @EndSubSectionsPlace&&preceding }
+ 	    {}
+ 
+             macro @BeginSubSections
+             {	//@SubSectionGap @SubSectionList @FirstSubSectionNumber
+ 		// @EndSubSectionsPlace //
+ 	    }
+ 
+ 	    def @SectionShortNum
+ 	    {
+ 		@SectionNumbers @Then {
+ 		    @BypassNumber @Dft {
+ 			@ChapterShortNum @Join @SectionNumbers @Num
+ 			{ @SectionList&&@Tag @Open { num } }
+ 		    }
+ 		}
+ 	    }
+ 
+ 	    export @BeginSubSubSections @EndSubSubSections @SubSubSection
+             def @SubSection force into { @SubSectionList&&preceding }
+ 		named @Tag {}
+ 		named @Title {}
+ 		named @RunningTitle { dft }
+ 		named @InitialLanguage { @InitialLanguage }
+ 		named @BypassNumber { dft }
+ 		body @Body
+             {
+ 
+                 def @EndSubSubSectionsPlace { @Galley }
+ 
+                 def @EndSubSubSections force into
+ 		    { @EndSubSubSectionsPlace&&preceding }
+ 		{}
+ 
+                 macro @BeginSubSubSections
+                 { //@SubSubSectionGap @SubSubSectionList @FirstSubSubSectionNumber
+ 		  // @EndSubSubSectionsPlace //
+ 		}
+ 
+ 		def @SubSectionShortNum
+ 		{
+ 		    @SubSectionNumbers @Then {
+ 			@BypassNumber @Dft {
+ 			    @SectionShortNum @Join @SubSectionNumbers @Num
+ 			    { @SubSectionList&&@Tag @Open { num } }
+ 			}
+ 		    }
+ 		}
+ 
+ 		def @SubSubSection force into { @SubSubSectionList&&preceding }
+ 		    named @Tag {}
+ 		    named @Title {}
+ 		    named @RunningTitle { dft }
+ 		    named @InitialLanguage { @InitialLanguage }
+ 		    named @BypassNumber { dft }
+ 		    body @Body
+ 		{
+                 
+ 		    @LargeScaleStructure
+ 			tag { @Tag }
+ 			type { Minor }
+ 			initiallanguage { @InitialLanguage }
+ 			title { @Title }
+ 			runningtitle { @RunningTitle }
+ 			headingfont { @SubSubSectionHeadingFont }
+ 			headingbreak { @SubSubSectionHeadingBreak }
+ 			headingformat { @Num @SubSubSectionHeadingFormat @Body }
+ 			incontents { @SubSubSectionInContents }
+ 			contentsindent { 9f }
+ 			numbers { @SubSubSectionNumbers }
+ 			attachnum { @SubSubSectionList&&preceding @Tagged @Tag }
+ 			retrievenum { @SubSubSectionList&&@Tag @Open { num } }
+ 			bypassnumber { @BypassNumber }
+ 			prefix { @SubSectionShortNum }
+ 			majornum { @MajorNum }
+ 			majortitle { @MajorTitle }
+ 			intheorems { @SubSubSectionNumInTheorems }
+ 			indisplays { @SubSubSectionNumInDisplays }
+ 			infigures { @SubSubSectionNumInFigures }
+ 			intables { @SubSubSectionNumInTables }
+ 			inrunners { @SubSubSectionNumInRunners }
+ 			@Body
+ 	        }
+ 
+ 		@LargeScaleStructure
+ 		    tag { @Tag }
+ 		    type { Minor }
+ 		    initiallanguage { @InitialLanguage }
+ 		    title { @Title }
+ 		    runningtitle { @RunningTitle }
+ 		    headingfont { @SubSectionHeadingFont }
+ 		    headingbreak { @SubSectionHeadingBreak }
+ 		    headingformat { @Num @SubSectionHeadingFormat @Body }
+ 		    incontents { @SubSectionInContents }
+ 		    contentsindent { 6f }
+ 		    numbers { @SubSectionNumbers }
+ 		    attachnum { @SubSectionList&&preceding @Tagged @Tag }
+ 		    retrievenum { @SubSectionList&&@Tag @Open { num } }
+ 		    bypassnumber { @BypassNumber }
+ 		    prefix { @SectionShortNum }
+ 		    majornum { @MajorNum }
+ 		    majortitle { @MajorTitle }
+ 		    intheorems { @SubSectionNumInTheorems }
+ 		    indisplays { @SubSectionNumInDisplays }
+ 		    infigures { @SubSectionNumInFigures }
+ 		    intables { @SubSectionNumInTables }
+ 		    inrunners { @SubSectionNumInRunners }
+ 		    @Body
+ 
+             }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Minor }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @Title }
+ 		runningtitle { @RunningTitle }
+ 		headingfont { @SectionHeadingFont }
+ 		headingbreak { @SectionHeadingBreak }
+ 		headingformat { @Num @SectionHeadingFormat @Body }
+ 		incontents { @SectionInContents }
+ 		contentsindent { 3f }
+ 		numbers { @SectionNumbers }
+ 		attachnum { @SectionList&&preceding @Tagged @Tag }
+ 		retrievenum { @SectionList&&@Tag @Open { num } }
+ 		bypassnumber { @BypassNumber }
+ 		prefix { @ChapterShortNum }
+ 		majornum { @MajorNum }
+ 		majortitle { @MajorTitle }
+ 		intheorems { @SectionNumInTheorems }
+ 		indisplays { @SectionNumInDisplays }
+ 		infigures { @SectionNumInFigures }
+ 		intables { @SectionNumInTables }
+ 		inrunners { @SectionNumInRunners }
+ 		@Body
+ 
+         }
+ 
+ 	def @Part
+ 	    named @Tag {}
+ 	{
+ 	    @LargeScaleStructure
+ 	        type { VeryMajor }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @PartTitle }
+ 		aboveheadinggap { @AbovePartGap }
+ 		headingfont { @PartHeadingFont }
+ 		headingbreak { @PartHeadingBreak }
+ 		headingformat { @Num @PartHeadingFormat @Body }
+ 		bypassnumber { @PartNumber }
+ 		incontents { @PartInContents }
+ 		sendheader { @Full @Body }
+ 		inrunners { Yes }
+ 		tag { @Tag }
+ 		@PartText
+ 	}
+ 
+ 	@PartNumber @Case {
+ 	    ""   @Yield @Null
+ 	    else @Yield @Part
+ 	}
+ 	//
+ 	@LargeScaleStructure
+ 	    tag { @Tag }
+ 	    type { Major }
+ 	    initiallanguage { @InitialLanguage }
+ 	    title { @Title }
+ 	    runningtitle { @RunningTitle }
+ 	    aboveheadinggap { @AboveChapterGap }
+ 	    headingfont { @ChapterHeadingFont }
+ 	    headingbreak { @ChapterHeadingBreak }
+ 	    headingformat { @Num @ChapterHeadingFormat @Body }
+ 	    incontents { @ChapterInContents }
+ 	    contentsindent { 0f }
+ 	    word { chapter @WordVal @ChapterWord }
+ 	    numbers { @ChapterNumbers }
+ 	    attachnum { @ChapterList&&preceding @Tagged @Tag }
+ 	    retrievenum { @ChapterList&&@Tag @Open { num } }
+ 	    bypassnumber { @BypassNumber }
+ 	    pnprefix { @ChapterPrefix }
+ 	    intheorems { @ChapterNumInTheorems }
+ 	    indisplays { @ChapterNumInDisplays }
+ 	    infigures { @ChapterNumInFigures }
+ 	    intables { @ChapterNumInTables }
+ 	    sendheader { @ChapterFull @Body }
+ 	    innergap { @SectionGap }
+ 	    inrunners { Yes }
+ 	    @Body
+ 
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Appendices.                                                        #
+     #                                                                     #
+     #######################################################################
+ 
+     export @BeginSubAppendices @EndSubAppendices @SubAppendix
+     def @Appendix force into { @AppendixList&&preceding }
+         named @Tag {}
+         named @Title {}
+         named @RunningTitle { dft }
+ 	named @InitialLanguage {}
+ 	named @PartNumber {}
+ 	named @PartTitle {}
+ 	named @PartText {}
+         named @BypassNumber { dft }
+         body @Body
+     {
+ 
+         def @EndSubAppendicesPlace { @Galley }
+ 
+         def @EndSubAppendices force into { @EndSubAppendicesPlace&&preceding }
+ 	{}
+ 
+         macro @BeginSubAppendices
+ 	{   //@SubAppendixGap @SubAppendixList @FirstSubAppendixNumber
+ 	    // @EndSubAppendicesPlace //
+ 	}
+ 
+ 	def @AppendixShortNum
+ 	{
+ 	    @AppendixNumbers @Then {
+ 		@BypassNumber @Dft {
+ 		    @AppendixNumbers @Num @AppendixList&&@Tag @Open { num }
+ 		}
+ 	    }
+ 	}
+ 
+ 	def @MajorNum
+ 	{
+ 	    @AppendixNumbers @Then @InitialLanguage @Language {
+ 		appendix @WordVal @AppendixWord @AppendixShortNum
+ 	    }
+ 	}
+ 
+ 	def @MajorTitle
+ 	{
+ 	    @InitialLanguage @Language {
+ 		@RunningTitle @Dft @Title
+ 	    }
+ 	}
+ 
+         export @BeginSubSubAppendices @EndSubSubAppendices @SubSubAppendix
+         def @SubAppendix force into { @SubAppendixList&&preceding }
+             named @Tag {}
+             named @Title {}
+             named @RunningTitle { dft }
+ 	    named @InitialLanguage { @InitialLanguage }
+ 	    named @BypassNumber { dft }
+             body @Body
+         {
+ 
+             def @EndSubSubAppendicesPlace { @Galley }
+ 
+             def @EndSubSubAppendices force into { @EndSubSubAppendicesPlace&&preceding }
+ 	    {}
+ 
+             macro @BeginSubSubAppendices
+             {	//@SubSubAppendixGap @SubSubAppendixList @FirstSubSubAppendixNumber
+ 		// @EndSubSubAppendicesPlace //
+ 	    }
+ 
+ 	    def @SubAppendixShortNum
+ 	    {
+ 		@SubAppendixNumbers @Then {
+ 		    @BypassNumber @Dft {
+ 			@AppendixShortNum @Join @SubAppendixNumbers @Num
+ 			{ @SubAppendixList&&@Tag @Open { num } }
+ 		    }
+ 		}
+ 	    }
+ 
+             def @SubSubAppendix force into { @SubSubAppendixList&&preceding }
+ 		named @Tag {}
+ 		named @Title {}
+ 		named @RunningTitle { dft }
+ 		named @InitialLanguage { @InitialLanguage }
+ 		named @BypassNumber { dft }
+ 		body @Body
+             {
+ 
+ 		@LargeScaleStructure
+ 		    tag { @Tag }
+ 		    type { Minor }
+ 		    initiallanguage { @InitialLanguage }
+ 		    title { @Title }
+ 		    runningtitle { @RunningTitle }
+ 		    headingfont { @SubSubAppendixHeadingFont }
+ 		    headingbreak { @SubSubAppendixHeadingBreak }
+ 		    headingformat { @Num @SubSubAppendixHeadingFormat @Body }
+ 		    incontents { @SubSubAppendixInContents }
+ 		    contentsindent { 6f }
+ 		    numbers { @SubSubAppendixNumbers }
+ 		    attachnum { @SubSubAppendixList&&preceding @Tagged @Tag }
+ 		    retrievenum { @SubSubAppendixList&&@Tag @Open { num } }
+ 		    bypassnumber { @BypassNumber }
+ 		    prefix { @SubAppendixShortNum }
+ 		    majornum { @MajorNum }
+ 		    majortitle { @MajorTitle }
+ 		    intheorems { @SubSubAppendixNumInTheorems }
+ 		    indisplays { @SubSubAppendixNumInDisplays }
+ 		    infigures { @SubSubAppendixNumInFigures }
+ 		    intables { @SubSubAppendixNumInTables }
+ 		    inrunners { @SubSubAppendixNumInRunners }
+ 		    @Body
+ 
+             }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Minor }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @Title }
+ 		runningtitle { @RunningTitle }
+ 		headingfont { @SubAppendixHeadingFont }
+ 		headingbreak { @SubAppendixHeadingBreak }
+ 		headingformat { @Num @SubAppendixHeadingFormat @Body }
+ 		incontents { @SubAppendixInContents }
+ 		contentsindent { 3f }
+ 		numbers { @SubAppendixNumbers }
+ 		attachnum { @SubAppendixList&&preceding @Tagged @Tag }
+ 		retrievenum { @SubAppendixList&&@Tag @Open { num } }
+ 		bypassnumber { @BypassNumber }
+ 		prefix { @AppendixShortNum }
+ 		majornum { @MajorNum }
+ 		majortitle { @MajorTitle }
+ 		intheorems { @SubAppendixNumInTheorems }
+ 		indisplays { @SubAppendixNumInDisplays }
+ 		infigures { @SubAppendixNumInFigures }
+ 		intables { @SubAppendixNumInTables }
+ 		inrunners { @SubAppendixNumInRunners }
+ 		@Body
+ 
+         }
+ 
+ 	def @Part
+ 	    named @Tag {}
+ 	{
+ 	    @LargeScaleStructure
+ 	        type { VeryMajor }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @PartTitle }
+ 		aboveheadinggap { @AbovePartGap }
+ 		headingfont { @PartHeadingFont }
+ 		headingbreak { @PartHeadingBreak }
+ 		headingformat { @Num @PartHeadingFormat @Body }
+ 		bypassnumber { @PartNumber }
+ 		incontents { @PartInContents }
+ 		sendheader { @Full @Body }
+ 		inrunners { Yes }
+ 		tag { @Tag }
+ 		@PartText
+ 	}
+ 
+ 	@PartNumber @Case {
+ 	    ""   @Yield @Null
+ 	    else @Yield @Part
+ 	}
+ 	//
+ 	@LargeScaleStructure
+ 	    tag { @Tag }
+ 	    type { Major }
+ 	    initiallanguage { @InitialLanguage }
+ 	    title { @Title }
+ 	    runningtitle { @RunningTitle }
+ 	    aboveheadinggap { @AboveChapterGap }
+ 	    headingfont { @AppendixHeadingFont }
+ 	    headingbreak { @AppendixHeadingBreak }
+ 	    headingformat { @Num @AppendixHeadingFormat @Body }
+ 	    incontents { @AppendixInContents }
+ 	    contentsindent { 0f }
+ 	    word { appendix @WordVal @AppendixWord }
+ 	    numbers { @AppendixNumbers }
+ 	    attachnum { @AppendixList&&preceding @Tagged @Tag }
+ 	    retrievenum { @AppendixList&&@Tag @Open { num } }
+ 	    bypassnumber { @BypassNumber }
+ 	    pnprefix { @AppendixPrefix }
+ 	    intheorems { @AppendixNumInTheorems }
+ 	    indisplays { @AppendixNumInDisplays }
+ 	    infigures { @AppendixNumInFigures }
+ 	    intables { @AppendixNumInTables }
+ 	    sendheader { @ChapterFull @Body }
+ 	    innergap { @SubAppendixGap }
+ 	    inrunners { Yes }
+ 	    @Body
+ 
+     }
+ 
+ 
+ @End @BookSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bsf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bsf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bsf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,1609 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @BasicSetup package (Version 3.13)                                    #
+ #                                                                             #
+ #  Jeffrey H. Kingston                                                        #
+ #  5 February 1999                                                            #
+ #                                                                             #
+ #  Based on the first part of the @DocumentLayout package, version 3.11.      #
+ #                                                                             #
+ #  This package contains basic symbols used widely throughout many            #
+ #  documents, for font changes, particular characters, standard words in      #
+ #  the current language, date and time, paragraphs, lists, colours,           #
+ #  rules, and boxes.                                                          #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysPrependGraphic { "bsf.lpg" }   # rules, boxes, margin note setup
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The following symbols are defined outside @BasicSetup so that              #
+ #  they can be invoked when setting its parameters in the @Use clause.        #
+ #                                                                             #
+ ###############################################################################
+ 
+ def @OrIfPlain
+     precedence 80
+     left x
+     right y
+ {
+     @BackEnd @Case {
+ 	PlainText @Yield y
+ 	else      @Yield x
+     }
+ }
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @Colour, @Color                                                       #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @ColourCommand right col
+     {
+ 	def @ColourCoords
+ 	{
+ 	    col @Case {
+ 		darkblue	@Yield	{ 0.0 0.0 0.5 }
+ 		blue		@Yield	{ 0.0 0.0 1.0 }
+ 		lightblue	@Yield	{ 0.5 0.5 1.0 }
+ 		darkgreen	@Yield	{ 0.0 0.5 0.0 }
+ 		green		@Yield	{ 0.0 1.0 0.0 }
+ 		lightgreen	@Yield	{ 0.5 1.0 0.5 }
+ 		darkred		@Yield	{ 0.5 0.0 0.0 }
+ 		red		@Yield	{ 1.0 0.0 0.0 }
+ 		lightred	@Yield	{ 1.0 0.5 0.5 }
+ 		darkcyan	@Yield	{ 0.0 0.5 0.5 }
+ 		cyan		@Yield	{ 0.0 1.0 1.0 }
+ 		lightcyan	@Yield	{ 0.5 1.0 1.0 }
+ 		darkmagenta	@Yield	{ 0.5 0.0 0.5 }
+ 		magenta		@Yield	{ 1.0 0.0 1.0 }
+ 		lightmagenta	@Yield	{ 1.0 0.5 1.0 }
+ 		darkyellow	@Yield	{ 0.5 0.5 0.0 }
+ 		yellow		@Yield	{ 1.0 1.0 0.0 }
+ 		lightyellow	@Yield	{ 1.0 1.0 0.5 }
+ 		darkgray	@Yield	{ 0.2 0.2 0.2 }
+ 		gray		@Yield	{ 0.5 0.5 0.5 }
+ 		lightgray	@Yield	{ 0.8 0.8 0.8 }
+ 		darkgrey	@Yield	{ 0.2 0.2 0.2 }
+ 		grey		@Yield	{ 0.5 0.5 0.5 }
+ 		lightgrey	@Yield	{ 0.8 0.8 0.8 }
+ 		black		@Yield	{ 0.0 0.0 0.0 }
+ 		white		@Yield	{ 1.0 1.0 1.0 }
+ 	    }
+ 	}
+ 
+ 	col @Case {
+ 	    nochange @Yield { nochange }
+ 	    else @Yield { @BackEnd @Case {
+ 		PostScript	@Yield { @ColourCoords setrgbcolor }
+ 		PDF		@Yield { @ColourCoords rg @ColourCoords RG }
+ 		PlainText	@Yield ""
+ 	    } }
+ 	}
+     }
+ 
+     def @Colour @Color left col right y { {@ColourCommand col} @SetColour y }
+ 
+     export i c p m s v f
+     def @LengthUnits
+     {
+ 	def i left x {
+ 	    @BackEnd @Case {
+ 		PostScript @Yield { x" in" }
+ 		PDF        @Yield { "__mul(__in, "x")" }
+ 		PlainText  @Yield ""
+ 	    }
+ 	}
+ 
+ 	def c left x {
+ 	    @BackEnd @Case {
+ 		PostScript @Yield { x" cm" }
+ 		PDF        @Yield { "__mul(__cm, "x")" }
+ 		PlainText  @Yield ""
+ 	    }
+ 	}
+ 
+ 	def p left x {
+ 	    @BackEnd @Case {
+ 		PostScript @Yield { x" pt" }
+ 		PDF        @Yield { "__mul(__pt, "x")" }
+ 		PlainText  @Yield ""
+ 	    }
+ 	}
+ 
+ 	def m left x {
+ 	    @BackEnd @Case {
+ 		PostScript @Yield { x" em" }
+ 		PDF        @Yield { "__mul(__em, "x")" }
+ 		PlainText  @Yield ""
+ 	    }
+ 	}
+ 
+ 	def s left x {
+ 	    @BackEnd @Case {
+ 		PostScript @Yield { x" sp" }
+ 		PDF        @Yield { "__mul(__louts, "x")" }
+ 		PlainText  @Yield ""
+ 	    }
+ 	}
+ 
+ 	def v left x {
+ 	    @BackEnd @Case {
+ 		PostScript @Yield { x" vs" }
+ 		PDF        @Yield { "__mul(__loutv, "x")" }
+ 		PlainText  @Yield ""
+ 	    }
+ 	}
+ 
+ 	def f left x {
+ 	    @BackEnd @Case {
+ 		PostScript @Yield { x" ft" }
+ 		PDF        @Yield { "__mul(__loutf, "x")" }
+ 		PlainText  @Yield ""
+ 	    }
+ 	}
+     }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Symbols exported by @BasicSetup.                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ export
+ 
+     @InitialFont @InitialBreak @InitialSpace @InitialLanguage @InitialColour
+     @OptimizePages @HeadingFont
+     @ParaGap @ParaIndent @DisplayGap @DisplayIndent @DefaultIndent
+     @DisplayNumStyle @WideIndent @VeryWideIndent
+     @ListGap @ListIndent @ListRightIndent @ListLabelWidth
+     @NumberSeparator
+ 
+     @Word @Roman @UCRoman @Alpha @UCAlpha @Months @ShortMonths @WeekDays
+     @ShortWeekDays @TwelveHours @ShortHours @MeriDiems @ShortMeriDiems
+ 
+     @Sym @R @I @B @BI @S @F @II
+     "~" "~~" "``" "''" ",," "--" "---" "..."
+ 
+     @Bullet @ParSym @SectSym @Dagger @DaggerDbl @CDot @Sterling @Yen @Florin
+     @Star @Degree @Minute @Second @Multiply @Divide @Lozenge @Register
+     @CopyRight @TradeMark @Euro
+ 
+     @Date @Time @DateTimeFormat @DropCapTwo @DropCapThree @Centre @Right
+     @NoDotSep @NoDotJoin @Join @Sep @DotSep @DotJoin @DashJoin @NumSep
+     @OverStrike @Sup @Sub @FullWidthRule @LocalWidthRule
+     @Box @CurveBox @ShadowBox @BoundaryMarks @NumberMarker @NumberOf
+     @PageMarker @PageMark @NoLinkPageMark @PageOf @CrossLink
+ 
+     @BeginDisplayCounter
+ 
+     @Heading "^" "&-" @If @Not @And @Or @True
+     @PP @LP @LLP @DP @LOP @NP @CNP
+ 
+     @BeginAlignedDisplays
+     @EndAlignedDisplays
+ 
+     @Display
+     @LeftDisplay
+     @IndentedDisplay
+     @QuotedDisplay
+     @CentredDisplay
+     @RightDisplay
+     @AlignedDisplay
+     @LeftAlignedDisplay
+     @IndentedAlignedDisplay
+     @QuotedAlignedDisplay
+     @CentredAlignedDisplay
+     @RightAlignedDisplay
+     @NumberedDisplay
+     @LeftNumberedDisplay
+     @IndentedNumberedDisplay
+     @QuotedNumberedDisplay
+     @CentredNumberedDisplay
+     @RightNumberedDisplay
+     @AlignedNumberedDisplay
+     @LeftAlignedNumberedDisplay
+     @IndentedAlignedNumberedDisplay
+     @QuotedAlignedNumberedDisplay
+     @CentredAlignedNumberedDisplay
+     @RightAlignedNumberedDisplay
+ 
+     @RawDisplay
+     @RawLeftDisplay
+     @RawIndentedDisplay
+     @RawQuotedDisplay
+     @RawCentredDisplay
+     @RawRightDisplay
+     @RawAlignedDisplay
+     @RawLeftAlignedDisplay
+     @RawIndentedAlignedDisplay
+     @RawQuotedAlignedDisplay
+     @RawCentredAlignedDisplay
+     @RawRightAlignedDisplay
+     @RawNumberedDisplay
+     @RawLeftNumberedDisplay
+     @RawIndentedNumberedDisplay
+     @RawQuotedNumberedDisplay
+     @RawCentredNumberedDisplay
+     @RawRightNumberedDisplay
+     @RawAlignedNumberedDisplay
+     @RawLeftAlignedNumberedDisplay
+     @RawIndentedAlignedNumberedDisplay
+     @RawQuotedAlignedNumberedDisplay
+     @RawCentredAlignedNumberedDisplay
+     @RawRightAlignedNumberedDisplay
+ 
+     @ListItem
+     @ListInterruptItem
+     @ListNewPage
+     @DropListItem
+     @TagItem
+     @DropTagItem
+ 
+     @EndList
+     @RawEndList
+ 
+     @RawList
+     @RawLeftList
+     @RawIndentedList
+     @RawQuotedList
+     @RawCentredList @RawCenteredList
+     @RawNumberedList
+     @RawParenNumberedList
+     @RawRomanList
+     @RawParenRomanList
+     @RawUCRomanList
+     @RawParenUCRomanList
+     @RawAlphaList
+     @RawParenAlphaList
+     @RawUCAlphaList
+     @RawParenUCAlphaList
+     @RawBulletList
+     @RawStarList
+     @RawDashList
+     @RawTaggedList
+     @RawWideTaggedList
+     @RawVeryWideTaggedList
+ 
+     @List
+     @LeftList
+     @IndentedList
+     @QuotedList
+     @CentredList @CenteredList
+     @NumberedList 
+     @ParenNumberedList
+     @RomanList
+     @ParenRomanList
+     @UCRomanList
+     @ParenUCRomanList
+     @AlphaList
+     @ParenAlphaList
+     @UCAlphaList
+     @ParenUCAlphaList
+     @BulletList 
+     @StarList 
+     @DashList
+     @TaggedList
+     @WideTaggedList
+     @VeryWideTaggedList
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @BasicSetup package.                                                   #
+ #                                                                             #
+ ###############################################################################
+ 
+ def @BasicSetup
+     named @InitialFont	  { Times Base 12p	} # initial font
+     named @InitialBreak	  { {adjust 1.20fx hyphen} @OrIfPlain
+ 			    {ragged 1fx nohyphen} } # initial break
+     named @InitialSpace	  { lout		} # initial space style
+     named @InitialLanguage{ English		} # initial language
+     named @InitialColour  { black		} # initial colour
+     named @OptimizePages  { No			} # optimize page breaks?
+     named @HeadingFont	  { Bold		} # font for @Heading
+     named @ParaGap	  { 1.3vx @OrIfPlain 1f	} # gap between paragraphs
+     named @ParaIndent	  { 2.0f @OrIfPlain 5s	} # first-line indent for @PP
+     named @DisplayGap	  { 1.0v @OrIfPlain 1f	} # gap above, below displays
+     named @DisplayIndent  { 2.0f @OrIfPlain 5s	} # @IndentedDisplay indent
+     named @DefaultIndent  { 0.5rt		} # @Display indent
+     named @DisplayNumStyle
+ 	right num	  { (num)		} # display number style
+     named @WideIndent	  { 4.0f @OrIfPlain 10s	} # @WideTaggedList indent
+     named @VeryWideIndent { 8.0f @OrIfPlain 20s	} # @VeryWideTaggedList indent
+     named @ListOuterGap	  { 1.0v @OrIfPlain 1f	} # gap before, after list
+     named @ListGap	  { 1.0v @OrIfPlain 1f	} # gap between list items
+     named @ListIndent	  { 0s			} # indent of list items
+     named @ListRightIndent{ 0s			} # right indent of list items
+     named @ListLabelWidth { 2.0f @OrIfPlain 5s	} # width allowed for list tags
+     named @NumberSeparator{ .			} # separates numbers like 2.3.7
+     import @BasicSetup
+     named @CrossLinkFormat
+ 	right @Body	  { @Body		} # format for cross links
+ @Begin
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @Sym, font symbols, and miscellaneous special characters.             #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Sym right x { { Symbol Base } @Font @Char x	}
+ 
+     def @R   right x { Base @Font x			}
+     def @I   right x { Slope @Font x			}
+     def @B   right x { Bold @Font x			}
+     def @BI  right x { BoldSlope @Font x		}
+     def @S   right x { smallcaps @Font x		}
+     def @F   right x { { Courier Base -1p } @Font x 	}
+ 
+     def @II
+ 	right x
+     {
+ 	{ @CurrFace @Case {
+ 	    Bold @Yield BoldSlope
+ 	    else @Yield Slope
+ 	} } @Font x
+     }
+ 
+     def "~"  left x right y { x &1su y }
+     def "~~" left x right y { x &2s y }
+ 
+     def "``"       { @Char "quotedblleft"	@OrIfPlain "``"	}
+     def "''"       { @Char "quotedblright"	@OrIfPlain "''"	}
+     def ",,"       { @Char "quotedblbase"	@OrIfPlain ",,"	}
+     def "--"       { @Char "endash"		@OrIfPlain "--"	}
+     def "---"      { @Char "emdash"		@OrIfPlain "---"}
+     def "..."      { @Char "ellipsis"		@OrIfPlain "..."}
+     def @Bullet    { @Char "bullet"		@OrIfPlain "o"	}
+     def @ParSym    { @Char "paragraph"		@OrIfPlain "P"	}
+     def @SectSym   { @Char "section"		@OrIfPlain "$"	}
+     def @Dagger    { @Char "dagger"		@OrIfPlain "+"	}
+     def @DaggerDbl { @Char "daggerdbl"		@OrIfPlain "++"	}
+     def @CDot      { @Char "periodcentered"	@OrIfPlain "."	}
+     def @Sterling  { @Char "sterling"		@OrIfPlain "&"	}
+     def @Yen       { @Char "yen"		@OrIfPlain "Y"	}
+     def @Florin    { @Char "florin"		@OrIfPlain "f"	}
+ 
+     def @Star      { @Sym  "asteriskmath"	@OrIfPlain "*"	}
+     def @Degree    { @Sym  "degree"		@OrIfPlain "o"	}
+     def @Minute    { @Sym  "minute"		@OrIfPlain "'"	}
+     def @Second    { @Sym  "second"		@OrIfPlain "''"	}
+     def @Multiply  { @Sym  "multiply"		@OrIfPlain "x"	}
+     def @Divide    { @Sym  "divide"		@OrIfPlain "/"	}
+     def @Lozenge   { @Sym  "lozenge"		@OrIfPlain "O"	}
+     def @Register  { @Sym  "registersans"	@OrIfPlain "R"	}
+     def @CopyRight { @Sym  "copyrightsans"	@OrIfPlain "C"	}
+     def @TradeMark { @Sym  "trademarksans"	@OrIfPlain "TM"	}
+ 
+     def @Euro
+     {
+ 	@BackEnd @Case {
+ 
+ 	    PostScript @Yield {
+ 		0.65w @VShift @VContract @HContract
+ 		"xsize ysize ysize 0.07 mul louteuro" @Graphic {
+ 		    0.7f @High 0.735f @Wide
+ 		}
+ 	    }
+ 
+ 	    PDF @Yield { EUR }
+ 
+ 	    PlainText @Yield { EUR }
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Symbols stored in the "standard" database                              #
+     #                                                                         #
+     #    @Word            language-spacific words such as Chapter, etc.       #
+     #    @Roman           lower case Roman numerals i, ii, ... , cc           #
+     #    @UCRoman         upper case Roman numerals I, II, ... , CC           #
+     #    @Alpha           lower case Roman alphabet a, b,  ... , z            #
+     #    @UCAlpha         upper case Roman alphabet A, B,  ... , Z            #
+     #    @Months          months of the year:  January, ... , December        #
+     #    @ShortMonths     months of the year, abbreviated:  Jan, ..., Dec     #
+     #    @WeekDays        days of the week:  Sunday, ... , Saturday           #
+     #    @ShortWeekDays   days of the week, abbreviated:  Sun, ... , Sat      #
+     #    @TwelveHours     hours, from 1 to 12                                 #
+     #    @ShortHours      hours, from 0 to 23                                 #
+     #    @DateTimeFormat  format of results of @Date and @Time                #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Word		left @Tag right @Val { @Val }
+     def @Roman		left @Tag right @Val { @Val }
+     def @UCRoman	left @Tag right @Val { @Val }
+     def @Alpha		left @Tag right @Val { @Val }
+     def @UCAlpha	left @Tag right @Val { @Val }
+     def @Months		left @Tag right @Val { @Val }
+     def @ShortMonths	left @Tag right @Val { @Val }
+     def @WeekDays	left @Tag right @Val { @Val }
+     def @ShortWeekDays	left @Tag right @Val { @Val }
+     def @TwelveHours  	left @Tag right @Val { @Val }
+     def @ShortHours  	left @Tag right @Val { @Val }
+     def @MeriDiems  	left @Tag right @Val { @Val }
+     def @ShortMeriDiems	left @Tag right @Val { @Val }
+ 
+     export @Value
+     def @DateTimeFormat	left @Tag
+ 	named @Value
+ 	    named @Year          {}
+ 	    named @ShortYear     {}
+ 	    named @Month         {}
+ 	    named @ShortMonth    {}
+ 	    named @MonthNum      {}
+ 	    named @Day           {}
+ 	    named @ShortDay      {}
+ 	    named @DayNum        {}
+ 	    named @MeriDiem      {}
+ 	    named @ShortMeriDiem {}
+ 	    named @Hour          {}
+ 	    named @TwelveHour    {}
+ 	    named @ShortHour     {}
+ 	    named @Minute        {}
+ 	    named @Second        {}
+ 	{}
+     {}
+ 
+     @SysDatabase @Word @Roman @UCRoman @Alpha @UCAlpha @Months
+ 		 @ShortMonths @WeekDays @ShortWeekDays @TwelveHours
+ 		 @ShortHours @MeriDiems @ShortMeriDiems @DateTimeFormat
+     { standard  }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Date and @Time: the date and time now.                                #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Date
+ 	named @Format
+ 	    named @Year         { @Moment&&now @Open { {@Century}@Year         }}
+ 	    named @ShortYear    { @Moment&&now @Open { @Year                   }}
+ 	    named @Month        { @Moment&&now @Open { @Months&&@Month         }}
+ 	    named @ShortMonth   { @Moment&&now @Open { @ShortMonths&&@Month    }}
+ 	    named @MonthNum     { @Moment&&now @Open { @Month                  }}
+ 	    named @Day          { @Moment&&now @Open { @WeekDays&&@WeekDay     }}
+ 	    named @ShortDay     { @Moment&&now @Open { @ShortWeekDays&&@WeekDay}}
+ 	    named @DayNum       { @Moment&&now @Open { @Day                    }}
+ 	    named @MeriDiem     { @Moment&&now @Open { @MeriDiems&&@Hour       }}
+ 	    named @ShortMeriDiem{ @Moment&&now @Open { @ShortMeriDiems&&@Hour  }}
+ 	    named @Hour         { @Moment&&now @Open { @Hour                   }}
+ 	    named @TwelveHour   { @Moment&&now @Open { @TwelveHours&&@Hour     }}
+ 	    named @ShortHour    { @Moment&&now @Open { @ShortHours&&@Hour      }}
+ 	    named @Minute       { @Moment&&now @Open { @Minute                 }}
+ 	    named @Second       { @Moment&&now @Open { @Second                 }}
+ 	{
+ 	    @DateTimeFormat&&date @Open { @Value
+ 		@Year          { @Year }
+ 		@ShortYear     { @ShortYear }
+ 		@Month         { @Month }
+ 		@ShortMonth    { @ShortMonth }
+ 		@MonthNum      { @MonthNum }
+ 		@Day           { @Day }
+ 		@ShortDay      { @ShortDay }
+ 		@DayNum        { @DayNum }
+ 		@MeriDiem      { @MeriDiem }
+ 		@ShortMeriDiem { @ShortMeriDiem }
+ 		@Hour          { @Hour }
+ 		@TwelveHour    { @TwelveHour }
+ 		@ShortHour     { @ShortHour }
+ 		@Minute        { @Minute }
+ 		@Second        { @Second }
+ 	    }
+ 	}
+     { @Format }
+ 
+     def @Time
+ 	named @Format
+ 	    named @Year         { @Moment&&now @Open { {@Century}@Year         }}
+ 	    named @ShortYear    { @Moment&&now @Open { @Year                   }}
+ 	    named @Month        { @Moment&&now @Open { @Months&&@Month         }}
+ 	    named @ShortMonth   { @Moment&&now @Open { @ShortMonths&&@Month    }}
+ 	    named @MonthNum     { @Moment&&now @Open { @Month                  }}
+ 	    named @Day          { @Moment&&now @Open { @WeekDays&&@WeekDay     }}
+ 	    named @ShortDay     { @Moment&&now @Open { @ShortWeekDays&&@WeekDay}}
+ 	    named @DayNum       { @Moment&&now @Open { @Day                    }}
+ 	    named @MeriDiem     { @Moment&&now @Open { @MeriDiems&&@Hour       }}
+ 	    named @ShortMeriDiem{ @Moment&&now @Open { @ShortMeriDiems&&@Hour  }}
+ 	    named @Hour         { @Moment&&now @Open { @Hour                   }}
+ 	    named @TwelveHour   { @Moment&&now @Open { @TwelveHours&&@Hour     }}
+ 	    named @ShortHour    { @Moment&&now @Open { @ShortHours&&@Hour      }}
+ 	    named @Minute       { @Moment&&now @Open { @Minute                 }}
+ 	    named @Second       { @Moment&&now @Open { @Second                 }}
+ 	{
+ 	    @DateTimeFormat&&time @Open { @Value
+ 		@Year          { @Year }
+ 		@ShortYear     { @ShortYear }
+ 		@Month         { @Month }
+ 		@ShortMonth    { @ShortMonth }
+ 		@MonthNum      { @MonthNum }
+ 		@Day           { @Day }
+ 		@ShortDay      { @ShortDay }
+ 		@DayNum        { @DayNum }
+ 		@MeriDiem      { @MeriDiem }
+ 		@ShortMeriDiem { @ShortMeriDiem }
+ 		@Hour          { @Hour }
+ 		@TwelveHour    { @TwelveHour }
+ 		@ShortHour     { @ShortHour }
+ 		@Minute        { @Minute }
+ 		@Second        { @Second }
+ 	    }
+ 	}
+     { @Format }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @DropCapTwo and @DropCapThree                                          #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @DropCapTwo
+ 	left y
+ 	named height { 1.5v }
+ 	right x
+     {
+ 	def @ParPlace { @Galley }
+ 	def @EndParPlace { @Galley }
+ 
+ 	def @LineList
+ 	{
+ 	    @PAdjust @ParPlace
+ 	    //1vx @LineList
+ 	}
+ 
+ 	def @ParGalley horizontally into { @ParPlace&&preceding }
+ 	    right x
+ 	{
+ 	    x
+ 	}
+ 
+ 	def @EndPar force into { @EndParPlace&&following } { @Null }
+ 
+ 	def @Cap
+ 	{
+ 	    -0.25f @VShift 1.0w @VShift {
+ 		-90d @Rotate height @Wide @Scale 90d @Rotate y
+ 	    }
+ 	}
+ 
+ 						  |1s @PAdjust @ParPlace 
+ 	/1vo  @Cap @ParGalley {x & @EndPar &1rt } |   @PAdjust @ParPlace
+ 	//1vx @LineList
+ 	//    @EndParPlace
+     }
+ 
+     def @DropCapThree
+ 	left y
+ 	named height { 2.5v }
+ 	right x
+     {
+ 	def @ParPlace { @Galley }
+ 	def @EndParPlace { @Galley }
+ 
+ 	def @LineList
+ 	{
+ 	    @PAdjust @ParPlace
+ 	    //1vx @LineList
+ 	}
+ 
+ 	def @ParGalley force horizontally into { @ParPlace&&preceding }
+ 	    right x
+ 	{
+ 	    x
+ 	}
+ 
+ 	def @EndPar force into { @EndParPlace&&following } { @Null }
+ 
+ 	def @Cap
+ 	{
+ 	    -0.25f @VShift 1.0w @VShift {
+ 		-90d @Rotate height @Wide @Scale 90d @Rotate y
+ 	    }
+ 	}
+ 
+ 						|1s @PAdjust @ParPlace 
+ 	/1vo  @ParGalley { x & @EndPar &1rt }	|   @PAdjust @ParPlace
+ 	/1vo  @Cap				|   @PAdjust @ParPlace
+ 	//1vx @LineList
+ 	//    @EndParPlace
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Centre, @Center, @Right, @NoDotSep, @NoDotJoin, @DotSep,              #
+     #  @DotJoin, @DashJoin, @NumSep                                           #
+     #                                                                         #
+     ###########################################################################
+ 
+     macro @Centre @Center { |0.5rt @HContract }
+ 
+     def @Right
+ 	precedence 50
+ 	left x
+ 	right y
+     { x |1.0rt @OneCol { 2f @Wide {} | y } }
+ 
+     def @NoDotSep left x right y
+     {
+ 	x @Case {
+ 	    {}   @Yield y
+ 	    else @Yield {
+ 		y @Case {
+ 		    {}   @Yield x
+ 		    else @Yield { x |2s y }
+ 		}
+ 	    }
+ 	}
+     }
+ 
+     def @NoDotJoin left x right y
+     {
+ 	x @Case {
+ 	    {}   @Yield y
+ 	    else @Yield {
+ 	        y @Case {
+ 		    {}   @Yield x
+ 		    else @Yield { x{y} }
+ 	        }
+ 	    }
+ 	}
+     }
+ 
+     def @DotSep left x right y
+     {
+ 	x @Case {
+ 	    {}   @Yield y
+ 	    else @Yield {
+ 		y @Case {
+ 		    {}   @Yield x
+ 		    else @Yield { x. |2s y }
+ 		}
+ 	    }
+         }
+     }
+ 
+     def @DotJoin left x right y
+     {
+ 	x @Case {
+ 	    {}   @Yield y
+ 	    else @Yield {
+ 		y @Case {
+ 		    {}   @Yield x
+ 		    else @Yield { x.y }
+ 		}
+ 	    }
+ 	}
+     }
+ 
+     def @DashJoin left x right y
+     {
+ 	x @Case {
+ 	    {}   @Yield y
+ 	    else @Yield {
+ 		y @Case {
+ 		    {}   @Yield x
+ 		    else @Yield { x--y }
+ 		}
+ 	    }
+         }
+     }
+ 
+     def @NumSep left x right y
+     {
+ 	x @Case {
+ 	    {}   @Yield y
+ 	    else @Yield {
+ 		y @Case {
+ 		    {}   @Yield x
+ 		    else @Yield {
+ 			@CurrLang @Case {
+ 			    Hungarian @Yield { y. x }
+ 			    else      @Yield { x y }
+ 			}
+ 		    }
+ 		}
+ 	    }
+         }
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @OverStrike, @Sup and @Sub                                            #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @OverStrike left x right y
+     {
+ 	@OneRow { @HContract @VContract x /0io @HContract @VContract y }
+     }
+ 
+     def @Sup
+ 	left x
+ 	named gap { 0.40fk }
+ 	right y
+     {
+ 	@HContract @VContract
+ 	{
+ 	    | 0.7f @Font y ^/gap x
+ 	}
+     }
+ 
+     def @Sub
+ 	left x
+ 	named gap { 0.40fk }
+ 	right y
+     {
+ 	@HContract @VContract
+ 	{
+ 	    x /gap | 0.7f @Font y
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @AddPaint, @LineWidth (obsolete), @StrokeCommand                      #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @AddPaint right col
+     {
+ 	col @Case {
+ 	    none @Yield ""
+ 	    nochange @Yield {
+ 		@BackEnd @Case {
+ 		    PostScript @Yield "gsave fill grestore"
+ 		    PDF        @Yield "q f Q"
+ 		    PlainText  @Yield ""
+ 		}
+ 	    }
+ 	    else @Yield {
+ 		@BackEnd @Case {
+ 		    PostScript @Yield {"gsave" @ColourCommand col "fill grestore"}
+ 		    PDF        @Yield { "q" @ColourCommand col "f Q" }
+ 		    PlainText  @Yield ""
+ 		}
+ 	    }
+ 	}
+     }
+ 
+     def @LineWidth right lw
+     {
+ 	lw @Case {
+ 	    "" @Yield ""
+ 	    else @Yield {
+ 		@BackEnd @Case {
+ 		    PostScript @Yield { lw "setlinewidth" }
+ 		    PDF        @Yield { lw "w" }
+ 		    PlainText  @Yield ""
+ 		}
+ 	    }
+ 	}
+     }
+ 
+     def @StrokeCommand right linewidth
+     {
+ 	@BackEnd @Case {
+ 	    PostScript @Yield {
+ 		linewidth @Case {
+ 		    ""   @Yield { "stroke" }
+ 		    none @Yield { }
+ 		    else @Yield { linewidth "setlinewidth stroke" }
+ 		}
+ 	    }
+ 	    PDF @Yield {
+ 		linewidth @Case {
+ 		    ""   @Yield { "S" }
+ 		    none @Yield { }
+ 		    else @Yield { linewidth "w S" }
+ 		}
+ 	    }
+ 	    else @Yield ""
+ 	}
+     }
+ 
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @FullWidthRule, @Box, @CurveBox, and @ShadowBox                       #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @FullWidthRule
+ 	import @LengthUnits named linewidth {}
+     {
+ 	@BackEnd @Case {
+ 
+ 	    PostScript @Yield @HExpand {
+ 		{ "LoutRule" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ 	    }
+ 
+ 	    PDF @Yield @HExpand {
+ 		{ "0 0 m __xsize 0 l" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ 	    }
+ 
+ 	    PlainText @Yield { "-" @PlainGraphic 1f @High }
+ 	}
+     }
+ 
+     def @LocalWidthRule
+ 	import @LengthUnits named linewidth {}
+     {
+ 	@BackEnd @Case {
+ 
+ 	    PostScript @Yield {
+ 		{ "LoutRule" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ 	    }
+ 
+ 	    PDF @Yield {
+ 		{ "0 0 m __xsize 0 l" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ 	    }
+ 
+ 	    PlainText  @Yield { "-" @PlainGraphic 1f @High }
+ 	}
+     }
+ 
+     def @Box
+ 	named margin { 0.3f }
+ 	import @LengthUnits named linewidth {}
+ 	named paint { none }
+ 	right x
+     {
+ 	@BackEnd @Case {
+ 
+ 	    PostScript @Yield @VContract @HContract 0c @HShift {
+ 		{"LoutBox" @AddPaint paint @StrokeCommand linewidth }
+ 		@Graphic
+ 		{ ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ 	    }
+ 
+ 	    PDF @Yield @VContract @HContract 0c @HShift {
+ 		{ "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h"
+ 		@AddPaint paint @StrokeCommand linewidth } @Graphic
+ 		{ ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ 	    }
+ 
+ 	    PlainText @Yield @VContract @HContract 0c @HShift {
+ 		^/margin ^|margin 0c @HShift @OneRow x |margin /margin
+ 	    }
+ 	}
+     }
+ 
+     def @CurveBox
+ 	named margin { 0.3f }
+ 	import @LengthUnits named linewidth {}
+ 	named paint { none }
+ 	right x
+     {
+ 	def @PDFStuff
+ 	{
+ 	    "__xmark 0 m"
+ 	    "__sub(__xsize, __xmark) 0 l"
+ 	    "__sub(__xsize, __div(__mul(11, __xmark), 24)) 0"
+ 	    "__xsize __div(__mul(11, __xmark), 24)"
+ 	    "__xsize __xmark c"
+ 	    "__xsize __sub(__ysize, __xmark) l"
+ 	    "__xsize __sub(__ysize, __div(__mul(11, __xmark), 24))"
+ 	    "__sub(__xsize, __div(__mul(11, __xmark), 24)) __ysize"
+ 	    "__sub(__xsize, __xmark) __ysize c"
+ 	    "__xmark __ysize l"
+ 	    "__div(__mul(11, __xmark), 24) __ysize"
+ 	    "0 __sub(__ysize, __div(__mul(11, __xmark), 24))"
+ 	    "0 __sub(__ysize, __xmark) c"
+ 	    "0 __xmark l"
+ 	    "0 __div(__mul(11, __xmark), 24)"
+ 	    "__div(__mul(11, __xmark), 24) 0"
+ 	    "__xmark 0 c"
+ 	    "h"
+ 	    @AddPaint paint @StrokeCommand linewidth
+ 	}
+ 
+ 	@VContract @HContract 0c @HShift @BackEnd @Case {
+ 
+ 	    PostScript @Yield {
+ 		{"LoutCurveBox" @AddPaint paint @StrokeCommand linewidth }
+ 		@Graphic
+ 		{ ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ 	    }
+ 
+ 	    PlainText @Yield {
+ 		^/margin ^|margin 0c @HShift @OneRow x |margin /margin
+ 	    }
+ 
+ 	    PDF @Yield {
+ 		@PDFStuff @Graphic
+ 		{ ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ 	    }
+ 	}
+     }
+ 
+     def @ShadowBox
+ 	named margin { 0.3f }
+ 	import @LengthUnits named linewidth {}
+ 	named paint { none }
+ 	named shadow { 0.2f }
+ 	right x
+     {
+ 	@VContract @HContract 0c @HShift @BackEnd @Case {
+ 
+ 	    PostScript @Yield {
+ 		"LoutShadowBox fill" @Graphic
+ 		{ ^/shadow ^|shadow 0c @HShift
+ 		      @Box margin {margin} paint {paint} linewidth {linewidth} x
+ 		      |shadow /shadow
+ 		}
+ 	    }
+ 
+ 	    PlainText @Yield {
+ 		^/shadow ^|shadow 0c @HShift
+ 		@Box margin {margin} paint {paint} linewidth {linewidth} x
+ 		|shadow /shadow
+ 	    } 
+ 
+ 	    PDF @Yield {
+ 		{
+ 		  "__mul(__xmark, 2) 0 m __xsize 0 l"
+ 		  "__xsize __sub(__ysize, __mul(__xmark, 2)) l"
+ 		  "__sub(__xsize, __xmark) __sub(__ysize, __mul(__xmark, 2)) l"
+ 		  "__sub(__xsize, __xmark) __xmark l"
+ 		  "__mul(__xmark, 2) __xmark l h f"
+ 		}
+ 		@Graphic
+ 		{ ^/shadow ^|shadow 0c @HShift
+ 		  @Box margin {margin} paint {paint} linewidth {linewidth} x
+ 		  |shadow /shadow
+ 		}
+ 	    }
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @BoundaryMarks                                                        #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @BoundaryMarks
+ 	import @LengthUnits named linewidth { 0.2p }
+ 	import @LengthUnits named length { 0.5c }
+ 	import @LengthUnits named gap { 0.5c }
+ 	import @LengthUnits named lout { 0c }
+ 	import @LengthUnits named rout { 0c }
+ 	import @LengthUnits named uout { 0c }
+ 	import @LengthUnits named dout { 0c }
+     {
+ 	def @UpStroke    { "0" gap       "rmoveto" "0" length     "rlineto" }
+ 	def @DownStroke  { "0" gap "neg" "rmoveto" "0" length "neg rlineto" }
+ 	def @LeftStroke  { gap "neg" "0" "rmoveto" length "neg" "0 rlineto" }
+ 	def @RightStroke { gap "0"       "rmoveto" length       "0 rlineto" }
+ 
+ 	def @LLSpot { lout "neg"             dout "neg" moveto }
+ 	def @LRSpot { xsize rout "add"       dout "neg" moveto }
+ 	def @ULSpot { lout "neg"       ysize uout "add" moveto }
+ 	def @URSpot { xsize rout "add" ysize uout "add" moveto }
+ 
+ 	def @PDFStuff {
+ 	    "__sub(-"gap", "lout")            __sub(0, "dout") m "
+ 	    "__sub(__sub(-"gap", "lout"), "length") __sub(0, "dout") l"
+ 	    "__sub(0, "lout")       __sub(-"gap", "dout") m "
+ 	    "__sub(0, "lout") __sub(__sub(-"gap", "dout"), "length") l"
+ 	    "__add(__xsize,"rout")       __sub(-"gap", "dout") m "
+ 	    "__add(__xsize,"rout") __sub(__sub(-"gap", "dout"), "length") l"
+ 	    "__add(__add(__xsize,"rout"),"gap")           __sub(0, "dout") m "
+ 	    "__add(__add(__add(__xsize,"rout"),"gap"),"length") __sub(0, "dout") l"
+ 	    "      __sub(__sub(0, "lout"), "gap")            __add(__ysize, "uout") m "
+ 	    "__sub(__sub(__sub(0, "lout"), "gap"), "length") __add(__ysize, "uout") l"
+ 	    "__sub(0, "lout")       __add(__add(__ysize, "uout"), "gap") m "
+ 	    "__sub(0, "lout") __add(__add(__add(__ysize, "uout"), "gap"), "length") l"
+ 	    "      __add(__add(__xsize, "rout"), "gap")            __add(__ysize, "uout") m "
+ 	    "__add(__add(__add(__xsize, "rout"), "gap"), "length") __add(__ysize, "uout") l"
+ 	    "__add(__xsize, "rout")       __add(__add(__ysize, "uout"), "gap") m "
+ 	    "__add(__xsize, "rout") __add(__add(__add(__ysize, "uout"), "gap"), "length") l"
+ 
+ 	    linewidth "w S"
+ 	}
+ 
+ 	@BackEnd @Case {
+ 
+ 	    PostScript @Yield {
+ 		{
+ 		    @LLSpot @LeftStroke
+ 		    @LLSpot @DownStroke
+ 		    @LRSpot @DownStroke
+ 		    @LRSpot @RightStroke
+ 		    @ULSpot @LeftStroke
+ 		    @ULSpot @UpStroke
+ 		    @URSpot @RightStroke
+ 		    @URSpot @UpStroke
+ 	
+ 		    linewidth "setlinewidth stroke"
+ 		} @Graphic {}
+ 	    }
+ 
+ 	    PlainText @Yield ""
+ 
+ 	    PDF @Yield { @PDFStuff @Graphic {} }
+ 	}
+     }
+ 
+     ##########################################################################
+     #                                                                        #
+     #  @NumberMarker, @NumberOf, @PageMarker, @PageMark, @PageOf, @CrossLink #
+     #                                                                        #
+     ##########################################################################
+ 
+     export @Tag @Value
+     def @NumberMarker
+ 	named @Tag {}
+ 	named @Value { "??" }
+     {
+ 	@Null
+     }
+ 
+     def @NumberOf
+ 	right tag
+     {
+ 	@NumberMarker&&tag @Open { @Value }
+     }
+ 
+ 
+     export num rawnum @Tag
+     def @PageMarker
+ 	named @Tag {}
+ 	named num {}
+ 	named rawnum {}
+     {
+ 	@PageLabel num
+     }
+ 
+     def @PageMark
+ 	right tag
+     {
+ 	@Null & tag @LinkDest & @PageMarker&&preceding @Tagged tag
+     }
+ 
+     def @NoLinkPageMark
+ 	right tag
+     {
+ 	@PageMarker&&preceding @Tagged tag
+     }
+ 
+     def @PageOf
+ 	right tag
+     {
+ 	@PageMarker&&tag @Open { num }
+     }
+ 
+     def @CrossLink
+ 	left tag
+ 	named @Format right @Body { @CrossLinkFormat @Body }
+ 	right obj
+     {
+ 	@HContract @VContract {
+ 	    tag @LinkSource @Format obj
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Join and @Sep                                                         #
+     #                                                                         #
+     #  Join two objects together with @NumberSeparator, unless one is         #
+     #  empty in which case just return the other.                             #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Join left x right y
+     {
+         x @Case {
+ 	    {}   @Yield y
+ 	    else @Yield {
+ 	        y @Case {
+ 		    {}   @Yield x
+ 		    else @Yield { x{@NumberSeparator}y }
+ 	        }
+ 	    }
+         }
+     }
+ 
+     def @Sep left x right y
+     {
+ 	x @Case {
+ 	    {}   @Yield y
+ 	    else @Yield {
+ 		y @Case {
+ 		    {}   @Yield x
+ 		    else @Yield { x{@NumberSeparator} |2s y }
+ 		}
+ 	    }
+         }
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Miscellaneous.                                                         #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Heading       right x { ragged @Break @HeadingFont      @Font x }
+     def "^"		       { {} ^& {}				 }
+     def "&-"  left x   right y { x &0ch y				 }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @If @Not @And @Or @True                                                #
+     #                                                                         #
+     #  Used in databases to make optional fields format nicely.               #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @If
+ 	precedence 97
+ 	left x
+ 	right y
+     {
+ 	y @Case {
+ 	    {} @Yield @Null
+ 	    else @Yield { @Null{x} }
+ 	}
+     }
+ 
+     def @Not
+ 	precedence 100
+ 	right y
+     {
+ 	y @Case {
+ 	    {} @Yield "*"
+ 	    else @Yield ""
+ 	}
+     }
+ 
+     def @And
+ 	precedence 99
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	   {} @Yield {}
+ 	   else @Yield y
+ 	}
+     }
+ 
+     def @Or
+ 	precedence 98
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	   {} @Yield y
+ 	   else @Yield x
+ 	}
+     }
+ 
+     def @True { "*" }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Paragraphs.                                                            #
+     #                                                                         #
+     ###########################################################################
+ 
+     macro @PP	{ //@ParaGap @ParaIndent @Wide &{0i}	}
+     macro @LP	{ //{@ParaGap}			  	}
+     macro @LLP	{ //{1vx}				}
+     macro @DP	{ //{@DisplayGap}			}
+     macro @LOP	{ //{@ListOuterGap}			}
+     macro @NP	{ //{1.1b}				}
+     macro @CNP	{ // 3.2v @High //0io //{}		}
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Beginning and ending of aligned displays.                              #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @APlace            { @Galley }
+     def @EndAlignedPlace   { @Galley }
+     def @AlignedPlace      { @Galley }
+ 
+     def @BAligned into { @APlace&&preceding }
+     {
+ 	def @AlignedList { @AlignedPlace /1.1b @AlignedList }
+ 
+ 	//1.1b @AlignedList
+ 	//     @EndAlignedPlace
+     }
+ 
+     macro @BAD @BeginAlignedDisplays { // @APlace | @BAligned }
+     def   @EAD @EndAlignedDisplays force into { @EndAlignedPlace&&preceding } {}
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  New code for numbered displays that will cross section boundaries      #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag val
+     def @NumDispCounterMarker
+ 	named @Tag {}
+ 	named val {}
+     {
+ 	@Null
+     }
+ 
+     def @NumDispNum right tag
+     {
+ 	@NumDispCounterMarker&&tag @Open { @Next val }
+     }
+ 
+     def @NumDispCounterIncrement
+ 	right tag
+     {
+ 	@NumDispCounterMarker&&preceding @Tagged tag
+ 	@NumDispCounterMarker val { @NumDispNum tag }
+ 	@NumberMarker @Tag { tag } @Value { @NumDispNum tag }
+     }
+ 
+     def @NN
+     {
+ 	@NumDispCounterMarker&&preceding @Open { @DisplayNumStyle val }
+     }
+ 
+     def @Do
+         left x
+         right y
+     {
+         x @Case {
+             { No None } @Yield @Null
+             else        @Yield y
+         }
+     }
+ 
+     def @BeginDisplayCounter
+ 	left condition
+ 	right prefix
+     {
+ 	condition @Do @NumDispCounterMarker val { prefix @Join 0 }
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Galleys that carry displays to their places.                           #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @DispPlace { @Galley }
+ 
+     def @Disp into { @DispPlace&&preceding }
+ 	right x
+     {
+ 	x
+     }
+ 
+     def @NDisp into { @DispPlace&&preceding }
+ 	named @Tag {}
+ 	right x
+     {
+ 	@OneRow {
+ 	   @NumDispCounterIncrement @Tag
+ 	   @PageMark @Tag
+ 	   ^//
+ 	   @OneRow x
+ 	}
+     }
+ 
+     def @ADisp into { @AlignedPlace&&preceding }
+ 	right x
+     {
+ 	x
+     }
+ 
+     def @ANDisp into { @AlignedPlace&&preceding }
+ 	named @Tag {}
+ 	right x
+     {
+ 	@OneRow {
+ 	   @NumDispCounterIncrement @Tag
+ 	   @PageMark @Tag
+ 	   ^/
+ 	   @OneRow x
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Displays and raw displays.                                             #
+     #                                                                         #
+     ###########################################################################
+ 
+     macro @G  { |@DefaultIndent      }
+     macro @LG { |                    }
+     macro @IG { |@DisplayIndent      }
+     macro @CG { |0.5rt               }
+     macro @RG { |1.0rt               }
+     macro @QR { @DisplayIndent @Wide { |1rt @NN } }
+     macro @DX { @DispPlace           }
+     macro @DY { @Disp                }
+     macro @AX { @APlace              }
+     macro @AY { @ADisp               }
+     macro @NY { @NDisp               }
+     macro @MY { @ANDisp              }
+ 
+     macro @D	 @Display			{ @DP @G   @DX  |         @DP // @DY }
+     macro @LD	 @LeftDisplay			{ @DP @LG  @DX  |         @DP // @DY }
+     macro @ID	 @IndentedDisplay		{ @DP @IG  @DX  |         @DP // @DY }
+     macro @QD	 @QuotedDisplay			{ @DP @IG  @DX  @IG       @DP // @DY }
+     macro @CD	 @CentredDisplay
+ 		 @CenteredDisplay		{ @DP @CG  @DX  |         @DP // @DY }
+     macro	 @RightDisplay			{ @DP @RG  @DX  |         @DP // @DY }
+ 
+ 
+     macro @AD	 @AlignedDisplay		{ @DP @G   @AX  |         @DP // @AY }
+     macro @LAD	 @LeftAlignedDisplay		{ @DP @LG  @AX  |         @DP // @AY }
+     macro @IAD	 @IndentedAlignedDisplay	{ @DP @IG  @AX  |         @DP // @AY }
+     macro @QAD	 @QuotedAlignedDisplay		{ @DP @IG  @AX  @IG       @DP // @AY }
+     macro @CAD	 @CentredAlignedDisplay
+ 		 @CenteredAlignedDisplay	{ @DP @CG  @AX  |         @DP // @AY }
+     macro        @RightAlignedDisplay		{ @DP @RG  @AX  |         @DP // @AY }
+ 
+     macro @ND	 @NumberedDisplay		{ @DP @G   @DX  |1rt @NN  @DP // @NY }
+     macro @LND	 @LeftNumberedDisplay		{ @DP @LG  @DX  |1rt @NN  @DP // @NY }
+     macro @IND	 @IndentedNumberedDisplay	{ @DP @IG  @DX  |1rt @NN  @DP // @NY }
+     macro @QND	 @QuotedNumberedDisplay		{ @DP @IG  @DX  |1rt @QR  @DP // @NY }
+     macro @CND	 @CentredNumberedDisplay
+ 		 @CenteredNumberedDisplay	{ @DP @CG  @DX  |1rt @NN  @DP // @NY }
+     macro	 @RightNumberedDisplay		{ @DP @RG  @DX  |1rt @NN  @DP // @NY }
+ 
+     macro @AND	 @AlignedNumberedDisplay	{ @DP @G   @AX  |1rt @NN  @DP // @MY }
+     macro @LAND	 @LeftAlignedNumberedDisplay	{ @DP @LG  @AX  |1rt @NN  @DP // @MY }
+     macro @IAND	 @IndentedAlignedNumberedDisplay{ @DP @IG  @AX  |1rt @NN  @DP // @MY }
+     macro @QAND  @QuotedAlignedNumberedDisplay	{ @DP @IG  @AX  |1rt @QR  @DP // @MY }
+     macro @CAND	 @CentredAlignedNumberedDisplay
+ 		 @CenteredAlignedNumberedDisplay{ @DP @CG  @AX  |1rt @NN  @DP // @MY }
+     macro	 @RightAlignedNumberedDisplay	{ @DP @RG  @AX  |1rt @NN  @DP // @MY }
+ 
+ 
+     macro @RD	 @RawDisplay			{     @G   @DX  |         // @DY }
+     macro @RLD	 @RawLeftDisplay		{     @LG  @DX  |         // @DY }
+     macro @RID	 @RawIndentedDisplay		{     @IG  @DX  |         // @DY }
+     macro @RQD	 @RawQuotedDisplay		{     @IG  @DX  @IG |     // @DY }
+     macro @RCD	 @RawCentredDisplay
+ 		 @RawCenteredDisplay		{     @CG  @DX  | |       // @DY }
+     macro @RRD	 @RawRightDisplay		{     @RG  @DX  |         // @DY }
+ 
+ 
+     macro @RAD	 @RawAlignedDisplay		{     @G   @AX  |         // @AY }
+     macro @RLAD	 @RawLeftAlignedDisplay		{     @LG  @AX  |         // @AY }
+     macro @RIAD	 @RawIndentedAlignedDisplay	{     @IG  @AX  |         // @AY }
+     macro @RQAD	 @RawQuotedAlignedDisplay	{     @IG  @AX  @IG |     // @AY }
+     macro @RCAD	 @RawCentredAlignedDisplay
+ 		 @RawCenteredAlignedDisplay	{     @CG  @AX  |         // @AY }
+     macro @RRAD  @RawRightAlignedDisplay	{     @RG  @AX  |         // @AY }
+ 
+     macro @RND	 @RawNumberedDisplay		{     @G   @DX  |1rt @NN  // @NY }
+     macro @RLND	 @RawLeftNumberedDisplay	{     @LG  @DX  |1rt @NN  // @NY }
+     macro @RIND	 @RawIndentedNumberedDisplay	{     @IG  @DX  |1rt @NN  // @NY }
+     macro @RQND	 @RawQuotedNumberedDisplay	{     @IG  @DX  |1rt @QR  // @NY }
+     macro @RCND	 @RawCentredNumberedDisplay
+ 		 @RawCenteredNumberedDisplay	{     @CG  @DX  |1rt @NN  // @NY }
+     macro @RRND	 @RawRightNumberedDisplay	{     @RG  @DX  |1rt @NN  // @NY }
+ 
+     macro @RAND	 @RawAlignedNumberedDisplay	{     @G   @AX  |1rt @NN  // @MY }
+     macro @RLAND @RawLeftAlignedNumberedDisplay {     @LG  @AX  |1rt @NN  // @MY }
+     macro @RIAND @RawIndentedAlignedNumberedDisplay { @IG  @AX  |1rt @NN  // @MY }
+     macro @RQAND @RawQuotedAlignedNumberedDisplay {   @IG  @AX  |1rt @QR  // @MY }
+     macro @RCAND @RawCentredAlignedNumberedDisplay
+ 		 @RawCenteredAlignedNumberedDisplay { @CG  @AX  |1rt @NN  // @MY }
+     macro @RRAND @RawRightAlignedNumberedDisplay{     @RG  @AX  |1rt @NN  // @MY }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Lists and raw lists.                                                   #
+     #                                                                         #
+     ###########################################################################
+ 
+ 
+     def @ItemPlace          { @Galley }
+     def @InterruptItemPlace { @Galley }
+     def @NewPageItemPlace   { @Galley }
+     def @TagPlace           { @Galley }
+     def @EndListPlace       { @Galley }
+ 
+     def @RawList
+ 	named style right num { num              }
+ 	named type  right num { num              }
+ 	named gap             { @ListGap         }
+ 	named indent          { @ListIndent      }
+ 	named itemindent      { 0c		 }
+ 	named rightindent     { @ListRightIndent }
+ 	named labelwidth      { @ListLabelWidth  }
+ 	named start           { 1                }
+     {
+         def @MakeList right num
+ 	{
+ 	    def @NormalItem
+ 	    {
+ 	        |indent
+ 	        labelwidth @Wide {
+ 		    # @NumberMarker @Value {style num} {style num} &0io
+ 		    @NumberMarker @Value {num} {style type num} &0io
+ 		}
+ 	        |itemindent  @ItemPlace  |rightindent
+ 	        //gap  @MakeList @NotRevealed @Next num
+ 	    }
+ 
+ 	    def @InterruptItem
+ 	    {
+ 		@InterruptItemPlace
+ 		//gap  @MakeList @NotRevealed num
+ 	    }
+ 
+ 	    def @NewPageItem
+ 	    {
+ 		@NewPageItemPlace
+ 		//1.1b  @MakeList @NotRevealed num
+ 	    }
+ 
+ 	    @OneOf
+ 	    {
+ 		@NormalItem
+ 		@InterruptItem
+ 		@NewPageItem
+ 	    }
+ 	}
+ 
+ 	def @ListGalleyPlace { @Galley }
+ 
+ 	def @ListGalley into { @ListGalleyPlace&&preceding }
+ 	{
+ 	    @MakeList start // @EndListPlace
+ 	}
+ 
+ 	@ListGalleyPlace
+ 	//
+ 	@ListGalley
+     }
+ 
+     def listitem into { @ItemPlace&&preceding }
+ 	named @Tag {}
+ 	right x
+     {
+ 	   @NumberMarker&&preceding @Tagged @Tag
+ 	// x
+ 	// @PageMark @Tag   # weird placement, but @PageMark is definite now
+     }
+ 
+     def droplistitem into { @ItemPlace&&preceding }
+ 	named @Tag {}
+ 	right x
+     {
+ 	   @NumberMarker&&preceding @Tagged @Tag
+ 	// @PageMark @Tag
+ 	//1vx x
+     }
+ 
+     def tagitem into { @ItemPlace&&preceding }
+ 	named tag {}
+ 	right x
+     {
+ 	def sendtag into { @TagPlace&&preceding } { tag }
+ 
+ 	sendtag // x
+     }
+ 
+     def droptagitem into { @ItemPlace&&preceding }
+ 	named tag {}
+ 	right x
+     {
+ 	def sendtag into { @TagPlace&&preceding } { tag }
+ 
+ 	sendtag // //1vx x
+     }
+ 
+     def endlist force into { @EndListPlace&&preceding } {}
+ 
+     def listnewpage into { @NewPageItemPlace&&preceding } {}
+ 
+     def listinterruptitem into { @InterruptItemPlace&&preceding }
+ 	right x
+     {
+ 	x
+     }
+ 
+ 
+     macro @LI   @ListItem		{ // listitem			}
+     macro @LII  @ListInterruptItem	{ // listinterruptitem		}
+     macro @LNP  @ListNewPage		{ // listnewpage		}
+     macro @DLI  @DropListItem		{ // droplistitem		}
+     macro @TI   @TagItem		{ // tagitem tag		}
+     macro @DTI  @DropTagItem		{ // droptagitem tag		}
+     macro @REL  @RawEndList		{ // & endlist // 		}
+     macro @EL   @EndList		{ // & endlist @LOP		}
+ 
+ 
+     macro @RLL    @RawLeftList		{ @RawList style {}
+ 						   labelwidth { 0c }           }
+     macro @RIL    @RawIndentedList	{ @RawList style {}                    }
+     macro @RQL    @RawQuotedList	{ @RawList style {}
+ 						   rightindent {@DisplayIndent}}
+     macro @RCL    @RawCentredList	{ @RawList style {}
+ 						   labelwidth {0c}
+ 						   itemindent {0.5rt}          }
+     macro         @RawCenteredList	{ @RawCentredList                      }
+     macro @RNL    @RawNumberedList      { @RawList style { num.	             } }
+     macro @RPNL   @RawParenNumberedList { @RawList style { (num)	     } }
+     macro @RRL    @RawRomanList	        { @RawList type  { @Roman&&num }
+ 						   style { num.    } }
+     macro @RPRL   @RawParenRomanList    { @RawList type  { @Roman&&num }
+ 						   style { (num)   } }
+     macro @RUCRL  @RawUCRomanList       { @RawList type  { @UCRoman&&num }
+ 						   style { num.  } }
+     macro @RPUCRL @RawParenUCRomanList  { @RawList type  { @UCRoman&&num }
+ 						   style { (num) } }
+     macro @RAL    @RawAlphaList	        { @RawList type  { @Alpha&&num }
+ 						   style { num.    } }
+     macro @RPAL   @RawParenAlphaList    { @RawList type  { @Alpha&&num }
+ 						   style { (num)   } }
+     macro @RUCAL  @RawUCAlphaList       { @RawList type  { @UCAlpha&&num }
+ 						   style { num.  } }
+     macro @RPUCAL @RawParenUCAlphaList  { @RawList type  { @UCAlpha&&num }
+ 						   style { (num) } }
+     macro @RBL    @RawBulletList        { @RawList style { @Bullet	     } }
+     macro @RSL    @RawStarList	        { @RawList style { @Star	     } }
+     macro @RDL    @RawDashList	        { @RawList style { --	 	     } }
+     macro @RTL    @RawTaggedList        { @RawList type { @TagPlace         } }
+     macro @RWTL   @RawWideTaggedList    { @RawList type { @TagPlace         }
+ 					           labelwidth { @WideIndent  } }
+     macro @RVWTL  @RawVeryWideTaggedList{ @RawList type { @TagPlace         }
+ 					        labelwidth { @VeryWideIndent } }
+ 
+ 
+     macro @L     @List			{ @LOP @RawList			}
+     macro @LL    @LeftList		{ @LOP @RawLeftList		}
+     macro @IL    @IndentedList		{ @LOP @RawIndentedList		}
+     macro @QL    @QuotedList		{ @LOP @RawQuotedList		}
+     macro @CL    @CentredList		{ @LOP @RawCentredList		}
+     macro        @CenteredList		{ @LOP @RawCenteredList		}
+     macro @NL    @NumberedList		{ @LOP @RawNumberedList		}
+     macro @PNL   @ParenNumberedList	{ @LOP @RawParenNumberedList	}
+     macro @RL    @RomanList		{ @LOP @RawRomanList		}
+     macro @PRL   @ParenRomanList	{ @LOP @RawParenRomanList	}
+     macro @UCRL  @UCRomanList		{ @LOP @RawUCRomanList		}
+     macro @PUCRL @ParenUCRomanList	{ @LOP @RawParenUCRomanList	}
+     macro @AL    @AlphaList		{ @LOP @RawAlphaList		}
+     macro @PAL   @ParenAlphaList	{ @LOP @RawParenAlphaList	}
+     macro @UCAL  @UCAlphaList		{ @LOP @RawUCAlphaList		}
+     macro @PUCAL @ParenUCAlphaList	{ @LOP @RawParenUCAlphaList	}
+     macro @BL    @BulletList		{ @LOP @RawBulletList		}
+     macro @SL    @StarList		{ @LOP @RawStarList		}
+     macro @DL    @DashList		{ @LOP @RawDashList		}
+     macro @TL    @TaggedList		{ @LOP @RawTaggedList		}
+     macro @WTL   @WideTaggedList	{ @LOP @RawWideTaggedList	}
+     macro @VWTL  @VeryWideTaggedList	{ @LOP @RawVeryWideTaggedList	}
+ 
+ @End @BasicSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bsf.lpg
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bsf.lpg:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/bsf.lpg	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,139 ----
+ %%BeginResource: procset LoutBasicSetup
+ 
+ % width height linethickness louteuro -
+ % draw a Euro symbol of this width and height with this line thickness
+ /louteuro {
+   20 dict begin
+     /eurothick exch def
+     /euroheight exch def
+     /eurowidth exch def
+     /eurostrokewidth euroheight 0.8 mul def
+     /eurostep eurothick 60 cos mul 60 sin div def
+     /eurotheta 40 def
+ 
+     % llx lly width thickness louteurobox -
+     % draw angled box starting at (llx, lly) with given width and thickness
+     /louteurobox
+     {
+       /euroboxthick exch def
+       /euroboxwidth exch def
+       newpath moveto euroboxwidth 0 rlineto
+       eurostep euroboxthick rlineto
+       euroboxwidth neg 0 rlineto closepath fill
+     } def
+ 
+     % lower cross stroke
+     0 euroheight 2 div eurothick 1.5 mul sub
+     eurostrokewidth eurothick louteurobox
+ 
+     % upper cross stroke
+     0 euroheight 2 div eurothick 0.5 mul add
+     eurostrokewidth eurostep 2 mul add eurothick louteurobox
+ 
+     % circular part
+     /eurohctr eurowidth euroheight 2 div eurotheta cos mul sub def
+     /eurovctr euroheight 2 div def
+     newpath
+     eurohctr eurovctr eurovctr eurotheta 350 eurotheta sub arc
+     eurohctr eurovctr eurovctr eurothick sub 365 eurotheta sub eurotheta arcn
+     closepath fill
+   end
+ } def
+ 
+ % path for @FullWidthRule symbol
+ /LoutRule
+ { 0 0 moveto xsize 0 lineto
+ } def
+ 
+ % path for @Box symbol
+ /LoutBox
+ { 0 0 moveto xsize 0 lineto
+   xsize ysize lineto 0 ysize lineto
+   closepath
+ } def
+ 
+ % path for @CurveBox symbol
+ /LoutCurveBox
+ { xmark 0 moveto
+   xsize xmark sub xmark xmark 270 360 arc
+   xsize xmark sub ysize xmark sub xmark 0 90 arc
+   xmark ysize xmark sub xmark 90 180 arc
+   xmark xmark xmark 180 270 arc
+   closepath
+ } def
+ 
+ % path for @ShadowBox symbol
+ /LoutShadowBox
+ { xmark 2 mul 0 moveto xsize 0 lineto
+   xsize ysize xmark 2 mul sub lineto
+   xsize xmark sub ysize xmark 2 mul sub lineto
+   xsize xmark sub xmark lineto
+   xmark 2 mul xmark lineto
+   closepath
+ } def
+ 
+ % set up dictionary containing margin note data: parity LoutMargSet -
+ /LoutMargSet
+ { /LoutMargDict 12 dict def
+   LoutMargDict begin
+     /parity exch def
+     /matr matrix currentmatrix def
+     /rightx xsize def
+     /lefty ysize def   % highest allowable point for top of next left note
+     /righty ysize def  % highest allowable point for top of next right note
+     /max { 2 copy gt { pop } { exch pop } ifelse } def
+     /min { 2 copy lt { pop } { exch pop } ifelse } def
+   end
+ } def
+ 
+ %translate coordinate system for marginal notes:  type LoutMargShift -
+ % where type 0 is left margin, 1 is right margin, 2 is outer, 3 is inner
+ /LoutMargShift
+ { LoutMargDict begin
+ 
+     % y coordinate of top of note, in margin coords, before vertical adjust
+     0 ysize transform matr itransform exch pop
+ 
+     % decide whether left or right margin based on type and parity
+     exch [ 0 1 parity 1 parity sub ] exch get 0 eq
+     {
+       % left margin: adjust top of note downwards if overlaps previous note
+       lefty min
+ 
+       % bottom of note is new lefty position and also translate position
+       ysize sub dup /lefty exch def
+ 
+       % want right edge of note at coordinate zero
+       xsize neg exch
+     }
+     {
+       % right margin: adjust top of note downwards if overlaps previous note
+       righty min
+ 
+       % bottom of note is new righty position and also translate position
+       ysize sub dup /righty exch def
+ 
+       % want left edge of note at coordinate rightx
+       rightx exch
+     } ifelse
+ 
+     % stack now contains coord of bottom left corner in margin coordinates
+     matr setmatrix translate
+   end
+ } def
+ 
+ % create LoutPageDict with left, right, foot, top for @Place symbol users
+ /LoutPageSet
+ {
+   /LoutPageDict 5 dict def
+   LoutPageDict begin
+     /matr matrix currentmatrix def
+     /left 0 def
+     /right xsize def
+     /foot 0 def
+     /top ysize def
+   end
+ 
+ } def
+ 
+ %%EndResource


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/cprint
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/cprint:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/cprint	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,109 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for C and C++ program printing                            #
+ #                                                                             #
+ #   Version 3.0                                                               #
+ #   Jeffrey H. Kingston                                                       #
+ #   10 April 2000                                                             #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude line                                                           #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for this programming         #
+ #  language, and should not be touched.                                       #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { cprintf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Use clause                                                                #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @CPSetup
+   # pipe			{		} # pipe source through this
+   # numbered			{ No		} # No, Yes, or a line number
+   # style	     		{ fixed		} # fixed, varying, or symbol
+ 
+   # the following options apply when style is "fixed"
+ 
+   # fixedfont			{ Courier	} # font family
+   # fixedsize			{ -1.0p		} # font size
+   # fixedline			{ 1.0vx		} # line-space
+   # fixedtabin			{ 8		} # tab interval
+   # fixedtabout			{ 8s		} # tab width
+ 
+   # fixedidentifiers		{ Base		} # identifier face
+   # fixedkeywords		{ Base		} # keyword face
+   # fixedoperators		{ Base		} # operator face
+   # fixednumbers		{ Base		} # number face
+   # fixedstrings		{ Base		} # string face
+   # fixedcomments		{ Base		} # comment face
+   # fixedlinenumbers		{ Base		} # line numbers face
+ 
+   # fixedidentifiersformat	{ @Body		} # identifiers format
+   # fixedkeywordsformat		{ @Body		} # keywords format
+   # fixedoperatorsformat	{ @Body		} # operators format
+   # fixednumbersformat		{ @Body		} # numbers format
+   # fixedstringsformat		{ @Body		} # strings format
+   # fixedcommentsformat		{ @Body		} # comments format
+   # fixedlinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "varying"
+ 
+   # varyingfont			{		} # font family
+   # varyingsize			{ 1.0f		} # font size
+   # varyingline			{ 1.0vx		} # line-space
+   # varyingtabin		{ 8		} # tab interval
+   # varyingtabout		{ 3f		} # tab width
+ 
+   # varyingidentifiers		{ Slope		} # identifier face
+   # varyingkeywords		{ Bold		} # keyword face
+   # varyingoperators		{ Base		} # operator face
+   # varyingnumbers		{ Base		} # number face
+   # varyingstrings		{ Slope		} # string face
+   # varyingcomments		{ Base		} # comment face
+   # varyinglinenumbers		{ Base		} # line numbers face
+ 
+   # varyingidentifiersformat	{ @Body		} # identifiers format
+   # varyingkeywordsformat	{ @Body		} # keywords format
+   # varyingoperatorsformat	{ @Body		} # operators format
+   # varyingnumbersformat	{ @Body		} # numbers format
+   # varyingstringsformat	{ @Body		} # strings format
+   # varyingcommentsformat	{ @Body		} # comments format
+   # varyinglinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "symbol"
+ 
+   # symbolfont			{		} # font family
+   # symbolsize			{ 1.0f		} # font size
+   # symbolline			{ 1.0vx		} # line-space
+   # symboltabin			{ 8		} # tab interval
+   # symboltabout		{ 3f		} # tab width
+ 
+   # symbolidentifiers		{ Slope		} # identifier face
+   # symbolkeywords		{ Bold		} # keyword face
+   # symboloperators		{ Base		} # operator face
+   # symbolnumbers		{ Base		} # number face
+   # symbolstrings		{ Slope		} # string face
+   # symbolcomments		{ Base		} # comment face
+   # symbollinenumbers		{ Base		} # line numbers face
+ 
+   # symbolidentifiersformat	{ @Body		} # identifiers format
+   # symbolkeywordsformat	{ @Body		} # keywords format
+   # symboloperatorsformat	{ @Body		} # operators format
+   # symbolnumbersformat		{ @Body		} # numbers format
+   # symbolstringsformat		{ @Body		} # strings format
+   # symbolcommentsformat	{ @Body		} # comments format
+   # symbollinenumbersformat	{ @Body		} # line numbers format
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/cprintf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/cprintf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/cprintf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,390 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @CPSetup package for formatting C and C++ programs                    #
+ #                                                                             #
+ #  Version 3.0                                                                #
+ #  Jeffrey H. Kingston                                                        #
+ #  10 April 2000                                                              #
+ #                                                                             #
+ #  This package uses a filtered body parameter to convert program source      #
+ #  code into Lout source.  The filter program is prg2lout, which is           #
+ #  distributed with Lout and should be compiled and installed wherever        #
+ #  Lout itself is.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ export @CP
+ def @CPSetup
+     named pipe					{	}  # pipe through this
+     named numbered				{ No	}  # numbered lines?
+     named style
+ 	named @OrIfPlain left x right y
+ 	{ @BackEnd @Case { PlainText @Yield y else @Yield x } }
+ 						{ fixed }  # print style
+ 
+     # the following options apply when style is "fixed"
+     named fixedfont				{ Courier }# font family
+     named fixedsize				{ -1.0p	}  # font size
+     named fixedline				{ 1.0vx	}  # line-space
+     named fixedtabin				{ 8	}  # tab interval
+     named fixedtabout				{ 8s	}  # tab width
+ 
+     named fixedidentifiers			{ Base	}  # identifier face
+     named fixedkeywords				{ Base	}  # keyword face
+     named fixedoperators			{ Base	}  # operator face
+     named fixednumbers				{ Base	}  # number face
+     named fixedstrings				{ Base	}  # string face
+     named fixedcomments				{ Base	}  # comment face
+     named fixedlinenumbers			{ Base	}  # line numbers face
+ 
+     named fixedidentifiersformat right @Body	{ @Body	}  # identifier format
+     named fixedkeywordsformat right @Body	{ @Body	}  # keyword format
+     named fixedoperatorsformat right @Body	{ @Body	}  # operators format
+     named fixednumbersformat right @Body	{ @Body	}  # number format
+     named fixedstringsformat right @Body	{ @Body	}  # string format
+     named fixedcommentsformat right @Body	{ @Body	}  # comment format
+     named fixedlinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "varying"
+     named varyingfont				{	}  # font family
+     named varyingsize				{ 1.0f	}  # font size
+     named varyingline				{ 1.0vx	}  # line-space
+     named varyingtabin				{ 8	}  # tab interval
+     named varyingtabout				{ 3f	}  # tab width
+ 
+     named varyingidentifiers			{ Slope	}  # identifier face
+     named varyingkeywords			{ Bold	}  # keyword face
+     named varyingoperators			{ Base	}  # operator face
+     named varyingnumbers			{ Base	}  # number face
+     named varyingstrings			{ Slope	}  # string face
+     named varyingcomments			{ Base	}  # comment face
+     named varyinglinenumbers			{ Base	}  # line numbers face
+ 
+     named varyingidentifiersformat right @Body	{ @Body	}  # identifier format
+     named varyingkeywordsformat right @Body	{ @Body	}  # keyword format
+     named varyingoperatorsformat right @Body	{ @Body	}  # operators format
+     named varyingnumbersformat right @Body	{ @Body	}  # number format
+     named varyingstringsformat right @Body	{ @Body	}  # string format
+     named varyingcommentsformat right @Body	{ @Body	}  # comment format
+     named varyinglinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "symbol"
+     named symbolfont				{	}  # font family
+     named symbolsize				{ 1.0f	}  # font size
+     named symbolline				{ 1.0vx	}  # line-space
+     named symboltabin				{ 8	}  # tab interval
+     named symboltabout				{ 3f	}  # tab width
+ 
+     named symbolidentifiers			{ Slope	}  # identifier face
+     named symbolkeywords			{ Bold	}  # keyword face
+     named symboloperators			{ Base	}  # operator face
+     named symbolnumbers				{ Base	}  # number face
+     named symbolstrings				{ Slope	}  # string face
+     named symbolcomments			{ Base	}  # comment face
+     named symbollinenumbers			{ Base	}  # line numbers face
+ 
+     named symbolidentifiersformat right @Body	{ @Body	}  # identifier format
+     named symbolkeywordsformat right @Body	{ @Body	}  # keyword format
+     named symboloperatorsformat right @Body	{ @Body	}  # operators format
+     named symbolnumbersformat right @Body	{ @Body	}  # number format
+     named symbolstringsformat right @Body	{ @Body	}  # string format
+     named symbolcommentsformat right @Body	{ @Body	}  # comment format
+     named symbollinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+ @Begin
+ 
+     export
+     
+ 	@PI @PK @PO @PN @PS @PC @PL @PA @PM @PD
+ 	@A "$>"
+ 
+     def @CP
+ 	named style        { style         }  # style
+ 	named numbered	   { numbered	   }  # want numbered lines?
+ 	named pipe         { pipe          }  # pipe through this first
+ 	named font         { dft           }  # font family
+ 	named size         { dft           }  # font size
+ 	named line         { dft           }  # line-space
+ 	named tabin        { dft           }  # tab interval
+ 	named tabout       { dft           }  # tab width
+ 	named identifiers  { dft           }  # ident. font
+ 	named keywords     { dft           }  # keyword font
+ 	named operators    { dft           }  # operator font
+ 	named numbers      { dft           }  # number font
+ 	named strings      { dft           }  # string font
+ 	named comments     { dft           }  # comment font
+ 	named linenumbers  { dft           }  # line numbers font
+ 	body @Body			      # filtered, see below
+     @Begin
+ 
+ 	def @Test	# returns x unless x is dft
+ 	    left x
+ 	    named iffixed {}
+ 	    named ifvarying {}
+ 	    named ifsymbol {}
+ 	{
+ 	    x @Case {
+ 		dft @Yield {
+ 		    style @Case {
+ 			fixed   @Yield { iffixed   }
+ 			varying @Yield { ifvarying }
+ 			symbol  @Yield { ifsymbol  }
+ 		    }
+ 		}
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @Else	# returns x, or y if x is dft
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		dft  @Yield y
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitTab
+ 	{
+ 	  tabin @Test
+ 	      iffixed   { fixedtabin   }
+ 	      ifvarying { varyingtabin }
+ 	      ifsymbol  { symboltabin  }
+ 	}
+ 
+ 
+ 	def @InitTabWidth
+ 	{
+ 	  tabout @Test
+ 	      iffixed   { fixedtabout   }
+ 	      ifvarying { varyingtabout }
+ 	      ifsymbol  { symboltabout  }
+ 	}
+ 
+ 
+ 	def @Filter
+ 	{
+ 	    def wantnumbered
+ 	    {
+ 		numbered @Case {
+ 		  { No no }	@Yield ""
+ 		  { Yes yes }	@Yield "-L"
+ 		  else          @Yield { "-L"numbered }
+ 		}
+ 	    }
+ 
+ 	    pipe @Case {
+ 		"" @Yield {
+ 	    	    "prg2lout -r -lC" wantnumbered -i{@FilterIn}
+ 		    -o{@FilterOut} -e{@FilterErr}
+ 		    -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 		else @Yield {
+ 	    	    "cat" @FilterIn "|" pipe "|"
+ 		    "prg2lout -r -lC" wantnumbered -o{@FilterOut}
+ 		    -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitFontFamily
+ 	{
+ 	  font @Test
+ 	      iffixed   { fixedfont   }
+ 	      ifvarying { varyingfont }
+ 	      ifsymbol  { symbolfont  }
+ 	}
+ 
+ 
+ 	def @InitSize
+ 	{
+ 	  size @Test
+ 	      iffixed   { fixedsize   }
+ 	      ifvarying { varyingsize }
+ 	      ifsymbol  { symbolsize  }
+ 	}
+ 
+ 
+ 	def @InitLine
+ 	{
+ 	  line @Test
+ 	      iffixed   { fixedline   }
+ 	      ifvarying { varyingline }
+ 	      ifsymbol  { symbolline  }
+ 	}
+ 
+ 
+ 	def @PI		# for formatting identifiers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedidentifiersformat {
+ 		    { identifiers @Else fixedidentifiers } @Font x
+ 		}
+ 		varying @Yield varyingidentifiersformat {
+ 		    { identifiers @Else varyingidentifiers } @Font x
+ 		}
+ 		symbol @Yield symbolidentifiersformat {
+ 		    { identifiers @Else symbolidentifiers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PK		# for formatting keywords
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedkeywordsformat {
+ 		    { keywords @Else fixedkeywords } @Font x
+ 		}
+ 		varying @Yield varyingkeywordsformat {
+ 		    { keywords @Else varyingkeywords } @Font x
+ 		}
+ 		symbol @Yield symbolkeywordsformat {
+ 		    { keywords @Else symbolkeywords } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PO		# for formatting operators
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedoperatorsformat {
+ 		    { operators @Else fixedoperators } @Font x
+ 		}
+ 		varying @Yield varyingoperatorsformat {
+ 		    { operators @Else varyingoperators } @Font x
+ 		}
+ 		symbol @Yield symboloperatorsformat {
+ 		    { operators @Else symboloperators } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PN		# for formatting numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixednumbersformat {
+ 		    { numbers @Else fixednumbers } @Font x
+ 		}
+ 		varying @Yield varyingnumbersformat {
+ 		    { numbers @Else varyingnumbers } @Font x
+ 		}
+ 		symbol @Yield symbolnumbersformat {
+ 		    { numbers @Else symbolnumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PS		# for formatting strings
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedstringsformat {
+ 		    { strings @Else fixedstrings } @Font x
+ 		}
+ 		varying @Yield varyingstringsformat {
+ 		    { strings @Else varyingstrings } @Font x
+ 		}
+ 		symbol @Yield symbolstringsformat {
+ 		    { strings @Else symbolstrings } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PC		# for formatting comments
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedcommentsformat {
+ 		    { comments @Else fixedcomments } @Font x
+ 		}
+ 		varying @Yield varyingcommentsformat {
+ 		    { comments @Else varyingcomments } @Font x
+ 		}
+ 		symbol @Yield symbolcommentsformat {
+ 		    { comments @Else symbolcomments } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PL		# for formatting line numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedlinenumbersformat {
+ 		    { linenumbers @Else fixedlinenumbers } @Font x
+ 		}
+ 		varying @Yield varyinglinenumbersformat {
+ 		    { linenumbers @Else varyinglinenumbers } @Font x
+ 		}
+ 		symbol @Yield symbollinenumbersformat {
+ 		    { linenumbers @Else symbollinenumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PA		# for formatting asterisks
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "*"
+ 		else @Yield { "0.5w" @VShift "*" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PM		# for formatting minus signs
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "-"
+ 		else @Yield style @Case {
+ 		    fixed   @Yield "-"
+ 		    else    @Yield { { Symbol Base } @Font @Char "minus" }
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PD		# for formatting dots, if wanted larger
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "."
+ 		else @Yield { "1.4f" @Font "+0.04f" @VShift "." &"0.05f" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @A		# get characters from the Adobe Symbol font
+ 	    left sym
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		symbol	@Yield { { Symbol Base } @Font @Char sym }
+ 		else	@Yield { x			}
+ 	    }
+ 	}
+ 
+ 
+ 	macro "$>" { {} & }
+ 
+ 
+ 	{ @InitFontFamily Base @InitSize } @Font
+ 	{ @InitLine lines nohyphen } @Break @Body
+ 
+     @End @CP
+ 
+ @End @CPSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diag
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diag:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diag	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,479 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for diagram printing                                      #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @SysInclude { diagf } line                                             #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for diagrams, and should     #
+ #  not be touched.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { diagf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @DiagSetup @Use clause                                                 #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @DiagSetup
+   # save		{ no			}
+   # maxlabels		{ 200			}
+   # title    		{ (none)		}
+   # titleformat 	{ Italic @Font @Title //0.7f ||0.35f @Body }
+ 
+   #############################################################################
+   #                                                                           #
+   #  Node options                                                             #
+   #                                                                           #
+   #############################################################################
+ 
+   # outline		{ box			}
+   # margin		{ 0.6f			}
+   # shadow		{ 0.4f			}
+   # sides		{ 3			}
+   # angle		{ "dup 180 exch div"	}  # 180d / sides
+   # translate		{			}
+   # outlinestyle	{ solid			}
+   # outlinedashlength	{ 0.2f			}
+   # outlinewidth	{ 0.02f			}
+   # paint		{ nopaint		}
+   # font		{			}
+   # break		{			}
+   # format		{ @Body			}
+   # valign		{ ctr			}
+   # vsize		{			}
+   # vindent		{ ctr			}
+   # vstrut		{ no			}
+   # vmargin		{			}
+   # topmargin		{			}
+   # footmargin		{			}
+   # halign		{ ctr			}
+   # hsize              	{			}
+   # hindent		{ ctr			}
+   # hstrut		{ no			}
+   # hmargin		{			}
+   # leftmargin		{			}
+   # rightmargin		{			}
+   # nodelabel		{			}
+   # nodelabelmargin	{ 0.2f			}
+   # nodelabelfont	{ "-2p"			}
+   # nodelabelbreak	{ ragged nohyphen	}
+   # nodelabelformat	{ @Body			}
+   # nodelabelpos	{			}
+   # nodelabelprox	{ outside		}
+   # nodelabelangle	{ horizontal		}
+   # nodelabelctr	{ no			}
+   # nodelabeladjust	{ 0 0			}
+   # alabel		{			}
+   # alabelmargin	{			}
+   # alabelfont		{			}
+   # alabelbreak		{			}
+   # alabelformat	{			}
+   # alabelpos		{ NE			}
+   # alabelprox		{			}
+   # alabelangle		{			}
+   # alabelctr		{ 			}
+   # alabeladjust	{			}
+   # blabel		{			}
+   # blabelmargin	{			}
+   # blabelfont		{			}
+   # blabelbreak		{			}
+   # blabelformat	{			}
+   # blabelpos		{ NW			}
+   # blabelprox		{			}
+   # blabelangle		{			}
+   # blabelctr		{ 			}
+   # blabeladjust	{			}
+   # clabel		{			}
+   # clabelmargin	{			}
+   # clabelfont		{			}
+   # clabelbreak		{			}
+   # clabelformat	{			}
+   # clabelpos		{ SW			}
+   # clabelprox		{			}
+   # clabelangle		{			}
+   # clabelctr		{ 			}
+   # clabeladjust	{			}
+   # dlabel		{			}
+   # dlabelmargin	{			}
+   # dlabelfont		{			}
+   # dlabelbreak		{			}
+   # dlabelformat	{			}
+   # dlabelpos		{ SE			}
+   # dlabelprox		{			}
+   # dlabelangle		{			}
+   # dlabelctr		{ 			}
+   # dlabeladjust	{			}
+ 
+   #############################################################################
+   #                                                                           #
+   #  @ANode options                                                           #
+   #                                                                           #
+   #############################################################################
+ 
+   # aoutline		{ box			}
+   # amargin		{ 0.6f			}
+   # ashadow		{ 0.4f			}
+   # asides		{ 3			}
+   # aangle		{ "dup 180 exch div"	}  # 180d / sides
+   # atranslate		{			}
+   # aoutlinestyle	{ solid			}
+   # aoutlinedashlength	{ 0.2f			}
+   # aoutlinewidth	{ 0.02f			}
+   # apaint		{ nopaint		}
+   # afont		{			}
+   # abreak		{			}
+   # aformat		{ @Body			}
+   # avalign		{ ctr			}
+   # avsize		{			}
+   # avindent		{ ctr			}
+   # avstrut		{ no			}
+   # avmargin		{			}
+   # atopmargin		{			}
+   # afootmargin		{			}
+   # ahalign		{ ctr			}
+   # ahsize              {			}
+   # ahindent		{ ctr			}
+   # ahstrut		{ no			}
+   # ahmargin		{			}
+   # aleftmargin		{			}
+   # arightmargin	{			}
+   # anodelabel		{			}
+   # anodelabelmargin	{ 0.2f			}
+   # anodelabelfont	{ "-2p"			}
+   # anodelabelbreak	{ ragged nohyphen	}
+   # anodelabelformat	{ @Body			}
+   # anodelabelpos	{			}
+   # anodelabelprox	{ outside		}
+   # anodelabelangle	{ horizontal		}
+   # anodelabelctr	{ no			}
+   # anodelabeladjust	{ 0 0			}
+   # aalabel		{			}
+   # aalabelmargin	{			}
+   # aalabelfont		{			}
+   # aalabelbreak	{			}
+   # aalabelformat	{			}
+   # aalabelpos		{ NE			}
+   # aalabelprox		{			}
+   # aalabelangle	{			}
+   # aalabelctr		{ 			}
+   # aalabeladjust	{			}
+   # ablabel		{			}
+   # ablabelmargin	{			}
+   # ablabelfont		{			}
+   # ablabelbreak	{			}
+   # ablabelformat	{			}
+   # ablabelpos		{ NW			}
+   # ablabelprox		{			}
+   # ablabelangle	{			}
+   # ablabelctr		{ 			}
+   # ablabeladjust	{			}
+   # aclabel		{			}
+   # aclabelmargin	{			}
+   # aclabelfont		{			}
+   # aclabelbreak	{			}
+   # aclabelformat	{			}
+   # aclabelpos		{ SW			}
+   # aclabelprox		{			}
+   # aclabelangle	{			}
+   # aclabelctr		{ 			}
+   # aclabeladjust	{			}
+   # adlabel		{			}
+   # adlabelmargin	{			}
+   # adlabelfont		{			}
+   # adlabelbreak	{			}
+   # adlabelformat	{			}
+   # adlabelpos		{ SE			}
+   # adlabelprox		{			}
+   # adlabelangle	{			}
+   # adlabelctr		{ 			}
+   # adlabeladjust	{			}
+ 
+   #############################################################################
+   #                                                                           #
+   #  @BNode options                                                           #
+   #                                                                           #
+   #############################################################################
+ 
+   # boutline		{ box			}
+   # bmargin		{ 0.6f			}
+   # bshadow		{ 0.4f			}
+   # bsides		{ 3			}
+   # bangle		{ "dup 180 exch div"	}  # 180d / sides
+   # btranslate		{			}
+   # boutlinestyle	{ solid			}
+   # boutlinedashlength	{ 0.2f			}
+   # boutlinewidth	{ 0.02f			}
+   # bpaint		{ nopaint		}
+   # bfont		{			}
+   # bbreak		{			}
+   # bformat		{ @Body			}
+   # bvalign		{ ctr			}
+   # bvsize		{			}
+   # bvindent		{ ctr			}
+   # bvstrut		{ no			}
+   # bvmargin		{			}
+   # btopmargin		{			}
+   # bfootmargin		{			}
+   # bhalign		{ ctr			}
+   # bhsize              {			}
+   # bhindent		{ ctr			}
+   # bhstrut		{ no			}
+   # bhmargin		{			}
+   # bleftmargin		{			}
+   # brightmargin	{			}
+   # bnodelabel		{			}
+   # bnodelabelmargin	{ 0.2f			}
+   # bnodelabelfont	{ "-2p"			}
+   # bnodelabelbreak	{ ragged nohyphen	}
+   # bnodelabelformat	{ @Body			}
+   # bnodelabelpos	{			}
+   # bnodelabelprox	{ outside		}
+   # bnodelabelangle	{ horizontal		}
+   # bnodelabelctr	{ no			}
+   # bnodelabeladjust	{ 0 0			}
+   # balabel		{			}
+   # balabelmargin	{			}
+   # balabelfont		{			}
+   # balabelbreak	{			}
+   # balabelformat	{			}
+   # balabelpos		{ NE			}
+   # balabelprox		{			}
+   # balabelangle	{			}
+   # balabelctr		{ 			}
+   # balabeladjust	{			}
+   # bblabel		{			}
+   # bblabelmargin	{			}
+   # bblabelfont		{			}
+   # bblabelbreak	{			}
+   # bblabelformat	{			}
+   # bblabelpos		{ NW			}
+   # bblabelprox		{			}
+   # bblabelangle	{			}
+   # bblabelctr		{ 			}
+   # bblabeladjust	{			}
+   # bclabel		{			}
+   # bclabelmargin	{			}
+   # bclabelfont		{			}
+   # bclabelbreak	{			}
+   # bclabelformat	{			}
+   # bclabelpos		{ SW			}
+   # bclabelprox		{			}
+   # bclabelangle	{			}
+   # bclabelctr		{ 			}
+   # bclabeladjust	{			}
+   # bdlabel		{			}
+   # bdlabelmargin	{			}
+   # bdlabelfont		{			}
+   # bdlabelbreak	{			}
+   # bdlabelformat	{			}
+   # bdlabelpos		{ SE			}
+   # bdlabelprox		{			}
+   # bdlabelangle	{			}
+   # bdlabelctr		{ 			}
+   # bdlabeladjust	{			}
+ 
+   #############################################################################
+   #                                                                           #
+   #  @CNode options                                                           #
+   #                                                                           #
+   #############################################################################
+ 
+   # coutline		{ box			}
+   # cmargin		{ 0.6f			}
+   # cshadow		{ 0.4f			}
+   # csides		{ 3			}
+   # cangle		{ "dup 180 exch div"	}  # 180d / sides
+   # ctranslate		{			}
+   # coutlinestyle	{ solid			}
+   # coutlinedashlength	{ 0.2f			}
+   # coutlinewidth	{ 0.02f			}
+   # cpaint		{ nopaint		}
+   # cfont		{			}
+   # cbreak		{			}
+   # cformat		{ @Body			}
+   # cvalign		{ ctr			}
+   # cvsize		{			}
+   # cvindent		{ ctr			}
+   # cvstrut		{ no			}
+   # cvmargin		{			}
+   # ctopmargin		{			}
+   # cfootmargin		{			}
+   # chalign		{ ctr			}
+   # chsize              {			}
+   # chindent		{ ctr			}
+   # chstrut		{ no			}
+   # chmargin		{			}
+   # cleftmargin		{			}
+   # crightmargin	{			}
+   # cnodelabel		{			}
+   # cnodelabelmargin	{ 0.2f			}
+   # cnodelabelfont	{ "-2p"			}
+   # cnodelabelbreak	{ ragged nohyphen	}
+   # cnodelabelformat	{ @Body			}
+   # cnodelabelpos	{			}
+   # cnodelabelprox	{ outside		}
+   # cnodelabelangle	{ horizontal		}
+   # cnodelabelctr	{ no			}
+   # cnodelabeladjust	{ 0 0			}
+   # calabel		{			}
+   # calabelmargin	{			}
+   # calabelfont		{			}
+   # calabelbreak	{			}
+   # calabelformat	{			}
+   # calabelpos		{ NE			}
+   # calabelprox		{			}
+   # calabelangle	{			}
+   # calabelctr		{ 			}
+   # calabeladjust	{			}
+   # cblabel		{			}
+   # cblabelmargin	{			}
+   # cblabelfont		{			}
+   # cblabelbreak	{			}
+   # cblabelformat	{			}
+   # cblabelpos		{ NW			}
+   # cblabelprox		{			}
+   # cblabelangle	{			}
+   # cblabelctr		{ 			}
+   # cblabeladjust	{			}
+   # cclabel		{			}
+   # cclabelmargin	{			}
+   # cclabelfont		{			}
+   # cclabelbreak	{			}
+   # cclabelformat	{			}
+   # cclabelpos		{ SW			}
+   # cclabelprox		{			}
+   # cclabelangle	{			}
+   # cclabelctr		{ 			}
+   # cclabeladjust	{			}
+   # cdlabel		{			}
+   # cdlabelmargin	{			}
+   # cdlabelfont		{			}
+   # cdlabelbreak	{			}
+   # cdlabelformat	{			}
+   # cdlabelpos		{ SE			}
+   # cdlabelprox		{			}
+   # cdlabelangle	{			}
+   # cdlabelctr		{ 			}
+   # cdlabeladjust	{			}
+ 
+   #############################################################################
+   #                                                                           #
+   #  Link options                                                             #
+   #                                                                           #
+   #############################################################################
+ 
+   # path		{ line			}
+   # from		{ 0, 0			}
+   # to			{ 1, 1			}
+   # bias		{ 2.0f			}
+   # fbias		{ 2.0f			}
+   # tbias		{ 2.0f			}
+   # radius		{ 1.0f			}
+   # xindent		{ 0.8f			}
+   # zindent		{ 0.8f			}
+   # pathstyle		{ solid			}
+   # pathdashlength	{ 0.2f			}
+   # pathwidth		{ 0.02f			}
+   # pathgap		{ 0.04f			}
+   # arrow		{ no			}
+   # arrowstyle		{ solid			}
+   # arrowwidth		{ 0.45f			}
+   # arrowlength		{ 0.6f			}
+   # linklabel		{			}
+   # linklabelmargin	{ 0.2f			}
+   # linklabelfont	{ "-2p"			}
+   # linklabelbreak	{ ragged nohyphen	}
+   # linklabelformat	{ @Body			}
+   # linklabelpos	{			}
+   # linklabelprox	{ above			}
+   # linklabelangle	{ horizontal		}
+   # linklabelctr	{ no			}
+   # linklabeladjust	{ 0 0			}
+   # xlabel		{			}
+   # xlabelmargin	{			}
+   # xlabelfont		{			}
+   # xlabelbreak		{			}
+   # xlabelformat	{			}
+   # xlabelpos		{ LFROM			}
+   # xlabelprox		{			}
+   # xlabelangle		{			}
+   # xlabelctr		{			}
+   # xlabeladjust	{			}
+   # ylabel		{			}
+   # ylabelmargin	{			}
+   # ylabelfont		{			}
+   # ylabelbreak		{			}
+   # ylabelformat	{			}
+   # ylabelpos		{ LMID			}
+   # ylabelprox		{			}
+   # ylabelangle		{			}
+   # ylabelctr		{ yes			}
+   # ylabeladjust	{			}
+   # zlabel		{			}
+   # zlabelmargin	{			}
+   # zlabelfont		{			}
+   # zlabelbreak		{			}
+   # zlabelformat	{			}
+   # zlabelpos		{ LTO			}
+   # zlabelprox		{			}
+   # zlabelangle		{			}
+   # zlabelctr		{			}
+   # zlabeladjust	{			}
+   # fromlabel		{			}
+   # fromlabelmargin	{ 0f			}
+   # fromlabelfont	{ "-2p"			}
+   # fromlabelbreak	{ ragged nohyphen	}
+   # fromlabelformat	{ @Body			}
+   # fromlabelpos	{ FROM			}
+   # fromlabelprox	{ E			}
+   # fromlabelangle	{ antiparallel		}
+   # fromlabelctr	{ no			}
+   # fromlabeladjust	{ 0 0			}
+   # tolabel		{			}
+   # tolabelmargin	{ 0f			}
+   # tolabelfont		{ "-2p"			}
+   # tolabelbreak	{ ragged nohyphen	}
+   # tolabelformat	{ @Body			}
+   # tolabelpos		{ TO			}
+   # tolabelprox		{ E			}
+   # tolabelangle	{ parallel		}
+   # tolabelctr		{ no			}
+   # tolabeladjust	{ 0 0			}
+ 
+   #############################################################################
+   #                                                                           #
+   #  Tree options                                                             #
+   #                                                                           #
+   #############################################################################
+ 
+   # treehsep		{ 0.5f			}
+   # treevsep		{ 0.5f			}
+   # treehindent		{ ctr			}
+   # treevindent		{ ctr			}
+ 
+   #############################################################################
+   #                                                                           #
+   #  Syntax diagram options                                                   #
+   #                                                                           #
+   #############################################################################
+ 
+   # syntaxgap  		{ 0.35f			}
+   # syntaxbias		{ 1.0f                  }
+   # syntaxradius	{ 0.3f                  }
+ 
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diagf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diagf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diagf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,6459 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @Diag package for drawing diagrams                                    #
+ #  Version 1.1 (February 2000)                                                #
+ #  Jeffrey H. Kingston                                                        #
+ #                                                                             #
+ #  Version 1.0 (July 1996)                                                    #
+ #  Based on Version 2.0 of the @Fig package (Jeffrey H. Kingston, Dec 1992).  #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysPrependGraphic { diagf.lpg }
+ @SysInclude { diagf.etc }
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @DiagSetup symbol                                                          #
+ #                                                                             #
+ ###############################################################################
+ 
+ export @Diag @SyntaxDiag
+ def @DiagSetup
+     named save		             	{ no	           	}
+     named maxlabels             	{ 200           	}
+     named title                         { "--titledft--"	}
+     named titleformat
+ 	left @Title
+ 	right @Body
+ 				{ Italic @Font @Title //0.7f ||0.35f @Body }
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Node options of @DiagSetup                                            #
+     #                                                                         #
+     ###########################################################################
+ 
+     import @Geometry named outline
+ 	named margin {}
+ 	named shadow {}
+ 	named sides {}
+ 	named angle {}
+ 					{ box			}
+     named margin			{ 0.6f          	}
+     import @Geometry named shadow	{ 0.4f          	}
+     import @Geometry named sides	{ 3			}
+     import @Geometry named angle	{ "dup 180 exch div"	}
+     named translate			{			}
+     named outlinestyle
+ 	named solid   { "/ldiagsolid"   }
+ 	named dashed  { "/ldiagdashed"  }
+ 	named cdashed { "/ldiagcdashed" }
+ 	named dotted  { "/ldiagdotted"  }
+ 	named noline  { "/ldiagnoline"  }
+ 					{ solid         	}
+     import @Geometry named outlinedashlength	{ 0.2f		}
+     import @Geometry named outlinewidth
+ 	named thin   { 0.04 ft }
+ 	named medium { 0.08 ft }
+ 	named thick  { 0.12 ft }
+ 					{ thin	         	}
+     named paint                 	{ nopaint       	}
+     named font				{			}
+     named break				{			}
+     named format right @Body    	{ @Body         	}
+ 
+     named valign			{ ctr           	}
+     named vsize                 	{               	}
+     named vindent			{ ctr           	}
+     named vstrut
+ 	named no  { 0.0f }
+ 	named yes { 1.0f }
+ 					{ no            	}
+     named vmargin               	{               	}
+     named topmargin             	{               	}
+     named footmargin            	{               	}
+ 
+     named halign			{ ctr           	}
+     named hsize                 	{               	}
+     named hindent			{ ctr           	}
+     named hstrut
+ 	named no  { 0.0f }
+ 	named yes { 1.0f }
+ 					{ no            	}
+     named hmargin               	{               	}
+     named leftmargin            	{               	}
+     named rightmargin           	{               	}
+ 
+     named nodelabel			{			}
+     named nodelabelmargin		{ 0.2f			}
+     named nodelabelfont			{ -2p			}
+     named nodelabelbreak		{ ragged nohyphen	}
+     named nodelabelformat right @Body	{ @Body			}
+     import @Geometry named nodelabelpos	{ 			}
+     named nodelabelprox			{ outside		}
+     import @Geometry named nodelabelangle  { horizontal		}
+     named nodelabelctr			{ no			}
+     import @Geometry named nodelabeladjust { 0 0		}
+ 
+     named alabel			{			}
+     named alabelmargin			{ 			}
+     named alabelfont			{ 			}
+     named alabelbreak			{ 			}
+     named alabelformat right @Body	{ 			}
+     import @Geometry named alabelpos	{ NE			}
+     named alabelprox			{ 			}
+     import @Geometry named alabelangle	{ 			}
+     named alabelctr			{ 			}
+     import @Geometry named alabeladjust	{ 			}
+ 
+     named blabel			{			}
+     named blabelmargin			{ 			}
+     named blabelfont			{ 			}
+     named blabelbreak			{ 			}
+     named blabelformat right @Body	{ 			}
+     import @Geometry named blabelpos	{ NW			}
+     named blabelprox			{ 			}
+     import @Geometry named blabelangle	{ 			}
+     named blabelctr			{ 			}
+     import @Geometry named blabeladjust	{ 			}
+ 
+     named clabel			{			}
+     named clabelmargin			{ 			}
+     named clabelfont			{ 			}
+     named clabelbreak			{ 			}
+     named clabelformat right @Body	{ 			}
+     import @Geometry named clabelpos	{ SW			}
+     named clabelprox			{ 			}
+     import @Geometry named clabelangle	{ 			}
+     named clabelctr			{ 			}
+     import @Geometry named clabeladjust	{ 			}
+ 
+     named dlabel			{			}
+     named dlabelmargin			{ 			}
+     named dlabelfont			{ 			}
+     named dlabelbreak			{ 			}
+     named dlabelformat right @Body	{ 			}
+     import @Geometry named dlabelpos	{ SE			}
+     named dlabelprox			{ 			}
+     import @Geometry named dlabelangle	{ 			}
+     named dlabelctr			{ 			}
+     import @Geometry named dlabeladjust	{ 			}
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @ANode options of @DiagSetup                                           #
+     #                                                                         #
+     ###########################################################################
+ 
+     import @Geometry named aoutline
+ 	named margin {}
+ 	named shadow {}
+ 	named sides {}
+ 	named angle {}
+ 					{ box			}
+     named amargin			{ 0.6f          	}
+     import @Geometry named ashadow	{ 0.4f          	}
+     import @Geometry named asides	{ 3			}
+     import @Geometry named aangle	{ "dup 180 exch div"	}
+     named atranslate			{			}
+     named aoutlinestyle
+ 	named solid   { "/ldiagsolid"   }
+ 	named dashed  { "/ldiagdashed"  }
+ 	named cdashed { "/ldiagcdashed" }
+ 	named dotted  { "/ldiagdotted"  }
+ 	named noline  { "/ldiagnoline"  }
+ 					{ solid         	}
+     import @Geometry named aoutlinedashlength	{ 0.2f		}
+     import @Geometry named aoutlinewidth
+ 	named thin   { 0.04 ft }
+ 	named medium { 0.08 ft }
+ 	named thick  { 0.12 ft }
+ 					{ thin	         	}
+     named apaint                 	{ nopaint       	}
+     named afont				{			}
+     named abreak			{			}
+     named aformat right @Body    	{ @Body         	}
+ 
+     named avalign			{ ctr           	}
+     named avsize                 	{               	}
+     named avindent			{ ctr           	}
+     named avstrut
+ 	named no  { 0.0f }
+ 	named yes { 1.0f }
+ 					{ no            	}
+     named avmargin               	{               	}
+     named atopmargin             	{               	}
+     named afootmargin            	{               	}
+ 
+     named ahalign			{ ctr           	}
+     named ahsize                 	{               	}
+     named ahindent			{ ctr           	}
+     named ahstrut
+ 	named no  { 0.0f }
+ 	named yes { 1.0f }
+ 					{ no            	}
+     named ahmargin               	{               	}
+     named aleftmargin            	{               	}
+     named arightmargin           	{               	}
+ 
+     named anodelabel			{			}
+     named anodelabelmargin		{ 0.2f			}
+     named anodelabelfont		{ -2p			}
+     named anodelabelbreak		{ ragged nohyphen	}
+     named anodelabelformat right @Body	{ @Body			}
+     import @Geometry named anodelabelpos{ 			}
+     named anodelabelprox		{ outside		}
+     import @Geometry named anodelabelangle  { horizontal	}
+     named anodelabelctr			{ no			}
+     import @Geometry named anodelabeladjust { 0 0		}
+ 
+     named aalabel			{			}
+     named aalabelmargin			{ 			}
+     named aalabelfont			{ 			}
+     named aalabelbreak			{ 			}
+     named aalabelformat right @Body	{ 			}
+     import @Geometry named aalabelpos	{ NE			}
+     named aalabelprox			{ 			}
+     import @Geometry named aalabelangle	{ 			}
+     named aalabelctr			{ 			}
+     import @Geometry named aalabeladjust{ 			}
+ 
+     named ablabel			{			}
+     named ablabelmargin			{ 			}
+     named ablabelfont			{ 			}
+     named ablabelbreak			{ 			}
+     named ablabelformat right @Body	{ 			}
+     import @Geometry named ablabelpos	{ NW			}
+     named ablabelprox			{ 			}
+     import @Geometry named ablabelangle	{ 			}
+     named ablabelctr			{ 			}
+     import @Geometry named ablabeladjust{ 			}
+ 
+     named aclabel			{			}
+     named aclabelmargin			{ 			}
+     named aclabelfont			{ 			}
+     named aclabelbreak			{ 			}
+     named aclabelformat right @Body	{ 			}
+     import @Geometry named aclabelpos	{ SW			}
+     named aclabelprox			{ 			}
+     import @Geometry named aclabelangle	{ 			}
+     named aclabelctr			{ 			}
+     import @Geometry named aclabeladjust{ 			}
+ 
+     named adlabel			{			}
+     named adlabelmargin			{ 			}
+     named adlabelfont			{ 			}
+     named adlabelbreak			{ 			}
+     named adlabelformat right @Body	{ 			}
+     import @Geometry named adlabelpos	{ SE			}
+     named adlabelprox			{ 			}
+     import @Geometry named adlabelangle	{ 			}
+     named adlabelctr			{ 			}
+     import @Geometry named adlabeladjust{ 			}
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @BNode options of @DiagSetup                                           #
+     #                                                                         #
+     ###########################################################################
+ 
+     import @Geometry named boutline
+ 	named margin {}
+ 	named shadow {}
+ 	named sides {}
+ 	named angle {}
+ 					{ box			}
+     named bmargin			{ 0.6f          	}
+     import @Geometry named bshadow	{ 0.4f          	}
+     import @Geometry named bsides	{ 3			}
+     import @Geometry named bangle	{ "dup 180 exch div"	}
+     named btranslate			{			}
+     named boutlinestyle
+ 	named solid   { "/ldiagsolid"   }
+ 	named dashed  { "/ldiagdashed"  }
+ 	named cdashed { "/ldiagcdashed" }
+ 	named dotted  { "/ldiagdotted"  }
+ 	named noline  { "/ldiagnoline"  }
+ 					{ solid         	}
+     import @Geometry named boutlinedashlength	{ 0.2f		}
+     import @Geometry named boutlinewidth
+ 	named thin   { 0.04 ft }
+ 	named medium { 0.08 ft }
+ 	named thick  { 0.12 ft }
+ 					{ thin	         	}
+     named bpaint                 	{ nopaint       	}
+     named bfont				{			}
+     named bbreak			{			}
+     named bformat right @Body    	{ @Body         	}
+ 
+     named bvalign			{ ctr           	}
+     named bvsize                 	{               	}
+     named bvindent			{ ctr           	}
+     named bvstrut
+ 	named no  { 0.0f }
+ 	named yes { 1.0f }
+ 					{ no            	}
+     named bvmargin               	{               	}
+     named btopmargin             	{               	}
+     named bfootmargin            	{               	}
+ 
+     named bhalign			{ ctr           	}
+     named bhsize                 	{               	}
+     named bhindent			{ ctr           	}
+     named bhstrut
+ 	named no  { 0.0f }
+ 	named yes { 1.0f }
+ 					{ no            	}
+     named bhmargin               	{               	}
+     named bleftmargin            	{               	}
+     named brightmargin           	{               	}
+ 
+     named bnodelabel			{			}
+     named bnodelabelmargin		{ 0.2f			}
+     named bnodelabelfont		{ -2p			}
+     named bnodelabelbreak		{ ragged nohyphen	}
+     named bnodelabelformat right @Body	{ @Body			}
+     import @Geometry named bnodelabelpos{ 			}
+     named bnodelabelprox		{ outside		}
+     import @Geometry named bnodelabelangle  { horizontal	}
+     named bnodelabelctr			{ no			}
+     import @Geometry named bnodelabeladjust { 0 0		}
+ 
+     named balabel			{			}
+     named balabelmargin			{ 			}
+     named balabelfont			{ 			}
+     named balabelbreak			{ 			}
+     named balabelformat right @Body	{ 			}
+     import @Geometry named balabelpos	{ NE			}
+     named balabelprox			{ 			}
+     import @Geometry named balabelangle	{ 			}
+     named balabelctr			{ 			}
+     import @Geometry named balabeladjust{ 			}
+ 
+     named bblabel			{			}
+     named bblabelmargin			{ 			}
+     named bblabelfont			{ 			}
+     named bblabelbreak			{ 			}
+     named bblabelformat right @Body	{ 			}
+     import @Geometry named bblabelpos	{ NW			}
+     named bblabelprox			{ 			}
+     import @Geometry named bblabelangle	{ 			}
+     named bblabelctr			{ 			}
+     import @Geometry named bblabeladjust{ 			}
+ 
+     named bclabel			{			}
+     named bclabelmargin			{ 			}
+     named bclabelfont			{ 			}
+     named bclabelbreak			{ 			}
+     named bclabelformat right @Body	{ 			}
+     import @Geometry named bclabelpos	{ SW			}
+     named bclabelprox			{ 			}
+     import @Geometry named bclabelangle	{ 			}
+     named bclabelctr			{ 			}
+     import @Geometry named bclabeladjust{ 			}
+ 
+     named bdlabel			{			}
+     named bdlabelmargin			{ 			}
+     named bdlabelfont			{ 			}
+     named bdlabelbreak			{ 			}
+     named bdlabelformat right @Body	{ 			}
+     import @Geometry named bdlabelpos	{ SE			}
+     named bdlabelprox			{ 			}
+     import @Geometry named bdlabelangle	{ 			}
+     named bdlabelctr			{ 			}
+     import @Geometry named bdlabeladjust{ 			}
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @CNode options of @DiagSetup                                           #
+     #                                                                         #
+     ###########################################################################
+ 
+     import @Geometry named coutline
+ 	named margin {}
+ 	named shadow {}
+ 	named sides {}
+ 	named angle {}
+ 					{ box			}
+     named cmargin			{ 0.6f          	}
+     import @Geometry named cshadow	{ 0.4f          	}
+     import @Geometry named csides	{ 3			}
+     import @Geometry named cangle	{ "dup 180 exch div"	}
+     named ctranslate			{			}
+     named coutlinestyle
+ 	named solid   { "/ldiagsolid"   }
+ 	named dashed  { "/ldiagdashed"  }
+ 	named cdashed { "/ldiagcdashed" }
+ 	named dotted  { "/ldiagdotted"  }
+ 	named noline  { "/ldiagnoline"  }
+ 					{ solid         	}
+     import @Geometry named coutlinedashlength	{ 0.2f		}
+     import @Geometry named coutlinewidth
+ 	named thin   { 0.04 ft }
+ 	named medium { 0.08 ft }
+ 	named thick  { 0.12 ft }
+ 					{ thin	         	}
+     named cpaint                 	{ nopaint       	}
+     named cfont				{			}
+     named cbreak			{			}
+     named cformat right @Body    	{ @Body         	}
+ 
+     named cvalign			{ ctr           	}
+     named cvsize                 	{               	}
+     named cvindent			{ ctr           	}
+     named cvstrut
+ 	named no  { 0.0f }
+ 	named yes { 1.0f }
+ 					{ no            	}
+     named cvmargin               	{               	}
+     named ctopmargin             	{               	}
+     named cfootmargin            	{               	}
+ 
+     named chalign			{ ctr           	}
+     named chsize                 	{               	}
+     named chindent			{ ctr           	}
+     named chstrut
+ 	named no  { 0.0f }
+ 	named yes { 1.0f }
+ 					{ no            	}
+     named chmargin               	{               	}
+     named cleftmargin            	{               	}
+     named crightmargin           	{               	}
+ 
+     named cnodelabel			{			}
+     named cnodelabelmargin		{ 0.2f			}
+     named cnodelabelfont		{ -2p			}
+     named cnodelabelbreak		{ ragged nohyphen	}
+     named cnodelabelformat right @Body	{ @Body			}
+     import @Geometry named cnodelabelpos{ 			}
+     named cnodelabelprox		{ outside		}
+     import @Geometry named cnodelabelangle  { horizontal	}
+     named cnodelabelctr			{ no			}
+     import @Geometry named cnodelabeladjust { 0 0		}
+ 
+     named calabel			{			}
+     named calabelmargin			{ 			}
+     named calabelfont			{ 			}
+     named calabelbreak			{ 			}
+     named calabelformat right @Body	{ 			}
+     import @Geometry named calabelpos	{ NE			}
+     named calabelprox			{ 			}
+     import @Geometry named calabelangle	{ 			}
+     named calabelctr			{ 			}
+     import @Geometry named calabeladjust{ 			}
+ 
+     named cblabel			{			}
+     named cblabelmargin			{ 			}
+     named cblabelfont			{ 			}
+     named cblabelbreak			{ 			}
+     named cblabelformat right @Body	{ 			}
+     import @Geometry named cblabelpos	{ NW			}
+     named cblabelprox			{ 			}
+     import @Geometry named cblabelangle	{ 			}
+     named cblabelctr			{ 			}
+     import @Geometry named cblabeladjust{ 			}
+ 
+     named cclabel			{			}
+     named cclabelmargin			{ 			}
+     named cclabelfont			{ 			}
+     named cclabelbreak			{ 			}
+     named cclabelformat right @Body	{ 			}
+     import @Geometry named cclabelpos	{ SW			}
+     named cclabelprox			{ 			}
+     import @Geometry named cclabelangle	{ 			}
+     named cclabelctr			{ 			}
+     import @Geometry named cclabeladjust{ 			}
+ 
+     named cdlabel			{			}
+     named cdlabelmargin			{ 			}
+     named cdlabelfont			{ 			}
+     named cdlabelbreak			{ 			}
+     named cdlabelformat right @Body	{ 			}
+     import @Geometry named cdlabelpos	{ SE			}
+     named cdlabelprox			{ 			}
+     import @Geometry named cdlabelangle	{ 			}
+     named cdlabelctr			{ 			}
+     import @Geometry named cdlabeladjust{ 			}
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Link options of @DiagSetup                                            #
+     #                                                                         #
+     ###########################################################################
+ 
+     import @Geometry named path
+ 	named from {}
+ 	named to {}
+ 	named bias {}
+ 	named fbias {}
+ 	named tbias {}
+ 	named radius {}
+ 	named xindent {}
+ 	named zindent {}
+ 	named frompt {}
+ 	named topt {}
+ 	named arrow {}
+ 	named arrowlength {}
+ 					{ line			}
+     import @Geometry named from		{ 0,0			}
+     import @Geometry named to		{ 1,1			}
+     import @Geometry named bias		{ 2.0f			}
+     import @Geometry named fbias	{ 2.0f			}
+     import @Geometry named tbias	{ 2.0f			}
+     import @Geometry named radius	{ 1.0f			}
+     import @Geometry named xindent	{ 0.8f			}
+     import @Geometry named zindent	{ 0.8f			}
+     import @Geometry named frompt	{ 0 0			}
+     import @Geometry named topt		{ 0 0			}
+     named pathstyle
+ 	named solid   { "/ldiagsolid"   }
+ 	named dashed  { "/ldiagdashed"  }
+ 	named cdashed { "/ldiagcdashed" }
+ 	named dotted  { "/ldiagdotted"  }
+ 	named noline  { "/ldiagnoline"  }
+ 					{ solid         	}
+     import @Geometry named pathdashlength { 0.2f		}
+     import @Geometry named pathwidth
+ 	named thin   { 0.04 ft }
+ 	named medium { 0.08 ft }
+ 	named thick  { 0.12 ft }
+ 					{ thin	         	}
+     import @Geometry named pathgap
+ 	named thin   { 0.08 ft }
+ 	named medium { 0.16 ft }
+ 	named thick  { 0.24 ft }
+ 					{ thin	         	}
+     named arrow                 	{ no			}
+     named arrowstyle             	{ solid			}
+     named arrowwidth             	{ 0.3f			}
+     named arrowlength            	{ 0.5f			}
+ 
+     named linklabel			{			}
+     named linklabelmargin		{ 0.2f			}
+     named linklabelfont			{ -2p			}
+     named linklabelbreak		{ ragged nohyphen	}
+     named linklabelformat right @Body	{ @Body			}
+     import @Geometry named linklabelpos	{ 			}
+     named linklabelprox			{ above			}
+     import @Geometry named linklabelangle  { horizontal		}
+     named linklabelctr			{ no			}
+     import @Geometry named linklabeladjust { 0 0		}
+ 
+     named xlabel			{			}
+     named xlabelmargin			{ 			}
+     named xlabelfont			{ 			}
+     named xlabelbreak			{ 			}
+     named xlabelformat right @Body	{ 			}
+     import @Geometry named xlabelpos	{ LFROM			}
+     named xlabelprox			{ 			}
+     import @Geometry named xlabelangle	{ 			}
+     named xlabelctr			{			}
+     import @Geometry named xlabeladjust	{ 			}
+ 
+     named ylabel			{			}
+     named ylabelmargin			{ 			}
+     named ylabelfont			{ 			}
+     named ylabelbreak			{ 			}
+     named ylabelformat right @Body	{ 			}
+     import @Geometry named ylabelpos	{ LMID			}
+     named ylabelprox			{ 			}
+     import @Geometry named ylabelangle	{ 			}
+     named ylabelctr			{ yes			}
+     import @Geometry named ylabeladjust	{ 			}
+ 
+     named zlabel			{			}
+     named zlabelmargin			{ 			}
+     named zlabelfont			{ 			}
+     named zlabelbreak			{ 			}
+     named zlabelformat right @Body	{ 			}
+     import @Geometry named zlabelpos	{ LTO			}
+     named zlabelprox			{ 			}
+     import @Geometry named zlabelangle	{ 			}
+     named zlabelctr			{			}
+     import @Geometry named zlabeladjust	{ 			}
+ 
+     named fromlabel			{			}
+     named fromlabelmargin		{ 0f			}
+     named fromlabelfont			{			}
+     named fromlabelbreak		{ ragged nohyphen	}
+     named fromlabelformat right @Body	{ @Body			}
+     import @Geometry named fromlabelpos	{ FROM			}
+     named fromlabelprox			{ W			}
+     import @Geometry named fromlabelangle  { antiparallel	}
+     named fromlabelctr			{ no			}
+     import @Geometry named fromlabeladjust { 0 0		}
+ 
+     named tolabel			{			}
+     named tolabelmargin			{ 0f			}
+     named tolabelfont			{			}
+     named tolabelbreak			{ ragged nohyphen	}
+     named tolabelformat right @Body	{ @Body			}
+     import @Geometry named tolabelpos	{ TO			}
+     named tolabelprox			{ W			}
+     import @Geometry named tolabelangle	{ parallel		}
+     named tolabelctr			{ no			}
+     import @Geometry named tolabeladjust { 0 0			}
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Tree and syntax diagram options of @DiagSetup                          #
+     #                                                                         #
+     ###########################################################################
+ 
+     named treehsep			{ 0.5f			}
+     named treevsep			{ 0.5f			}
+     named treehindent
+ 	named left  { 0.0rt }
+ 	named ctr   { 0.5rt }
+ 	named right { 1.0rt }
+ 					{ ctr			}
+     named treevindent
+ 	named top   { 0.0rt }
+ 	named ctr   { 0.5rt }
+ 	named foot  { 1.0rt }
+ 					{ ctr			}
+ 
+     named syntaxgap			{ 0.35f			}
+     named syntaxbias			{ 1.0f			}
+     named syntaxradius			{ 0.3f			}
+ {
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Diag symbol                                                           #
+     #                                                                         #
+     ###########################################################################
+ 
+     export "::" @ShowPoints @ShowTags @ShowDirections @CatchTags @Transform
+ 
+            @Node @ANode @BNode @CNode
+            @Box @CurveBox @ShadowBox @Square @Diamond @Polygon
+ 	   @Isosceles @Ellipse @Circle
+ 	   @ArrowHead @SolidArrowHead @OpenArrowHead @HalfOpenArrowHead
+ 	   @SolidCurvedArrowHead @OpenCurvedArrowHead @HalfOpenCurvedArrowHead
+ 	   @CircleArrowHead @BoxArrowHead
+ 
+ 	   @Link
+ 	   @Line @DoubleLine @Arrow @DoubleArrow @Curve @CurveArrow
+ 	   @ACurve @ACurveArrow @CCurve @CCurveArrow
+ 	   @Bezier @BezierArrow
+ 	   @HVLine @HVArrow @VHLine @VHArrow
+ 	   @HVCurve @HVCurveArrow @VHCurve @VHCurveArrow
+ 	   @LVRLine @LVRArrow @RVLLine @RVLArrow
+ 	   @LVRCurve @LVRCurveArrow @RVLCurve @RVLCurveArrow
+ 	   @DWrapLine @DWrapArrow @UWrapLine @UWrapArrow
+ 	   @DWrapCurve @DWrapCurveArrow @UWrapCurve @UWrapCurveArrow
+ 
+ 	   @Tree @HTree
+ 
+ 	   @StartRight @StartUp @StartLeft @StartDown
+ 	   @StartRightRight @StartRightDown
+ 	   @Skip @XCell @ACell @BCell @CCell
+ 	   @Sequence @Select @Optional @OptionalDiverted @Diverted
+ 	   @Loop @LoopOpposite @Repeat @RepeatOpposite @RepeatDiverted
+ 
+     def @Diag
+ 	named save		             	{ save	           	}
+         named maxlabels             		{ maxlabels     	}
+ 	named title                       	{ title			}
+ 	named titleformat
+ 	    left @Title
+ 	    right @Body
+ 						{ @Title titleformat @Body }
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @Node options of @Diag                                             #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+ 	import @Geometry named outline
+ 	    named margin {}
+ 	    named shadow {}
+ 	    named sides {}
+ 	    named angle {}
+ 						{ outline
+ 						    margin { margin }
+ 						    shadow { shadow }
+ 						    sides  { sides  }
+ 						    angle  { angle  }
+ 						}
+         named margin                		{ margin        	}
+ 	import @Geometry named shadow		{ shadow		}
+ 	import @Geometry named sides		{ sides			}
+ 	import @Geometry named angle		{ angle			}
+ 	named translate				{ translate		}
+ 	named nodetag				{			}
+         named outlinestyle
+ 	    named solid   { "/ldiagsolid"   }
+ 	    named dashed  { "/ldiagdashed"  }
+ 	    named cdashed { "/ldiagcdashed" }
+ 	    named dotted  { "/ldiagdotted"  }
+ 	    named noline  { "/ldiagnoline"  }
+ 						{ outlinestyle     	}
+         import @Geometry named outlinedashlength{ outlinedashlength    	}
+         import @Geometry named outlinewidth
+ 	    named thin   { 0.04 ft }
+ 	    named medium { 0.08 ft }
+ 	    named thick  { 0.12 ft }
+ 						{ outlinewidth     	}
+         named paint                 		{ paint         	}
+ 	named font				{ font			}
+ 	named break				{ break			}
+         named format right @Body    		{ format @Body  	}
+         named valign				{ valign        	}
+         named vsize                 		{ vsize         	}
+         named vindent				{ vindent       	}
+         named vstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ vstrut	 	}
+         named vmargin               		{ vmargin       	}
+         named topmargin             		{ topmargin     	}
+         named footmargin            		{ footmargin    	}
+         named halign				{ halign        	}
+         named hsize                 		{ hsize         	}
+         named hindent				{ hindent       	}
+         named hstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ hstrut	 	}
+         named hmargin               		{ hmargin       	}
+         named leftmargin            		{ leftmargin    	}
+         named rightmargin           		{ rightmargin   	}
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @ANode options of @Diag                                            #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+ 	import @Geometry named aoutline
+ 	    named margin {}
+ 	    named shadow {}
+ 	    named sides {}
+ 	    named angle {}
+ 						{ aoutline
+ 						    margin { margin }
+ 						    shadow { shadow }
+ 						    sides  { sides  }
+ 						    angle  { angle  }
+ 						}
+         named amargin                		{ amargin        	}
+ 	import @Geometry named ashadow		{ ashadow		}
+ 	import @Geometry named asides		{ asides		}
+ 	import @Geometry named aangle		{ aangle		}
+ 	named atranslate			{ atranslate		}
+ 	named anodetag				{			}
+         named aoutlinestyle
+ 	    named solid   { "/ldiagsolid"   }
+ 	    named dashed  { "/ldiagdashed"  }
+ 	    named cdashed { "/ldiagcdashed" }
+ 	    named dotted  { "/ldiagdotted"  }
+ 	    named noline  { "/ldiagnoline"  }
+ 						{ aoutlinestyle     	}
+         import @Geometry named aoutlinedashlength{ aoutlinedashlength  	}
+         import @Geometry named aoutlinewidth
+ 	    named thin   { 0.04 ft }
+ 	    named medium { 0.08 ft }
+ 	    named thick  { 0.12 ft }
+ 						{ aoutlinewidth     	}
+         named apaint                 		{ apaint         	}
+ 	named afont				{ afont			}
+ 	named abreak				{ abreak		}
+         named aformat right @Body    		{ aformat @Body  	}
+         named avalign				{ avalign        	}
+         named avsize                 		{ avsize         	}
+         named avindent				{ avindent       	}
+         named avstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ avstrut	 	}
+         named avmargin               		{ avmargin       	}
+         named atopmargin             		{ atopmargin     	}
+         named afootmargin            		{ afootmargin    	}
+         named ahalign				{ ahalign        	}
+         named ahsize                 		{ ahsize         	}
+         named ahindent				{ ahindent       	}
+         named ahstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ ahstrut	 	}
+         named ahmargin               		{ ahmargin       	}
+         named aleftmargin            		{ aleftmargin    	}
+         named arightmargin           		{ arightmargin   	}
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @BNode options of @Diag                                            #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+ 	import @Geometry named boutline
+ 	    named margin {}
+ 	    named shadow {}
+ 	    named sides {}
+ 	    named angle {}
+ 						{ boutline
+ 						    margin { margin }
+ 						    shadow { shadow }
+ 						    sides  { sides  }
+ 						    angle  { angle  }
+ 						}
+         named bmargin                		{ bmargin        	}
+ 	import @Geometry named bshadow		{ bshadow		}
+ 	import @Geometry named bsides		{ bsides		}
+ 	import @Geometry named bangle		{ bangle		}
+ 	named btranslate			{ btranslate		}
+ 	named bnodetag				{			}
+         named boutlinestyle
+ 	    named solid   { "/ldiagsolid"   }
+ 	    named dashed  { "/ldiagdashed"  }
+ 	    named cdashed { "/ldiagcdashed" }
+ 	    named dotted  { "/ldiagdotted"  }
+ 	    named noline  { "/ldiagnoline"  }
+ 						{ boutlinestyle     	}
+         import @Geometry named boutlinedashlength{ boutlinedashlength  	}
+         import @Geometry named boutlinewidth
+ 	    named thin   { 0.04 ft }
+ 	    named medium { 0.08 ft }
+ 	    named thick  { 0.12 ft }
+ 						{ boutlinewidth     	}
+         named bpaint                 		{ bpaint         	}
+ 	named bfont				{ bfont			}
+ 	named bbreak				{ bbreak		}
+         named bformat right @Body    		{ bformat @Body  	}
+         named bvalign				{ bvalign        	}
+         named bvsize                 		{ bvsize         	}
+         named bvindent				{ bvindent       	}
+         named bvstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ bvstrut	 	}
+         named bvmargin               		{ bvmargin       	}
+         named btopmargin             		{ btopmargin     	}
+         named bfootmargin            		{ bfootmargin    	}
+         named bhalign				{ bhalign        	}
+         named bhsize                 		{ bhsize         	}
+         named bhindent				{ bhindent       	}
+         named bhstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ bhstrut	 	}
+         named bhmargin               		{ bhmargin       	}
+         named bleftmargin            		{ bleftmargin    	}
+         named brightmargin           		{ brightmargin   	}
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @CNode options of @Diag                                            #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+ 	import @Geometry named coutline
+ 	    named margin {}
+ 	    named shadow {}
+ 	    named sides {}
+ 	    named angle {}
+ 						{ coutline
+ 						    margin { margin }
+ 						    shadow { shadow }
+ 						    sides  { sides  }
+ 						    angle  { angle  }
+ 						}
+         named cmargin                		{ cmargin        	}
+ 	import @Geometry named cshadow		{ cshadow		}
+ 	import @Geometry named csides		{ csides		}
+ 	import @Geometry named cangle		{ cangle		}
+ 	named ctranslate			{ ctranslate		}
+ 	named cnodetag				{			}
+         named coutlinestyle
+ 	    named solid   { "/ldiagsolid"   }
+ 	    named dashed  { "/ldiagdashed"  }
+ 	    named cdashed { "/ldiagcdashed" }
+ 	    named dotted  { "/ldiagdotted"  }
+ 	    named noline  { "/ldiagnoline"  }
+ 						{ coutlinestyle     	}
+         import @Geometry named coutlinedashlength{ coutlinedashlength  	}
+         import @Geometry named coutlinewidth
+ 	    named thin   { 0.04 ft }
+ 	    named medium { 0.08 ft }
+ 	    named thick  { 0.12 ft }
+ 						{ coutlinewidth     	}
+         named cpaint                 		{ cpaint         	}
+ 	named cfont				{ cfont			}
+ 	named cbreak				{ cbreak		}
+         named cformat right @Body    		{ cformat @Body  	}
+         named cvalign				{ cvalign        	}
+         named cvsize                 		{ cvsize         	}
+         named cvindent				{ cvindent       	}
+         named cvstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ cvstrut	 	}
+         named cvmargin               		{ cvmargin       	}
+         named ctopmargin             		{ ctopmargin     	}
+         named cfootmargin            		{ cfootmargin    	}
+         named chalign				{ chalign        	}
+         named chsize                 		{ chsize         	}
+         named chindent				{ chindent       	}
+         named chstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ chstrut	 	}
+         named chmargin               		{ chmargin       	}
+         named cleftmargin            		{ cleftmargin    	}
+         named crightmargin           		{ crightmargin   	}
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @Link options of @Diag                                             #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+ 	import @Geometry named path
+ 	    named from {}
+ 	    named to {}
+ 	    named bias {}
+ 	    named fbias {}
+ 	    named tbias {}
+ 	    named radius {}
+ 	    named xindent {}
+ 	    named zindent {}
+ 	    named frompt {}
+ 	    named topt {}
+ 	    named arrow {}
+ 	    named arrowlength {}
+ 						{ path
+ 						    from	{ from }
+ 						    to		{ to   }
+ 						    bias	{ bias }
+ 						    fbias	{ fbias }
+ 						    tbias	{ tbias }
+ 						    radius	{ radius }
+ 						    xindent	{ xindent }
+ 						    zindent	{ zindent }
+ 						    frompt	{ frompt }
+ 						    topt	{ topt }
+ 						    arrow	{ arrow }
+ 						    arrowlength	{ arrowlength }
+ 						}
+ 	import @Geometry named from		{ from			}
+ 	import @Geometry named to		{ to			}
+ 	import @Geometry named bias		{ bias			}
+ 	import @Geometry named fbias		{ fbias			}
+ 	import @Geometry named tbias		{ tbias			}
+ 	import @Geometry named radius		{ radius		}
+ 	import @Geometry named xindent		{ xindent		}
+ 	import @Geometry named zindent		{ zindent		}
+ 	import @Geometry named frompt		{ frompt		}
+ 	import @Geometry named topt		{ topt			}
+         named pathstyle
+ 	    named solid   { "/ldiagsolid"   }
+ 	    named dashed  { "/ldiagdashed"  }
+ 	    named cdashed { "/ldiagcdashed" }
+ 	    named dotted  { "/ldiagdotted"  }
+ 	    named noline  { "/ldiagnoline"  }
+ 						{ pathstyle     	}
+         import @Geometry named pathdashlength	{ pathdashlength    	}
+         import @Geometry named pathwidth
+ 	    named thin   { 0.04 ft }
+ 	    named medium { 0.08 ft }
+ 	    named thick  { 0.12 ft }
+ 						{ pathwidth     	}
+         import @Geometry named pathgap
+ 	    named thin   { 0.08 ft }
+ 	    named medium { 0.16 ft }
+ 	    named thick  { 0.24 ft }
+ 						{ pathgap	     	}
+ 	named arrow				{ arrow			}
+ 	named arrowstyle			{ arrowstyle		}
+ 	named arrowwidth			{ arrowwidth		}
+ 	named arrowlength			{ arrowlength		}
+ 
+ 	named nodelabel				{ nodelabel		}
+ 	named nodelabelmargin			{ nodelabelmargin	}
+ 	named nodelabelfont			{ nodelabelfont		}
+ 	named nodelabelbreak			{ nodelabelbreak	}
+ 	named nodelabelformat right @Body	{ nodelabelformat @Body	}
+ 	import @Geometry named nodelabelpos	{ nodelabelpos		}
+ 	named nodelabelprox			{ nodelabelprox		}
+ 	import @Geometry named nodelabelangle	{ nodelabelangle	}
+ 	named nodelabelctr			{ nodelabelctr		}
+ 	import @Geometry named nodelabeladjust	{ nodelabeladjust	}
+ 
+         named alabel				{ alabel		}
+         named alabelmargin			{ alabelmargin		}
+         named alabelfont			{ alabelfont		}
+         named alabelbreak			{ alabelbreak		}
+ 	named alabelformat right @Body		{ alabelformat @Body	}
+         import @Geometry named alabelpos	{ alabelpos		}
+         named alabelprox			{ alabelprox		}
+         import @Geometry named alabelangle	{ alabelangle		}
+ 	named alabelctr				{ alabelctr		}
+         import @Geometry named alabeladjust	{ alabeladjust		}
+ 
+         named blabel				{ blabel		}
+         named blabelmargin			{ blabelmargin		}
+         named blabelfont			{ blabelfont		}
+         named blabelbreak			{ blabelbreak		}
+ 	named blabelformat right @Body		{ blabelformat @Body	}
+         import @Geometry named blabelpos	{ blabelpos		}
+         named blabelprox			{ blabelprox		}
+         import @Geometry named blabelangle	{ blabelangle		}
+ 	named blabelctr				{ blabelctr		}
+         import @Geometry named blabeladjust	{ blabeladjust		}
+ 
+         named clabel				{ clabel		}
+         named clabelmargin			{ clabelmargin		}
+         named clabelfont			{ clabelfont		}
+         named clabelbreak			{ clabelbreak		}
+ 	named clabelformat right @Body		{ clabelformat @Body	}
+         import @Geometry named clabelpos	{ clabelpos		}
+         named clabelprox			{ clabelprox		}
+         import @Geometry named clabelangle	{ clabelangle		}
+ 	named clabelctr				{ clabelctr		}
+         import @Geometry named clabeladjust	{ clabeladjust		}
+ 
+         named dlabel				{ dlabel		}
+         named dlabelmargin			{ dlabelmargin		}
+         named dlabelfont			{ dlabelfont		}
+         named dlabelbreak			{ dlabelbreak		}
+ 	named dlabelformat right @Body		{ dlabelformat @Body	}
+         import @Geometry named dlabelpos	{ dlabelpos		}
+         named dlabelprox			{ dlabelprox		}
+         import @Geometry named dlabelangle	{ dlabelangle		}
+ 	named dlabelctr				{ dlabelctr		}
+         import @Geometry named dlabeladjust	{ dlabeladjust		}
+ 
+         named fromlabel				{ fromlabel		}
+         named fromlabelmargin			{ fromlabelmargin	}
+         named fromlabelfont			{ fromlabelfont		}
+         named fromlabelbreak			{ fromlabelbreak	}
+ 	named fromlabelformat right @Body	{ fromlabelformat @Body	}
+         import @Geometry named fromlabelpos	{ fromlabelpos		}
+         named fromlabelprox			{ fromlabelprox		}
+         import @Geometry named fromlabelangle	{ fromlabelangle	}
+ 	named fromlabelctr			{ fromlabelctr		}
+         import @Geometry named fromlabeladjust	{ fromlabeladjust	}
+ 
+ 	named linklabel				{ linklabel		}
+ 	named linklabelmargin			{ linklabelmargin	}
+ 	named linklabelfont			{ linklabelfont		}
+ 	named linklabelbreak			{ linklabelbreak	}
+ 	named linklabelformat right @Body	{ linklabelformat @Body	}
+ 	import @Geometry named linklabelpos	{ linklabelpos		}
+ 	named linklabelprox			{ linklabelprox		}
+ 	import @Geometry named linklabelangle	{ linklabelangle	}
+ 	named linklabelctr			{ linklabelctr		}
+ 	import @Geometry named linklabeladjust	{ linklabeladjust	}
+ 
+         named xlabel				{ xlabel		}
+         named xlabelmargin			{ xlabelmargin		}
+         named xlabelfont			{ xlabelfont		}
+         named xlabelbreak			{ xlabelbreak		}
+ 	named xlabelformat right @Body		{ xlabelformat @Body	}
+         import @Geometry named xlabelpos	{ xlabelpos		}
+         named xlabelprox			{ xlabelprox		}
+         import @Geometry named xlabelangle	{ xlabelangle		}
+ 	named xlabelctr				{ xlabelctr		}
+         import @Geometry named xlabeladjust	{ xlabeladjust		}
+ 
+         named ylabel				{ ylabel		}
+         named ylabelmargin			{ ylabelmargin		}
+         named ylabelfont			{ ylabelfont		}
+         named ylabelbreak			{ ylabelbreak		}
+ 	named ylabelformat right @Body		{ ylabelformat @Body	}
+         import @Geometry named ylabelpos	{ ylabelpos		}
+         named ylabelprox			{ ylabelprox		}
+         import @Geometry named ylabelangle	{ ylabelangle		}
+ 	named ylabelctr				{ ylabelctr		}
+         import @Geometry named ylabeladjust	{ ylabeladjust		}
+ 
+         named zlabel				{ zlabel		}
+         named zlabelmargin			{ zlabelmargin		}
+         named zlabelfont			{ zlabelfont		}
+         named zlabelbreak			{ zlabelbreak		}
+ 	named zlabelformat right @Body		{ zlabelformat @Body	}
+         import @Geometry named zlabelpos	{ zlabelpos		}
+         named zlabelprox			{ zlabelprox		}
+         import @Geometry named zlabelangle	{ zlabelangle		}
+ 	named zlabelctr				{ zlabelctr		}
+         import @Geometry named zlabeladjust	{ zlabeladjust		}
+ 
+         named tolabel				{ tolabel		}
+         named tolabelmargin			{ tolabelmargin		}
+         named tolabelfont			{ tolabelfont		}
+         named tolabelbreak			{ tolabelbreak		}
+ 	named tolabelformat right @Body		{ tolabelformat @Body	}
+         import @Geometry named tolabelpos	{ tolabelpos		}
+         named tolabelprox			{ tolabelprox		}
+         import @Geometry named tolabelangle	{ tolabelangle		}
+ 	named tolabelctr			{ tolabelctr		}
+         import @Geometry named tolabeladjust	{ tolabeladjust		}
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  Tree and syntax diagram options of @Diag                           #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+ 	named treehsep				{ treehsep		}
+ 	named treevsep				{ treevsep		}
+ 	named treehindent
+ 	    named left  { 0.0rt }
+ 	    named ctr   { 0.5rt }
+ 	    named right { 1.0rt }
+ 						{ treehindent		}
+ 	named treevindent
+ 	    named top   { 0.0rt }
+ 	    named ctr   { 0.5rt }
+ 	    named foot  { 1.0rt }
+ 						{ treevindent		}
+ 	named syntaxgap				{ syntaxgap		}
+ 	named syntaxbias			{ syntaxbias		}
+ 	named syntaxradius			{ syntaxradius		}
+         body @Body
+     @Begin
+ 
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  Miscellaneous helper definitions                                   #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+         # Like @Graphic, but affects the graphics state of right parameter
+         def @InnerGraphic
+             left ps
+             right x
+         {
+           @BackEnd @Case {
+             PostScript @Yield {
+               { ps gsave // grestore } @Graphic x
+             }
+             PDF @Yield {
+               { ps q // Q } @Graphic x
+             }
+           }
+         }
+ 
+ 	def @BoxLabels right x
+ 	{
+           @BackEnd @Case {
+             PostScript @Yield {
+ 	        "[ ldiagbox ] pop" @Graphic x
+ 	      }
+ 	      PDF @Yield {}
+ 	    }
+ 	}
+ 
+ 	def @IfNonEmpty
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		""   @Yield @Null
+ 		else @Yield y
+ 	    }
+ 	}
+ 
+ 	def @Else
+ 	    precedence 20
+ 	    associativity right
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		""   @Yield y
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+         def @ShowTags
+ 	    right x
+         {
+           @BackEnd @Case {
+             PostScript @Yield {
+             {
+ 	      "() ldiagpushtagdict"
+               // "ldiagshowtags ldiagpopuptagdict"
+ 	      } @Graphic x
+ 	      }
+ 	      PDF @Yield {}
+ 	    }
+         }
+ 
+         def @ShowPoints
+ 	    right x
+         {
+           @BackEnd @Case {
+             PostScript @Yield {
+             {
+ 	      "() ldiagpushtagdict"
+               // "ldiagshowpoints ldiagpopuptagdict"
+ 	      } @Graphic x
+ 	      }
+ 	      PDF @Yield {}
+ 	    }
+         }
+ 
+         def @ShowDirections
+ 	    right x
+         {
+           @BackEnd @Case {
+             PostScript @Yield {
+             { "() ldiagpushtagdict"
+               // "ldiagshowangles ldiagpopuptagdict" } @Graphic x
+ 	      }
+ 	      PDF @Yield {}
+ 	    }
+         }
+ 
+ 	def @ShowMarks right x
+ 	{
+ 	  { "xmark -0.5 cm moveto xmark ysize 0.5 cm add lineto stroke" } @Graphic x
+ 	}
+ 
+ 
+         def "::"
+             precedence 33
+ 	    associativity right
+             left name
+             right x
+         {
+           @BackEnd @Case {
+             PostScript @Yield {
+             { "("name") ldiagpushtagdict"
+               // "ldiagpopuptagdict" } @Graphic x
+ 	      }
+ 	      PDF @Yield {}
+ 	    }
+         }
+ 
+         def @CatchTags
+             precedence 33
+ 	    associativity right
+             right x
+         {
+           @BackEnd @Case {
+             PostScript @Yield {
+             {
+ 	       "() ldiagpushtagdict"
+                // "ldiagpoptagdict"
+ 	      }
+ 	      @Graphic x
+ 	      }
+ 	      PDF @Yield {}
+ 	    }
+         }
+ 
+         def @ZeroWidth right x
+         {
+ 	    @HContract @VContract {
+             ^|0io @HContract @VContract x |0io
+ 	    }
+         }
+ 
+         def @ZeroSize right x
+         {
+ 	    @HContract @VContract {
+             ^/0io ^|0io @HContract @VContract x |0io /0io
+ 	    }
+         }
+ 
+ 	def @FromArrowLength
+ 	    left arrow
+ 	    right arrowlength
+ 	{
+         @BackEnd @Case {
+           PostScript @Yield {
+ 	    arrow @Case {
+ 		{ no yes forward }   @Yield 0
+ 		{ back both }	     @Yield {"("arrowlength") ldiagdecodelength"}
+ 	    }
+ 	    }
+ 	    PDF @Yield {}
+ 	  }
+ 	}
+ 
+ 	def @ToArrowLength
+ 	    left arrow
+ 	    right arrowlength
+ 	{
+         @BackEnd @Case {
+           PostScript @Yield {
+ 	    arrow @Case {
+ 		{ no back }	     @Yield 0
+ 		{ yes forward both } @Yield {"("arrowlength") ldiagdecodelength"}
+ 	    }
+ 	    }
+ 	    PDF @Yield {}
+ 	  }
+ 	}
+ 
+ 	def @AddMargins
+ 	    named mtop {}
+ 	    named mfoot {}
+ 	    named mleft {}
+ 	    named mright {}
+ 	    right x
+ 	{
+ 
+ 	    @HContract @VContract {
+ 			 ^|mleft    |mright
+ 		^/mtop    |      x  |
+ 		 /mfoot   |         |
+ 	    }
+ 	}
+ 
+         def @Transform
+             precedence 32
+             import @Geometry named translate
+ #               named to precedence 10 left x right y { x y "ldiagpsub" }
+                 named to precedence 10 left x right y {
+                   @BackEnd @Case {
+                     PostScript @Yield { x y "ldiagpsub" }
+                     PDF @Yield {""}
+                   }
+                 }
+             {}
+             import @Geometry named rotate { 0d }
+             named scale    { 1 1 }
+             right x
+         {
+           @BackEnd @Case {
+ 
+             PostScript @Yield {
+             { rotate "rotate" scale "scale newpath clip" }
+             @InnerGraphic
+             {
+                 @ZeroSize x
+             }
+             //
+             # { rotate "rotate" scale "scale" translate "translate" }
+             { translate "translate" rotate "rotate" scale "scale" }
+             @InnerGraphic
+             {
+                 @ZeroSize x
+             }
+ 	      }
+ 
+ 	      PDF @Yield { # presume that "rotate", "scale" and "translate" are not matrices
+             { "__cos("rotate") __sin("rotate") __sub(0, __sin("rotate")) __cos("rotate") 0 0 cm"
+               "__pick(1, "scale") 0 0 __pick(2, "scale") 0 0 cm n W" }
+             @InnerGraphic
+             {
+                 @ZeroSize x
+             }
+             //
+             # { rotate "rotate" scale "scale" translate "translate" }
+             { "1 0 0 1 "translate" cm"
+               "__cos("rotate") __sin("rotate") __sub(0, __sin("rotate")) __cos("rotate") 0 0 cm"
+               "__pick(1, "scale") 0 0 __pick(2, "scale") 0 0 cm" }
+             @InnerGraphic
+             {
+                 @ZeroSize x
+             }
+ 	      }
+ 
+ 	    }
+         }
+ 
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @DoLabel definition for drawing one label                          #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+ 	def @DoLabel
+ 	    named which				{}
+ 	    named labeltag			{ LABEL }
+ 	    named label				{}
+ 	    named labelmargin			{}
+ 	    named labelfont			{}
+ 	    named labelbreak			{}
+ 	    named labelformat right @Body	{}
+ 	    named labelpos			{}
+ 	    named labelprox			{}
+ 	    named labelangle			{}
+ 	    named labelctr			{}
+ 	    named labeladjust			{}
+ 	{
+ 
+ 	    import @Geometry
+             def alignedangle
+             {
+ 		labelpos??"ANGLE" quadcase 
+ 			0	{ labelpos??"ANGLE"		}
+ 			0-90	{ labelpos??"ANGLE"		}
+ 			90	{ labelpos??"ANGLE"		}
+ 			90-180	{ labelpos??"ANGLE" + 180d	}
+ 			180	{ labelpos??"ANGLE" + 180d	}
+ 			180-270	{ labelpos??"ANGLE" + 180d	}
+ 			270	{ labelpos??"ANGLE" + 180d	}
+ 			270-360	{ labelpos??"ANGLE"		}
+ 	    }
+ 
+ 	    import @Geometry
+             def perpalignedangle
+             {
+ 		labelpos??"ANGLE" quadcase 
+ 			0	{ labelpos??"ANGLE" - 90d	}
+ 			0-90	{ labelpos??"ANGLE" - 90d	}
+ 			90	{ labelpos??"ANGLE" - 90d	}
+ 			90-180	{ labelpos??"ANGLE" - 90d	}
+ 			180	{ labelpos??"ANGLE" + 90d	}
+ 			180-270	{ labelpos??"ANGLE" + 90d	}
+ 			270	{ labelpos??"ANGLE" + 90d	}
+ 			270-360	{ labelpos??"ANGLE" + 90d	}
+ 		    
+ 	    }
+ 
+ 	    import @Geometry
+             def finalangle
+             {
+                 labelangle @Case {
+ 
+ 		    "horizontal"	@Yield { 0d				}
+                     "aligned"		@Yield { alignedangle			}
+                     "perpendicular"	@Yield { perpalignedangle		}
+                     "parallel"		@Yield { labelpos??"ANGLE"		}
+                     "antiparallel"	@Yield { labelpos??"ANGLE" + 180d	}
+                     else		@Yield labelangle
+                 }
+             }
+ 
+ 	    import @Geometry
+ 	    def @AlignedAboveProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (SW) }
+ 				90	{ (SW) }
+ 				90-180	{ (SE) }
+ 				180	{ (SE) }
+ 				180-270	{ (SE) }
+ 				270	{ (SE) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (SE) }
+ 				90	{ (SE) }
+ 				90-180	{ (SW) }
+ 				180	{ (SW) }
+ 				180-270	{ (SW) }
+ 				270	{ (SW) }
+ 				270-360	{ (SE) }
+ 			  }
+ 		  else @Yield (S)
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @AlignedBelowProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NW) }
+ 				0-90	{ (NW) }
+ 				90	{ (NW) }
+ 				90-180	{ (NE) }
+ 				180	{ (NE) }
+ 				180-270	{ (NE) }
+ 				270	{ (NE) }
+ 				270-360	{ (NW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NE) }
+ 				0-90	{ (NE) }
+ 				90	{ (NE) }
+ 				90-180	{ (NW) }
+ 				180	{ (NW) }
+ 				180-270	{ (NW) }
+ 				270	{ (NW) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  else @Yield (N)
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @AlignedLeftProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (SW) }
+ 				90	{ (SW) }
+ 				90-180	{ (NE) }
+ 				180	{ (SE) }
+ 				180-270	{ (SE) }
+ 				270	{ (SE) }
+ 				270-360	{ (NW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (SE) }
+ 				90	{ (SE) }
+ 				90-180	{ (NW) }
+ 				180	{ (SW) }
+ 				180-270	{ (SW) }
+ 				270	{ (SW) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (S) }
+ 				0-90	{ (S) }
+ 				90	{ (S) }
+ 				90-180	{ (N) }
+ 				180	{ (S) }
+ 				180-270	{ (S) }
+ 				270	{ (S) }
+ 				270-360	{ (N) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @AlignedRightProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (NW) }
+ 				90	{ (NW) }
+ 				90-180	{ (SE) }
+ 				180	{ (SE) }
+ 				180-270	{ (NE) }
+ 				270	{ (NE) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (NE) }
+ 				90	{ (NE) }
+ 				90-180	{ (SW) }
+ 				180	{ (SW) }
+ 				180-270	{ (NW) }
+ 				270	{ (NW) }
+ 				270-360	{ (SE) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (S) }
+ 				0-90	{ (N) }
+ 				90	{ (N) }
+ 				90-180	{ (S) }
+ 				180	{ (S) }
+ 				180-270	{ (N) }
+ 				270	{ (N) }
+ 				270-360	{ (S) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @AlignedInsideProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (SW) }
+ 				90	{ (SW) }
+ 				90-180	{ (NE) }
+ 				180	{ (NE) }
+ 				180-270	{ (NE) }
+ 				270	{ (NE) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (SE) }
+ 				90	{ (SE) }
+ 				90-180	{ (NW) }
+ 				180	{ (NW) }
+ 				180-270	{ (NW) }
+ 				270	{ (NW) }
+ 				270-360	{ (SE) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (S) }
+ 				0-90	{ (S) }
+ 				90	{ (S) }
+ 				90-180	{ (N) }
+ 				180	{ (N) }
+ 				180-270	{ (N) }
+ 				270	{ (N) }
+ 				270-360	{ (S) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @AlignedOutsideProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NW) }
+ 				0-90	{ (NW) }
+ 				90	{ (NW) }
+ 				90-180	{ (SE) }
+ 				180	{ (SE) }
+ 				180-270	{ (SE) }
+ 				270	{ (SE) }
+ 				270-360	{ (NW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NE) }
+ 				0-90	{ (NE) }
+ 				90	{ (NE) }
+ 				90-180	{ (SW) }
+ 				180	{ (SW) }
+ 				180-270	{ (SW) }
+ 				270	{ (SW) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (N) }
+ 				0-90	{ (N) }
+ 				90	{ (N) }
+ 				90-180	{ (S) }
+ 				180	{ (S) }
+ 				180-270	{ (S) }
+ 				270	{ (S) }
+ 				270-360	{ (N) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 
+ 	    import @Geometry
+ 	    def @PerpendicularAboveProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (SE) }
+ 				90	{ (SE) }
+ 				90-180	{ (SW) }
+ 				180	{ (NE) }
+ 				180-270	{ (NE) }
+ 				270	{ (NE) }
+ 				270-360	{ (NW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NE) }
+ 				0-90	{ (NE) }
+ 				90	{ (NE) }
+ 				90-180	{ (NW) }
+ 				180	{ (SE) }
+ 				180-270	{ (SE) }
+ 				270	{ (SE) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (E) }
+ 				0-90	{ (E) }
+ 				90	{ (E) }
+ 				90-180	{ (W) }
+ 				180	{ (E) }
+ 				180-270	{ (E) }
+ 				270	{ (E) }
+ 				270-360	{ (W) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @PerpendicularBelowProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (SW) }
+ 				90	{ (SW) }
+ 				90-180	{ (SE) }
+ 				180	{ (NW) }
+ 				180-270	{ (NW) }
+ 				270	{ (NW) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NW) }
+ 				0-90	{ (NW) }
+ 				90	{ (NW) }
+ 				90-180	{ (NE) }
+ 				180	{ (SW) }
+ 				180-270	{ (SW) }
+ 				270	{ (SW) }
+ 				270-360	{ (SE) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (W) }
+ 				0-90	{ (W) }
+ 				90	{ (W) }
+ 				90-180	{ (E) }
+ 				180	{ (W) }
+ 				180-270	{ (W) }
+ 				270	{ (W) }
+ 				270-360	{ (E) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @PerpendicularLeftProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (SE) }
+ 				90	{ (SE) }
+ 				90-180	{ (SE) }
+ 				180	{ (NE) }
+ 				180-270	{ (NE) }
+ 				270	{ (NE) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NE) }
+ 				0-90	{ (NE) }
+ 				90	{ (NE) }
+ 				90-180	{ (NE) }
+ 				180	{ (SE) }
+ 				180-270	{ (SE) }
+ 				270	{ (SE) }
+ 				270-360	{ (SE) }
+ 			  }
+ 		  else @Yield (E)
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @PerpendicularRightProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (SW) }
+ 				90	{ (SW) }
+ 				90-180	{ (SW) }
+ 				180	{ (NW) }
+ 				180-270	{ (NW) }
+ 				270	{ (NW) }
+ 				270-360	{ (NW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NW) }
+ 				0-90	{ (NW) }
+ 				90	{ (NW) }
+ 				90-180	{ (NW) }
+ 				180	{ (SW) }
+ 				180-270	{ (SW) }
+ 				270	{ (SW) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  else @Yield (W)
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @PerpendicularInsideProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (SE) }
+ 				90	{ (SE) }
+ 				90-180	{ (SE) }
+ 				180	{ (NW) }
+ 				180-270	{ (NW) }
+ 				270	{ (NW) }
+ 				270-360	{ (NW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NE) }
+ 				0-90	{ (NE) }
+ 				90	{ (NE) }
+ 				90-180	{ (NE) }
+ 				180	{ (SW) }
+ 				180-270	{ (SW) }
+ 				270	{ (SW) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (E) }
+ 				0-90	{ (E) }
+ 				90	{ (E) }
+ 				90-180	{ (E) }
+ 				180	{ (W) }
+ 				180-270	{ (W) }
+ 				270	{ (W) }
+ 				270-360	{ (W) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @PerpendicularOutsideProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (SW) }
+ 				90	{ (SW) }
+ 				90-180	{ (SW) }
+ 				180	{ (NE) }
+ 				180-270	{ (NE) }
+ 				270	{ (NE) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NW) }
+ 				0-90	{ (NW) }
+ 				90	{ (NW) }
+ 				90-180	{ (NW) }
+ 				180	{ (SE) }
+ 				180-270	{ (SE) }
+ 				270	{ (SE) }
+ 				270-360	{ (SE) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (W) }
+ 				0-90	{ (W) }
+ 				90	{ (W) }
+ 				90-180	{ (W) }
+ 				180	{ (E) }
+ 				180-270	{ (E) }
+ 				270	{ (E) }
+ 				270-360	{ (E) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 
+ 	    import @Geometry
+ 	    def @OtherAboveProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (SE) }
+ 				90	{ (SW) }
+ 				90-180	{ (SW) }
+ 				180	{ (SE) }
+ 				180-270	{ (SE) }
+ 				270	{ (NW) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (SE) }
+ 				90	{ (NW) }
+ 				90-180	{ (SW) }
+ 				180	{ (SW) }
+ 				180-270	{ (SE) }
+ 				270	{ (SW) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (S) }
+ 				0-90	{ (SE) }
+ 				90	{ (W) }
+ 				90-180	{ (SW) }
+ 				180	{ (S) }
+ 				180-270	{ (SE) }
+ 				270	{ (W) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OtherBelowProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NW) }
+ 				0-90	{ (NW) }
+ 				90	{ (SW) }
+ 				90-180	{ (NE) }
+ 				180	{ (NE) }
+ 				180-270	{ (NW) }
+ 				270	{ (NW) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NE) }
+ 				0-90	{ (NW) }
+ 				90	{ (NW) }
+ 				90-180	{ (NE) }
+ 				180	{ (NW) }
+ 				180-270	{ (NW) }
+ 				270	{ (SW) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (N) }
+ 				0-90	{ (NW) }
+ 				90	{ (W) }
+ 				90-180	{ (NE) }
+ 				180	{ (N) }
+ 				180-270	{ (NW) }
+ 				270	{ (W) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OtherLeftProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (SE) }
+ 				90	{ (SE) }
+ 				90-180	{ (NE) }
+ 				180	{ (SE) }
+ 				180-270	{ (SE) }
+ 				270	{ (NE) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (SE) }
+ 				90	{ (NE) }
+ 				90-180	{ (NE) }
+ 				180	{ (SW) }
+ 				180-270	{ (SE) }
+ 				270	{ (SE) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (S) }
+ 				0-90	{ (SE) }
+ 				90	{ (E) }
+ 				90-180	{ (NE) }
+ 				180	{ (S) }
+ 				180-270	{ (SE) }
+ 				270	{ (E) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OtherRightProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (NW) }
+ 				90	{ (SW) }
+ 				90-180	{ (SW) }
+ 				180	{ (SE) }
+ 				180-270	{ (NW) }
+ 				270	{ (NW) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (NW) }
+ 				90	{ (NW) }
+ 				90-180	{ (SW) }
+ 				180	{ (SW) }
+ 				180-270	{ (NW) }
+ 				270	{ (SW) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (S) }
+ 				0-90	{ (NW) }
+ 				90	{ (W) }
+ 				90-180	{ (SW) }
+ 				180	{ (S) }
+ 				180-270	{ (NW) }
+ 				270	{ (W) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OtherInsideProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SW) }
+ 				0-90	{ (SE) }
+ 				90	{ (SE) }
+ 				90-180	{ (NE) }
+ 				180	{ (NE) }
+ 				180-270	{ (NW) }
+ 				270	{ (NW) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (SE) }
+ 				0-90	{ (SE) }
+ 				90	{ (NE) }
+ 				90-180	{ (NE) }
+ 				180	{ (NW) }
+ 				180-270	{ (NW) }
+ 				270	{ (SW) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (S) }
+ 				0-90	{ (SE) }
+ 				90	{ (E) }
+ 				90-180	{ (NE) }
+ 				180	{ (N) }
+ 				180-270	{ (NW) }
+ 				270	{ (W) }
+ 				270-360	{ (SW) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OtherOutsideProximity
+ 	    {
+ 		which @Case {
+ 		  { x f } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NW) }
+ 				0-90	{ (NW) }
+ 				90	{ (SW) }
+ 				90-180	{ (SW) }
+ 				180	{ (SE) }
+ 				180-270	{ (SE) }
+ 				270	{ (NE) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  { z t } @Yield { labelpos??ANGLE quadcase
+ 				0	{ (NE) }
+ 				0-90	{ (NW) }
+ 				90	{ (NW) }
+ 				90-180	{ (SW) }
+ 				180	{ (SW) }
+ 				180-270	{ (SE) }
+ 				270	{ (SE) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		  else @Yield { labelpos??ANGLE quadcase
+ 				0	{ (N) }
+ 				0-90	{ (NW) }
+ 				90	{ (W) }
+ 				90-180	{ (SW) }
+ 				180	{ (S) }
+ 				180-270	{ (SE) }
+ 				270	{ (E) }
+ 				270-360	{ (NE) }
+ 			  }
+ 		}
+ 	    }
+ 
+ 
+ 	    import @Geometry
+ 	    def @AboveProximity
+ 	    {
+                 labelangle @Case {
+                     "aligned"		@Yield @AlignedAboveProximity
+ 		    "perpendicular"	@Yield @PerpendicularAboveProximity
+                     else		@Yield @OtherAboveProximity
+                 }
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @BelowProximity
+ 	    {
+                 labelangle @Case {
+                     "aligned"		@Yield @AlignedBelowProximity
+ 		    "perpendicular"	@Yield @PerpendicularBelowProximity
+                     else		@Yield @OtherBelowProximity
+                 }
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @LeftProximity
+ 	    {
+                 labelangle @Case {
+                     "aligned"		@Yield @AlignedLeftProximity
+ 		    "perpendicular"	@Yield @PerpendicularLeftProximity
+                     else		@Yield @OtherLeftProximity
+                 }
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @RightProximity
+ 	    {
+                 labelangle @Case {
+                     "aligned"		@Yield @AlignedRightProximity
+ 		    "perpendicular"	@Yield @PerpendicularRightProximity
+                     else		@Yield @OtherRightProximity
+                 }
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @InsideProximity
+ 	    {
+                 labelangle @Case {
+                     "aligned"		@Yield @AlignedInsideProximity
+ 		    "perpendicular"	@Yield @PerpendicularInsideProximity
+                     else		@Yield @OtherInsideProximity
+                 }
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OutsideProximity
+ 	    {
+                 labelangle @Case {
+                     "aligned"		@Yield @AlignedOutsideProximity
+ 		    "perpendicular"	@Yield @PerpendicularOutsideProximity
+                     else		@Yield @OtherOutsideProximity
+                 }
+ 	    }
+ 
+ 	    import @Geometry
+             def proximity
+             {
+                 labelprox @Case {
+                     above   @Yield @AboveProximity
+                     below   @Yield @BelowProximity
+                     left    @Yield @LeftProximity
+                     right   @Yield @RightProximity
+                     inside  @Yield @InsideProximity
+                     outside @Yield @OutsideProximity
+ 		    else    @Yield { "("labelprox")" }
+                 }
+             }
+ 
+ 	    import @Geometry
+ 	    def dorotate
+ 		left point
+ 		right angle
+ 	    {
+ 		{ {0 0} distance point } atangle { {0 0} angleto point + angle }
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def translation
+ 	    {
+ 		labelctr @Case {
+ 		    { no No } @Yield {
+ 			labelpos -- labeltag?!?proximity
+ 		    }
+ 		    { yes Yes } @Yield {
+ 			#P0	:= labelpos
+ 			#P1	:= labeltag?!?proximity -- P0
+ 			#P2	:= labeltag??CTR -- P0
+ 			#TH	:= labelpos??ANGLE
+ 			#P1A	:= P1 dorotate { 0 - TH }
+ 			#P2A	:= P2 dorotate { 0 - TH }
+ 			#PRA	:= { 0 - xcoord P2A 0 - ycoord P1A }
+ 			#PRA dorotate TH ++ P0
+ 			XP1	:= labeltag?!?proximity
+ 			XP2	:= labeltag??CTR
+ 			XANG	:= labelpos??ANGLE
+ 			XTH	:= XANG - 90d - { XP1 angleto XP2 }
+ 			XDIST	:= { XP1 distance XP2 } * sin XTH
+ 			labelpos -- XP1 ++ XDIST atangle XANG
+ 		    }
+ 		}
+ 	    }
+ 
+ 	    @CatchTags @ZeroSize @Transform
+ 		translate { translation ++ labeladjust }
+ 		rotate { finalangle }
+ 		scale { 1 1 }
+ 	    labeltag:: @BoxLabels @CatchTags @AddMargins
+ 		mtop { labelmargin }
+ 		mfoot { labelmargin }
+ 		mleft { labelmargin }
+ 		mright { labelmargin }
+ 	    labelfont @Font labelbreak @Break labelformat label
+ 	}
+ 
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @Node                                                              #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+         def @Node
+             import @Geometry named translate
+                 named to precedence 10 left x right y {
+                   @BackEnd @Case {
+                     PostScript @Yield { x y "ldiagpsub" }
+                     PDF @Yield {""}
+                   }
+                 }
+             {}
+             import @Geometry named rotate	{ 0d			}
+ 	    import @Geometry named outline
+ 		named margin {}
+ 		named shadow {}
+ 		named sides {}
+ 		named angle {}
+ 						{ outline
+ 						    margin { margin }
+ 						    shadow { shadow }
+ 						    sides  { sides  }
+ 						    angle  { angle  }
+ 						}
+ 	    named margin               		{ margin        	}
+ 	    import @Geometry named shadow	{ shadow		}
+ 	    import @Geometry named sides	{ sides			}
+ 	    import @Geometry named angle	{ angle			}
+ 	    named nodetag			{ nodetag		}
+             named outlinestyle
+ 		named solid   { "/ldiagsolid"   }
+ 		named dashed  { "/ldiagdashed"  }
+ 		named cdashed { "/ldiagcdashed" }
+ 		named dotted  { "/ldiagdotted"  }
+ 		named noline  { "/ldiagnoline"  }
+ 						{ outlinestyle     	}
+             import @Geometry named outlinedashlength { outlinedashlength}
+             import @Geometry named outlinewidth
+ 		named thin   { 0.04 ft }
+ 		named medium { 0.08 ft }
+ 		named thick  { 0.12 ft }
+ 						{ outlinewidth     	}
+             named paint				{ paint         	}
+ 	    named font				{ font			}
+ 	    named break				{ break			}
+             named format right @Body		{ format @Body  	}
+             named valign			{ valign        	}
+             named vsize				{ vsize         	}
+             named vindent			{ vindent       	}
+ 	    named vstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ vstrut	 	}
+             named vmargin			{ vmargin       	}
+             named topmargin			{ topmargin     	}
+             named footmargin			{ footmargin    	}
+ 
+             named halign			{ halign        	}
+             named hsize				{ hsize         	}
+             named hindent			{ hindent       	}
+ 	    named hstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ hstrut	 	}
+             named hmargin			{ hmargin       	}
+             named leftmargin			{ leftmargin    	}
+             named rightmargin			{ rightmargin   	}
+ 
+ 	    named nodelabel			{ nodelabel		}
+ 	    named nodelabelmargin		{ nodelabelmargin	}
+ 	    named nodelabelfont			{ nodelabelfont		}
+ 	    named nodelabelbreak		{ nodelabelbreak	}
+ 	    named nodelabelformat right @Body	{ nodelabelformat @Body	}
+ 	    import @Geometry named nodelabelpos	{ nodelabelpos		}
+ 	    named nodelabelprox			{ nodelabelprox		}
+ 	    import @Geometry named nodelabelangle  { nodelabelangle	}
+ 	    named nodelabelctr			{ nodelabelctr		}
+ 	    import @Geometry named nodelabeladjust { nodelabeladjust	}
+ 
+             named alabel			{ alabel		}
+             named alabelmargin			{ alabelmargin		}
+             named alabelfont			{ alabelfont		}
+             named alabelbreak			{ alabelbreak		}
+ 	    named alabelformat right @Body	{ alabelformat @Body	}
+             import @Geometry named alabelpos	{ alabelpos		}
+             named alabelprox			{ alabelprox		}
+             import @Geometry named alabelangle	{ alabelangle		}
+ 	    named alabelctr			{ alabelctr		}
+             import @Geometry named alabeladjust	{ alabeladjust		}
+ 
+             named blabel			{ blabel		}
+             named blabelmargin			{ blabelmargin		}
+             named blabelfont			{ blabelfont		}
+             named blabelbreak			{ blabelbreak		}
+ 	    named blabelformat right @Body	{ blabelformat @Body	}
+             import @Geometry named blabelpos	{ blabelpos		}
+             named blabelprox			{ blabelprox		}
+             import @Geometry named blabelangle	{ blabelangle		}
+ 	    named blabelctr			{ blabelctr		}
+             import @Geometry named blabeladjust	{ blabeladjust		}
+ 
+             named clabel			{ clabel		}
+             named clabelmargin			{ clabelmargin		}
+             named clabelfont			{ clabelfont		}
+             named clabelbreak			{ clabelbreak		}
+ 	    named clabelformat right @Body	{ clabelformat @Body	}
+             import @Geometry named clabelpos	{ clabelpos		}
+             named clabelprox			{ clabelprox		}
+             import @Geometry named clabelangle	{ clabelangle		}
+ 	    named clabelctr			{ clabelctr		}
+             import @Geometry named clabeladjust	{ clabeladjust		}
+ 
+             named dlabel			{ dlabel		}
+             named dlabelmargin			{ dlabelmargin		}
+             named dlabelfont			{ dlabelfont		}
+             named dlabelbreak			{ dlabelbreak		}
+ 	    named dlabelformat right @Body	{ dlabelformat @Body	}
+             import @Geometry named dlabelpos	{ dlabelpos		}
+             named dlabelprox			{ dlabelprox		}
+             import @Geometry named dlabelangle	{ dlabelangle		}
+ 	    named dlabelctr			{ dlabelctr		}
+             import @Geometry named dlabeladjust	{ dlabeladjust		}
+ 
+             right @Body
+         {
+ 
+             def @LabelPos
+ 		left x
+ 		right y
+             {
+ 		nodelabelpos @Case {
+ 		    x    @Yield y
+ 		    else @Yield ""
+ 		}
+             }
+ 
+             def @If
+ 		left cond
+ 		right x
+             {
+ 		cond @Case {
+ 		    { yes Yes } @Yield x
+ 		    else        @Yield ""
+ 		}
+             }
+ 
+ 
+             def @Strut right x
+             {
+ 		def vs { 0.5w @VShift { vstrut @High } }
+ 		def hs {                hstrut @Wide   }
+ 
+ 		@HContract @VContract {
+ 		    @HContract @VContract x | vs / hs |
+ 		}
+             }
+ 
+ 	    def @Indent right x
+ 	    {
+ 		x @Case {
+ 		    { top left   } @Yield 0.0rt
+ 		    { ctr        } @Yield 0.5rt
+ 		    { foot right } @Yield 1.0rt
+ 		    { mctr	     } @Yield 0.5bx
+ 		    else           @Yield x
+ 		}
+ 	    }
+ 
+             def @VSize right x
+             {
+ 		vsize @Case {
+ 		    ""   @Yield x
+ 		    else @Yield { vsize @High { /{@Indent vindent} x / } }
+ 		}
+             }
+ 
+             def @HSize right x
+             {
+ 		hsize @Case {
+ 		    ""   @Yield x
+ 		    else @Yield { hsize @Wide { |{@Indent hindent} x | } }
+ 		}
+             }
+ 
+ 	    def @Align right x
+ 	    {
+ 		x @Case {
+ 		    { top left   } @Yield 0.0w
+ 		    { ctr        } @Yield 0.5w
+ 		    { foot right } @Yield 1.0w
+ 		    { mark       } @Yield "+0i"
+ 		    else           @Yield x
+ 		}
+ 	    }
+ 
+ 	    def @ALabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "a"						}
+ 		    label	{ alabel	     @Else nodelabel		}
+ 		    labelmargin	{ alabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ alabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ alabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { alabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ alabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ alabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ alabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ alabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ alabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @BLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "b"						}
+ 		    label	{ blabel	     @Else nodelabel		}
+ 		    labelmargin	{ blabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ blabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ blabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { blabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ blabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ blabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ blabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ blabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ blabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @CLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "c"						}
+ 		    label	{ clabel	     @Else nodelabel		}
+ 		    labelmargin	{ clabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ clabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ clabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { clabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ clabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ clabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ clabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ clabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ clabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @DLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "d"						}
+ 		    label	{ dlabel	     @Else nodelabel		}
+ 		    labelmargin	{ dlabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ dlabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ dlabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { dlabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ dlabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ dlabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ dlabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ dlabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ dlabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OutLine
+ 	    {
+ 	      @BackEnd @Case {
+ 	        PostScript @Yield {
+ 		outline @Case {
+ 		    box		@Yield { "ldiagbox"			}
+ 		    curvebox	@Yield { "("margin") ldiagcurvebox"	}
+ 		    shadowbox	@Yield { shadow "ldiagshadow ldiagbox"	}
+ 		    square	@Yield { "ldiagsquare"			}
+ 		    diamond	@Yield { "ldiagdiamond"			}
+ 		    polygon	@Yield { sides angle "ldiagpolygon"	}
+ 		    isosceles	@Yield { "ldiagisosceles"		}
+ 		    ellipse	@Yield { "ldiagellipse"			}
+ 		    circle	@Yield { "ldiagcircle"			}
+ 		    else	    @Yield {
+ 				    outline
+ 					margin { "("margin") ldiagdecodelength" }
+ 					shadow { shadow }
+ 					sides  { sides  }
+ 					angle  { angle  }
+ 		    }
+ 		}
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    def @Value
+             {
+               @BackEnd @Case {
+                 PostScript @Yield {
+ 		@HContract @VContract
+ 		{
+ 		    {
+ 			"ldiagnodebegin [" @OutLine "]"
+ 			outlinedashlength "[" outlinestyle "]"
+ 			outlinewidth "/ldiag"paint "ldiagnodeend"
+ 			"(IN) ldiagpushtagdict"
+ 			//
+ 			"ldiagpopuptagdict"
+ 		    }
+ 		    @Graphic
+ 		    {
+ 			{@Align valign} @VShift {@Align halign} @HShift
+ 			@AddMargins
+ 			    mtop   { topmargin   @Else vmargin @Else margin }
+ 			    mfoot  { footmargin  @Else vmargin @Else margin }
+ 			    mleft  { leftmargin  @Else hmargin @Else margin }
+ 			    mright { rightmargin @Else hmargin @Else margin }
+ 			    @HSize @VSize @HContract @VContract
+ 			    font @Font break @Break format @Strut @Body
+ 		    }
+ 		    / {alabel @Else nodelabel} @IfNonEmpty @ALabel
+ 		    / {blabel @Else nodelabel} @IfNonEmpty @BLabel
+ 		    / {clabel @Else nodelabel} @IfNonEmpty @CLabel
+ 		    / {dlabel @Else nodelabel} @IfNonEmpty @DLabel
+ 		}
+                 }
+                 PDF @Yield {}
+               }
+             }
+ 
+ 	    def @TValue
+ 	    {
+ 		nodetag @Case {
+ 		    ""   @Yield @Value
+ 		    else @Yield { nodetag:: @Value }
+ 		}
+ 	    }
+ 
+             translate @Case {
+                   "" @Yield @TValue
+                   else @Yield {
+ 		    @Null & # so that preceding space gets chewed up
+                     @Transform translate { translate } rotate { rotate } @TValue
+                   }
+             }
+         }
+ 
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @ANode                                                             #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+         def @ANode
+             import @Geometry named translate
+                 named to precedence 10 left x right y {
+                   @BackEnd @Case {
+                     PostScript @Yield { x y "ldiagpsub" }
+                     PDF @Yield {""}
+                   }
+                 }
+             {}
+             import @Geometry named rotate	{ 0d			}
+ 	    import @Geometry named outline
+ 		named margin {}
+ 		named shadow {}
+ 		named sides {}
+ 		named angle {}
+ 						{ aoutline
+ 						    margin { margin }
+ 						    shadow { shadow }
+ 						    sides  { sides  }
+ 						    angle  { angle  }
+ 						}
+ 	    named margin               		{ amargin        	}
+ 	    import @Geometry named shadow	{ ashadow		}
+ 	    import @Geometry named sides	{ asides		}
+ 	    import @Geometry named angle	{ aangle		}
+ 	    named nodetag			{ anodetag		}
+             named outlinestyle
+ 		named solid   { "/ldiagsolid"   }
+ 		named dashed  { "/ldiagdashed"  }
+ 		named cdashed { "/ldiagcdashed" }
+ 		named dotted  { "/ldiagdotted"  }
+ 		named noline  { "/ldiagnoline"  }
+ 						{ aoutlinestyle     	}
+             import @Geometry named outlinedashlength { aoutlinedashlength}
+             import @Geometry named outlinewidth
+ 		named thin   { 0.04 ft }
+ 		named medium { 0.08 ft }
+ 		named thick  { 0.12 ft }
+ 						{ aoutlinewidth     	}
+             named paint				{ apaint         	}
+ 	    named font				{ afont			}
+ 	    named break				{ abreak			}
+             named format right @Body		{ aformat @Body  	}
+             named valign			{ avalign        	}
+             named vsize				{ avsize         	}
+             named vindent			{ avindent       	}
+ 	    named vstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ avstrut	 	}
+             named vmargin			{ avmargin       	}
+             named topmargin			{ atopmargin     	}
+             named footmargin			{ afootmargin    	}
+ 
+             named halign			{ ahalign        	}
+             named hsize				{ ahsize         	}
+             named hindent			{ ahindent       	}
+ 	    named hstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ ahstrut	 	}
+             named hmargin			{ ahmargin       	}
+             named leftmargin			{ aleftmargin    	}
+             named rightmargin			{ arightmargin   	}
+ 
+ 	    named nodelabel			{ anodelabel		}
+ 	    named nodelabelmargin		{ anodelabelmargin	}
+ 	    named nodelabelfont			{ anodelabelfont		}
+ 	    named nodelabelbreak		{ anodelabelbreak	}
+ 	    named nodelabelformat right @Body	{ anodelabelformat @Body	}
+ 	    import @Geometry named nodelabelpos	{ anodelabelpos		}
+ 	    named nodelabelprox			{ anodelabelprox		}
+ 	    import @Geometry named nodelabelangle  { anodelabelangle	}
+ 	    named nodelabelctr			{ anodelabelctr		}
+ 	    import @Geometry named nodelabeladjust { anodelabeladjust	}
+ 
+             named alabel			{ aalabel		}
+             named alabelmargin			{ aalabelmargin		}
+             named alabelfont			{ aalabelfont		}
+             named alabelbreak			{ aalabelbreak		}
+ 	    named alabelformat right @Body	{ aalabelformat @Body	}
+             import @Geometry named alabelpos	{ aalabelpos		}
+             named alabelprox			{ aalabelprox		}
+             import @Geometry named alabelangle	{ aalabelangle		}
+ 	    named alabelctr			{ aalabelctr		}
+             import @Geometry named alabeladjust	{ aalabeladjust		}
+ 
+             named blabel			{ ablabel		}
+             named blabelmargin			{ ablabelmargin		}
+             named blabelfont			{ ablabelfont		}
+             named blabelbreak			{ ablabelbreak		}
+ 	    named blabelformat right @Body	{ ablabelformat @Body	}
+             import @Geometry named blabelpos	{ ablabelpos		}
+             named blabelprox			{ ablabelprox		}
+             import @Geometry named blabelangle	{ ablabelangle		}
+ 	    named blabelctr			{ ablabelctr		}
+             import @Geometry named blabeladjust	{ ablabeladjust		}
+ 
+             named clabel			{ aclabel		}
+             named clabelmargin			{ aclabelmargin		}
+             named clabelfont			{ aclabelfont		}
+             named clabelbreak			{ aclabelbreak		}
+ 	    named clabelformat right @Body	{ aclabelformat @Body	}
+             import @Geometry named clabelpos	{ aclabelpos		}
+             named clabelprox			{ aclabelprox		}
+             import @Geometry named clabelangle	{ aclabelangle		}
+ 	    named clabelctr			{ aclabelctr		}
+             import @Geometry named clabeladjust	{ aclabeladjust		}
+ 
+             named dlabel			{ adlabel		}
+             named dlabelmargin			{ adlabelmargin		}
+             named dlabelfont			{ adlabelfont		}
+             named dlabelbreak			{ adlabelbreak		}
+ 	    named dlabelformat right @Body	{ adlabelformat @Body	}
+             import @Geometry named dlabelpos	{ adlabelpos		}
+             named dlabelprox			{ adlabelprox		}
+             import @Geometry named dlabelangle	{ adlabelangle		}
+ 	    named dlabelctr			{ adlabelctr		}
+             import @Geometry named dlabeladjust	{ adlabeladjust		}
+ 
+             right @Body
+         {
+ 
+             def @LabelPos
+ 		left x
+ 		right y
+             {
+ 		nodelabelpos @Case {
+ 		    x    @Yield y
+ 		    else @Yield ""
+ 		}
+             }
+ 
+             def @If
+ 		left cond
+ 		right x
+             {
+ 		cond @Case {
+ 		    { yes Yes } @Yield x
+ 		    else        @Yield ""
+ 		}
+             }
+ 
+ 
+             def @Strut right x
+             {
+ 		def vs { 0.5w @VShift { vstrut @High } }
+ 		def hs {                hstrut @Wide   }
+ 
+ 		@HContract @VContract {
+ 		    @HContract @VContract x | vs / hs |
+ 		}
+             }
+ 
+ 	    def @Indent right x
+ 	    {
+ 		x @Case {
+ 		    { top left   } @Yield 0.0rt
+ 		    { ctr        } @Yield 0.5rt
+ 		    { foot right } @Yield 1.0rt
+ 		    { mctr	     } @Yield 0.5bx
+ 		    else           @Yield x
+ 		}
+ 	    }
+ 
+             def @VSize right x
+             {
+ 		vsize @Case {
+ 		    ""   @Yield x
+ 		    else @Yield { vsize @High { /{@Indent vindent} x / } }
+ 		}
+             }
+ 
+             def @HSize right x
+             {
+ 		hsize @Case {
+ 		    ""   @Yield x
+ 		    else @Yield { hsize @Wide { |{@Indent hindent} x | } }
+ 		}
+             }
+ 
+ 	    def @Align right x
+ 	    {
+ 		x @Case {
+ 		    { top left   } @Yield 0.0w
+ 		    { ctr        } @Yield 0.5w
+ 		    { foot right } @Yield 1.0w
+ 		    { mark       } @Yield "+0i"
+ 		    else           @Yield x
+ 		}
+ 	    }
+ 
+ 	    def @ALabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "a"						}
+ 		    label	{ alabel	     @Else nodelabel		}
+ 		    labelmargin	{ alabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ alabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ alabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { alabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ alabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ alabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ alabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ alabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ alabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @BLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "b"						}
+ 		    label	{ blabel	     @Else nodelabel		}
+ 		    labelmargin	{ blabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ blabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ blabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { blabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ blabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ blabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ blabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ blabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ blabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @CLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "c"						}
+ 		    label	{ clabel	     @Else nodelabel		}
+ 		    labelmargin	{ clabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ clabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ clabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { clabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ clabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ clabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ clabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ clabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ clabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @DLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "d"						}
+ 		    label	{ dlabel	     @Else nodelabel		}
+ 		    labelmargin	{ dlabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ dlabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ dlabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { dlabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ dlabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ dlabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ dlabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ dlabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ dlabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OutLine
+ 	    {
+ 	      @BackEnd @Case {
+ 	        PostScript @Yield {
+ 		outline @Case {
+ 		    box		@Yield { "ldiagbox"			}
+ 		    curvebox	@Yield { "("margin") ldiagcurvebox"	}
+ 		    shadowbox	@Yield { shadow "ldiagshadow ldiagbox"	}
+ 		    square	@Yield { "ldiagsquare"			}
+ 		    diamond	@Yield { "ldiagdiamond"			}
+ 		    polygon	@Yield { sides angle "ldiagpolygon"	}
+ 		    isosceles	@Yield { "ldiagisosceles"		}
+ 		    ellipse	@Yield { "ldiagellipse"			}
+ 		    circle	@Yield { "ldiagcircle"			}
+ 		    else	    @Yield {
+ 				    outline
+ 					margin { "("margin") ldiagdecodelength" }
+ 					shadow { shadow }
+ 					sides  { sides  }
+ 					angle  { angle  }
+ 		    }
+ 		}
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    def @Value
+             {
+               @BackEnd @Case {
+                 PostScript @Yield {
+ 		@HContract @VContract
+ 		{
+ 		    {
+ 			"ldiagnodebegin [" @OutLine "]"
+ 			outlinedashlength "[" outlinestyle "]"
+ 			outlinewidth "/ldiag"paint "ldiagnodeend"
+ 			"(IN) ldiagpushtagdict"
+ 			//
+ 			"ldiagpopuptagdict"
+ 		    }
+ 		    @Graphic
+ 		    {
+ 			{@Align valign} @VShift {@Align halign} @HShift
+ 			@AddMargins
+ 			    mtop   { topmargin   @Else vmargin @Else margin }
+ 			    mfoot  { footmargin  @Else vmargin @Else margin }
+ 			    mleft  { leftmargin  @Else hmargin @Else margin }
+ 			    mright { rightmargin @Else hmargin @Else margin }
+ 			    @HSize @VSize @HContract @VContract
+ 			    font @Font break @Break format @Strut @Body
+ 		    }
+ 		    / {alabel @Else nodelabel} @IfNonEmpty @ALabel
+ 		    / {blabel @Else nodelabel} @IfNonEmpty @BLabel
+ 		    / {clabel @Else nodelabel} @IfNonEmpty @CLabel
+ 		    / {dlabel @Else nodelabel} @IfNonEmpty @DLabel
+ 		}
+                 }
+                 PDF @Yield {}
+               }
+             }
+ 
+ 	    def @TValue
+ 	    {
+ 		nodetag @Case {
+ 		    ""   @Yield @Value
+ 		    else @Yield { nodetag:: @Value }
+ 		}
+ 	    }
+ 
+             translate @Case {
+                   "" @Yield @TValue
+                   else @Yield {
+ 		    @Null & # so that preceding space gets chewed up
+                     @Transform translate { translate } rotate { rotate } @TValue
+                   }
+             }
+         }
+ 
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @BNode                                                             #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+         def @BNode
+             import @Geometry named translate
+                 named to precedence 10 left x right y {
+                   @BackEnd @Case {
+                     PostScript @Yield { x y "ldiagpsub" }
+                     PDF @Yield {""}
+                   }
+                 }
+             {}
+             import @Geometry named rotate	{ 0d			}
+ 	    import @Geometry named outline
+ 		named margin {}
+ 		named shadow {}
+ 		named sides {}
+ 		named angle {}
+ 						{ boutline
+ 						    margin { margin }
+ 						    shadow { shadow }
+ 						    sides  { sides  }
+ 						    angle  { angle  }
+ 						}
+ 	    named margin               		{ bmargin        	}
+ 	    import @Geometry named shadow	{ bshadow		}
+ 	    import @Geometry named sides	{ bsides		}
+ 	    import @Geometry named angle	{ bangle		}
+ 	    named nodetag			{ bnodetag		}
+             named outlinestyle
+ 		named solid   { "/ldiagsolid"   }
+ 		named dashed  { "/ldiagdashed"  }
+ 		named cdashed { "/ldiagcdashed" }
+ 		named dotted  { "/ldiagdotted"  }
+ 		named noline  { "/ldiagnoline"  }
+ 						{ boutlinestyle     	}
+             import @Geometry named outlinedashlength { boutlinedashlength}
+             import @Geometry named outlinewidth
+ 		named thin   { 0.04 ft }
+ 		named medium { 0.08 ft }
+ 		named thick  { 0.12 ft }
+ 						{ boutlinewidth     	}
+             named paint				{ bpaint         	}
+ 	    named font				{ bfont			}
+ 	    named break				{ bbreak			}
+             named format right @Body		{ bformat @Body  	}
+             named valign			{ bvalign        	}
+             named vsize				{ bvsize         	}
+             named vindent			{ bvindent       	}
+ 	    named vstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ bvstrut	 	}
+             named vmargin			{ bvmargin       	}
+             named topmargin			{ btopmargin     	}
+             named footmargin			{ bfootmargin    	}
+ 
+             named halign			{ bhalign        	}
+             named hsize				{ bhsize         	}
+             named hindent			{ bhindent       	}
+ 	    named hstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ bhstrut	 	}
+             named hmargin			{ bhmargin       	}
+             named leftmargin			{ bleftmargin    	}
+             named rightmargin			{ brightmargin   	}
+ 
+ 	    named nodelabel			{ bnodelabel		}
+ 	    named nodelabelmargin		{ bnodelabelmargin	}
+ 	    named nodelabelfont			{ bnodelabelfont		}
+ 	    named nodelabelbreak		{ bnodelabelbreak	}
+ 	    named nodelabelformat right @Body	{ bnodelabelformat @Body	}
+ 	    import @Geometry named nodelabelpos	{ bnodelabelpos		}
+ 	    named nodelabelprox			{ bnodelabelprox		}
+ 	    import @Geometry named nodelabelangle  { bnodelabelangle	}
+ 	    named nodelabelctr			{ bnodelabelctr		}
+ 	    import @Geometry named nodelabeladjust { bnodelabeladjust	}
+ 
+             named alabel			{ balabel		}
+             named alabelmargin			{ balabelmargin		}
+             named alabelfont			{ balabelfont		}
+             named alabelbreak			{ balabelbreak		}
+ 	    named alabelformat right @Body	{ balabelformat @Body	}
+             import @Geometry named alabelpos	{ balabelpos		}
+             named alabelprox			{ balabelprox		}
+             import @Geometry named alabelangle	{ balabelangle		}
+ 	    named alabelctr			{ balabelctr		}
+             import @Geometry named alabeladjust	{ balabeladjust		}
+ 
+             named blabel			{ bblabel		}
+             named blabelmargin			{ bblabelmargin		}
+             named blabelfont			{ bblabelfont		}
+             named blabelbreak			{ bblabelbreak		}
+ 	    named blabelformat right @Body	{ bblabelformat @Body	}
+             import @Geometry named blabelpos	{ bblabelpos		}
+             named blabelprox			{ bblabelprox		}
+             import @Geometry named blabelangle	{ bblabelangle		}
+ 	    named blabelctr			{ bblabelctr		}
+             import @Geometry named blabeladjust	{ bblabeladjust		}
+ 
+             named clabel			{ bclabel		}
+             named clabelmargin			{ bclabelmargin		}
+             named clabelfont			{ bclabelfont		}
+             named clabelbreak			{ bclabelbreak		}
+ 	    named clabelformat right @Body	{ bclabelformat @Body	}
+             import @Geometry named clabelpos	{ bclabelpos		}
+             named clabelprox			{ bclabelprox		}
+             import @Geometry named clabelangle	{ bclabelangle		}
+ 	    named clabelctr			{ bclabelctr		}
+             import @Geometry named clabeladjust	{ bclabeladjust		}
+ 
+             named dlabel			{ bdlabel		}
+             named dlabelmargin			{ bdlabelmargin		}
+             named dlabelfont			{ bdlabelfont		}
+             named dlabelbreak			{ bdlabelbreak		}
+ 	    named dlabelformat right @Body	{ bdlabelformat @Body	}
+             import @Geometry named dlabelpos	{ bdlabelpos		}
+             named dlabelprox			{ bdlabelprox		}
+             import @Geometry named dlabelangle	{ bdlabelangle		}
+ 	    named dlabelctr			{ bdlabelctr		}
+             import @Geometry named dlabeladjust	{ bdlabeladjust		}
+ 
+             right @Body
+         {
+ 
+             def @LabelPos
+ 		left x
+ 		right y
+             {
+ 		nodelabelpos @Case {
+ 		    x    @Yield y
+ 		    else @Yield ""
+ 		}
+             }
+ 
+             def @If
+ 		left cond
+ 		right x
+             {
+ 		cond @Case {
+ 		    { yes Yes } @Yield x
+ 		    else        @Yield ""
+ 		}
+             }
+ 
+ 
+             def @Strut right x
+             {
+ 		def vs { 0.5w @VShift { vstrut @High } }
+ 		def hs {                hstrut @Wide   }
+ 
+ 		@HContract @VContract {
+ 		    @HContract @VContract x | vs / hs |
+ 		}
+             }
+ 
+ 	    def @Indent right x
+ 	    {
+ 		x @Case {
+ 		    { top left   } @Yield 0.0rt
+ 		    { ctr        } @Yield 0.5rt
+ 		    { foot right } @Yield 1.0rt
+ 		    { mctr	     } @Yield 0.5bx
+ 		    else           @Yield x
+ 		}
+ 	    }
+ 
+             def @VSize right x
+             {
+ 		vsize @Case {
+ 		    ""   @Yield x
+ 		    else @Yield { vsize @High { /{@Indent vindent} x / } }
+ 		}
+             }
+ 
+             def @HSize right x
+             {
+ 		hsize @Case {
+ 		    ""   @Yield x
+ 		    else @Yield { hsize @Wide { |{@Indent hindent} x | } }
+ 		}
+             }
+ 
+ 	    def @Align right x
+ 	    {
+ 		x @Case {
+ 		    { top left   } @Yield 0.0w
+ 		    { ctr        } @Yield 0.5w
+ 		    { foot right } @Yield 1.0w
+ 		    { mark       } @Yield "+0i"
+ 		    else           @Yield x
+ 		}
+ 	    }
+ 
+ 	    def @ALabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "a"						}
+ 		    label	{ alabel	     @Else nodelabel		}
+ 		    labelmargin	{ alabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ alabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ alabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { alabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ alabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ alabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ alabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ alabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ alabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @BLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "b"						}
+ 		    label	{ blabel	     @Else nodelabel		}
+ 		    labelmargin	{ blabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ blabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ blabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { blabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ blabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ blabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ blabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ blabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ blabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @CLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "c"						}
+ 		    label	{ clabel	     @Else nodelabel		}
+ 		    labelmargin	{ clabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ clabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ clabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { clabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ clabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ clabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ clabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ clabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ clabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @DLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "d"						}
+ 		    label	{ dlabel	     @Else nodelabel		}
+ 		    labelmargin	{ dlabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ dlabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ dlabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { dlabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ dlabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ dlabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ dlabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ dlabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ dlabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OutLine
+ 	    {
+ 	      @BackEnd @Case {
+ 	        PostScript @Yield {
+ 		outline @Case {
+ 		    box		@Yield { "ldiagbox"			}
+ 		    curvebox	@Yield { "("margin") ldiagcurvebox"	}
+ 		    shadowbox	@Yield { shadow "ldiagshadow ldiagbox"	}
+ 		    square	@Yield { "ldiagsquare"			}
+ 		    diamond	@Yield { "ldiagdiamond"			}
+ 		    polygon	@Yield { sides angle "ldiagpolygon"	}
+ 		    isosceles	@Yield { "ldiagisosceles"		}
+ 		    ellipse	@Yield { "ldiagellipse"			}
+ 		    circle	@Yield { "ldiagcircle"			}
+ 		    else	    @Yield {
+ 				    outline
+ 					margin { "("margin") ldiagdecodelength" }
+ 					shadow { shadow }
+ 					sides  { sides  }
+ 					angle  { angle  }
+ 		    }
+ 		}
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    def @Value
+             {
+               @BackEnd @Case {
+                 PostScript @Yield {
+ 		@HContract @VContract
+ 		{
+ 		    {
+ 			"ldiagnodebegin [" @OutLine "]"
+ 			outlinedashlength "[" outlinestyle "]"
+ 			outlinewidth "/ldiag"paint "ldiagnodeend"
+ 			"(IN) ldiagpushtagdict"
+ 			//
+ 			"ldiagpopuptagdict"
+ 		    }
+ 		    @Graphic
+ 		    {
+ 			{@Align valign} @VShift {@Align halign} @HShift
+ 			@AddMargins
+ 			    mtop   { topmargin   @Else vmargin @Else margin }
+ 			    mfoot  { footmargin  @Else vmargin @Else margin }
+ 			    mleft  { leftmargin  @Else hmargin @Else margin }
+ 			    mright { rightmargin @Else hmargin @Else margin }
+ 			    @HSize @VSize @HContract @VContract
+ 			    font @Font break @Break format @Strut @Body
+ 		    }
+ 		    / {alabel @Else nodelabel} @IfNonEmpty @ALabel
+ 		    / {blabel @Else nodelabel} @IfNonEmpty @BLabel
+ 		    / {clabel @Else nodelabel} @IfNonEmpty @CLabel
+ 		    / {dlabel @Else nodelabel} @IfNonEmpty @DLabel
+ 		}
+                 }
+                 PDF @Yield {}
+               }
+             }
+ 
+ 	    def @TValue
+ 	    {
+ 		nodetag @Case {
+ 		    ""   @Yield @Value
+ 		    else @Yield { nodetag:: @Value }
+ 		}
+ 	    }
+ 
+             translate @Case {
+                   "" @Yield @TValue
+                   else @Yield {
+ 		    @Null & # so that preceding space gets chewed up
+                     @Transform translate { translate } rotate { rotate } @TValue
+                   }
+             }
+         }
+ 
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @CNode                                                             #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+         def @CNode
+             import @Geometry named translate
+                 named to precedence 10 left x right y {
+                   @BackEnd @Case {
+                     PostScript @Yield { x y "ldiagpsub" }
+                     PDF @Yield {""}
+                   }
+                 }
+             {}
+             import @Geometry named rotate	{ 0d			}
+ 	    import @Geometry named outline
+ 		named margin {}
+ 		named shadow {}
+ 		named sides {}
+ 		named angle {}
+ 						{ coutline
+ 						    margin { margin }
+ 						    shadow { shadow }
+ 						    sides  { sides  }
+ 						    angle  { angle  }
+ 						}
+ 	    named margin               		{ cmargin        	}
+ 	    import @Geometry named shadow	{ cshadow		}
+ 	    import @Geometry named sides	{ csides		}
+ 	    import @Geometry named angle	{ cangle		}
+ 	    named nodetag			{ cnodetag		}
+             named outlinestyle
+ 		named solid   { "/ldiagsolid"   }
+ 		named dashed  { "/ldiagdashed"  }
+ 		named cdashed { "/ldiagcdashed" }
+ 		named dotted  { "/ldiagdotted"  }
+ 		named noline  { "/ldiagnoline"  }
+ 						{ coutlinestyle     	}
+             import @Geometry named outlinedashlength { coutlinedashlength}
+             import @Geometry named outlinewidth
+ 		named thin   { 0.04 ft }
+ 		named medium { 0.08 ft }
+ 		named thick  { 0.12 ft }
+ 						{ coutlinewidth     	}
+             named paint				{ cpaint         	}
+ 	    named font				{ cfont			}
+ 	    named break				{ cbreak			}
+             named format right @Body		{ cformat @Body  	}
+             named valign			{ cvalign        	}
+             named vsize				{ cvsize         	}
+             named vindent			{ cvindent       	}
+ 	    named vstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ cvstrut	 	}
+             named vmargin			{ cvmargin       	}
+             named topmargin			{ ctopmargin     	}
+             named footmargin			{ cfootmargin    	}
+ 
+             named halign			{ chalign        	}
+             named hsize				{ chsize         	}
+             named hindent			{ chindent       	}
+ 	    named hstrut
+ 		named no  { 0.0f }
+ 		named yes { 1.0f }
+ 						{ chstrut	 	}
+             named hmargin			{ chmargin       	}
+             named leftmargin			{ cleftmargin    	}
+             named rightmargin			{ crightmargin   	}
+ 
+ 	    named nodelabel			{ cnodelabel		}
+ 	    named nodelabelmargin		{ cnodelabelmargin	}
+ 	    named nodelabelfont			{ cnodelabelfont		}
+ 	    named nodelabelbreak		{ cnodelabelbreak	}
+ 	    named nodelabelformat right @Body	{ cnodelabelformat @Body	}
+ 	    import @Geometry named nodelabelpos	{ cnodelabelpos		}
+ 	    named nodelabelprox			{ cnodelabelprox		}
+ 	    import @Geometry named nodelabelangle  { cnodelabelangle	}
+ 	    named nodelabelctr			{ cnodelabelctr		}
+ 	    import @Geometry named nodelabeladjust { cnodelabeladjust	}
+ 
+             named alabel			{ calabel		}
+             named alabelmargin			{ calabelmargin		}
+             named alabelfont			{ calabelfont		}
+             named alabelbreak			{ calabelbreak		}
+ 	    named alabelformat right @Body	{ calabelformat @Body	}
+             import @Geometry named alabelpos	{ calabelpos		}
+             named alabelprox			{ calabelprox		}
+             import @Geometry named alabelangle	{ calabelangle		}
+ 	    named alabelctr			{ calabelctr		}
+             import @Geometry named alabeladjust	{ calabeladjust		}
+ 
+             named blabel			{ cblabel		}
+             named blabelmargin			{ cblabelmargin		}
+             named blabelfont			{ cblabelfont		}
+             named blabelbreak			{ cblabelbreak		}
+ 	    named blabelformat right @Body	{ cblabelformat @Body	}
+             import @Geometry named blabelpos	{ cblabelpos		}
+             named blabelprox			{ cblabelprox		}
+             import @Geometry named blabelangle	{ cblabelangle		}
+ 	    named blabelctr			{ cblabelctr		}
+             import @Geometry named blabeladjust	{ cblabeladjust		}
+ 
+             named clabel			{ cclabel		}
+             named clabelmargin			{ cclabelmargin		}
+             named clabelfont			{ cclabelfont		}
+             named clabelbreak			{ cclabelbreak		}
+ 	    named clabelformat right @Body	{ cclabelformat @Body	}
+             import @Geometry named clabelpos	{ cclabelpos		}
+             named clabelprox			{ cclabelprox		}
+             import @Geometry named clabelangle	{ cclabelangle		}
+ 	    named clabelctr			{ cclabelctr		}
+             import @Geometry named clabeladjust	{ cclabeladjust		}
+ 
+             named dlabel			{ cdlabel		}
+             named dlabelmargin			{ cdlabelmargin		}
+             named dlabelfont			{ cdlabelfont		}
+             named dlabelbreak			{ cdlabelbreak		}
+ 	    named dlabelformat right @Body	{ cdlabelformat @Body	}
+             import @Geometry named dlabelpos	{ cdlabelpos		}
+             named dlabelprox			{ cdlabelprox		}
+             import @Geometry named dlabelangle	{ cdlabelangle		}
+ 	    named dlabelctr			{ cdlabelctr		}
+             import @Geometry named dlabeladjust	{ cdlabeladjust		}
+ 
+             right @Body
+         {
+ 
+             def @LabelPos
+ 		left x
+ 		right y
+             {
+ 		nodelabelpos @Case {
+ 		    x    @Yield y
+ 		    else @Yield ""
+ 		}
+             }
+ 
+             def @If
+ 		left cond
+ 		right x
+             {
+ 		cond @Case {
+ 		    { yes Yes } @Yield x
+ 		    else        @Yield ""
+ 		}
+             }
+ 
+ 
+             def @Strut right x
+             {
+ 		def vs { 0.5w @VShift { vstrut @High } }
+ 		def hs {                hstrut @Wide   }
+ 
+ 		@HContract @VContract {
+ 		    @HContract @VContract x | vs / hs |
+ 		}
+             }
+ 
+ 	    def @Indent right x
+ 	    {
+ 		x @Case {
+ 		    { top left   } @Yield 0.0rt
+ 		    { ctr        } @Yield 0.5rt
+ 		    { foot right } @Yield 1.0rt
+ 		    { mctr	     } @Yield 0.5bx
+ 		    else           @Yield x
+ 		}
+ 	    }
+ 
+             def @VSize right x
+             {
+ 		vsize @Case {
+ 		    ""   @Yield x
+ 		    else @Yield { vsize @High { /{@Indent vindent} x / } }
+ 		}
+             }
+ 
+             def @HSize right x
+             {
+ 		hsize @Case {
+ 		    ""   @Yield x
+ 		    else @Yield { hsize @Wide { |{@Indent hindent} x | } }
+ 		}
+             }
+ 
+ 	    def @Align right x
+ 	    {
+ 		x @Case {
+ 		    { top left   } @Yield 0.0w
+ 		    { ctr        } @Yield 0.5w
+ 		    { foot right } @Yield 1.0w
+ 		    { mark       } @Yield "+0i"
+ 		    else           @Yield x
+ 		}
+ 	    }
+ 
+ 	    def @ALabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "a"						}
+ 		    label	{ alabel	     @Else nodelabel		}
+ 		    labelmargin	{ alabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ alabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ alabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { alabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ alabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ alabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ alabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ alabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ alabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @BLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "b"						}
+ 		    label	{ blabel	     @Else nodelabel		}
+ 		    labelmargin	{ blabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ blabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ blabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { blabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ blabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ blabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ blabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ blabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ blabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @CLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "c"						}
+ 		    label	{ clabel	     @Else nodelabel		}
+ 		    labelmargin	{ clabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ clabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ clabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { clabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ clabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ clabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ clabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ clabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ clabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    def @DLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "d"						}
+ 		    label	{ dlabel	     @Else nodelabel		}
+ 		    labelmargin	{ dlabelmargin	     @Else nodelabelmargin	}
+ 		    labelfont	{ dlabelfont	     @Else nodelabelfont	}
+ 		    labelbreak	{ dlabelbreak	     @Else nodelabelbreak	}
+ 		    labelformat { dlabelformat @Body @Else nodelabelformat @Body}
+ 		    labelpos	{ dlabelpos	     @Else nodelabelpos		}
+ 		    labelprox	{ dlabelprox	     @Else nodelabelprox	}
+ 		    labelangle	{ dlabelangle	     @Else nodelabelangle	}
+ 		    labelctr	{ dlabelctr	     @Else nodelabelctr		}
+ 		    labeladjust	{ dlabeladjust	     @Else nodelabeladjust	}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @OutLine
+ 	    {
+ 	      @BackEnd @Case {
+ 	        PostScript @Yield {
+ 		outline @Case {
+ 		    box		@Yield { "ldiagbox"			}
+ 		    curvebox	@Yield { "("margin") ldiagcurvebox"	}
+ 		    shadowbox	@Yield { shadow "ldiagshadow ldiagbox"	}
+ 		    square	@Yield { "ldiagsquare"			}
+ 		    diamond	@Yield { "ldiagdiamond"			}
+ 		    polygon	@Yield { sides angle "ldiagpolygon"	}
+ 		    isosceles	@Yield { "ldiagisosceles"		}
+ 		    ellipse	@Yield { "ldiagellipse"			}
+ 		    circle	@Yield { "ldiagcircle"			}
+ 		    else	    @Yield {
+ 				    outline
+ 					margin { "("margin") ldiagdecodelength" }
+ 					shadow { shadow }
+ 					sides  { sides  }
+ 					angle  { angle  }
+ 		    }
+ 		}
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    def @Value
+             {
+               @BackEnd @Case {
+                 PostScript @Yield {
+ 		@HContract @VContract
+ 		{
+ 		    {
+ 			"ldiagnodebegin [" @OutLine "]"
+ 			outlinedashlength "[" outlinestyle "]"
+ 			outlinewidth "/ldiag"paint "ldiagnodeend"
+ 			"(IN) ldiagpushtagdict"
+ 			//
+ 			"ldiagpopuptagdict"
+ 		    }
+ 		    @Graphic
+ 		    {
+ 			{@Align valign} @VShift {@Align halign} @HShift
+ 			@AddMargins
+ 			    mtop   { topmargin   @Else vmargin @Else margin }
+ 			    mfoot  { footmargin  @Else vmargin @Else margin }
+ 			    mleft  { leftmargin  @Else hmargin @Else margin }
+ 			    mright { rightmargin @Else hmargin @Else margin }
+ 			    @HSize @VSize @HContract @VContract
+ 			    font @Font break @Break format @Strut @Body
+ 		    }
+ 		    / {alabel @Else nodelabel} @IfNonEmpty @ALabel
+ 		    / {blabel @Else nodelabel} @IfNonEmpty @BLabel
+ 		    / {clabel @Else nodelabel} @IfNonEmpty @CLabel
+ 		    / {dlabel @Else nodelabel} @IfNonEmpty @DLabel
+ 		}
+                 }
+                 PDF @Yield {}
+               }
+             }
+ 
+ 	    def @TValue
+ 	    {
+ 		nodetag @Case {
+ 		    ""   @Yield @Value
+ 		    else @Yield { nodetag:: @Value }
+ 		}
+ 	    }
+ 
+             translate @Case {
+                   "" @Yield @TValue
+                   else @Yield {
+ 		    @Null & # so that preceding space gets chewed up
+                     @Transform translate { translate } rotate { rotate } @TValue
+                   }
+             }
+         }
+ 
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  @Box, @CurveBox, and other standard node abbreviations             #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+ 	macro @@Node	 { @Node			  }
+         macro @Box	 { @Node outline { box		} }
+         macro @CurveBox	 { @Node outline { curvebox	} }
+ 	macro @ShadowBox { @Node outline { shadowbox	} }
+         macro @Square	 { @Node outline { square	} }
+         macro @Diamond	 { @Node outline { diamond	} }
+         macro @Polygon	 { @Node outline { polygon	} }
+         macro @Isosceles { @Node outline { isosceles	} }
+         macro @Ellipse	 { @Node outline { ellipse	} }
+         macro @Circle	 { @Node outline { circle	} }
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  Arrowheads                                                         #
+         #                                                                     #
+         #######################################################################
+ 	
+ 	macro @InsulatedNode {
+ 	    @Node
+ 		topmargin { 0i }
+ 		footmargin { 0i }
+ 		leftmargin { 0i }
+ 		rightmargin { 0i }
+ 		alabel {}
+ 		blabel {}
+ 		clabel {}
+ 		dlabel {}
+ 		hsize {}
+ 		vsize {}
+ 		vstrut { no }
+ 		hstrut { no }
+ 	}
+ 
+ 	def @SolidArrowHead
+ 	    named width { arrowwidth }
+ 	    named length { arrowlength }
+ 	    named pathwidth { pathwidth }
+ 	{
+ 	    @InsulatedNode
+ 		paint { nochange }
+ 		outlinestyle { noline }
+ 		outlinewidth { pathwidth }
+ 		outline {
+ 		  @BackEnd @Case {
+ 		    PostScript @Yield {
+ 		    "ldiagsolidarrowhead"
+ 		    # 0 0 xsize ysize * 0.5 0 ysize
+ 		    }
+ 		    PDF @Yield {}
+ 		  }
+ 		}
+ 	    {
+ 		length @Wide width @High
+ 	    }
+ 	}
+ 
+ 	def @OpenArrowHead
+ 	    named width { arrowwidth }
+ 	    named length { arrowlength }
+ 	    named pathwidth { pathwidth }
+ 	{
+ 	    @InsulatedNode
+ 		outlinewidth { pathwidth }
+ 		outlinestyle { noline }
+ 		paint { nochange }
+ 		outline {
+ 		  @BackEnd @Case {
+ 		    PostScript @Yield {
+ 		    pathwidth "ldiagopenarrowhead"
+ 
+ 		    # PSW := { 0 0 }
+ 		    # PNW := { 0 ysize }
+ 		    # PE  := { xsize ysize*0.5 }
+ 		    # REL := pathwidth atangle { PE angleto PNW + 90d }
+ 		    # PNA := { 0 ysize*0.5 + pathwidth*0.5 }
+ 		    # PSA := { 0 ysize*0.5 - pathwidth*0.5 }
+ 		    # PNI := {
+ 		    #   PNA PNA ++ { xsize 0 }
+ 		    #   PNW ++ REL PE ++ REL ldiaglineintersect
+ 		    # }
+ 		    # PSI := PNI -- { 0 pathwidth }
+ 		    #
+ 		    # PSW PE PNW PNI PNA PSA PSI PSW
+ 		    }
+ 		    PDF @Yield {}
+ 		  }
+ 		}
+ 	    {
+ 		length @Wide width @High
+ 	    }
+ 	}
+ 
+ 	def @HalfOpenArrowHead
+ 	    named width { arrowwidth }
+ 	    named length { arrowlength }
+ 	    named pathwidth { pathwidth }
+ 	{
+ 	    @InsulatedNode
+ 		paint { nochange }
+ 		outlinestyle { noline }
+ 		outlinewidth { pathwidth }
+ 		outline {
+ 		  @BackEnd @Case {
+ 		    PostScript @Yield {
+ 		    pathwidth "ldiaghalfopenarrowhead"
+ 
+ 		    # 0 0
+ 		    # xsize ysize * 0.5
+ 		    # 0 ysize
+ 		    # xsize*0.3 ysize*0.5 + pathwidth*0.5
+ 		    # 0         ysize*0.5 + pathwidth*0.5
+ 		    # 0         ysize*0.5 - pathwidth*0.5
+ 		    # xsize*0.3 ysize*0.5 - pathwidth*0.5
+ 		    # 0 0
+ 		    }
+ 		    PDF @Yield {}
+ 		  }
+ 		}
+ 	    {
+ 		length @Wide width @High
+ 	    }
+ 	}
+ 
+ 	def @SolidCurvedArrowHead
+ 	    named width { arrowwidth }
+ 	    named length { arrowlength }
+ 	    named pathwidth { pathwidth }
+ 	{
+ 	    @InsulatedNode
+ 		outlinestyle { noline }
+ 		paint { nochange }
+ 		outlinewidth { pathwidth }
+ 		outline {
+ 		  @BackEnd @Case {
+ 		    PostScript @Yield {
+ 		    "ldiagsolidcurvedarrowhead"
+ 		    # 0 0
+ 		    # [0 0 xsize ysize * 0.5 "ldiaglinebetween"
+ 		    #  xsize 0 xsize ysize "ldiaglineintersect" clockwise]
+ 		    # xsize ysize * 0.5
+ 		    # [xsize ysize * 0.5 0 ysize "ldiaglinebetween"
+ 		    #  xsize 0 xsize ysize "ldiaglineintersect" clockwise]
+ 		    # 0 ysize
+ 		    }
+ 		    PDF @Yield {}
+ 		  }
+ 		}
+ 	    {
+ 		length @Wide width @High
+ 	    }
+ 	}
+ 
+ 	def @OpenCurvedArrowHead
+ 	    named width { arrowwidth }
+ 	    named length { arrowlength }
+ 	    named pathwidth { pathwidth }
+ 	{
+ 	    @InsulatedNode
+ 		outlinestyle { noline }
+ 		paint { nochange }
+ 		outlinewidth { pathwidth }
+ 		outline {
+ 		  @BackEnd @Case {
+ 		    PostScript @Yield {
+ 		    pathwidth "ldiagopencurvedarrowhead"
+ 		    # LR:= { 0 0 xsize ysize * 0.5 "ldiaglinebetween"
+ 		    #    xsize 0 xsize ysize "ldiaglineintersect" }
+ 		    # UR:= { xsize ysize * 0.5 0 ysize "ldiaglinebetween"
+ 		    #      xsize 0 xsize ysize "ldiaglineintersect" }
+ 		    # PW2  := pathwidth * 0.5
+ 		    # UMID := {
+ 		    # 0 ysize * 0.5 + PW2  xsize ysize * 0.5 + PW2
+ 		    # {0 ysize} ++ 1f atangle { UR angleto {0 ysize} + 90d }
+ 		    # { 0 ysize } ldiaglineintersect
+ 		    # }
+ 		    # LMID := UMID -- { 0 pathwidth }
+ 		    # 0 0
+ 		    # [LR clockwise]
+ 		    # xsize ysize * 0.5
+ 		    # [UR clockwise]
+ 		    # 0 ysize
+ 		    # UMID
+ 		    # 0 ysize * 0.5 + PW2
+ 		    # 0 ysize * 0.5 - PW2
+ 		    # LMID
+ 		    # 0 0
+ 		    }
+ 		    PDF @Yield {}
+ 		  }
+ 		}
+ 	    {
+ 		length @Wide width @High
+ 	    }
+ 	}
+ 
+ 	def @HalfOpenCurvedArrowHead
+ 	    named width { arrowwidth }
+ 	    named length { arrowlength }
+ 	    named pathwidth { pathwidth }
+ 	{
+ 	    @InsulatedNode
+ 		outlinestyle { noline }
+ 		paint { nochange }
+ 		outlinewidth { pathwidth }
+ 		outline {
+ 		  @BackEnd @Case {
+ 		    PostScript @Yield {
+ 		    pathwidth "ldiaghalfopencurvedarrowhead"
+ 		    # LR:= { 0 0 xsize ysize * 0.5 "ldiaglinebetween"
+ 		    #      xsize 0 xsize ysize "ldiaglineintersect" }
+ 		    # UR:= { xsize ysize * 0.5 0 ysize "ldiaglinebetween"
+ 		    #      xsize 0 xsize ysize "ldiaglineintersect" }
+ 		    # BR:= { 0 0 LR 0 ysize UR "ldiaglineintersect" }
+ 		    # BRAD := { 0 0 } distance BR
+ 		    # PW2  := pathwidth * 0.5
+ 		    # XDIST := sqrt { BRAD*BRAD - PW2*PW2 }
+ 		    # UMID := BR ++ { XDIST PW2 }
+ 		    # LMID := BR ++ { XDIST 0 - PW2 }
+ 		    # 0 0
+ 		    # [LR clockwise]
+ 		    # xsize ysize * 0.5
+ 		    # [UR clockwise]
+ 		    # 0 ysize
+ 		    # [BR clockwise ]
+ 		    # UMID
+ 		    # 0 ysize * 0.5 + PW2
+ 		    # 0 ysize * 0.5 - PW2
+ 		    # LMID
+ 		    # [BR clockwise ]
+ 		    # 0 0
+ 		    }
+ 		    PDF @Yield {}
+ 		  }
+ 		}
+ 	    {
+ 		length @Wide width @High
+ 	    }
+ 	}
+ 
+ 	def @CircleArrowHead
+ 	    named width { arrowwidth }
+ 	    named length { arrowlength }
+ 	    named pathwidth { pathwidth }
+ 	{
+ 	    @InsulatedNode
+ 		outlinestyle { noline }
+ 		paint { nochange }
+ 		outlinewidth { pathwidth }
+ 		outline { circle }
+ 	    { length @Wide length @High }
+ 	}
+ 
+ 	def @BoxArrowHead
+ 	    named width { arrowwidth }
+ 	    named length { arrowlength }
+ 	    named pathwidth { pathwidth }
+ 	{
+ 	    @InsulatedNode
+ 		outlinestyle { noline }
+ 		paint { nochange }
+ 		outlinewidth { pathwidth }
+ 		outline { box }
+ 	    { length @Wide width @High }
+ 	}
+ 
+ 	def @ArrowHead
+ 	    named style { arrowstyle }
+ 	    named width { arrowwidth }
+ 	    named length { arrowlength }
+ 	    named pathwidth { pathwidth }
+ 	{
+ 	    style @Case {
+ 		solid          @Yield @SolidArrowHead
+ 				  width { width } length { length }
+ 				  pathwidth { pathwidth }
+ 		halfopen       @Yield @HalfOpenArrowHead
+ 				  width { width } length { length }
+ 				  pathwidth { pathwidth }
+ 		open           @Yield @OpenArrowHead
+ 				  width { width } length { length }
+ 				  pathwidth { pathwidth }
+ 		curvedsolid    @Yield @SolidCurvedArrowHead
+ 				  width { width } length { length }
+ 				  pathwidth { pathwidth }
+ 		curvedhalfopen @Yield @HalfOpenCurvedArrowHead
+ 				  width { width } length { length }
+ 				  pathwidth { pathwidth }
+ 		curvedopen     @Yield @OpenCurvedArrowHead
+ 				  width { width } length { length }
+ 				  pathwidth { pathwidth }
+ 		circle         @Yield @CircleArrowHead
+ 				  width { width } length { length }
+ 				  pathwidth { pathwidth }
+ 		box            @Yield @BoxArrowHead
+ 				  width { width } length { length }
+ 				  pathwidth { pathwidth }
+ 	    }
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  @Link                                                              #
+         #                                                                     #
+         #######################################################################
+ 	
+         def @Link
+             import @Geometry named path
+                 named from {}
+                 named to {}
+                 named bias {}
+                 named fbias {}
+                 named tbias {}
+                 named radius {}
+                 named xindent {}
+                 named zindent {}
+                 named frompt {}
+                 named topt {}
+                 named arrow {}
+                 named arrowlength {}
+             					{ path
+ 						    from { from }
+ 						    to { to }
+ 						    bias { bias }
+ 						    fbias { fbias }
+ 						    tbias { tbias }
+ 						    radius { radius }
+ 						    xindent { xindent }
+ 						    zindent { zindent }
+ 						    frompt { frompt }
+ 						    topt { topt }
+ 						    arrow { arrow }
+ 						    arrowlength { arrowlength }
+ 						}
+             import @Geometry named from		{ from			}
+             import @Geometry named to		{ to			}
+             import @Geometry named bias		{ bias			}
+             import @Geometry named fbias	{ fbias			}
+             import @Geometry named tbias	{ tbias			}
+             import @Geometry named radius	{ radius		}
+             import @Geometry named xindent	{ xindent		}
+             import @Geometry named zindent	{ zindent		}
+             import @Geometry named frompt	{ frompt		}
+             import @Geometry named topt		{ topt		}
+             named pathstyle
+ 		named solid   { "/ldiagsolid"   }
+ 		named dashed  { "/ldiagdashed"  }
+ 		named cdashed { "/ldiagcdashed" }
+ 		named dotted  { "/ldiagdotted"  }
+ 		named noline  { "/ldiagnoline"  }
+ 						{ pathstyle		}
+             import @Geometry named pathdashlength { pathdashlength	}
+             import @Geometry named pathwidth
+ 		named thin   { 0.04 ft }
+ 		named medium { 0.08 ft }
+ 		named thick  { 0.12 ft }
+ 						{ pathwidth		}
+             import @Geometry named pathgap
+ 		named thin   { 0.08 ft }
+ 		named medium { 0.16 ft }
+ 		named thick  { 0.24 ft }
+ 						{ pathgap		}
+ 
+             named arrow				{ arrow			}
+             named arrowstyle			{ arrowstyle		}
+             named arrowwidth			{ arrowwidth		}
+             named arrowlength			{ arrowlength		}
+ 
+ 	    named linklabel			{ linklabel		}
+ 	    named linklabelmargin		{ linklabelmargin	}
+ 	    named linklabelfont			{ linklabelfont		}
+ 	    named linklabelbreak		{ linklabelbreak	}
+ 	    named linklabelformat right @Body	{ linklabelformat @Body	}
+ 	    import @Geometry named linklabelpos	{ linklabelpos		}
+ 	    named linklabelprox			{ linklabelprox		}
+ 	    import @Geometry named linklabelangle  { linklabelangle	}
+ 	    named linklabelctr			{ linklabelctr		}
+ 	    import @Geometry named linklabeladjust { linklabeladjust	}
+ 
+             named xlabel			{ xlabel		}
+             named xlabelmargin	        	{ xlabelmargin		}
+             named xlabelfont			{ xlabelfont		}
+             named xlabelbreak			{ xlabelbreak		}
+ 	    named xlabelformat right @Body	{ xlabelformat @Body	}
+             import @Geometry named xlabelpos	{ xlabelpos		}
+             named xlabelprox			{ xlabelprox		}
+             import @Geometry named xlabelangle	{ xlabelangle		}
+ 	    named xlabelctr			{ xlabelctr		}
+             import @Geometry named xlabeladjust	{ xlabeladjust		}
+ 
+             named ylabel			{ ylabel		}
+             named ylabelmargin			{ ylabelmargin		}
+             named ylabelfont			{ ylabelfont		}
+             named ylabelbreak			{ ylabelbreak		}
+ 	    named ylabelformat right @Body	{ ylabelformat @Body	}
+             import @Geometry named ylabelpos	{ ylabelpos		}
+             named ylabelprox			{ ylabelprox		}
+             import @Geometry named ylabelangle	{ ylabelangle		}
+ 	    named ylabelctr			{ ylabelctr		}
+             import @Geometry named ylabeladjust	{ ylabeladjust		}
+ 
+             named zlabel			{ zlabel		}
+             named zlabelmargin			{ zlabelmargin		}
+             named zlabelfont			{ zlabelfont		}
+             named zlabelbreak			{ zlabelbreak		}
+ 	    named zlabelformat right @Body	{ zlabelformat @Body	}
+             import @Geometry named zlabelpos	{ zlabelpos		}
+             named zlabelprox			{ zlabelprox		}
+             import @Geometry named zlabelangle	{ zlabelangle		}
+ 	    named zlabelctr			{ zlabelctr		}
+             import @Geometry named zlabeladjust	{ zlabeladjust		}
+ 
+             named fromlabel			{ fromlabel		}
+             named fromlabelmargin		{ fromlabelmargin	}
+             named fromlabelfont			{ fromlabelfont		}
+             named fromlabelbreak		{ fromlabelbreak	}
+ 	    named fromlabelformat right @Body	{ fromlabelformat @Body	}
+             import @Geometry named fromlabelpos	{ fromlabelpos		}
+             named fromlabelprox			{ fromlabelprox		}
+             import @Geometry named fromlabelangle  { fromlabelangle	}
+ 	    named fromlabelctr			{ fromlabelctr		}
+             import @Geometry named fromlabeladjust { fromlabeladjust	}
+ 
+             named tolabel			{ tolabel		}
+             named tolabelmargin			{ tolabelmargin		}
+             named tolabelfont			{ tolabelfont		}
+             named tolabelbreak			{ tolabelbreak		}
+ 	    named tolabelformat right @Body	{ tolabelformat @Body	}
+             import @Geometry named tolabelpos	{ tolabelpos		}
+             named tolabelprox			{ tolabelprox		}
+             import @Geometry named tolabelangle	{ tolabelangle		}
+ 	    named tolabelctr			{ tolabelctr		}
+             import @Geometry named tolabeladjust{ tolabeladjust		}
+ 
+         {
+ 	    def @XLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "x"						}
+ 		    label	{ xlabel	     @Else linklabel		}
+ 		    labelmargin	{ xlabelmargin	     @Else linklabelmargin	}
+ 		    labelfont	{ xlabelfont	     @Else linklabelfont	}
+ 		    labelbreak	{ xlabelbreak	     @Else linklabelbreak	}
+ 		    labelformat { xlabelformat @Body @Else linklabelformat @Body}
+ 		    labelpos	{ xlabelpos	     @Else linklabelpos		}
+ 		    labelprox	{ xlabelprox	     @Else linklabelprox	}
+ 		    labelangle	{ xlabelangle	     @Else linklabelangle	}
+ 		    labelctr	{ xlabelctr	     @Else linklabelctr		}
+ 		    labeladjust	{ xlabeladjust	     @Else linklabeladjust	}
+ 	    }
+ 
+ 	    def @YLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "y"						}
+ 		    label	{ ylabel	     @Else linklabel		}
+ 		    labelmargin	{ ylabelmargin	     @Else linklabelmargin	}
+ 		    labelfont	{ ylabelfont	     @Else linklabelfont	}
+ 		    labelbreak	{ ylabelbreak	     @Else linklabelbreak	}
+ 		    labelformat { ylabelformat @Body @Else linklabelformat @Body}
+ 		    labelpos	{ ylabelpos	     @Else linklabelpos		}
+ 		    labelprox	{ ylabelprox	     @Else linklabelprox	}
+ 		    labelangle	{ ylabelangle	     @Else linklabelangle	}
+ 		    labelctr	{ ylabelctr	     @Else linklabelctr		}
+ 		    labeladjust	{ ylabeladjust	     @Else linklabeladjust	}
+ 	    }
+ 
+ 	    def @ZLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "z"						}
+ 		    label	{ zlabel	     @Else linklabel		}
+ 		    labelmargin	{ zlabelmargin	     @Else linklabelmargin	}
+ 		    labelfont	{ zlabelfont	     @Else linklabelfont	}
+ 		    labelbreak	{ zlabelbreak	     @Else linklabelbreak	}
+ 		    labelformat { zlabelformat @Body @Else linklabelformat @Body}
+ 		    labelpos	{ zlabelpos	     @Else linklabelpos		}
+ 		    labelprox	{ zlabelprox	     @Else linklabelprox	}
+ 		    labelangle	{ zlabelangle	     @Else linklabelangle	}
+ 		    labelctr	{ zlabelctr	     @Else linklabelctr		}
+ 		    labeladjust	{ zlabeladjust	     @Else linklabeladjust	}
+ 	    }
+ 
+ 	    def @FromArrow
+ 	    {
+ 		arrow @Case {
+ 		    { back both } @Yield {
+ 			@ArrowHead
+ 			    style { arrowstyle }
+ 			    width { arrowwidth }
+ 			    length { arrowlength }
+ 			    pathwidth { pathwidth }
+ 		    }
+ 		    else @Yield ""
+ 		}
+ 	    }
+ 
+ 	    def @ToArrow
+ 	    {
+ 		arrow @Case {
+ 		    { yes forward both } @Yield {
+ 			@ArrowHead
+ 			    style { arrowstyle }
+ 			    width { arrowwidth }
+ 			    length { arrowlength }
+ 			    pathwidth { pathwidth }
+ 		    }
+ 		    else @Yield ""
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @LinePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	       {arrow @FromArrowLength arrowlength}
+ 	       {arrow @ToArrowLength arrowlength}
+ 	       "{" from "}" "{" to "}"
+ 	       xindent zindent "ldiaglinepath"
+                # FROM	:< {from??CTR angleto to??CTR}
+                # FROM	:: from boundaryatangle FROM at ANGLE
+                # 	++ {arrow @FromArrowLength arrowlength}atangle FROM at ANGLE
+                # TO  	:< FROM at ANGLE
+                # TO  	:: to boundaryatangle { TO at ANGLE - 180d }
+                # ++ {arrow @ToArrowLength arrowlength} atangle {TO at ANGLE - 180d}
+                # 		
+                # LMID	:: FROM ** 0.5 ++ TO ** 0.5
+                # LMID	:< FROM at ANGLE
+                # XINDENT	:= xindent min { FROM distance LMID }
+                # LFROM	:: FROM ++ XINDENT atangle FROM at ANGLE
+                # LFROM	:< FROM at ANGLE
+                # ZINDENT	:= zindent min { TO distance LMID }
+                # LTO 	:: TO -- ZINDENT atangle FROM at ANGLE
+                # LTO 	:< FROM at ANGLE
+ 	       #
+                # if cond { direct }
+                # then { FROM TO }
+                # else { FROM LFROM LMID LTO TO }
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @DoubleLinePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	       {arrow @FromArrowLength arrowlength}
+ 	       {arrow @ToArrowLength arrowlength}
+ 	       "{" from "}" "{" to "}"
+ 	       xindent zindent pathgap "ldiagdoublelinepath"
+                # FROM	:< {from??CTR angleto to??CTR}
+                # FROM	:: from boundaryatangle FROM at ANGLE
+                # 	++ {arrow @FromArrowLength arrowlength}atangle FROM at ANGLE
+                # TO  	:< FROM at ANGLE
+                # TO  	:: to boundaryatangle { TO at ANGLE - 180d }
+                # ++ {arrow @ToArrowLength arrowlength} atangle {TO at ANGLE - 180d}
+                # 		
+                # LMID	:: FROM ** 0.5 ++ TO ** 0.5
+                # LMID	:< FROM at ANGLE
+                # XINDENT	:= xindent min { FROM distance LMID }
+                # LFROM	:: FROM ++ XINDENT atangle FROM at ANGLE
+                # LFROM	:< FROM at ANGLE
+                # ZINDENT	:= zindent min { TO distance LMID }
+                # LTO 	:: TO -- ZINDENT atangle FROM at ANGLE
+                # LTO 	:< FROM at ANGLE
+ 	       #
+                # if cond { direct }
+                # then { FROM TO }
+                # else { FROM LFROM LMID LTO TO }
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @ACurvePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	       {arrow @FromArrowLength arrowlength}
+ 	       {arrow @ToArrowLength arrowlength}
+ 	       "{" from "}" "{" to "}"
+ 	       xindent zindent bias "ldiagacurvepath"
+                #  #B1	:= bias max 0.02f
+                #  #B2	:= { from??CTR distance to??CTR } * 0.5
+                #  #BIAS    := B1 min B2
+ 	       #  BIAS  := bias max 0.02f
+                #  XMID	:= from??CTR ** 0.5 ++ to??CTR ** 0.5
+                #  XTOP	:= XMID ++ BIAS atangle {from??CTR angleto to??CTR - 90d}
+                #  CTR  	:= { from??CTR XTOP ldiaglinebetween
+                #  	     to??CTR   XTOP ldiaglinebetween ldiaglineintersect }
+                #  FROM	:: aabout
+                #  		circum { from }
+                #  		extra  { arrow @FromArrowLength arrowlength }
+                #  		centre { CTR }
+ 	       #  FROM 	:< if cond { from??CTR distance FROM > 0 }
+                #  	      then { from??CTR angleto FROM }
+ 	       #  	      else { CTR angleto FROM + 90d }
+                #  TO	:: cabout
+                #  		circum { to }
+                #  		extra  { arrow @ToArrowLength arrowlength }
+                #  		centre { CTR }
+                #  TO   	:< if cond { TO distance to??CTR > 0 }
+                #  	      then { TO angleto to??CTR }
+                #  	      else { CTR angleto TO + 90d }
+                # 
+                #  RADIUS	:= CTR distance FROM
+                #  LMID 	:: CTR ++ RADIUS atangle {
+                #   CTR angleto FROM +
+ 	       #   { {360d + {CTR angleto TO} - {CTR angleto FROM}} mod 360 } / 2
+ 	       #   }
+                #  LMID 	:< CTR angleto LMID  + 90d
+                #
+                #  XINDENT	:= xindent min { FROM distance LMID }
+                #  LFROM	:: CTR ++ RADIUS atangle {
+                #  	   CTR angleto { FROM ++ XINDENT atangle FROM at ANGLE } }
+                #  LFROM	:< CTR angleto LFROM + 90d
+                #  ZINDENT	:= zindent min { TO distance LMID }
+                #  LTO  	:: CTR ++ RADIUS atangle {
+                #  	   CTR angleto { TO ++ ZINDENT atangle {TO at ANGLE+180d}}}
+                #  LTO  	:< CTR angleto LTO   + 90d
+                #
+                #  if cond { direct }
+ 	       #  then { FROM [CTR] TO }
+                #  else { FROM [CTR] LFROM [CTR] LMID [CTR] LTO [CTR] TO }
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @CCurvePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	       {arrow @FromArrowLength arrowlength}
+ 	       {arrow @ToArrowLength arrowlength}
+ 	       "{" from "}" "{" to "}"
+ 	       xindent zindent bias "ldiagccurvepath"
+               #  #B1     := bias max 0.02f
+               #  #B2     := { from??CTR distance to??CTR } * 0.5
+               #  #BIAS   := B1 min B2
+               #  BIAS   := bias max 0.02f
+               #  XMID   := from??CTR ** 0.5 ++ to??CTR ** 0.5
+               #  XTOP   := XMID ++ BIAS atangle {from??CTR angleto to??CTR + 90d}
+               #  CTR    := { from??CTR XTOP ldiaglinebetween
+               #              to??CTR   XTOP ldiaglinebetween ldiaglineintersect }
+               #  FROM   :: cabout
+               #                  circum { from }
+               #                  extra  { arrow @FromArrowLength arrowlength }
+               #                  centre { CTR }
+               #  FROM   :< if cond { from??CTR distance FROM > 0 }
+               #               then { from??CTR angleto FROM }
+               #               else { CTR angleto FROM - 90d }
+               #  TO     :: aabout
+               #                 circum { to }
+               #                 extra  { arrow @ToArrowLength arrowlength }
+               #                 centre { CTR }
+               #  TO     :< if cond { TO distance to??CTR > 0 }
+               #               then { TO angleto to??CTR }
+               #               else { CTR angleto TO - 90d }
+               #
+               #  RADIUS  := CTR distance FROM
+               #  LMID    :: CTR ++ RADIUS atangle {
+               #   CTR angleto TO +
+               #   { {360d + {CTR angleto FROM} - {CTR angleto TO} } mod 360 } / 2
+               #   }
+               #  LMID    :< CTR angleto LMID  - 90d
+               #
+               #  XINDENT := xindent min { FROM distance LMID }
+               #  LFROM   :: CTR ++ RADIUS atangle {
+               #             CTR angleto { FROM ++ XINDENT atangle FROM at ANGLE } }
+               #  LFROM   :< CTR angleto LFROM - 90d
+               #  ZINDENT := zindent min { TO distance LMID }
+               #  LTO     :: CTR ++ RADIUS atangle {
+               #             CTR angleto { TO ++ ZINDENT atangle {TO at ANGLE+180d}}}
+               #  LTO     :< CTR angleto LTO   - 90d
+               #
+               #  if cond { direct }
+               #  then { FROM [CTR clockwise] TO }
+               #  else { FROM [CTR clockwise] LFROM [CTR clockwise]
+               #         LMID [CTR clockwise] LTO   [CTR clockwise] TO }
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+           }
+ 
+ 	    import @Geometry
+ 	    def @BezierPath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	       {arrow @FromArrowLength arrowlength}
+ 	       {arrow @ToArrowLength arrowlength}
+ 	       "{" from "}" "{" to "}"
+ 	       xindent zindent [ frompt ] [ topt ] "ldiagbezierpath"
+               # FROM      :< from??CTR angleto frompt
+               # FROM      :: from boundaryatangle FROM at ANGLE
+               # ++ {arrow @FromArrowLength arrowlength} atangle FROM at ANGLE
+               # TO        :< topt angleto to??CTR
+               # TO        :: to boundaryatangle { TO at ANGLE + 180d }
+               # ++ {arrow @ToArrowLength arrowlength} atangle { TO at ANGLE + 180d }
+               # LFROM     :: FROM ++ { xindent atangle FROM at ANGLE }
+               # LFROM     :< FROM at ANGLE
+               # LTO       :: TO ++ zindent atangle { TO at ANGLE + 180d }
+               # LTO       :< TO at ANGLE
+               # LMID       :: { FROM ++ TO ++ frompt ++ topt } ** 0.25
+               # FROM [frompt topt] TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @VHLinePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent "ldiagvhlinepath"
+               # CTR     := { {xcoord from??CTR} {ycoord to??CTR} }
+               # FANG    := from??CTR angleto CTR
+               # TANG    := to??CTR angleto CTR
+               # FROM    :: from boundaryatangle FANG
+               # ++ {arrow @FromArrowLength arrowlength} atangle FANG
+               # FROM    :< FANG
+               # TO      :: to boundaryatangle TANG
+               # ++ {arrow @ToArrowLength arrowlength} atangle TANG
+               # TO      :< TANG + 180d
+               # FDIST   := FROM distance CTR
+               # TDIST   := TO distance CTR
+               # XINDENT := xindent min FDIST
+               # ZINDENT := zindent min TDIST
+               # LFROM   :: FROM ++ XINDENT atangle FANG
+               # LFROM   :< FROM at ANGLE
+               # LTO     :: TO ++ ZINDENT atangle TANG
+               # LTO     :< TO at ANGLE
+               # LMID    :: CTR 
+               # LMID    :< {1f atangle {FANG + 180d}} angleto
+               #            {1f atangle {TANG + 180d}}
+               # FROM LFROM LMID LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @VHCurvePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent radius "ldiagvhcurvepath"
+               # CTR     := { {xcoord from??CTR} {ycoord to??CTR} }
+               # FANG    := from??CTR angleto CTR
+               # TANG    := to??CTR angleto CTR
+               # FROM    :: from boundaryatangle FANG
+               # ++ {arrow @FromArrowLength arrowlength} atangle FANG
+               # FROM    :< FANG
+               # TO      :: to boundaryatangle TANG
+               # ++ {arrow @ToArrowLength arrowlength} atangle TANG
+               # TO      :< TANG + 180d
+               # FDIST   := FROM distance CTR
+               # TDIST   := TO distance CTR
+               # RADIUS  := radius min FDIST min TDIST 
+               # XINDENT := xindent min { FDIST - RADIUS }
+               # ZINDENT := zindent min { TDIST - RADIUS }
+               # LFROM   :: FROM ++ XINDENT atangle FANG
+               # LFROM   :< FROM at ANGLE
+               # LTO     :: TO ++ ZINDENT atangle TANG
+               # LTO     :< TO at ANGLE
+               # FCTR    := CTR ++ RADIUS atangle { FROM at ANGLE + 180d }
+               # TCTR    := CTR ++ RADIUS atangle { TO at ANGLE          }
+               # XCTR    := CTR ++ RADIUS atangle { FROM at ANGLE + 180d }
+               #                ++ RADIUS atangle { TO at ANGLE }
+               # LMID    :: XCTR ++ RADIUS atangle { XCTR angleto CTR }
+               # LMID    :< FCTR angleto TCTR
+               # FROM LFROM FCTR
+               #     { FCTR angleto TCTR } quadcase
+               #       0        {   }
+               #       0-90     { [XCTR clockwise] }
+               #       90       {   }
+               #       90-180   { [XCTR] }
+               #       180      {   }
+               #       180-270  { [XCTR clockwise] }
+               #       270      {   }
+               #       270-360  { [XCTR] }
+               # TCTR LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @HVLinePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent "ldiaghvlinepath"
+               # CTR     := { {xcoord to??CTR} {ycoord from??CTR} }
+               # FANG    := from??CTR angleto CTR
+               # TANG    := to??CTR angleto CTR
+               # FROM    :: from boundaryatangle FANG
+               # ++ {arrow @FromArrowLength arrowlength} atangle FANG
+               # FROM    :< FANG
+               # TO      :: to boundaryatangle TANG
+               # ++ {arrow @ToArrowLength arrowlength} atangle TANG
+               # TO      :< TANG + 180d
+               # FDIST   := FROM distance CTR
+               # TDIST   := TO distance CTR
+               # XINDENT := xindent min FDIST
+               # ZINDENT := zindent min TDIST
+               # LFROM   :: FROM ++ XINDENT atangle FANG
+               # LFROM   :< FROM at ANGLE
+               # LTO     :: TO ++ ZINDENT atangle TANG
+               # LTO     :< TO at ANGLE
+               # LMID    :: CTR 
+               # LMID    :< {1f atangle {FANG + 180d}} angleto
+               #            {1f atangle {TANG + 180d}}
+               # FROM LFROM LMID LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @HVCurvePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent radius "ldiaghvcurvepath"
+               # CTR     := { {xcoord to??CTR} {ycoord from??CTR} }
+               # FANG    := from??CTR angleto CTR
+               # TANG    := to??CTR angleto CTR
+               # FROM    :: from boundaryatangle FANG
+               # ++ {arrow @FromArrowLength arrowlength} atangle FANG
+               # FROM    :< FANG
+               # TO      :: to boundaryatangle TANG
+               # ++ {arrow @ToArrowLength arrowlength} atangle TANG
+               # TO      :< TANG + 180d
+               # FDIST   := FROM distance CTR
+               # TDIST   := TO distance CTR
+               # RADIUS  := radius min FDIST min TDIST 
+               # XINDENT := xindent min { FDIST - RADIUS }
+               # ZINDENT := zindent min { TDIST - RADIUS }
+               # LFROM   :: FROM ++ XINDENT atangle FANG
+               # LFROM   :< FROM at ANGLE
+               # LTO     :: TO ++ ZINDENT atangle TANG
+               # LTO     :< TO at ANGLE
+               # FCTR    := CTR ++ RADIUS atangle { FROM at ANGLE + 180d }
+               # TCTR    := CTR ++ RADIUS atangle { TO at ANGLE          }
+               # XCTR    := CTR ++ RADIUS atangle { FROM at ANGLE + 180d }
+               #                ++ RADIUS atangle { TO at ANGLE }
+               # LMID    :: XCTR ++ RADIUS atangle { XCTR angleto CTR }
+               # LMID    :< FCTR angleto TCTR
+               # FROM LFROM FCTR
+               #     { FCTR angleto TCTR } quadcase
+               #       0        {   }
+               #       0-90     { [XCTR] }
+               #       90       {   }
+               #       90-180   { [XCTR clockwise] }
+               #       180      {   }
+               #       180-270  { [XCTR] }
+               #       270      {   }
+               #       270-360  { [XCTR clockwise] }
+               # TCTR LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @LVRLinePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent bias "ldiaglvrlinepath"
+               # FROM    :: from boundaryatangle 180d
+               # ++ {arrow @FromArrowLength arrowlength} atangle 180d
+               # FROM    :< 180d
+               # TO      :: to boundaryatangle 180d
+               # ++ {arrow @ToArrowLength arrowlength} atangle 180d
+               # TO      :< 0d
+               # XLEFT   := {{xcoord FROM} min {xcoord TO}} - bias
+               # P1      :: { XLEFT ycoord FROM }
+               # P2      :: { XLEFT ycoord TO   }
+               # VERT    := P1 angleto P2
+               # P1      :< P1 angleto {P1++{1f atangle 180d}++{1f atangle VERT}}
+               # P2      :< P2 angleto {P2++{1f atangle 0d}  ++{1f atangle VERT}}
+               # LMID    :: P1 ** 0.5 ++ P2 ** 0.5
+               # LMID    :< VERT
+               # XINDENT := xindent min {FROM distance P1}
+               # ZINDENT := zindent min {P2   distance TO}
+               # LFROM   :: FROM -- { XINDENT 0 }
+               # LFROM   :< 180d
+               # LTO     :: TO -- { ZINDENT 0 }
+               # LTO     :< 0d
+               # FROM LFROM P1 LMID P2 LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @LVRCurvePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent bias radius "ldiaglvrcurvepath"
+               # FROM    :: from boundaryatangle 180d
+               # ++ {arrow @FromArrowLength arrowlength} atangle 180d
+               # FROM    :< 180d
+               # TO      :: to boundaryatangle 180d
+               # ++ {arrow @ToArrowLength arrowlength} atangle 180d
+               # TO      :< 0d
+               # XLEFT   := {{xcoord FROM} min {xcoord TO}} - bias
+               # XP1     := { XLEFT ycoord FROM }
+               # XP2     := { XLEFT ycoord TO   }
+               # VERT    := XP1 angleto XP2
+               # LMID    :: XP1 ** 0.5 ++ XP2 ** 0.5
+               # LMID    :< VERT
+               # XINDENT := xindent min {FROM distance XP1}
+               # ZINDENT := zindent min {XP2   distance TO}
+               # LFROM   :: FROM -- { XINDENT 0 }
+               # LFROM   :< 180d
+               # LTO     :: TO -- { ZINDENT 0 }
+               # LTO     :< 0d
+               # RADIUS  := radius min { { XP1 distance XP2 } / 2 }
+               # XP1PRE  := XP1 ++ { RADIUS atangle 0d }
+               # XP1POST := XP1 ++ { RADIUS atangle VERT }
+               # XP1CTR  := XP1PRE ++ { RADIUS atangle VERT }
+               # P1      :: XP1CTR ++ { RADIUS atangle { XP1CTR angleto XP1 } }
+               # P1      :< XP1PRE angleto XP1POST
+               # XP2PRE  := XP2 -- { RADIUS atangle VERT }
+               # XP2POST := XP2 ++ { RADIUS atangle 0d }
+               # XP2CTR  := XP2PRE ++ { RADIUS atangle 0d }
+               # P2      :: XP2CTR ++ { RADIUS atangle { XP2CTR angleto XP2 } }
+               # P2      :< XP2PRE angleto XP2POST
+               # FROM LFROM XP1PRE
+               #   {round VERT} quadcase
+               #     90 { [XP1CTR clockwise] P1 [XP1CTR clockwise] }
+               #     270 { [XP1CTR] P1 [XP1CTR] }
+               # XP1POST LMID XP2PRE
+               #   {round VERT} quadcase
+               #     90 { [XP2CTR clockwise] P2 [XP2CTR clockwise] }
+               #     270 { [XP2CTR] P2 [XP2CTR] }
+               # XP2POST LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @RVLLinePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent bias "ldiagrvllinepath"
+               # FROM    :: from boundaryatangle 0d
+               # ++ {arrow @FromArrowLength arrowlength} atangle 0d
+               # FROM    :< 0d
+               # TO      :: to boundaryatangle 0d
+               # ++ {arrow @ToArrowLength arrowlength} atangle 0d
+               # TO      :< 180d
+               # XRIGHT  := {{xcoord FROM} max {xcoord TO}} + bias
+               # P1      :: { XRIGHT ycoord FROM }
+               # P2      :: { XRIGHT ycoord TO   }
+               # VERT    := P1 angleto P2
+               # P1      :< P1 angleto {P1++{1f atangle 0d}  ++{1f atangle VERT}}
+               # P2      :< P2 angleto {P2++{1f atangle 180d}++{1f atangle VERT}}
+               # LMID    :: P1 ** 0.5 ++ P2 ** 0.5
+               # LMID    :< VERT
+               # XINDENT := xindent min {FROM distance P1}
+               # ZINDENT := zindent min {P2   distance TO}
+               # LFROM   :: FROM ++ { XINDENT 0 }
+               # LFROM   :< 0d
+               # LTO     :: TO ++ { ZINDENT 0 }
+               # LTO     :< 180d
+               # FROM LFROM P1 LMID P2 LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @RVLCurvePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent bias radius "ldiagrvlcurvepath"
+               # FROM    :: from boundaryatangle 0d
+               # ++ {arrow @FromArrowLength arrowlength} atangle 0d
+               # FROM    :< 0d
+               # TO      :: to boundaryatangle 0d
+               # ++ {arrow @ToArrowLength arrowlength} atangle 0d
+               # TO      :< 180d
+               # XRIGHT  := {{xcoord FROM} max {xcoord TO}} + bias
+               # XP1     := { XRIGHT ycoord FROM }
+               # XP2     := { XRIGHT ycoord TO   }
+               # VERT    := XP1 angleto XP2
+               # LMID    :: XP1 ** 0.5 ++ XP2 ** 0.5
+               # LMID    :< VERT
+               # XINDENT := xindent min {FROM distance XP1}
+               # ZINDENT := zindent min {XP2   distance TO}
+               # LFROM   :: FROM ++ { XINDENT 0 }
+               # LFROM   :< 0d
+               # LTO     :: TO ++ { ZINDENT 0 }
+               # LTO     :< 180d
+               # RADIUS  := radius min { { XP1 distance XP2 } * 0.5 }
+               # XP1PRE  := XP1 ++ { RADIUS atangle 180d }
+               # XP1POST := XP1 ++ { RADIUS atangle VERT }
+               # XP1CTR  := XP1PRE ++ { RADIUS atangle VERT }
+               # P1      :: XP1CTR ++ { RADIUS atangle { XP1CTR angleto XP1 } }
+               # P1      :< XP1PRE angleto XP1POST
+               # XP2PRE  := XP2 -- { RADIUS atangle VERT }
+               # XP2POST := XP2 ++ { RADIUS atangle 180d }
+               # XP2CTR  := XP2PRE ++ { RADIUS atangle 180d }
+               # P2      :: XP2CTR ++ { RADIUS atangle { XP2CTR angleto XP2 } }
+               # P2      :< XP2PRE angleto XP2POST
+               # FROM LFROM XP1PRE
+               #   {round VERT} quadcase
+               #     90 { [XP1CTR] P1 [XP1CTR] }
+               #     270 { [XP1CTR clockwise] P1 [XP1CTR clockwise] }
+               # XP1POST LMID XP2PRE
+               #   {round VERT} quadcase
+               #     90 { [XP2CTR] P2 [XP2CTR] }
+               #     270 { [XP2CTR clockwise] P2 [XP2CTR clockwise] }
+               # XP2POST LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @DWrapLinePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent bias fbias tbias "ldiagdwraplinepath"
+               # DIRN	:= if cond { xcoord from??CTR < xcoord to??CTR }
+               # 	      then { 180d } else { 0d }
+               # FROM	:: from boundaryatangle DIRN
+               # ++ {arrow @FromArrowLength arrowlength} atangle DIRN
+               # FROM	:< DIRN
+               # TO	:: to boundaryatangle { DIRN + 180d }
+               # ++ {arrow @ToArrowLength arrowlength} atangle { DIRN + 180d }
+               # TO	:< DIRN
+               # P1	:: FROM ++ {fbias max 0} atangle DIRN
+               # P1	:< if cond { DIRN = 180d } then { 225d } else { -45d }
+               # P4	:: TO ++ {tbias max 0} atangle { DIRN + 180d }
+               # P4	:< if cond { DIRN = 180d } then { 135d } else { 45d }
+               # YC	:= ycoord { from boundaryatangle 270d } min
+               # 	   ycoord { to   boundaryatangle 270d }
+               # 	   - { bias max 0 }
+               # P2	:: { xcoord P1 YC }
+               # P2	:< P4 at ANGLE - 180d
+               # P3	:: { xcoord P4 YC }
+               # P3	:< P1 at ANGLE - 180d
+               # XINDENT	:= xindent min { FROM distance P1 }
+               # LFROM	:: FROM ++ XINDENT atangle DIRN
+               # LFROM	:< FROM at ANGLE
+               # ZINDENT	:= zindent min { TO distance P4 }
+               # LTO	:: TO ++ ZINDENT atangle { DIRN + 180d }
+               # LTO	:< TO at ANGLE
+               # LMID	:: P2 ** 0.5 ++ P3 ** 0.5
+               # LMID	:< DIRN - 180d
+               # FROM P1 P2 P3 P4 TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @DWrapCurvePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent bias fbias tbias radius "ldiagdwrapcurvepath"
+               # DIRN	:= if cond { xcoord from??CTR < xcoord to??CTR }
+               # 	      then { 180d } else { 0d }
+               # CLOCK	:= if cond { xcoord from??CTR < xcoord to??CTR }
+               # 	      then { anticlockwise } else { clockwise }
+               # FROM	:: from boundaryatangle DIRN
+               # ++ {arrow @FromArrowLength arrowlength} atangle DIRN
+               # FROM	:< DIRN
+               # TO	:: to boundaryatangle { DIRN + 180d }
+               # ++ {arrow @ToArrowLength arrowlength} atangle { DIRN + 180d }
+               # TO	:< DIRN
+               #
+               # XP1	:= FROM ++ {fbias max 0} atangle DIRN
+               # XP4	:= TO ++ {tbias max 0} atangle { DIRN + 180d }
+               # YC	:= ycoord { from boundaryatangle 270d } min
+               # 	   ycoord { to   boundaryatangle 270d }
+               # 	   - { bias max 0 }
+               # XP2	:= { xcoord XP1 YC }
+               # XP3	:= { xcoord XP4 YC }
+               #
+               # RP1	:= radius min { XP1 distance FROM } min
+               # 	   { { XP1 distance XP2 } / 2 }
+               # XP1PRE	:= XP1 ++ RP1 atangle { XP1 angleto FROM }
+               # XP1POST := XP1 ++ RP1 atangle { XP1 angleto XP2  }
+               # XP1CTR  := XP1PRE ++ RP1 atangle { XP1 angleto XP2  }
+               # P1	:: XP1CTR ++ RP1 atangle { XP1CTR angleto XP1 }
+               # P1	:< XP1CTR angleto P1 + DIRN - 90d
+               #
+               # RP2	:= radius min { { XP1 distance XP2 } / 2 }
+               # 	     min { { XP2 distance XP3 } / 2 }
+               # XP2PRE	:= XP2 ++ RP2 atangle { XP2 angleto XP1 }
+               # XP2POST	:= XP2 ++ RP2 atangle { XP2 angleto XP3 }
+               # XP2CTR	:= XP2PRE ++ RP2 atangle { XP2 angleto XP3 }
+               # P2	:: XP2CTR ++ RP2 atangle { XP2CTR angleto XP2 }
+               # P2	:< XP2CTR angleto P2 + DIRN - 90d
+               #
+               # RP3	:= radius min { { XP2 distance XP3 } / 2 }
+               # 	     min { { XP3 distance XP4 } / 2 }
+               # XP3PRE	:= XP3 ++ RP3 atangle { XP3 angleto XP2 }
+               # XP3POST	:= XP3 ++ RP3 atangle { XP3 angleto XP4 }
+               # XP3CTR	:= XP3PRE ++ RP3 atangle { XP3 angleto XP4 }
+               # P3	:: XP3CTR ++ RP3 atangle { XP3CTR angleto XP3 }
+               # P3	:< XP3CTR angleto P3 + DIRN - 90d
+               #
+               # RP4	:= radius min { { XP4 distance XP3 } / 2 }
+               # 	     min { XP4 distance TO }
+               # XP4PRE	:= XP4 ++ RP4 atangle { XP4 angleto XP3 }
+               # XP4POST := XP4 ++ RP4 atangle { XP4 angleto TO  }
+               # XP4CTR  := XP4PRE ++ RP4 atangle { XP4 angleto TO  }
+               # P4	:: XP4CTR ++ RP4 atangle { XP4CTR angleto XP4 }
+               # P4	:< XP4CTR angleto P4 + DIRN - 90d
+               #
+               # XINDENT	:= xindent min { FROM distance XP1PRE }
+               # LFROM	:: FROM ++ XINDENT atangle DIRN
+               # LFROM	:< FROM at ANGLE
+               #
+               # LMID	:: XP2 ** 0.5 ++ XP3 ** 0.5
+               # LMID	:< DIRN - 180d
+               #
+               # ZINDENT	:= zindent min { TO distance XP4POST }
+               # LTO	:: TO ++ ZINDENT atangle { DIRN + 180d }
+               # LTO	:< TO at ANGLE
+               #
+               # FROM LFROM
+               # XP1PRE [XP1CTR CLOCK] XP1POST
+               # XP2PRE [XP2CTR CLOCK] XP2POST
+               # LMID
+               # XP3PRE [XP3CTR CLOCK] XP3POST
+               # XP4PRE [XP4CTR CLOCK] XP4POST
+               # LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @UWrapLinePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent bias fbias tbias "ldiaguwraplinepath"
+               # DIRN	:= if cond { xcoord from??CTR < xcoord to??CTR }
+               # 	      then { 180d } else { 0d }
+               # FROM	:: from boundaryatangle DIRN
+               # ++ {arrow @FromArrowLength arrowlength} atangle DIRN
+               # FROM	:< DIRN
+               # TO	:: to boundaryatangle { DIRN + 180d }
+               # ++ {arrow @ToArrowLength arrowlength} atangle { DIRN + 180d }
+               # TO	:< DIRN
+               # P1	:: FROM ++ {fbias max 0} atangle DIRN
+               # P1	:< if cond { DIRN = 180d } then { 135d } else { 45d }
+               # P4	:: TO ++ {tbias max 0} atangle { DIRN + 180d }
+               # P4	:< if cond { DIRN = 180d } then { 225d } else { -45d }
+               # YC	:= ycoord { from boundaryatangle 90d } max
+               # 	   ycoord { to   boundaryatangle 90d }
+               # 	   + { bias max 0 }
+               # P2	:: { xcoord P1 YC }
+               # P2	:< P4 at ANGLE - 180d
+               # P3	:: { xcoord P4 YC }
+               # P3	:< P1 at ANGLE - 180d
+               # XINDENT	:= xindent min { FROM distance P1 }
+               # LFROM	:: FROM ++ XINDENT atangle DIRN
+               # LFROM	:< FROM at ANGLE
+               # ZINDENT	:= zindent min { TO distance P4 }
+               # LTO	:: TO ++ ZINDENT atangle { DIRN + 180d }
+               # LTO	:< TO at ANGLE
+               # LMID	:: P2 ** 0.5 ++ P3 ** 0.5
+               # LMID	:< DIRN - 180d
+               # FROM P1 P2 P3 P4 TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @UWrapCurvePath
+ 	    {
+ 		@BackEnd @Case {
+ 		  PostScript @Yield {
+ 	      {arrow @FromArrowLength arrowlength}
+ 	      {arrow @ToArrowLength arrowlength}
+ 	      "{" from "}" "{" to "}"
+ 	      xindent zindent bias fbias tbias radius "ldiaguwrapcurvepath"
+               # DIRN	:= if cond { xcoord from??CTR < xcoord to??CTR }
+               # 	      then { 180d } else { 0d }
+               # CLOCK	:= if cond { xcoord from??CTR < xcoord to??CTR }
+               # 	      then { clockwise } else { anticlockwise }
+               # FROM	:: from boundaryatangle DIRN
+               # ++ {arrow @FromArrowLength arrowlength} atangle DIRN
+               # FROM	:< DIRN
+               # TO	:: to boundaryatangle { DIRN + 180d }
+               # ++ {arrow @ToArrowLength arrowlength} atangle { DIRN + 180d }
+               # TO	:< DIRN
+               #
+               # XP1	:= FROM ++ {fbias max 0} atangle DIRN
+               # XP4	:= TO ++ {tbias max 0} atangle { DIRN + 180d }
+               # YC	:= ycoord { from boundaryatangle 90d } max
+               # 	   ycoord { to   boundaryatangle 90d }
+               # 	   + { bias max 0 }
+               # XP2	:= { xcoord XP1 YC }
+               # XP3	:= { xcoord XP4 YC }
+               #
+               # RP1	:= radius min { XP1 distance FROM } min
+               # 	   { { XP1 distance XP2 } / 2 }
+               # XP1PRE	:= XP1 ++ RP1 atangle { XP1 angleto FROM }
+               # XP1POST := XP1 ++ RP1 atangle { XP1 angleto XP2  }
+               # XP1CTR  := XP1PRE ++ RP1 atangle { XP1 angleto XP2  }
+               # P1	:: XP1CTR ++ RP1 atangle { XP1CTR angleto XP1 }
+               # P1	:< XP1CTR angleto P1 + DIRN + 90d
+               #
+               # RP2	:= radius min { { XP1 distance XP2 } / 2 }
+               # 	     min { { XP2 distance XP3 } / 2 }
+               # XP2PRE	:= XP2 ++ RP2 atangle { XP2 angleto XP1 }
+               # XP2POST	:= XP2 ++ RP2 atangle { XP2 angleto XP3 }
+               # XP2CTR	:= XP2PRE ++ RP2 atangle { XP2 angleto XP3 }
+               # P2	:: XP2CTR ++ RP2 atangle { XP2CTR angleto XP2 }
+               # P2	:< XP2CTR angleto P2 + DIRN + 90d
+               #
+               # RP3	:= radius min { { XP2 distance XP3 } / 2 }
+               # 	     min { { XP3 distance XP4 } / 2 }
+               # XP3PRE	:= XP3 ++ RP3 atangle { XP3 angleto XP2 }
+               # XP3POST	:= XP3 ++ RP3 atangle { XP3 angleto XP4 }
+               # XP3CTR	:= XP3PRE ++ RP3 atangle { XP3 angleto XP4 }
+               # P3	:: XP3CTR ++ RP3 atangle { XP3CTR angleto XP3 }
+               # P3	:< XP3CTR angleto P3 + DIRN + 90d
+               #
+               # RP4	:= radius min { { XP4 distance XP3 } / 2 }
+               # 	     min { XP4 distance TO }
+               # XP4PRE	:= XP4 ++ RP4 atangle { XP4 angleto XP3 }
+               # XP4POST := XP4 ++ RP4 atangle { XP4 angleto TO  }
+               # XP4CTR  := XP4PRE ++ RP4 atangle { XP4 angleto TO  }
+               # P4	:: XP4CTR ++ RP4 atangle { XP4CTR angleto XP4 }
+               # P4	:< XP4CTR angleto P4 + DIRN + 90d
+               #
+               # XINDENT	:= xindent min { FROM distance XP1PRE }
+               # LFROM	:: FROM ++ XINDENT atangle DIRN
+               # LFROM	:< FROM at ANGLE
+               #
+               # LMID	:: XP2 ** 0.5 ++ XP3 ** 0.5
+               # LMID	:< DIRN - 180d
+               #
+               # ZINDENT	:= zindent min { TO distance XP4POST }
+               # LTO	:: TO ++ ZINDENT atangle { DIRN + 180d }
+               # LTO	:< TO at ANGLE
+               #
+               # FROM LFROM
+               # XP1PRE [XP1CTR CLOCK] XP1POST
+               # XP2PRE [XP2CTR CLOCK] XP2POST
+               # LMID
+               # XP3PRE [XP3CTR CLOCK] XP3POST
+               # XP4PRE [XP4CTR CLOCK] XP4POST
+               # LTO TO
+ 		  }
+ 		  PDF @Yield {}
+ 		}
+ 	    }
+ 
+ 	    import @Geometry
+ 	    def @Path
+ 	    {
+ 		path @Case {
+ 		    line			@Yield @LinePath
+ 		    doubleline			@Yield @DoubleLinePath
+ 		    { acurve curve }		@Yield @ACurvePath
+ 		    ccurve			@Yield @CCurvePath
+ 		    bezier			@Yield @BezierPath
+ 		    vhline			@Yield @VHLinePath
+ 		    vhcurve			@Yield @VHCurvePath
+ 		    hvline			@Yield @HVLinePath
+ 		    hvcurve			@Yield @HVCurvePath
+ 		    lvrline			@Yield @LVRLinePath
+ 		    lvrcurve			@Yield @LVRCurvePath
+ 		    rvlline			@Yield @RVLLinePath
+ 		    rvlcurve			@Yield @RVLCurvePath
+ 		    dwrapline			@Yield @DWrapLinePath
+ 		    dwrapcurve			@Yield @DWrapCurvePath
+ 		    uwrapline			@Yield @UWrapLinePath
+ 		    uwrapcurve			@Yield @UWrapCurvePath
+ 		    else			@Yield {
+ 			path
+ 			    from { from }
+ 			    to { to }
+ 			    bias { bias }
+ 			    fbias { fbias }
+ 			    tbias { tbias }
+ 			    radius { radius }
+ 			    xindent { xindent }
+ 			    zindent { zindent }
+ 			    frompt { frompt }
+ 			    topt { topt }
+ 			    arrow { arrow }
+ 			    arrowlength { arrowlength }
+ 		    }
+ 		}
+ 	    }
+ 
+ 	    def @FromLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "f"				}
+ 		    label	{ fromlabel @Else @FromArrow	}
+ 		    labelmargin	{ fromlabelmargin		}
+ 		    labelfont	{ fromlabelfont			}
+ 		    labelbreak	{ fromlabelbreak		}
+ 		    labelformat { fromlabelformat @Body		}
+ 		    labelpos	{ fromlabelpos			}
+ 		    labelprox	{ fromlabelprox			}
+ 		    labelangle	{ fromlabelangle		}
+ 		    labelctr	{ fromlabelctr			}
+ 		    labeladjust	{ fromlabeladjust		}
+ 	    }
+ 
+ 	    def @ToLabel
+ 	    {
+ 		@DoLabel
+ 		    which	{ "t"				}
+ 		    label	{ tolabel @Else @ToArrow	}
+ 		    labelmargin	{ tolabelmargin			}
+ 		    labelfont	{ tolabelfont			}
+ 		    labelbreak	{ tolabelbreak			}
+ 		    labelformat { tolabelformat @Body		}
+ 		    labelpos	{ tolabelpos			}
+ 		    labelprox	{ tolabelprox			}
+ 		    labelangle	{ tolabelangle			}
+ 		    labelctr	{ tolabelctr			}
+ 		    labeladjust	{ tolabeladjust			}
+ 	    }
+ 
+ 	    def @Direct
+ 	    {
+ 		pathstyle @Case {
+ 		    { "/ldiagsolid" "/ldiagdashed" "/ldiagcdashed"
+ 		      "/ldiagdotted" "/ldiagnoline" } @Yield 1
+ 		    else @Yield 0
+ 		}
+ 	    }
+ 
+ 	  @BackEnd @Case {
+ 	    PostScript @Yield {
+ 
+ 	    @Null & # so that preceding space gets chewed up
+             {
+ 	      @Direct "ldiaglinkbegin [" @Path "]" pathdashlength
+ 	      "[" pathstyle "]" pathwidth "ldiaglinkend"
+             }
+             @Graphic
+             {
+ 		/ { fromlabel @Else @FromArrow}	@IfNonEmpty @FromLabel
+ 		/ { xlabel @Else linklabel }	@IfNonEmpty @XLabel
+ 		/ { ylabel @Else linklabel }	@IfNonEmpty @YLabel
+ 		/ { zlabel @Else linklabel }	@IfNonEmpty @ZLabel
+ 		/ { tolabel @Else @ToArrow }	@IfNonEmpty @ToLabel
+ 	    }
+ 
+ 	    }
+ 	    PDF @Yield {}
+ 	  }
+ 	}
+ 
+ 
+         def @ObjectLink
+ 	    precedence 90
+ 	    associativity left
+ 	    left x
+ 	    named treehsep { treehsep }
+ 	    named treevsep { treevsep }
+ 	    named format
+ 		named x {}
+ 		named y {}
+ 		named insinuatelink {}
+ 		named treehsep {}
+ 		named treevsep {}
+ 	    { x | y | insinuatelink }
+             import @Geometry named path
+                 named from {}
+                 named to {}
+                 named bias {}
+                 named fbias {}
+                 named tbias {}
+                 named radius {}
+                 named xindent {}
+                 named zindent {}
+                 named frompt {}
+                 named topt {}
+                 named arrow {}
+                 named arrowlength {}
+             					{ path
+ 						    from { from }
+ 						    to { to }
+ 						    bias { bias }
+ 						    fbias { fbias }
+ 						    tbias { tbias }
+ 						    radius { radius }
+ 						    xindent { xindent }
+ 						    zindent { zindent }
+ 						    frompt { frompt }
+ 						    topt { topt }
+ 						    arrow { arrow }
+ 						    arrowlength { arrowlength }
+ 						}
+             import @Geometry named basefrom	{ 			}
+             import @Geometry named baseto	{ 			}
+             import @Geometry named from		{ 			}
+             import @Geometry named to		{ 			}
+             import @Geometry named bias		{ bias			}
+             import @Geometry named fbias	{ fbias			}
+             import @Geometry named tbias	{ tbias			}
+             import @Geometry named radius	{ radius		}
+             import @Geometry named xindent	{ xindent		}
+             import @Geometry named zindent	{ zindent		}
+             import @Geometry named frompt	{ frompt		}
+             import @Geometry named topt		{ topt			}
+             named pathstyle
+ 		named solid   { "/ldiagsolid"   }
+ 		named dashed  { "/ldiagdashed"  }
+ 		named cdashed { "/ldiagcdashed" }
+ 		named dotted  { "/ldiagdotted"  }
+ 		named noline  { "/ldiagnoline"  }
+ 						{ pathstyle		}
+             import @Geometry named pathdashlength { pathdashlength	}
+             import @Geometry named pathwidth
+ 		named thin   { 0.04 ft }
+ 		named medium { 0.08 ft }
+ 		named thick  { 0.12 ft }
+ 						{ pathwidth		}
+             import @Geometry named pathgap
+ 		named thin   { 0.08 ft }
+ 		named medium { 0.16 ft }
+ 		named thick  { 0.24 ft }
+ 						{ pathgap		}
+ 
+             named arrow				{ arrow			}
+             named arrowstyle			{ arrowstyle		}
+             named arrowwidth			{ arrowwidth		}
+             named arrowlength			{ arrowlength		}
+ 
+ 	    named linklabel			{ linklabel		}
+ 	    named linklabelmargin		{ linklabelmargin	}
+ 	    named linklabelfont			{ linklabelfont		}
+ 	    named linklabelbreak		{ linklabelbreak	}
+ 	    named linklabelformat right @Body	{ linklabelformat @Body	}
+ 	    import @Geometry named linklabelpos	{ linklabelpos		}
+ 	    named linklabelprox			{ linklabelprox		}
+ 	    import @Geometry named linklabelangle  { linklabelangle	}
+ 	    named linklabelctr			{ linklabelctr		}
+ 	    import @Geometry named linklabeladjust { linklabeladjust	}
+ 
+             named xlabel			{ xlabel		}
+             named xlabelmargin	        	{ xlabelmargin		}
+             named xlabelfont			{ xlabelfont		}
+             named xlabelbreak			{ xlabelbreak		}
+ 	    named xlabelformat right @Body	{ xlabelformat @Body	}
+             import @Geometry named xlabelpos	{ xlabelpos		}
+             named xlabelprox			{ xlabelprox		}
+             import @Geometry named xlabelangle	{ xlabelangle		}
+ 	    named xlabelctr			{ xlabelctr		}
+             import @Geometry named xlabeladjust	{ xlabeladjust		}
+ 
+             named ylabel			{ ylabel		}
+             named ylabelmargin			{ ylabelmargin		}
+             named ylabelfont			{ ylabelfont		}
+             named ylabelbreak			{ ylabelbreak		}
+ 	    named ylabelformat right @Body	{ ylabelformat @Body	}
+             import @Geometry named ylabelpos	{ ylabelpos		}
+             named ylabelprox			{ ylabelprox		}
+             import @Geometry named ylabelangle	{ ylabelangle		}
+ 	    named ylabelctr			{ ylabelctr		}
+             import @Geometry named ylabeladjust	{ ylabeladjust		}
+ 
+             named zlabel			{ zlabel		}
+             named zlabelmargin			{ zlabelmargin		}
+             named zlabelfont			{ zlabelfont		}
+             named zlabelbreak			{ zlabelbreak		}
+ 	    named zlabelformat right @Body	{ zlabelformat @Body	}
+             import @Geometry named zlabelpos	{ zlabelpos		}
+             named zlabelprox			{ zlabelprox		}
+             import @Geometry named zlabelangle	{ zlabelangle		}
+ 	    named zlabelctr			{ zlabelctr		}
+             import @Geometry named zlabeladjust	{ zlabeladjust		}
+ 
+             named fromlabel			{ fromlabel		}
+             named fromlabelmargin		{ fromlabelmargin	}
+             named fromlabelfont			{ fromlabelfont		}
+             named fromlabelbreak		{ fromlabelbreak	}
+ 	    named fromlabelformat right @Body	{ fromlabelformat @Body	}
+             import @Geometry named fromlabelpos	{ fromlabelpos		}
+             named fromlabelprox			{ fromlabelprox		}
+             import @Geometry named fromlabelangle  { fromlabelangle	}
+ 	    named fromlabelctr			{ fromlabelctr		}
+             import @Geometry named fromlabeladjust { fromlabeladjust	}
+ 
+             named tolabel			{ tolabel		}
+             named tolabelmargin			{ tolabelmargin		}
+             named tolabelfont			{ tolabelfont		}
+             named tolabelbreak			{ tolabelbreak		}
+ 	    named tolabelformat right @Body	{ tolabelformat @Body	}
+             import @Geometry named tolabelpos	{ tolabelpos		}
+             named tolabelprox			{ tolabelprox		}
+             import @Geometry named tolabelangle	{ tolabelangle		}
+ 	    named tolabelctr			{ tolabelctr		}
+             import @Geometry named tolabeladjust{ tolabeladjust		}
+ 	    right y
+ 
+         {
+ 	    def @From
+ 	    {
+ 		from @Case {
+ 		    ""   @Yield basefrom
+ 		    else @Yield { basefrom"@"from }
+ 		}
+ 	    }
+ 
+ 	    def @To
+ 	    {
+ 		to @Case {
+ 		    ""   @Yield baseto
+ 		    else @Yield { baseto"@"to }
+ 		}
+ 	    }
+ 
+ 	    format
+ 		x { x }
+ 		y { y }
+ 		treehsep { treehsep }
+ 		treevsep { treevsep }
+ 		insinuatelink {
+ 		    @Link
+ 			from		{ @From			}
+ 			to		{ @To			}
+ 			bias		{ bias			}
+ 			fbias		{ fbias			}
+ 			tbias		{ tbias			}
+ 			radius		{ radius		}
+ 			xindent		{ xindent		}
+ 			zindent		{ zindent		}
+ 			frompt		{ frompt		}
+ 			topt		{ topt			}
+ 			path		{ path
+ 						from { @From }
+ 						to { @To }
+ 						bias { bias }
+ 						fbias { fbias }
+ 						tbias { tbias }
+ 						radius { radius }
+ 						xindent { xindent }
+ 						zindent { zindent }
+ 						frompt { frompt }
+ 						topt { topt }
+ 						arrow { arrow }
+ 						arrowlength { arrowlength }
+ 					}
+ 			pathstyle	{ pathstyle		}
+ 			pathdashlength	{ pathdashlength	}
+ 			pathwidth	{ pathwidth		}
+ 			pathgap 	{ pathgap		}
+ 			arrow		{ arrow			}
+ 			arrowstyle	{ arrowstyle		}
+ 			arrowwidth	{ arrowwidth		}
+ 			arrowlength	{ arrowlength		}
+ 
+ 			linklabel	{ linklabel		}
+ 			linklabelmargin	{ linklabelmargin	}
+ 			linklabelfont	{ linklabelfont		}
+ 			linklabelbreak	{ linklabelbreak	}
+ 			linklabelformat	{ linklabelformat @Body	}
+ 			linklabelpos	{ linklabelpos		}
+ 			linklabelprox	{ linklabelprox		}
+ 			linklabelangle	{ linklabelangle	}
+ 			linklabelctr	{ linklabelctr		}
+ 			linklabeladjust	{ linklabeladjust	}
+ 
+ 			xlabel		{ xlabel		}
+ 			xlabelmargin	{ xlabelmargin		}
+ 			xlabelfont	{ xlabelfont		}
+ 			xlabelbreak	{ xlabelbreak		}
+ 			xlabelformat	{ xlabelformat @Body	}
+ 			xlabelpos	{ xlabelpos		}
+ 			xlabelprox	{ xlabelprox		}
+ 			xlabelangle	{ xlabelangle		}
+ 			xlabelctr	{ xlabelctr		}
+ 			xlabeladjust	{ xlabeladjust		}
+ 
+ 			ylabel		{ ylabel		}
+ 			ylabelmargin	{ ylabelmargin		}
+ 			ylabelfont	{ ylabelfont		}
+ 			ylabelbreak	{ ylabelbreak		}
+ 			ylabelformat	{ ylabelformat @Body	}
+ 			ylabelpos	{ ylabelpos		}
+ 			ylabelprox	{ ylabelprox		}
+ 			ylabelangle	{ ylabelangle		}
+ 			ylabelctr	{ ylabelctr		}
+ 			ylabeladjust	{ ylabeladjust		}
+ 
+ 			zlabel		{ zlabel		}
+ 			zlabelmargin	{ zlabelmargin		}
+ 			zlabelfont	{ zlabelfont		}
+ 			zlabelbreak	{ zlabelbreak		}
+ 			zlabelformat	{ zlabelformat @Body	}
+ 			zlabelpos	{ zlabelpos		}
+ 			zlabelprox	{ zlabelprox		}
+ 			zlabelangle	{ zlabelangle		}
+ 			zlabelctr	{ zlabelctr		}
+ 			zlabeladjust	{ zlabeladjust		}
+ 
+ 			fromlabel	{ fromlabel		}
+ 			fromlabelmargin	{ fromlabelmargin	}
+ 			fromlabelfont	{ fromlabelfont		}
+ 			fromlabelbreak	{ fromlabelbreak	}
+ 			fromlabelformat	{ fromlabelformat @Body	}
+ 			fromlabelpos	{ fromlabelpos		}
+ 			fromlabelprox	{ fromlabelprox		}
+ 			fromlabelangle	{ fromlabelangle	}
+ 			fromlabelctr	{ fromlabelctr		}
+ 			fromlabeladjust	{ fromlabeladjust	}
+ 
+ 			tolabel		{ tolabel		}
+ 			tolabelmargin	{ tolabelmargin		}
+ 			tolabelfont	{ tolabelfont		}
+ 			tolabelbreak	{ tolabelbreak		}
+ 			tolabelformat	{ tolabelformat @Body	}
+ 			tolabelpos	{ tolabelpos		}
+ 			tolabelprox	{ tolabelprox		}
+ 			tolabelangle	{ tolabelangle		}
+ 			tolabelctr	{ tolabelctr		}
+ 			tolabeladjust	{ tolabeladjust		}
+ 	    }
+         }
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  Abbreviations for standard link types                              #
+         #                                                                     #
+         #######################################################################
+ 	
+ 	macro @Line		{ @Link path { line     }		}
+ 	macro @DoubleLine	{ @Link path { doubleline }		}
+ 	macro @Arrow		{ @Link path { line     } arrow { yes }	}
+ 	macro @DoubleArrow	{ @Link path {doubleline} arrow { yes }	}
+ 	macro @Curve		{ @Link path { curve	}		}
+ 	macro @CurveArrow	{ @Link path { curve	} arrow { yes }	}
+ 	macro @ACurve		{ @Link path { acurve	}		}
+ 	macro @ACurveArrow	{ @Link path { acurve	} arrow { yes }	}
+ 	macro @CCurve		{ @Link path { ccurve	}		}
+ 	macro @CCurveArrow	{ @Link path { ccurve	} arrow { yes }	}
+ 
+ 	macro @Bezier		{ @Link path { bezier	}		}
+ 	macro @BezierArrow	{ @Link path { bezier	} arrow { yes }	}
+ 
+ 	macro @HVLine		{ @Link path { hvline   }		}
+ 	macro @HVArrow		{ @Link path { hvline   } arrow { yes }	}
+ 	macro @VHLine		{ @Link path { vhline   }		}
+ 	macro @VHArrow		{ @Link path { vhline   } arrow { yes }	}
+ 	macro @HVCurve		{ @Link path { hvcurve  }		}
+ 	macro @HVCurveArrow	{ @Link path { hvcurve  } arrow { yes }	}
+ 	macro @VHCurve		{ @Link path { vhcurve  }		}
+ 	macro @VHCurveArrow	{ @Link path { vhcurve  } arrow { yes }	}
+ 
+ 	macro @LVRLine		{ @Link path { lvrline  }		}
+ 	macro @LVRArrow		{ @Link path { lvrline  } arrow { yes }	}
+ 	macro @RVLLine		{ @Link path { rvlline  }		}
+ 	macro @RVLArrow		{ @Link path { rvlline  } arrow { yes }	}
+ 	macro @LVRCurve		{ @Link path { lvrcurve }		}
+ 	macro @LVRCurveArrow	{ @Link path { lvrcurve } arrow { yes }	}
+ 	macro @RVLCurve		{ @Link path { rvlcurve }		}
+ 	macro @RVLCurveArrow	{ @Link path { rvlcurve } arrow { yes }	}
+ 
+ 	macro @DWrapLine	{ @Link path { dwrapline}		}
+ 	macro @DWrapArrow	{ @Link path { dwrapline} arrow { yes }	}
+ 	macro @UWrapLine	{ @Link path { uwrapline}		}
+ 	macro @UWrapArrow	{ @Link path { uwrapline} arrow { yes }	}
+ 	macro @DWrapCurve	{ @Link path {dwrapcurve}		}
+ 	macro @DWrapCurveArrow	{ @Link path {dwrapcurve} arrow { yes }	}
+ 	macro @UWrapCurve	{ @Link path {uwrapcurve}		}
+ 	macro @UWrapCurveArrow	{ @Link path {uwrapcurve} arrow { yes }	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  Tree code.                                                         #
+         #                                                                     #
+         #######################################################################
+ 
+ 	export
+ 
+ 	    @Node @Box @CurveBox @ShadowBox @Square @Diamond
+ 	    @Polygon @Isosceles @Ellipse @Circle
+ 	    @LeftSub @ZeroWidthLeftSub @RightSub @ZeroWidthRightSub
+ 	    @FirstSub @NextSub @StubSub
+ 
+ 	def @Tree
+ 	    named treehindent
+ 		named left  { 0.0rt }
+ 		named ctr   { 0.5rt }
+ 		named right { 1.0rt }
+ 						{ treehindent		}
+ 	    body x
+ 	{
+ 
+ 	    macro @TNode	{ @@Node nodetag { T 		} }
+             macro @Node		{ @TNode                          }
+             macro @Box		{ @TNode outline { box		} }
+             macro @CurveBox	{ @TNode outline { curvebox	} }
+ 	    macro @ShadowBox	{ @TNode outline { shadowbox	} }
+             macro @Square	{ @TNode outline { square	} }
+             macro @Diamond	{ @TNode outline { diamond	} }
+             macro @Polygon	{ @TNode outline { polygon	} }
+             macro @Isosceles	{ @TNode outline { isosceles	} }
+             macro @Ellipse	{ @TNode outline { ellipse	} }
+             macro @Circle	{ @TNode outline { circle	} }
+ 
+ 	    def fixroot
+ 		precedence 90
+ 		left root
+ 	    {
+ 		|treehindent root
+ 	    }
+ 
+ 	    macro @LeftSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { L at T }
+ 		    format { { /treevsep {L::y} } |treehsep x | insinuatelink }
+ 	    }
+ 
+ 	    macro @ZeroWidthLeftSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { L at T }
+ 		    format { { /treevsep @ZeroWidth { {L::y} ^|treehsep } } |
+ 			x | insinuatelink }
+ 	    }
+ 
+ 	    macro @FirstSub
+ 	    {
+ 		fixroot //
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { S at T }
+ 		    format { //treevsep {S::y} | insinuatelink | }
+ 	    }
+ 
+ 	    macro @NextSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { S at T }
+ 		    format { x |treehsep { / {S::y} | insinuatelink | } }
+ 	    }
+ 
+ 	    macro @RightSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { R at T }
+ 		    format { x |treehsep  { /treevsep {R::y} } | insinuatelink }
+ 	    }
+ 
+ 	    macro @ZeroWidthRightSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { R at T }
+ 		    format { x | { /treevsep @ZeroWidth { |treehsep {R::y} } }
+ 			| insinuatelink }
+ 	    }
+ 
+ 	    macro @StubSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { T }
+ 		    format { @VContract { |0.5rt x | // |0.5rt
+ 		      S:: @BoxLabels @CatchTags y | } | insinuatelink }
+ 		    # path { from S at T@SW S at T@SE to }
+ 		    path {
+ 			P1::	S at SW
+ 			P2::	S at SE
+ 			FROM::	from boundaryatangle { from??CTR angleto P1 }
+ 			TO::	to   boundaryatangle { to??CTR   angleto P2 }
+ 			FROM P1 P2 TO
+ 		    }
+ 	    }
+ 
+ 	    @HContract @VContract x
+ 	}
+ 
+ 	export
+ 
+ 	    @Node @Box @CurveBox @ShadowBox @Square @Diamond
+ 	    @Polygon @Isosceles @Ellipse @Circle
+ 	    @LeftSub @ZeroWidthLeftSub @RightSub @ZeroWidthRightSub
+ 	    @FirstSub @NextSub @StubSub
+ 
+ 	def @HTree
+ 	    named treevindent
+ 		named top   { 0.0rt }
+ 		named ctr   { 0.5rt }
+ 		named foot  { 1.0rt }
+ 						{ treevindent		}
+ 	    body x
+ 	{
+ 
+ 	    macro @TNode	{ @@Node nodetag { T 		} }
+ 	    macro @Node		{ @TNode                          }
+             macro @Box		{ @TNode outline { box		} }
+             macro @CurveBox	{ @TNode outline { curvebox	} }
+ 	    macro @ShadowBox	{ @TNode outline { shadowbox	} }
+             macro @Square	{ @TNode outline { square	} }
+             macro @Diamond	{ @TNode outline { diamond	} }
+             macro @Polygon	{ @TNode outline { polygon	} }
+             macro @Isosceles	{ @TNode outline { isosceles	} }
+             macro @Ellipse	{ @TNode outline { ellipse	} }
+             macro @Circle	{ @TNode outline { circle	} }
+ 
+ 	    def fixroot
+ 		precedence 90
+ 		left root
+ 	    {
+ 		/treevindent root
+ 	    }
+ 
+ 	    macro @LeftSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { L at T }
+ 		    format { { |treehsep {L::y} } /treevsep x / insinuatelink }
+ 	    }
+ 
+ 	    macro @ZeroWidthLeftSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { L at T }
+ 		    format { { |treehsep @ZeroWidth { {L::y} ^/treevsep } } /
+ 			x / insinuatelink }
+ 	    }
+ 
+ 	    macro @FirstSub
+ 	    {
+ 		fixroot ||
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { S at T }
+ 		    format { ||treehsep { {S::y} / insinuatelink / } }
+ 	    }
+ 
+ 	    macro @NextSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { S at T }
+ 		    format { x /treevsep { | {S::y} { / insinuatelink / } } }
+ 	    }
+ 
+ 	    macro @RightSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { R at T }
+ 		    format { x /treevsep  { |treehsep {R::y} } / insinuatelink }
+ 	    }
+ 
+ 	    macro @ZeroWidthRightSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { R at T }
+ 		    format { x / { |treehsep @ZeroWidth { /treevsep {R::y} } }
+ 			/ insinuatelink }
+ 	    }
+ 
+ 	    macro @StubSub
+ 	    {
+ 		@ObjectLink
+ 		    basefrom { T }
+ 		    baseto { T }
+ 		    format { @VContract { { /0.5rt x / } || { /0.5rt
+ 		      S:: @BoxLabels @CatchTags y / } } / insinuatelink }
+ 		    # path { from S at T@SW S at T@SE to }
+ 		    path {
+ 			P1::	S at NE
+ 			P2::	S at SE
+ 			FROM::	from boundaryatangle { from??CTR angleto P1 }
+ 			TO::	to   boundaryatangle { to??CTR   angleto P2 }
+ 			FROM P1 P2 TO
+ 		    }
+ 	    }
+ 
+ 	    @HContract @VContract x
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  Syntax diagrams code                                               #
+         #                                                                     #
+         #  Helper definitions; also skips                                     #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def pslength right x { "("x") ldiagdecodelength"		}
+ 	def pssyntaxgap      { "("syntaxgap") ldiagdecodelength"	}
+ 	def pssyntaxbias     { "("syntaxbias") ldiagdecodelength"	}
+ 	def pssyntaxradius   { "("syntaxradius") ldiagdecodelength"	}
+ 
+ 	def @ArrowLeftFrom left direction right pt
+ 	{
+ 	    @Line arrow { direction } from { pt } to { pt -- { pssyntaxgap 0 } }
+ 	}
+ 
+ 	def @ArrowRightFrom left direction right pt
+ 	{
+ 	    @Line arrow { direction } from { pt } to { pt ++ { pssyntaxgap 0 } }
+ 	}
+ 
+ 	def @ArrowUpFrom left direction right pt
+ 	{
+ 	    @Line arrow { direction } from { pt } to { pt ++ { 0 pssyntaxgap } }
+ 	}
+ 
+ 	def @ArrowDownFrom left direction right pt
+ 	{
+ 	    @Line arrow { direction } from { pt } to { pt -- { 0 pssyntaxgap } }
+ 	}
+ 
+ 	macro @LineLeftFrom  { no @ArrowLeftFrom	}
+ 	macro @LineRightFrom { no @ArrowRightFrom	}
+ 	macro @LineUpFrom    { no @ArrowUpFrom		}
+ 	macro @LineDownFrom  { no @ArrowDownFrom	}
+ 
+ 	macro @Right	{ "1p" }
+ 	macro @Up	{ "2p" }
+ 	macro @Left	{ "3p" }
+ 	macro @Down	{ "4p" }
+ 
+ 	macro @CurrDirection { @CurrZUnit }
+ 
+ 	def @GoRight right x { @Right @ZUnit x }
+ 	def @GoUp    right x { @Up    @ZUnit x }
+ 	def @GoLeft  right x { @Left  @ZUnit x }
+ 	def @GoDown  right x { @Down  @ZUnit x }
+ 
+ 	def @GoReverse right x
+ 	{
+ 	    @CurrDirection @Case {
+ 		@Right @Yield @GoLeft x
+ 		@Up    @Yield @GoDown x
+ 		@Left  @Yield @GoRight x
+ 		@Down  @Yield @GoUp x
+ 	    }
+ 	}
+ 
+ 
+ 	def @LabelMarks right x {
+             @HContract @VContract @ANode
+ 		outline {
+                     NMK:: { xmark ysize }
+                     SMK:: { xmark 0     }
+                     WMK:: { 0     ymark }
+                     EMK:: { xsize ymark }
+ 		    NW::  { 0 ysize }
+ 		    SW::  { 0 0 }
+ 		    SE::  { xsize 0 }
+ 		    NE::  { xsize ysize }
+ 		}
+ 		font {}
+ 		margin { 0c }
+ 		vstrut { no }
+ 		outlinestyle { noline }
+ 		halign { mark }
+ 		valign { mark }
+ 		x
+ 	}
+ 
+ 	def @HSkip
+ 	{
+ 	    OX:: @LabelMarks { syntaxgap @Wide {} }
+ 	    / @Line from { "OX at WMK" } to { "OX at EMK" }
+ 	}
+ 
+ 	def @VSkip
+ 	{
+ 	    OX:: @LabelMarks { syntaxgap @High {} }
+ 	    / @Line from { "OX at NMK" } to { "OX at SMK" }
+ 	}
+ 
+ 	def @Skip
+ 	{
+ 	    @CurrDirection @Case {
+ 		{ @Left @Right } @Yield @HSkip
+ 		{ @Up @Down    } @Yield @VSkip
+ 	    }
+ 	}
+ 
+ 	def @LRLine right x
+ 	{
+ 	    @HContract @VContract { @HSkip | x | @HSkip }
+ 	}
+ 
+ 	def @UDLine right x
+ 	{
+ 	    @HContract @VContract { @VSkip / x / @VSkip }
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  Ordinary starts: @StartRight, @StartUp, @StartLeft, @StartDown     #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @StartRight right x
+ 	{
+ 	    @VContract {
+ 		@LabelMarks {
+ 		    |syntaxgap @GoRight x |syntaxgap
+ 		}
+ 		/ @LineRightFrom WMK
+ 		/ back @ArrowLeftFrom EMK
+ 	    }
+ 	}
+ 
+ 	def @StartUp right x
+ 	{
+ 	    @VContract {
+ 		@LabelMarks {
+ 		    ^/syntaxgap @GoUp x /syntaxgap
+ 		}
+ 		/ @LineUpFrom SMK
+ 		/ back @ArrowDownFrom NMK
+ 	    }
+ 	}
+ 
+ 	def @StartLeft right x
+ 	{
+ 	    @VContract {
+ 		@LabelMarks {
+ 		    |syntaxgap @GoLeft x |syntaxgap
+ 		}
+ 		/ @LineLeftFrom EMK
+ 		/ back @ArrowRightFrom WMK
+ 	    }
+ 	}
+ 
+ 	def @StartDown right x
+ 	{
+ 	    @VContract {
+ 		@LabelMarks {
+ 		    ^/syntaxgap @GoDown x /syntaxgap
+ 		}
+ 		/ @LineDownFrom NMK
+ 		/ back @ArrowUpFrom SMK
+ 	    }
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  Fancy starts: @StartRightRight, @StartRightDown                    #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @StartRightRight
+ 	    named A {}
+ 	    named B {}
+ 	{
+ 	    AA:: @LabelMarks { @HSkip & @GoRight A }
+ 	    //syntaxgap
+ 	    //syntaxgap
+ 	    |syntaxgap |syntaxgap |syntaxgap |syntaxgap |syntaxgap |syntaxgap
+ 	    CC:: @LabelMarks {}
+ 	    //syntaxgap
+ 	    //syntaxgap
+ 	    |syntaxgap |syntaxgap |syntaxgap |syntaxgap |syntaxgap |syntaxgap
+ 	    BB:: @LabelMarks { @GoRight B & @HSkip }
+ 	    // @RVLCurve from { AA at EMK } to { CC at WMK }
+ 		bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    // @LVRCurve from { CC at WMK } to { BB at WMK }
+ 		bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    back @ArrowLeftFrom BB at EMK
+ 	}
+ 
+ 	def @StartRightDown
+ 	    named A {}
+ 	    named B {}
+ 	{
+ 	    @HContract @VContract {
+             / BB:: @LabelMarks |syntaxgap AA::@LabelMarks @GoRight A |syntaxbias
+             /syntaxgap         |                                     |
+             /syntaxgap         |                                     |
+ 	    }
+ 	    / @Line from { BB at EMK } to { AA at WMK }
+ 	    / @RVLCurve from { AA at EMK } to { xcoord AA at EMK pssyntaxgap }
+ 		bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    / @HVCurve from { xcoord AA at EMK pssyntaxgap } to { 0 0 }
+ 		bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    / @GoDown B
+ 	    / @VSkip
+ 	    / CC:: @LabelMarks {}
+ 	    / back @ArrowUpFrom CC at NMK
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  Cells: @XCell, @ACell, @BCell, @CCell                              #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @RightCell right x
+ 	{
+ 	    @VContract {
+ 		@LabelMarks {
+                     |syntaxgap x |syntaxgap
+ 		}
+ 		/ forward @ArrowRightFrom WMK
+ 		/ @LineLeftFrom EMK
+             }
+ 	}
+ 
+ 	def @LeftCell right x
+ 	{
+ 	    @VContract {
+ 		@LabelMarks {
+                     |syntaxgap x |syntaxgap
+ 		}
+ 		/ forward @ArrowLeftFrom EMK
+ 		/ @LineRightFrom WMK
+             }
+ 	}
+ 
+ 	def @DownCell right x
+ 	{
+             @VContract {
+ 		@LabelMarks {
+ 		    ^/syntaxgap x /syntaxgap
+ 		}
+ 		/ forward @ArrowDownFrom NMK
+ 		/ @LineUpFrom SMK
+             }
+ 	}
+ 
+ 	def @UpCell right x
+ 	{
+             @VContract {
+ 		@LabelMarks {
+ 		    ^/syntaxgap x /syntaxgap
+ 		}
+ 		/ forward @ArrowUpFrom SMK
+ 		/ @LineDownFrom NMK
+             }
+ 	}
+ 
+ 	def @XCell right x
+ 	{
+ 	    @CurrDirection @Case {
+ 		@Right @Yield @RightCell x
+ 		@Up    @Yield @UpCell x
+ 		@Left  @Yield @LeftCell x
+ 		@Down  @Yield @DownCell x
+ 	    }
+ 	}
+ 
+ 	macro @ACell { @XCell @ANode }
+ 	macro @BCell { @XCell @BNode }
+ 	macro @CCell { @XCell @CNode }
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  @Sequence                                                          #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @Sequence
+ 	    named A {}
+ 	    named B {}
+ 	    named C {}
+ 	    named D {}
+ 	    named E {}
+ 	    named F {}
+ 	    named G {}
+ 	    named H {}
+ 	    named I {}
+ 	    named J {}
+ 	    named K {}
+ 	    named L {}
+ 	{
+ 
+ 	    @CurrDirection @Case {
+ 		@Right @Yield
+ 		    @HContract { A | B | C | D | E | F | G | H | I | J | K | L }
+ 		@Up    @Yield
+ 		    @VContract { L / K / J / I / H / G / F / E / D / C / B / A }
+ 		@Left  @Yield
+ 		    @HContract { L | K | J | I | H | G | F | E | D | C | B | A }
+ 		@Down  @Yield
+ 		    @VContract { A / B / C / D / E / F / G / H / I / J / K / L }
+ 	    }
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  @Select and @Optional                                              #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @Select
+ 	    named A {}
+ 	    named B {}
+ 	    named C {}
+ 	    named D {}
+ 	    named E {}
+ 	    named F {}
+ 	    named G {}
+ 	    named H {}
+ 	    named I {}
+ 	    named J {}
+ 	    named K {}
+ 	    named L {}
+ 	{
+ 
+ 	    def @RLFirstOrMiddle
+ 		left label
+ 		named i { 0i }
+ 		named al { no }
+ 		named ar { no }
+ 		right x
+ 	    {
+ 		{|i @HContract { |syntaxgap label:: @LabelMarks x |syntaxgap }}
+ 		// @Line from { label"@WMK" } to { 0 ycoord label"@WMK" }
+ 		     arrow { al }
+ 		// @Line from { label"@EMK" } to { xsize ycoord label"@EMK" }
+ 		     arrow { ar }
+ 	    }
+ 
+ 	    def @UDFirstOrMiddle
+ 		left label
+ 		named i { 0i }
+ 		named au { no }
+ 		named ad { no }
+ 		right x
+ 	    {
+ 		{/i @VContract { /syntaxgap label:: @LabelMarks x /syntaxgap }}
+ 		|| @Line from { label"@NMK" } to { xcoord label"@NMK" ysize }
+ 		     arrow { au }
+ 		|| @Line from { label"@SMK" } to { xcoord label"@SMK" 0 }
+ 		     arrow { ad }
+ 	    }
+ 
+ 	    def @RLLast
+ 		left label
+ 		named i { 0i }
+ 		named al { no }
+ 		named ar { no }
+ 		right x
+ 	    {
+ 		{|i @HContract { |syntaxgap label:: @LabelMarks x |syntaxgap }}
+ 		// @HVCurve from { label"@WMK" } to { 0 ycoord "AX at WMK" }
+ 		     arrow { al } bias { pssyntaxbias } radius { pssyntaxradius }
+ 		// @HVCurve from { label"@EMK" } to { xsize ycoord "AX at WMK" }
+ 		     arrow { ar } bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    }
+ 
+ 	    def @UDLast
+ 		left label
+ 		named i { 0i }
+ 		named au { no }
+ 		named ad { no }
+ 		right x
+ 	    {
+ 		{/i @VContract { /syntaxgap label:: @LabelMarks x /syntaxgap }}
+ 		|| @VHCurve from { label"@NMK" } to { xcoord "AX at NMK" ysize }
+ 		     arrow { au } bias { pssyntaxbias } radius { pssyntaxradius }
+ 		|| @VHCurve from { label"@SMK" } to { xcoord "AX at SMK" 0 }
+ 		     arrow { ad } bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    }
+ 
+ 	    def @DirectedSelect
+ 		named @First  left label right x {}
+ 		named @Middle left label right x {}
+ 		named @Last   left label right x {}
+ 		named @Join   precedence 90 left x right y {}
+ 	    {
+ 
+ 		def @LastIsA
+ 		{
+ 		    A
+ 		}
+ 
+ 		def @LastIsB
+ 		{
+ 			    AX @First  A
+ 		    @Join   BX @Last   B
+ 		}
+ 
+ 		def @LastIsC
+ 		{
+ 			    AX @First  A
+ 		    @Join   BX @Middle B
+ 		    @Join   CX @Last   C
+ 		}
+ 
+ 		def @LastIsD
+ 		{
+ 			    AX @First  A
+ 		    @Join   BX @Middle B
+ 		    @Join   CX @Middle C
+ 		    @Join   DX @Last   D
+ 		}
+ 
+ 		def @LastIsE
+ 		{
+ 			    AX @First  A
+ 		    @Join   BX @Middle B
+ 		    @Join   CX @Middle C
+ 		    @Join   DX @Middle D
+ 		    @Join   EX @Last   E
+ 		}
+ 
+ 		def @LastIsF
+ 		{
+ 			    AX @First  A
+ 		    @Join   BX @Middle B
+ 		    @Join   CX @Middle C
+ 		    @Join   DX @Middle D
+ 		    @Join   EX @Middle E
+ 		    @Join   FX @Last   F
+ 		}
+ 
+ 		def @UpToF
+ 		{
+ 			    AX @First  A
+ 		    @Join   BX @Middle B
+ 		    @Join   CX @Middle C
+ 		    @Join   DX @Middle D
+ 		    @Join   EX @Middle E
+ 		    @Join   FX @Middle F
+ 		}
+ 
+ 		def @LastIsG
+ 		{
+ 			    @UpToF
+ 		    @Join   GX @Last   G
+ 		}
+ 
+ 		def @LastIsH
+ 		{
+ 			    @UpToF
+ 		    @Join   GX @Middle G
+ 		    @Join   HX @Last   H
+ 		}
+ 
+ 		def @LastIsI
+ 		{
+ 			    @UpToF
+ 		    @Join   GX @Middle G
+ 		    @Join   HX @Middle H
+ 		    @Join   IX @Last   I
+ 		}
+ 
+ 		def @LastIsJ
+ 		{
+ 			    @UpToF
+ 		    @Join   GX @Middle G
+ 		    @Join   HX @Middle H
+ 		    @Join   IX @Middle I
+ 		    @Join   JX @Last   J
+ 		}
+ 
+ 		def @LastIsK
+ 		{
+ 			    @UpToF
+ 		    @Join   GX @Middle G
+ 		    @Join   HX @Middle H
+ 		    @Join   IX @Middle I
+ 		    @Join   JX @Middle J
+ 		    @Join   KX @Last   K
+ 		}
+ 
+ 		def @LastIsL
+ 		{
+ 			    @UpToF
+ 		    @Join   GX @Middle G
+ 		    @Join   HX @Middle H
+ 		    @Join   IX @Middle I
+ 		    @Join   JX @Middle J
+ 		    @Join   KX @Middle K
+ 		    @Join   LX @Last   L
+ 		}
+ 
+ 		def @TryA { A @Case { {} @Yield @Skip  else @Yield @LastIsA } }
+ 		def @TryB { B @Case { {} @Yield @TryA  else @Yield @LastIsB } }
+ 		def @TryC { C @Case { {} @Yield @TryB  else @Yield @LastIsC } }
+ 		def @TryD { D @Case { {} @Yield @TryC  else @Yield @LastIsD } }
+ 		def @TryE { E @Case { {} @Yield @TryD  else @Yield @LastIsE } }
+ 		def @TryF { F @Case { {} @Yield @TryE  else @Yield @LastIsF } }
+ 		def @TryG { G @Case { {} @Yield @TryF  else @Yield @LastIsG } }
+ 		def @TryH { H @Case { {} @Yield @TryG  else @Yield @LastIsH } }
+ 		def @TryI { I @Case { {} @Yield @TryH  else @Yield @LastIsI } }
+ 		def @TryJ { J @Case { {} @Yield @TryI  else @Yield @LastIsJ } }
+ 		def @TryK { K @Case { {} @Yield @TryJ  else @Yield @LastIsK } }
+ 		def @TryL { L @Case { {} @Yield @TryK  else @Yield @LastIsL } }
+ 
+ 		@TryL
+ 	    }
+ 
+ 	    def @RightSelect
+ 	    {
+ 		@LRLine @DirectedSelect
+ 		    @First  { label @RLFirstOrMiddle                     x }
+ 		    @Middle { label @RLFirstOrMiddle          ar { yes } x }
+ 		    @Last   { label @RLLast                   ar { yes } x }
+ 		    @Join   { x //syntaxgap y                              }
+ 	    }
+ 
+ 	    def @UpSelect
+ 	    {
+ 		@UDLine @DirectedSelect
+ 		    @First  { label @UDFirstOrMiddle i { 1r }            x }
+ 		    @Middle { label @UDFirstOrMiddle i { 1r } au { yes } x }
+ 		    @Last   { label @UDLast          i { 1r } au { yes } x }
+ 		    @Join   { x ||syntaxgap y                              }
+ 	    }
+ 
+ 	    def @LeftSelect
+ 	    {
+ 		@LRLine @DirectedSelect
+ 		    @First  { label @RLFirstOrMiddle i { 1r }            x }
+ 		    @Middle { label @RLFirstOrMiddle i { 1r } al { yes } x }
+ 		    @Last   { label @RLLast          i { 1r } al { yes } x }
+ 		    @Join   { x //syntaxgap y                              }
+ 	    }
+ 
+ 	    def @DownSelect
+ 	    {
+ 		@UDLine @DirectedSelect
+ 		    @First  { label @UDFirstOrMiddle                     x }
+ 		    @Middle { label @UDFirstOrMiddle          ad { yes } x }
+ 		    @Last   { label @UDLast                   ad { yes } x }
+ 		    @Join   { x ||syntaxgap y                              }
+ 	    }
+ 
+ 	    @CurrDirection @Case {
+ 		@Right @Yield @RightSelect
+ 		@Up    @Yield @UpSelect
+ 		@Left  @Yield @LeftSelect
+ 		@Down  @Yield @DownSelect
+ 	    }
+ 	}
+ 
+ 
+ 	def @Optional right x
+ 	{
+ 	    @Select A { @Skip } B { x }
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  @OptionalDiverted                                                  #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @DownRightOptionalDiverted right x
+ 	{
+ 	    @UDLine {
+ 		OX:: @LabelMarks {
+ 		    |syntaxgap AX:: @LabelMarks @GoRight x |syntaxbias
+ 		    /syntaxgap
+ 		}
+ 		/ @Line from { "OX at NW" } to { "OX at SW" }
+ 		/ @Line from { "OX at WMK" } to { "OX at IN@AX at WMK" }
+ 		/ @RVLCurveArrow from { "OX at IN@AX at EMK" } to { "OX at SW" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    }
+ 	}
+ 
+ 	def @UpRightOptionalDiverted right x
+ 	{
+ 	    @UDLine {
+ 		OX:: @LabelMarks {
+ 		    ^/syntaxgap
+ 		    |syntaxgap AX:: @LabelMarks @GoRight x |syntaxbias
+ 		}
+ 		/ @Line from { "OX at NW" } to { "OX at SW" }
+ 		/ @Line from { "OX at WMK" } to { "OX at IN@AX at WMK" }
+ 		/ @RVLCurveArrow from { "OX at IN@AX at EMK" } to { "OX at NW" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    }
+ 	}
+ 
+ 	def @RightDownOptionalDiverted right x
+ 	{
+ 	    @LRLine {
+ 		OX:: @LabelMarks {
+ 		    { /syntaxgap AX:: @LabelMarks @GoDown x /syntaxbias }
+ 		    |syntaxgap
+ 		}
+ 		/ @Line from { "OX at NW" } to { "OX at NE" }
+ 		/ @Line from { "OX at NMK" } to { "OX at IN@AX at NMK" }
+ 		/ @VHCurve from {"OX at IN@AX at SMK"} to { "OX at SE"--{pssyntaxgap 0} }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @HVCurve from { "OX at SE" -- {pssyntaxgap 0} } to { "OX at NE" }
+ 		    arrow { yes } bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    }
+ 	}
+ 
+ 	def @LeftDownOptionalDiverted right x
+ 	{
+ 	    @LRLine {
+ 		OX:: @LabelMarks {
+ 		    ^|syntaxgap
+ 		    { /syntaxgap AX:: @LabelMarks @GoDown x /syntaxbias }
+ 		}
+ 		/ @Line from { "OX at NW" } to { "OX at NE" }
+ 		/ @Line from { "OX at NMK" } to { "OX at IN@AX at NMK" }
+ 		/ @VHCurve from {"OX at IN@AX at SMK"} to { "OX at SW"++{pssyntaxgap 0} }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @HVCurve from { "OX at SW" ++ {pssyntaxgap 0} } to { "OX at NW" }
+ 		    arrow { yes } bias { pssyntaxbias } radius { pssyntaxradius }
+ 	    }
+ 	}
+ 
+ 	def @OptionalDiverted right x
+ 	{
+ 	    @CurrDirection @Case {
+ 		@Right @Yield @RightDownOptionalDiverted x
+ 		@Up    @Yield @UpRightOptionalDiverted x
+ 		@Left  @Yield @LeftDownOptionalDiverted x
+ 		@Down  @Yield @DownRightOptionalDiverted x
+ 	    }
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  @Diverted                                                          #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @DownRightDiverted right x
+ 	{
+ 	    @UDLine {
+ 		OX:: @LabelMarks {
+ 		    |syntaxgap AX:: @LabelMarks @GoRight x |syntaxbias
+ 		    ^/syntaxgap
+ 		    /syntaxgap
+ 		}
+ 		/ @VHCurve from { "OX at NW" } to { "OX at IN@AX at WMK" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @RVLCurve from { "OX at IN@AX at EMK" }
+ 		    to { xcoord "OX at IN@AX at WMK" ycoord "OX at EMK" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @HVCurve from { xcoord "OX at IN@AX at WMK" ycoord "OX at EMK" }
+ 		    to { "OX at SW" } bias { pssyntaxbias } radius {pssyntaxradius}
+ 	    }
+ 	}
+ 
+ 	def @UpRightDiverted right x
+ 	{
+ 	    @UDLine {
+ 		OX:: @LabelMarks {
+ 		    ^/syntaxgap
+ 		    /syntaxgap
+ 		    |syntaxgap AX:: @LabelMarks @GoRight x |syntaxbias
+ 		}
+ 		/ @VHCurve from { "OX at SW" } to { "OX at IN@AX at WMK" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @RVLCurve from { "OX at IN@AX at EMK" }
+ 		    to { xcoord "OX at IN@AX at WMK" ycoord "OX at EMK" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @HVCurve from { xcoord "OX at IN@AX at WMK" ycoord "OX at EMK" }
+ 		    to { "OX at NW" } bias { pssyntaxbias } radius {pssyntaxradius}
+ 	    }
+ 	}
+ 
+ 	def @RightDownDiverted right x
+ 	{
+ 	    @LRLine {
+ 		OX:: @LabelMarks {
+ 		    { /syntaxgap AX:: @LabelMarks @GoDown x /syntaxbias }
+ 		    ^|syntaxgap
+ 		    |syntaxgap
+ 		}
+ 		/ @HVCurve from { "OX at NW" } to { "OX at IN@AX at NMK" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @VHCurve from { "OX at IN@AX at SMK" }
+ 		    to { xcoord "OX at IN@AX at EMK" ycoord "OX at SMK" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @HVCurve from { xcoord "OX at IN@AX at EMK" ycoord "OX at SMK" }
+ 		    to { "OX at IN@AX at EMK" ++ { pssyntaxgap 0 } }
+ 		    bias { pssyntaxbias } radius {pssyntaxradius}
+ 		/ @VHCurve from { "OX at IN@AX at EMK" ++ { pssyntaxgap 0 } }
+ 		    to { "OX at NE" } bias { pssyntaxbias } radius {pssyntaxradius}
+ 	    }
+ 	}
+ 
+ 	def @LeftDownDiverted right x
+ 	{
+ 	    @LRLine {
+ 		OX:: @LabelMarks {
+ 		    |syntaxgap
+ 		    ^|syntaxgap
+ 		    { /syntaxgap AX:: @LabelMarks @GoDown x /syntaxbias }
+ 		}
+ 		/ @HVCurve from { "OX at NE" } to { "OX at IN@AX at NMK" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @VHCurve from { "OX at IN@AX at SMK" }
+ 		    to { xcoord "OX at IN@AX at WMK" ycoord "OX at SMK" }
+ 		    bias { pssyntaxbias } radius { pssyntaxradius }
+ 		/ @HVCurve from { xcoord "OX at IN@AX at WMK" ycoord "OX at SMK" }
+ 		    to { "OX at IN@AX at WMK" -- { pssyntaxgap 0 } }
+ 		    bias { pssyntaxbias } radius {pssyntaxradius}
+ 		/ @VHCurve from { "OX at IN@AX at WMK" -- { pssyntaxgap 0 } }
+ 		    to { "OX at NW" } bias { pssyntaxbias } radius {pssyntaxradius}
+ 	    }
+ 	}
+ 
+ 	def @Diverted right x
+ 	{
+ 	    @CurrDirection @Case {
+ 		@Right @Yield @RightDownDiverted x
+ 		@Up    @Yield @UpRightDiverted x
+ 		@Left  @Yield @LeftDownDiverted x
+ 		@Down  @Yield @DownRightDiverted x
+ 	    }
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  @RepeatDiverted                                                    #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @RepeatDiverted right x
+ 	{
+ 	    # this implementation exploits the coincidental similarity
+ 	    # of @RepeatDiverted to @OptionalDiverted
+ 
+ 	    @CurrDirection @Case {
+ 		@Right @Yield @LeftDownOptionalDiverted x
+ 		@Up    @Yield @DownRightOptionalDiverted x
+ 		@Left  @Yield @RightDownOptionalDiverted x
+ 		@Down  @Yield @UpRightOptionalDiverted x
+ 	    }
+ 	}
+ 
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  @Loop and @Repeat                                                  #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @Loop
+ 	    named A {}
+ 	    named B {}
+ 	{
+ 	    def @LeftOrRightLoop
+ 		named al { no }
+ 		named ar { no }
+ 	    {
+ 		@LRLine {
+ 		    @HContract @VContract { OX:: @LabelMarks {
+ 		    	{ |syntaxgap AX:: @LabelMarks A |syntaxgap }
+ 		    	//syntaxgap
+ 		    	{ |0.5rt BX:: @LabelMarks @GoReverse B |syntaxgap }
+ 		    } }
+ 		    / @Line from { "OX at WMK" } to { "OX at IN@AX at WMK" }
+ 		    / @Line from { "OX at EMK" } to { "OX at IN@AX at EMK" }
+ 		    / @HVCurve from { "OX at IN@BX at EMK" } to { "OX at EMK" }
+ 			arrow { ar } bias {pssyntaxbias} radius {pssyntaxradius}
+ 		    / @HVCurve from { "OX at IN@BX at WMK" } to { "OX at WMK" }
+ 			arrow { al } bias {pssyntaxbias} radius {pssyntaxradius}
+ 		}
+ 	    }
+ 
+ 	    def @UpOrDownLoop
+ 		named au { no }
+ 		named ad { no }
+ 	    {
+ 		@UDLine {
+ 		    @HContract @VContract { OX:: @LabelMarks {
+ 		    	{ /syntaxgap AX:: @LabelMarks A /syntaxgap }
+ 		    	||syntaxgap
+ 		    	{ /0.5rt BX:: @LabelMarks @GoReverse B /syntaxgap }
+ 		    } }
+ 		    / @Line from { "OX at NMK" } to { "OX at IN@AX at NMK" }
+ 		    / @Line from { "OX at SMK" } to { "OX at IN@AX at SMK" }
+ 		    / @VHCurve from { "OX at IN@BX at NMK" } to { "OX at NMK" }
+ 			arrow { au } bias {pssyntaxbias} radius {pssyntaxradius}
+ 		    / @VHCurve from { "OX at IN@BX at SMK" } to { "OX at SMK" }
+ 			arrow { ad } bias {pssyntaxbias} radius {pssyntaxradius}
+ 		}
+ 	    }
+ 
+ 	    @CurrDirection @Case {
+ 		@Right @Yield @LeftOrRightLoop al { yes }
+ 		@Up    @Yield @UpOrDownLoop    ad { yes }
+ 		@Left  @Yield @LeftOrRightLoop ar { yes }
+ 		@Down  @Yield @UpOrDownLoop    au { yes }
+ 	    }
+ 	}
+ 
+ 	def @Repeat right x
+ 	{
+ 	    @Loop
+ 		A { x }
+ 		B { @Skip }
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  @LoopOpposite and @RepeatOpposite                                  #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @LoopOpposite
+ 	    named A {}
+ 	    named B {}
+ 	{
+ 	    def @LeftOrRightLoopOpposite
+ 		named al { no }
+ 		named ar { no }
+ 	    {
+ 		@LRLine {
+ 		    @HContract @VContract { OX:: @LabelMarks {
+ 		    	{ |0.5rt BX:: @LabelMarks @GoReverse B |syntaxgap }
+ 		    	^//syntaxgap
+ 		    	{ |syntaxgap AX:: @LabelMarks A |syntaxgap }
+ 		    } }
+ 		    / @Line from { "OX at WMK" } to { "OX at IN@AX at WMK" }
+ 		    / @Line from { "OX at EMK" } to { "OX at IN@AX at EMK" }
+ 		    / @HVCurve from { "OX at IN@BX at EMK" } to { "OX at EMK" }
+ 			arrow { ar } bias {pssyntaxbias} radius {pssyntaxradius}
+ 		    / @HVCurve from { "OX at IN@BX at WMK" } to { "OX at WMK" }
+ 			arrow { al } bias {pssyntaxbias} radius {pssyntaxradius}
+ 		}
+ 	    }
+ 
+ 	    def @UpOrDownLoopOpposite
+ 		named au { no }
+ 		named ad { no }
+ 	    {
+ 		@UDLine {
+ 		    @HContract @VContract { OX:: @LabelMarks {
+ 		    	{ /0.5rt BX:: @LabelMarks @GoReverse B /syntaxgap }
+ 		    	^||syntaxgap
+ 		    	{ /syntaxgap AX:: @LabelMarks A /syntaxgap }
+ 		    } }
+ 		    / @Line from { "OX at NMK" } to { "OX at IN@AX at NMK" }
+ 		    / @Line from { "OX at SMK" } to { "OX at IN@AX at SMK" }
+ 		    / @VHCurve from { "OX at IN@BX at NMK" } to { "OX at NMK" }
+ 			arrow { au } bias {pssyntaxbias} radius {pssyntaxradius}
+ 		    / @VHCurve from { "OX at IN@BX at SMK" } to { "OX at SMK" }
+ 			arrow { ad } bias {pssyntaxbias} radius {pssyntaxradius}
+ 		}
+ 	    }
+ 
+ 	    @CurrDirection @Case {
+ 		@Right @Yield @LeftOrRightLoopOpposite al { yes }
+ 		@Up    @Yield @UpOrDownLoopOpposite    ad { yes }
+ 		@Left  @Yield @LeftOrRightLoopOpposite ar { yes }
+ 		@Down  @Yield @UpOrDownLoopOpposite    au { yes }
+ 	    }
+ 	}
+ 
+ 	def @RepeatOpposite right x
+ 	{
+ 	    @LoopOpposite
+ 		A { x }
+ 		B { @Skip }
+ 	}
+ 
+ 
+         #######################################################################
+         #                                                                     #
+         #  Value of whole diagram                                             #
+         #                                                                     #
+         #######################################################################
+ 
+ 	def @DiagValue right x
+ 	{
+ 	    @BackEnd @Case {
+ 		PostScript @Yield {
+ 		{
+ 		    save @Case {
+ 			{ yes Yes } @Yield "grestore save gsave"
+ 			else @Yield {}
+ 		    }
+ 		    maxlabels "ldiagbegin"
+ 		    //
+ 		    "ldiagend"
+ 		    save @Case {
+ 			{ yes Yes } @Yield "restore"
+ 			else @Yield {}
+ 		    }
+ 		} @Graphic x }
+ 
+ 		PDF @Yield {}
+ 	    }
+ 	}
+ 
+ 	title @Case {
+ 
+ 	    "--titledft--" @Yield @DiagValue @Body
+ 
+ 	    else @Yield { title titleformat @DiagValue @Body }
+ 	}
+ 
+     @End @Diag
+ 
+ 
+     macro @SyntaxDiag {
+ 	@Diag
+ 	    avalign { mark }
+ 	    avstrut { yes }
+ 	    amargin { 0.2f }
+ 	    aoutline { box }
+ 	    afont { Italic }
+ 
+ 	    bvalign { mark }
+ 	    bvstrut { yes }
+ 	    bmargin { 0.2f }
+ 	    boutline { curvebox }
+ 	    bfont { Bold }
+ 
+ 	    cvalign { mark }
+ 	    cvstrut { yes }
+ 	    cmargin { 0.2f }
+ 	    coutline { circle }
+ 	    chsize { 1f }
+ 
+ 	    arrowlength { 0.4f }
+     }
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diagf.etc
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diagf.etc:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diagf.etc	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,627 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @Geometry package for algebra and geometry in PostScript              #
+ #  Version 1.0 (June 1996)                                                    #
+ #  Jeffrey H. Kingston                                                        #
+ #                                                                             #
+ ###############################################################################
+ 
+ export
+ 
+     i c p m s v f d "-0" "-1" "-2" "-3" "-4" "-5" "-6" "-7" "-8" "-9" "-."
+     pi e sqrt abs ceiling floor truncate round cos sin atan
+     exp log rand max min "*" "/" idiv mod "+" "-"
+     xcoord ycoord distance angleto ":=" ":==" "::" ":<" prev "??" "?!?"
+     boundaryatangle atangle
+     "**" "++" "--" anglefix anydebug ","
+     "=" "!=" "==" "!==" "<" "<=" ">" ">=" not and xor or
+     if quadcase signcase xloop yloop zloop
+     cabout aabout
+ 
+ def @Geometry
+ {
+     def i
+ 	precedence 100
+ 	left x
+     {
+ 	x "in"
+     }
+ 
+     def c
+ 	precedence 100
+ 	left x
+     {
+ 	x "cm"
+     }
+ 
+     def p
+ 	precedence 100
+ 	left x
+     {
+ 	x "pt"
+     }
+ 
+     def m
+ 	precedence 100
+ 	left x
+     {
+ 	x "em"
+     }
+ 
+     def s
+ 	precedence 100
+ 	left x
+     {
+ 	x "sp"
+     }
+ 
+     def v
+ 	precedence 100
+ 	left x
+     {
+ 	x "vs"
+     }
+ 
+     def f
+ 	precedence 100
+ 	left x
+     {
+ 	x "ft"
+     }
+ 
+     def d
+ 	precedence 100
+ 	left x
+     {
+ 	x "dg"
+     }
+ 
+     def pi
+     {
+ 	"ldiagpi"
+     }
+ 
+     def e
+     {
+ 	"ldiage"
+     }
+ 
+     def sqrt
+ 	precedence 99
+ 	right y
+     {
+ 	y "sqrt"
+     }
+ 
+     def abs
+ 	precedence 99
+ 	right y
+     {
+ 	y "abs"
+     }
+ 
+     def anglefix
+ 	precedence 99
+ 	right y
+     {
+ 	y "ldiagfixangle"
+     }
+ 
+     def ceiling
+ 	precedence 99
+ 	right y
+     {
+ 	y "ceiling"
+     }
+ 
+     def floor
+ 	precedence 99
+ 	right y
+     {
+ 	y "floor"
+     }
+ 
+     def truncate
+ 	precedence 99
+ 	right y
+     {
+ 	y "truncate"
+     }
+ 
+     def round
+ 	precedence 99
+ 	right y
+     {
+ 	y "round"
+     }
+ 
+     def cos
+ 	precedence 99
+ 	right y
+     {
+ 	y "cos"
+     }
+ 
+     def sin
+ 	precedence 99
+ 	right y
+     {
+ 	y "sin"
+     }
+ 
+     def xcoord
+ 	precedence 99
+ 	right y
+     {
+ 	y "pop"
+     }
+ 
+     def ycoord
+ 	precedence 99
+ 	right y
+     {
+ 	y "exch pop"
+     }
+ 
+     def distance
+ 	precedence 98
+ 	left x
+ 	right y
+     {
+ 	x y "ldiagdistance"
+     }
+ 
+     def angleto
+ 	precedence 98
+ 	left x
+ 	right y
+     {
+ 	x y "ldiagangleto"
+     }
+ 
+     def atan
+ 	precedence 98
+ 	left x
+ 	right y
+     {
+ 	x y "atan"
+     }
+ 
+     def exp
+ 	precedence 98
+ 	left x
+ 	right y
+     {
+ 	x y "exp"
+     }
+ 
+     def log
+ 	precedence 98
+ 	left x
+ 	right y
+     {
+ 	x y "ldiaglog"
+     }
+ 
+     def rand
+ 	precedence 98
+ 	left x
+ 	right y
+     {
+ 	x y "dorand"
+     }
+ 
+     def max
+ 	precedence 98
+ 	left x
+ 	right y
+     {
+ 	x y "ldiagmax"
+     }
+ 
+     def min
+ 	precedence 98
+ 	left x
+ 	right y
+     {
+ 	x y "ldiagmin"
+     }
+ 
+     def "*"
+ 	precedence 97
+ 	left x
+ 	right y
+     {
+ 	x y "mul"
+     }
+ 
+     def "/"
+ 	precedence 96
+ 	associativity left
+ 	left x
+ 	right y
+     {
+ 	x y "div"
+     }
+ 
+     def idiv
+ 	precedence 96
+ 	associativity left
+ 	left x
+ 	right y
+     {
+ 	x y "idiv"
+     }
+ 
+     def mod
+ 	precedence 96
+ 	left x
+ 	right y
+     {
+ 	x "cvi" y "cvi mod"
+     }
+ 
+     def "+"
+ 	precedence 95
+ 	associativity left
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    ""   @Yield y
+ 	    else @Yield { x y "add" }
+ 	}
+     }
+ 
+     def "-"
+ 	precedence 95
+ 	associativity left
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    ""   @Yield { y "neg" }
+ 	    else @Yield { x y "sub" }
+ 	}
+     }
+ 
+     def "-0" { "-0" }
+     def "-1" { "-1" }
+     def "-2" { "-2" }
+     def "-3" { "-3" }
+     def "-4" { "-4" }
+     def "-5" { "-5" }
+     def "-6" { "-6" }
+     def "-7" { "-7" }
+     def "-8" { "-8" }
+     def "-9" { "-9" }
+     def "-." { "-." }
+ 
+     def prev
+     {
+ 	"ldiagprevious"
+     }
+ 
+     def "??"
+ 	precedence 99
+ 	left x
+ 	right y
+     {
+ 	"{" x "} ("y") ldiagdolabel"
+     }
+ 
+     def "?!?"
+ 	precedence 99
+ 	left x
+ 	right y
+     {
+ 	"{" x "} "y" ldiagdolabel"
+     }
+ 
+     def boundaryatangle
+ 	precedence 89
+ 	left x
+ 	right y
+     {
+ 	x??"CTR" y x??"CIRCUM" "ldiagpadd"
+     }
+ 
+     def atangle
+ 	precedence 89
+ 	left x
+ 	right y
+     {
+ 	0 0 x y "ldiagatangle"
+     }
+ 
+     def "**"
+ 	precedence 88
+ 	left x
+ 	right y
+     {
+ 	x y "ldiagpmul"
+     }
+ 
+     def "++"
+ 	precedence 87
+ 	associativity left
+ 	left x
+ 	right y
+     {
+ 	x y "ldiagpadd"
+     }
+ 
+     def "--"
+ 	precedence 87
+ 	associativity left
+ 	left x
+ 	right y
+     {
+ 	y x "ldiagpsub"
+     }
+ 
+     def "="
+ 	precedence 79
+ 	left x
+ 	right y
+     {
+ 	x y "eq"
+     }
+ 
+     def "!="
+ 	precedence 79
+ 	left x
+ 	right y
+     {
+ 	x y "ne"
+     }
+ 
+     def "=="
+ 	precedence 79
+ 	left x
+ 	right y
+     {
+ 	x y "ldiagangleeq"
+     }
+ 
+     def "!=="
+ 	precedence 79
+ 	left x
+ 	right y
+     {
+ 	x y "ldiaganglene"
+     }
+ 
+     def "<"
+ 	precedence 79
+ 	left x
+ 	right y
+     {
+ 	x y "lt"
+     }
+ 
+     def "<="
+ 	precedence 79
+ 	left x
+ 	right y
+     {
+ 	x y "le"
+     }
+ 
+     def ">"
+ 	precedence 79
+ 	left x
+ 	right y
+     {
+ 	x y "gt"
+     }
+ 
+     def ">="
+ 	precedence 79
+ 	left x
+ 	right y
+     {
+ 	x y "ge"
+     }
+ 
+     def not
+ 	precedence 78
+ 	right y
+     {
+ 	y "not"
+     }
+ 
+     def and
+ 	precedence 77
+ 	left x
+ 	right y
+     {
+ 	x y "and"
+     }
+ 
+     def xor
+ 	precedence 76
+ 	left x
+ 	right y
+     {
+ 	x y "xor"
+     }
+ 
+     def or
+ 	precedence 76
+ 	left x
+ 	right y
+     {
+ 	x y "or"
+     }
+ 
+     def ","
+ 	precedence 70
+ 	left x
+ 	right y
+     {
+ 	OOO ++ { OOX -- OOO }**x ++ { OOY -- OOO }**y
+     }
+ 
+     def ":="
+ 	precedence 20
+ 	left x
+ 	right y
+     {
+ 	"/"x "[" y "] cvx def"
+     }
+ 
+     def ":=="
+ 	precedence 20
+ 	left x
+ 	right y
+     {
+ 	"/"x "[" y "counttomark 2 add (assigning) exch ldiagdebugprint ] cvx def"
+     }
+ 
+     def "::"
+ 	precedence 20
+ 	left x
+ 	right y
+     {
+ 	y "/"x "ldiagpointdef"
+     }
+ 
+     def ":<"
+ 	precedence 20
+ 	left x
+ 	right y
+     {
+ 	y "/"x"@ANGLE ldiagangledef"
+     }
+ 
+     def if
+ 	named cond {}
+ 	named then {}
+ 	named else {}
+     {
+ 	cond "{" then "} {" else "} ifelse"
+     }
+ 
+     def quadcase
+ 	precedence 10
+ 	left angle
+ 	named "0"	{}
+ 	named "0-90"	{}
+ 	named "90"	{}
+ 	named "90-180"	{}
+ 	named "180"	{}
+ 	named "180-270"	{}
+ 	named "270"	{}
+ 	named "270-360"	{}
+     {
+ 	"{" 0-90 "} {" 270 "} {" 180 "} {" 90 "}"
+ 	"{" 0 "} {" 270-360 "} {" 180-270 "} {" 90-180 "}" angle "ldiagquadcase"
+     }
+ 
+     def signcase
+ 	precedence 10
+ 	left number
+ 	named neg {}
+ 	named zero {}
+ 	named pos {}
+     {
+ 	"{" neg "} {" zero "} {" pos "}" number "ldiagsigncase"
+     }
+ 
+     def xloop
+ 	named from { 0 }
+ 	named to { 0 }
+ 	named by { 1 }
+ 	named do named x { "xval" } {}
+     {
+ 	from by to "{ /xval exch def" do "} for"
+     }
+ 
+     def yloop
+ 	named from { 0 }
+ 	named to { 0 }
+ 	named by { 1 }
+ 	named do named y { "yval" } {}
+     {
+ 	from by to "{ /yval exch def" do "} for"
+     }
+ 
+     def zloop
+ 	named from { 0 }
+ 	named to { 0 }
+ 	named by { 1 }
+ 	named do named z { "zval" } {}
+     {
+ 	from by to "{ /zval exch def" do "} for"
+     }
+ 
+     def anydebug
+ 	right tag
+     {
+ 	"[" tag "counttomark ("tag") exch ldiagdebugprint cleartomark"
+     }
+ 
+     def aabout
+ 	named circum {}
+ 	named extra {}
+ 	named centre {}
+     {
+ 	"{" circum "} cvlit" extra "[" centre "] cvx ldiagaabout"
+ 	# ZXCTR	:= centre
+ 	# ZFCTR	:= circum??CTR
+ 	# ZAREF	:= ZFCTR angleto ZXCTR
+ 	# ZAMIN	:= 0d
+ 	# ZPMIN	:= circum boundaryatangle { ZAREF - ZAMIN }
+ 	# 		 ++ extra atangle { ZAREF - ZAMIN }
+ 	# ZAMAX	:= 90d
+ 	# ZPMAX	:= circum boundaryatangle { ZAREF - ZAMAX }
+ 	# 		 ++ extra atangle { ZAREF - ZAMAX }
+ 	# xloop from { 1 } to { 12 } by { 1 } do {
+ 	#   ZAMID	:= { ZAMIN + ZAMAX } * 0.5
+ 	#   ZPMID	:= circum boundaryatangle { ZAREF - ZAMID }
+ 	# 		 ++ extra atangle { ZAREF - ZAMID }
+ 	#   if cond { {ZPMID distance ZXCTR} > {ZFCTR distance ZXCTR} } then {
+ 	#     ZAMAX := ZAMID
+ 	#     ZPMAX := ZPMID
+ 	#   }
+ 	#   else {
+ 	#     ZAMIN := ZAMID
+ 	#     ZPMIN := ZPMID
+ 	#   }
+ 	# }
+ 	# ZPMID
+     }
+ 
+     def cabout
+ 	named circum {}
+ 	named extra {}
+ 	named centre {}
+     {
+        "{" circum "} cvlit" extra "[" centre "] cvx ldiagcabout"
+        # ZXCTR	:= centre
+        # ZFCTR	:= circum??CTR
+        # ZAREF	:= ZFCTR angleto ZXCTR
+        # ZAMIN	:= 0d
+        # ZPMIN	:= circum boundaryatangle { ZAREF + ZAMIN }
+        # 		 ++ extra atangle { ZAREF + ZAMIN }
+        # ZAMAX	:= 90d
+        # ZPMAX	:= circum boundaryatangle { ZAREF + ZAMAX }
+        # 		 ++ extra atangle { ZAREF + ZAMAX }
+        # xloop from { 1 } to { 12 } by { 1 } do {
+        #   ZAMID	:= { ZAMIN + ZAMAX } * 0.5
+        #   ZPMID	:= circum boundaryatangle { ZAREF + ZAMID }
+        # 		 ++ extra atangle { ZAREF + ZAMID }
+        #   if cond { {ZPMID distance ZXCTR} > {ZFCTR distance ZXCTR} } then {
+        #     ZAMAX := ZAMID
+        #     ZPMAX := ZPMID
+        #   }
+        #   else {
+        #     ZAMIN := ZAMID
+        #     ZPMIN := ZPMID
+        #   }
+        # }
+        # ZPMID
+     }
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diagf.lpg
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diagf.lpg:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/diagf.lpg	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,2706 ----
+ %%BeginResource: procset LoutFigPrependGraphic
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %                                                                    %
+ %  PostScript @SysPrependGraphic file for @Diag Jeffrey H. Kingston  %
+ %  Version 2.0 (includes CIRCUM label)                September 1996 %
+ %                                                                    %
+ %  To assist in avoiding name clashes, the names of all symbols      %
+ %  defined here begin with "ldiag".  However, this is not feasible   %
+ %  with user-defined labels and some labels used by users.           %
+ %                                                                    %
+ %  <point>      is two numbers, a point.                             %
+ %  <length>     is one number, a length                              %
+ %  <angle>      is one number, an angle in degrees                   %
+ %  <dashlength> is one number, the preferred length of a dash        %
+ %                                                                    %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 
+ errordict begin
+    /handleerror
+    {
+       {  /Times-Roman findfont 8 pt scalefont setfont
+ 	 0 setgray 4 pt 4 pt moveto
+ 	 $error /errorname get
+ 	 dup ldiagdict exch known
+ 	 { ldiagdict exch get }
+ 	 { 50 string cvs } ifelse
+ 	 show
+ 	 (  Command: ) show
+ 	 $error /command get 50 string cvs show
+       } stopped {} if
+       showpage stop
+    } def
+ end
+ 
+ % begin diagram: <maxlabels> ldiagbegin -
+ % must be defined outside ldiagdict since it loads it
+ /ldiagbegin
+ { xsize 0 0 ysize ldiagdict begin
+   5 -1 roll /ldiagmaxlabels exch def
+   (@Diag) ldiagpushtagdict
+   /OOY ldiagpointdef /OOX ldiagpointdef 0 0 /OOO ldiagpointdef
+ } def
+ 
+ % end diagram: - ldiagend -
+ /ldiagend
+ { ldiagpoptagdict end
+ } def
+ 
+ % concat strings: <string> <string> ldiagconcat <string>
+ % must be defined outside ldiagdict since used in ldiagpromotelabels
+ /ldiagconcat
+ { 2 copy length exch length add string
+   dup 0 4 index putinterval
+   dup 3 index length 3 index putinterval
+   3 1 roll pop pop
+ } def
+ 
+ /ldiagdebugposy 432 def
+ /ldiagdebugposx 72 def
+ 
+ % <string> <int> ldiagdebugprint -
+ % must be defined outside ldiagdict since used in arbitrary places
+ % print count or <int> stack entries, which ever is the smaller
+ /ldiagdebugprint
+ {
+   exch
+   gsave
+   initgraphics
+   ldiagdebugposy 72 lt
+   { /ldiagdebugposx ldiagdebugposx 144 add store
+     /ldiagdebugposy 432 store
+   }
+   {
+     /ldiagdebugposy ldiagdebugposy 12 sub store
+   } ifelse
+   ldiagdebugposx ldiagdebugposy moveto
+   /Times-Roman findfont 10 scalefont setfont
+   0 setgray show
+   count 1 sub 2 copy lt { pop } { exch pop } ifelse 1 sub
+   0 exch 1 exch
+   {
+     /ldiagdebugposy ldiagdebugposy 12 sub store
+     ldiagdebugposx 12 add ldiagdebugposy moveto
+     index 50 string cvs show
+   } for
+   grestore
+ } def
+ 
+ /ldiagdict 200 dict def
+ ldiagdict begin
+ 
+ % error messages
+ /dictfull (dictfull error:  too many labels?) def
+ /dictstackoverflow (dictstackoverflow error:  labels nested too deeply?) def
+ /execstackoverflow (execstackoverflow error:  figure nested too deeply?) def
+ /limitcheck (limitcheck error:  figure nested too deeply or too large?) def
+ /syntaxerror (syntaxerror error:  syntax error in text of figure?) def
+ /typecheck (typecheck error:  syntax error in text of figure?) def
+ /undefined (undefined error:  unknown or misspelt label?) def
+ /VMError (VMError error:  run out of memory?) def
+ 
+ % push pi onto stack:  - ldiagpi <num>
+ /ldiagpi 3.14159 def
+ 
+ % push e onto stack:  - ldiage <num>
+ /ldiage 2.71828 def
+ 
+ % arc directions
+ /clockwise     false def
+ /anticlockwise true  def
+ 
+ % test equality between two angles:  <angle> <angle> ldiagangleeq <bool>
+ /ldiagangleeq { ldiagfixangle exch ldiagfixangle eq } def
+ 
+ % test inequality between two angles:  <angle> <angle> ldiaganglene <bool>
+ /ldiaganglene { ldiagangleeq not } def
+ 
+ % maximum of two numbers:  <num> <num> ldiagmax <num>
+ /ldiagmax { 2 copy gt { pop } { exch pop } ifelse } def
+ 
+ % minimum of two numbers:  <num> <num> ldiagmin <num>
+ /ldiagmin { 2 copy lt { pop } { exch pop } ifelse } def
+ 
+ % add two points:  <point> <point> ldiagpadd <point>
+ /ldiagpadd
+ {
+   % (Entering padd) 4 ldiagdebugprint
+   exch 3 1 roll add 3 1 roll add exch
+   % (Leaving padd) 2 ldiagdebugprint
+ } def
+ 
+ % subtract first point from second:  <point> <point> ldiagpsub <point>
+ /ldiagpsub { 3 2 roll sub 3 1 roll exch sub exch } def
+ 
+ % max two points:  <point> <point> ldiagpmax <point>
+ /ldiagpmax { exch 3 1 roll ldiagmax 3 1 roll ldiagmax exch } def
+ 
+ % min two points:  <point> <point> ldiagpmin <point>
+ /ldiagpmin { exch 3 1 roll ldiagmin 3 1 roll ldiagmin exch } def
+ 
+ % scalar multiplication: <point> <num> ldiagpmul <point>
+ /ldiagpmul { dup 3 1 roll mul 3 1 roll mul exch } def
+ 
+ % point at angle and distance:  <point> <length> <angle> ldiagatangle <point>
+ /ldiagatangle { 2 copy cos mul 3 1 roll sin mul ldiagpadd } def
+ 
+ % angle from one point to another:  <point> <point> ldiagangleto <angle>
+ /ldiagangleto { ldiagpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+ 
+ % distance between two points:  <point> <point> ldiagdistance <length>
+ /ldiagdistance { ldiagpsub dup mul exch dup mul add sqrt } def
+ 
+ % stroke a solid line:  <length> <dashlength> ldiagsolid -
+ /ldiagsolid
+ {  pop pop [] 0 setdash 1 setlinecap stroke
+ } def
+ 
+ % stroke a dashed line:   <length> <dashlength> ldiagdashed -
+ /ldiagdashed
+ {  2 copy div 2 le 1 index 0 le or
+    {  exch pop 1 pt ldiagmax [ exch dup ] 0 setdash }
+    {  dup [ exch 4 2 roll 2 copy div
+       1 sub 2 div ceiling dup 4 1 roll
+       1 add mul sub exch div ] 0 setdash
+    } ifelse 0 setlinecap stroke
+ } def
+ 
+ % stroke a cdashed line:  <length> <dashlength> ldiagcdashed -
+ /ldiagcdashed
+ {  % (Entering ldiagcdashed) 2 ldiagdebugprint
+    2 copy le 1 index 0 le or
+    { exch pop 1 pt ldiagmax [ exch dup ] dup 0 get 2 div setdash }
+    { dup [ 4 2 roll exch 2 copy exch div
+      2 div ceiling div 1 index sub
+      ] exch 2 div setdash
+    } ifelse 0 setlinecap stroke
+    % (Leaving ldiagcdashed) 0 ldiagdebugprint
+ } def
+ 
+ % stroke a dotted line:  <length> <dashlength> ldiagdotted -
+ /ldiagdotted
+ {  2 copy le 1 index 0 le or
+    { exch pop 1 pt ldiagmax [ exch 0 exch ] 0 setdash }
+    { 1 index exch div ceiling div
+      [ 0 3 2 roll ] 0 setdash
+    } ifelse 1 setlinecap stroke
+ } def
+ 
+ % stroke a noline line:  <length> <dashlength> ldiagnoline -
+ /ldiagnoline
+ { pop pop
+ } def
+ 
+ % painting (i.e. filling): - ldiagwhite - (etc.)
+ /ldiagnopaint		{			       } def
+ /ldiagnochange		{ 			  fill } def
+ /ldiagdarkblue		{ 0.0 0.0 0.5 setrgbcolor fill } def
+ /ldiagblue		{ 0.0 0.0 1.0 setrgbcolor fill } def
+ /ldiaglightblue		{ 0.5 0.5 1.0 setrgbcolor fill } def
+ /ldiagdarkgreen		{ 0.0 0.5 0.0 setrgbcolor fill } def
+ /ldiaggreen		{ 0.0 1.0 0.0 setrgbcolor fill } def
+ /ldiaglightgreen	{ 0.5 1.0 0.5 setrgbcolor fill } def
+ /ldiagdarkred		{ 0.5 0.0 0.0 setrgbcolor fill } def
+ /ldiagred		{ 1.0 0.0 0.0 setrgbcolor fill } def
+ /ldiaglightred		{ 1.0 0.5 0.5 setrgbcolor fill } def
+ /ldiagdarkcyan		{ 0.0 0.5 0.5 setrgbcolor fill } def
+ /ldiagcyan		{ 0.0 1.0 1.0 setrgbcolor fill } def
+ /ldiaglightcyan		{ 0.5 1.0 1.0 setrgbcolor fill } def
+ /ldiagdarkmagenta	{ 0.5 0.0 0.5 setrgbcolor fill } def
+ /ldiagmagenta		{ 1.0 0.0 1.0 setrgbcolor fill } def
+ /ldiaglightmagenta	{ 1.0 0.5 1.0 setrgbcolor fill } def
+ /ldiagdarkyellow	{ 0.5 0.5 0.0 setrgbcolor fill } def
+ /ldiagyellow		{ 1.0 1.0 0.0 setrgbcolor fill } def
+ /ldiaglightyellow	{ 1.0 1.0 0.5 setrgbcolor fill } def
+ /ldiagdarkgray		{ 0.2 0.2 0.2 setrgbcolor fill } def
+ /ldiaggray		{ 0.5 0.5 0.5 setrgbcolor fill } def
+ /ldiaglightgray		{ 0.8 0.8 0.8 setrgbcolor fill } def
+ /ldiagdarkgrey		{ 0.2 0.2 0.2 setrgbcolor fill } def
+ /ldiaggrey		{ 0.5 0.5 0.5 setrgbcolor fill } def
+ /ldiaglightgrey		{ 0.8 0.8 0.8 setrgbcolor fill } def
+ /ldiagblack		{ 0.0 0.0 0.0 setrgbcolor fill } def
+ /ldiagwhite		{ 1.0 1.0 1.0 setrgbcolor fill } def
+ 
+ % shape and labels of the @Box symbol
+ /ldiagbox
+ {
+    0     0         /SW  ldiagpointdef
+    xsize 0         /SE  ldiagpointdef
+    xsize ysize     /NE  ldiagpointdef
+    0     ysize     /NW  ldiagpointdef
+    SE 0.5 ldiagpmul /S   ldiagpointdef
+    NW 0.5 ldiagpmul /W   ldiagpointdef
+    W SE ldiagpadd   /E   ldiagpointdef
+    S NW ldiagpadd   /N   ldiagpointdef
+    NE 0.5 ldiagpmul /CTR ldiagpointdef
+ 
+      0 dg /S at ANGLE  ldiagangledef
+     45 dg /SE at ANGLE ldiagangledef
+     90 dg /E at ANGLE  ldiagangledef
+    135 dg /NE at ANGLE ldiagangledef
+    180 dg /N at ANGLE  ldiagangledef
+    225 dg /NW at ANGLE ldiagangledef
+    270 dg /W at ANGLE  ldiagangledef
+    315 dg /SW at ANGLE ldiagangledef
+ 
+    [ CTR NE ldiagpsub /ldiagboxcircum cvx ] ldiagcircumdef
+    SW SE NE NW SW
+ } def
+ 
+ % shape and labels of the @CurveBox symbol
+ % <margin> ldiagcurvebox <shape>
+ /ldiagcurvebox
+ {  
+ 
+    % (Entering ldiagcurvebox) 1 ldiagdebugprint
+    ldiagdecodelength /cbmgn exch def
+ 
+    xsize 0.5 mul	ysize 0.5 mul	/CTR ldiagpointdef
+    xsize 0.5 mul	0		/S   ldiagpointdef
+    xsize		ysize 0.5 mul	/E   ldiagpointdef
+    xsize 0.5 mul	ysize		/N   ldiagpointdef
+    0			ysize 0.5 mul	/W   ldiagpointdef
+ 
+    cbmgn 0.293 mul		cbmgn 0.293 mul		  /SW  ldiagpointdef
+    xsize cbmgn 0.293 mul sub	cbmgn 0.293 mul		  /SE  ldiagpointdef
+    xsize cbmgn 0.293 mul sub	ysize cbmgn 0.293 mul sub /NE  ldiagpointdef
+    cbmgn 0.293 mul		ysize cbmgn 0.293 mul sub /NW  ldiagpointdef
+ 
+      0 dg /S at ANGLE  ldiagangledef
+     45 dg /SE at ANGLE ldiagangledef
+     90 dg /E at ANGLE  ldiagangledef
+    135 dg /NE at ANGLE ldiagangledef
+    180 dg /N at ANGLE  ldiagangledef
+    225 dg /NW at ANGLE ldiagangledef
+    270 dg /W at ANGLE  ldiagangledef
+    315 dg /SW at ANGLE ldiagangledef
+ 
+    [ xsize ysize 0.5 ldiagpmul cbmgn /ldiagcurveboxcircum cvx ] ldiagcircumdef
+ 
+    cbmgn		0
+    xsize cbmgn sub	0
+    [ xsize cbmgn sub	cbmgn		]
+    xsize		cbmgn
+    xsize		ysize cbmgn sub
+    [ xsize cbmgn sub	ysize cbmgn sub	]
+    xsize cbmgn sub	ysize
+    cbmgn		ysize
+    [ cbmgn		ysize cbmgn sub	]
+    0			ysize cbmgn sub
+    0			cbmgn
+    [ cbmgn		cbmgn		]
+    cbmgn		0
+ 
+    % (Leaving ldiagcurvebox) 0 ldiagdebugprint
+ } def
+ 
+ % shadow of the @ShadowBox symbol
+ % its shape and labels are done, somewhat inaccurately, with ldiagbox
+ % <shadowmargin> ldiagshadow -
+ /ldiagshadow
+ { 
+   /lfshm exch def
+   
+   lfshm 0 moveto
+   0 lfshm neg rlineto
+   xsize 0 rlineto
+   0 ysize rlineto
+   lfshm neg 0 rlineto
+   xsize 0 lineto
+   closepath fill
+ 
+ } def
+ 
+ % shape and labels of the @Square symbol
+ /ldiagsquare
+ {
+    xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef
+    CTR xsize xsize ysize ysize ldiagpmax 0.5 ldiagpmul ldiagpadd /NE ldiagpointdef
+    CTR 0 0 CTR NE ldiagdistance 135 ldiagatangle ldiagpadd /NW ldiagpointdef
+    CTR 0 0 CTR NE ldiagdistance 225 ldiagatangle ldiagpadd /SW ldiagpointdef
+    CTR 0 0 CTR NE ldiagdistance 315 ldiagatangle ldiagpadd /SE ldiagpointdef
+    SW 0.5 ldiagpmul SE 0.5 ldiagpmul ldiagpadd /S ldiagpointdef
+    NW 0.5 ldiagpmul NE 0.5 ldiagpmul ldiagpadd /N ldiagpointdef
+    SW 0.5 ldiagpmul NW 0.5 ldiagpmul ldiagpadd /W ldiagpointdef
+    SE 0.5 ldiagpmul NE 0.5 ldiagpmul ldiagpadd /E ldiagpointdef
+ 
+      0 dg /S at ANGLE  ldiagangledef
+     45 dg /SE at ANGLE ldiagangledef
+     90 dg /E at ANGLE  ldiagangledef
+    135 dg /NE at ANGLE ldiagangledef
+    180 dg /N at ANGLE  ldiagangledef
+    225 dg /NW at ANGLE ldiagangledef
+    270 dg /W at ANGLE  ldiagangledef
+    315 dg /SW at ANGLE ldiagangledef
+ 
+    [ CTR NE ldiagpsub /ldiagboxcircum cvx ] ldiagcircumdef
+    SW SE NE NW SW
+ } def
+ 
+ % shape and labels of the @Diamond symbol
+ /ldiagdiamond
+ {
+    xsize 0 0.5 ldiagpmul /S   ldiagpointdef
+    0 ysize 0.5 ldiagpmul /W   ldiagpointdef
+    S W         ldiagpadd /CTR ldiagpointdef
+    CTR W       ldiagpadd /N   ldiagpointdef
+    CTR S       ldiagpadd /E   ldiagpointdef
+    E N ldiagpadd 0.5 ldiagpmul /NE ldiagpointdef
+    N W ldiagpadd 0.5 ldiagpmul /NW ldiagpointdef
+    S W ldiagpadd 0.5 ldiagpmul /SW ldiagpointdef
+    S E ldiagpadd 0.5 ldiagpmul /SE ldiagpointdef
+ 
+      0 dg        /S at ANGLE  ldiagangledef
+     90 dg        /E at ANGLE  ldiagangledef
+    180 dg        /N at ANGLE  ldiagangledef
+    270 dg        /W at ANGLE  ldiagangledef
+    S E ldiagangleto /SE at ANGLE ldiagangledef
+    E N ldiagangleto /NE at ANGLE ldiagangledef
+    N W ldiagangleto /NW at ANGLE ldiagangledef
+    W S ldiagangleto /SW at ANGLE ldiagangledef
+ 
+    [ xsize ysize 0.5 ldiagpmul /ldiagdiamondcircum cvx ] ldiagcircumdef
+    S E N W S
+ } def
+ 
+ % shape and labels of the @Ellipse symbol
+ /ldiagellipse
+ {
+    xsize 0 0.5 ldiagpmul /S   ldiagpointdef
+    0 ysize 0.5 ldiagpmul /W   ldiagpointdef
+    S W         ldiagpadd /CTR ldiagpointdef
+    CTR W       ldiagpadd /N   ldiagpointdef
+    CTR S       ldiagpadd /E   ldiagpointdef
+    CTR xsize 0 0.3536 ldiagpmul ldiagpadd 0 ysize 0.3536 ldiagpmul ldiagpadd /NE ldiagpointdef
+    0 ysize 0.3536 ldiagpmul CTR xsize 0 0.3536 ldiagpmul ldiagpadd ldiagpsub /SE ldiagpointdef
+    xsize 0 0.3536 ldiagpmul CTR ldiagpsub 0 ysize 0.3536 ldiagpmul ldiagpadd /NW ldiagpointdef
+    0 ysize 0.3536 ldiagpmul xsize 0 0.3536 ldiagpmul CTR ldiagpsub ldiagpsub /SW ldiagpointdef
+    [ xsize ysize 0.5 ldiagpmul /ldiagellipsecircum cvx ] ldiagcircumdef
+ 
+      0 dg /S at ANGLE  ldiagangledef
+     90 dg /E at ANGLE  ldiagangledef
+    180 dg /N at ANGLE  ldiagangledef
+    270 dg /W at ANGLE  ldiagangledef
+ 
+    S E ldiagangleto /SE at ANGLE ldiagangledef
+    E N ldiagangleto /NE at ANGLE ldiagangledef
+    N W ldiagangleto /NW at ANGLE ldiagangledef
+    W S ldiagangleto /SW at ANGLE ldiagangledef
+ 
+    S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+ } def
+ 
+ % shape and labels of the @Circle symbol
+ /ldiagcircle
+ {
+    xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef
+    CTR xsize 0 ysize 0 ldiagpmax 0.5 ldiagpmul ldiagpadd /E ldiagpointdef
+    CTR 0 0 CTR E ldiagdistance 45 ldiagatangle ldiagpadd /NE ldiagpointdef
+    CTR 0 0 CTR E ldiagdistance 90 ldiagatangle ldiagpadd /N ldiagpointdef
+    CTR 0 0 CTR E ldiagdistance 135 ldiagatangle ldiagpadd /NW ldiagpointdef
+    CTR 0 0 CTR E ldiagdistance 180 ldiagatangle ldiagpadd /W ldiagpointdef
+    CTR 0 0 CTR E ldiagdistance 225 ldiagatangle ldiagpadd /SW ldiagpointdef
+    CTR 0 0 CTR E ldiagdistance 270 ldiagatangle ldiagpadd /S ldiagpointdef
+    CTR 0 0 CTR E ldiagdistance 315 ldiagatangle ldiagpadd /SE ldiagpointdef
+    [ S E ldiagpsub /ldiagellipsecircum cvx ] ldiagcircumdef
+ 
+      0 dg /S at ANGLE  ldiagangledef
+     45 dg /SE at ANGLE ldiagangledef
+     90 dg /E at ANGLE  ldiagangledef
+    135 dg /NE at ANGLE ldiagangledef
+    180 dg /N at ANGLE  ldiagangledef
+    225 dg /NW at ANGLE ldiagangledef
+    270 dg /W at ANGLE  ldiagangledef
+    315 dg /SW at ANGLE ldiagangledef
+ 
+    S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+ } def
+ 
+ % shape and labels of the @VLine and @VArrow symbols
+ /ldiagvline
+ {
+    xmark ysize ldiagprevious /FROM ldiagpointdef
+    xmark 0 ldiagprevious /TO ldiagpointdef
+ } def
+ 
+ % points of a polygon around base with given no of sides, vert init angle:
+ % <sides> <angle> ldiagpolygon <point> ... <point>
+ /ldiagpolygon
+ {  exch round cvi exch
+    xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef
+    90 sub CTR 2 copy ldiagmax 5 3 roll
+    [ 4 copy pop /ldiagpolycircum cvx ] ldiagcircumdef
+    exch dup 360 exch div exch
+    1 1  3 2 roll
+    {  4 string cvs (P) exch ldiagconcat
+       3 copy exch pop (@ANGLE) ldiagconcat cvn exch 90 add exch ldiagangledef
+       cvn 6 copy pop pop ldiagatangle 2 copy 10 2 roll
+       3 2 roll ldiagpointdef
+       dup 3 1 roll add exch
+    }  for
+    pop ldiagatangle
+ } def
+ 
+ % shape and labels of the @Isosceles triangle symbol
+ /ldiagisosceles
+ {
+    xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef
+    0     0                   /SW  ldiagpointdef
+    xsize 0                   /SE  ldiagpointdef
+    xsize 0.5 mul ysize       /N   ldiagpointdef
+    xsize 0.5 mul 0           /S   ldiagpointdef
+    SE 0.5 ldiagpmul N 0.5 ldiagpmul ldiagpadd /NE ldiagpointdef
+    SW 0.5 ldiagpmul N 0.5 ldiagpmul ldiagpadd /NW ldiagpointdef
+ 
+    [ xsize ysize /ldiagisoscelescircum cvx ] ldiagcircumdef
+ 
+      0 dg              /SW at ANGLE ldiagangledef
+      0 dg              /SE at ANGLE ldiagangledef
+    180 dg              /N at ANGLE  ldiagangledef
+      0 dg              /S at ANGLE  ldiagangledef
+      SE N ldiagangleto /NE at ANGLE ldiagangledef
+      N SW ldiagangleto /NW at ANGLE ldiagangledef
+ 
+    SW SE N SW
+ } def
+ 
+ % next array element:  <array> <index> ldiaggetnext <array> <index> <any> true
+ %                                               or <array> <index> false
+ /ldiaggetnext
+ {  2 copy exch length ge
+    { false }
+    { 2 copy get exch 1 add exch true } ifelse
+ } def
+ 
+ % check whether thing is number:  <any> ldiagisnumbertype <any> <bool>
+ /ldiagisnumbertype
+ {  dup type dup
+    /integertype eq exch /realtype eq or
+ } def
+ 
+ % check whether thing is an array:  <any> ldiagisarraytype <any> <bool>
+ /ldiagisarraytype { dup type /arraytype eq } def
+ 
+ % check whether thing is an array:  <any> ldiagisnametype <any> <bool>
+ /ldiagisnametype { dup type /nametype eq } def
+ 
+ % get next item:  <array> <index> ldiaggetnextitem <array> <index> 0
+ %                                              or <array> <index> <array> 1
+ %                                              or <array> <index> <point> 2
+ /ldiaggetnextitem
+ {   ldiaggetnext
+     {	ldiagisarraytype
+ 	{   1
+ 	}
+ 	{   ldiagisnumbertype
+ 	    {	3 1 roll
+ 		ldiaggetnext
+ 		{   ldiagisnumbertype
+ 		    {	4 3 roll exch  2
+ 		    }
+ 		    {	pop 3 2 roll pop  0
+ 		    } ifelse
+ 		}
+ 		{   3 2 roll pop  0
+ 		} ifelse
+ 	    }
+ 	    {	pop 0
+ 	    } ifelse
+ 	} ifelse
+     }
+     {	0
+     } ifelse
+ } def
+ 
+ % approximate equality: num1 num2  approxeq  <boolean>
+ /approxeq
+ { dup 0 eq
+   { pop 0 eq
+   }
+   { dup 3 1 roll sub exch div abs 0.001 lt
+   } ifelse
+ } def
+ 
+ % set arc path:  bool x1 y1  x2 y2  x0 y0  ldiagsetarc  <angle> <angle> <dist>
+ % the path goes from x1 y1 to x2 y2 about centre x0 y0,
+ % anticlockwise if bool is true else clockwise.
+ % The orientations of backwards pointing and forwards pointing
+ % arrowheads are returned in the two angles, and
+ % the length of the arc is returned in <dist>.
+ /ldiagsetarc
+ {
+   % (Entering ldiagsetarc) 7 ldiagdebugprint
+   20 dict begin
+      matrix currentmatrix 8 1 roll
+      2 copy translate 2 copy 8 2 roll
+      4 2 roll ldiagpsub 6 2 roll ldiagpsub
+      dup /y1 exch def dup mul /y1s exch def
+      dup /x1 exch def dup mul /x1s exch def
+      dup /y2 exch def dup mul /y2s exch def
+      dup /x2 exch def dup mul /x2s exch def
+      /dist1 0 0 x1 y1 ldiagdistance def
+      /dist2 0 0 x2 y2 ldiagdistance def
+ 
+      y1s y2s approxeq
+      {	-1
+      }
+      {	y1s x2s mul y2s x1s mul sub y1s y2s sub div
+      } ifelse
+      /da exch def
+ 
+      x1s x2s approxeq
+      {	-1
+      }
+      {	x1s y2s mul x2s y1s mul sub x1s x2s sub div
+      } ifelse
+      /db exch def
+ 
+      da 0 gt db 0 gt and
+      {
+ 	% (  case 1, ellipse) 0 ldiagdebugprint
+ 	/LMax da sqrt db sqrt ldiagmax def
+ 	/scalex da sqrt LMax div def
+ 	/scaley db sqrt LMax div def
+ 	scalex scaley scale
+ 	0 0 LMax
+ 	0 0 x1 scalex mul y1 scaley mul ldiagangleto
+ 	0 0 x2 scalex mul y2 scaley mul ldiagangleto
+ 	2 copy eq { 360 add } if
+ 	2 copy 8 2 roll
+ 	5 index { arc } { arcn } ifelse
+ 	2 index 1 index
+ 	{ 90 sub } { 90 add } ifelse
+ 	dup sin scaley mul exch cos scalex mul atan
+ 	2 index 2 index
+ 	{ 90 add } { 90 sub } ifelse
+ 	dup sin scaley mul exch cos scalex mul atan
+ 	5 2 roll  % res1 res2 ang1 ang2 anticlockwise
+ 	{ exch sub } { sub } ifelse
+ 	dup 0 le { 360 add } if  ldiagpi mul LMax mul 180 div
+      }
+      {
+ 	dist1 dist2 approxeq
+ 	% x1 y1 dist1 (  x1 y1, d) 3 ldiagdebugprint pop pop pop
+ 	% x2 y2 dist2 (  x2 y2, d) 3 ldiagdebugprint pop pop pop
+ 	{
+ 		% (  case 2, circle) 0 ldiagdebugprint
+ 		0 0
+ 		dist1
+ 		0 0 x1 y1 ldiagangleto
+ 		0 0 x2 y2 ldiagangleto
+ 		2 copy eq { 360 add } if
+ 		2 copy 8 2 roll
+ 		5 index { arc } { arcn } ifelse
+ 		2 index 1 index
+ 		{ 90 sub } { 90 add } ifelse
+ 		2 index 2 index
+ 		{ 90 add } { 90 sub } ifelse
+ 		5 2 roll % res1 res2 ang1 ang2 clockwise
+ 		{ exch sub } { sub } ifelse
+ 		dup 0 le { 360 add } if
+ 		ldiagpi mul dist1 mul 180 div
+ 	}
+ 	{
+ 		% (  case 3, line) 0 ldiagdebugprint
+ 		x2 y2 lineto pop
+ 		x2 y2 x1 y1 ldiagangleto
+ 		x1 y1 x2 y2 ldiagangleto
+ 		x1 y1 x2 y2 ldiagdistance
+ 	} ifelse
+      } ifelse
+      4 -1 roll setmatrix
+      end
+   % (Leaving ldiagsetarc) 3 ldiagdebugprint
+ } def
+ 
+ % ldiagsetcurve: set up a Bezier curve from x0 y0 to x3 y3
+ % and return arrowhead angles and length of curve (actually 0)
+ % x0 y0 x1 y1 x2 y2 x3 y3 ldiagsetcurve <angle> <angle> <length>
+ /ldiagsetcurve
+ { 8 copy curveto pop pop
+   ldiagangleto
+   5 1 roll
+   4 2 roll ldiagangleto
+   exch
+   0
+ } def
+ 
+ % ldiagsetpath: convert a Diag path into a PostScript path
+ % [ shape ] ldiagsetpath 
+ /ldiagsetpath
+ {
+   10 dict begin
+     0 newpath
+     /prevseen false def
+     /curveseen false def
+     { ldiaggetnextitem
+       dup 0 eq { pop exit }
+       { 1 eq
+         { /curveseen true def
+ 	  /curve exch def
+ 	  curve length 0 eq { /curveseen false def } if
+         }
+         { /ycurr exch def
+ 	  /xcurr exch def
+ 	  prevseen
+ 	  { curveseen
+ 	    { curve length 4 eq
+ 	      { xprev yprev
+ 		curve 0 get curve 1 get
+ 		curve 2 get curve 3 get
+ 		xcurr ycurr
+ 		ldiagsetcurve pop pop pop
+ 	      }
+ 	      { xprev yprev xcurr ycurr
+ 	        curve length 1 ge { curve 0 get } { 0 } ifelse
+ 	        curve length 2 ge { curve 1 get } { 0 } ifelse
+ 	        curve length 3 ge { curve 2 get } { true } ifelse
+ 	        7 1 roll
+ 	        ldiagsetarc pop pop pop
+ 	      } ifelse
+ 	    }
+ 	    { xcurr ycurr lineto
+ 	    } ifelse
+ 	  }
+ 	  { xcurr ycurr moveto
+ 	  } ifelse
+ 	  /xprev xcurr def
+ 	  /yprev ycurr def
+ 	  /prevseen true def
+ 	  /curveseen false def
+         } ifelse
+       } ifelse
+     } loop pop pop
+   end
+ } def
+ 
+ % ldiagpaintpath: paint a path of the given shape
+ % /paint [ shape ] ldiagpaintpath -
+ /ldiagpaintpath
+ {
+   ldiagsetpath cvx exec
+ } def
+ 
+ % stroke a path of the given shape in the given linestyle and dash length.
+ % Return the origin and angle of the backward and forward arrow heads.
+ % dashlength /linestyle [shape] ldiagdopath  [<point> <angle>] [<point> <angle>] 
+ /ldiagdopath
+ {
+   10 dict begin
+     0
+     /prevseen  false def
+     /curveseen false def
+     /backarrow []    def
+     /fwdarrow  []    def
+     {
+ 	ldiaggetnextitem
+ 	dup 0 eq { pop exit }
+ 	{
+ 	    1 eq
+ 	    {	/curveseen true def
+ 		/curve exch def
+ 		curve length 0 eq { /prevseen false def } if
+ 	    }
+ 	    {	/ycurr exch def
+ 		/xcurr exch def
+ 		prevseen
+ 		{   newpath xprev yprev moveto
+ 		    curveseen
+ 		    {	curve length 4 eq
+ 			{   xprev yprev
+ 			    curve 0 get curve 1 get
+ 			    curve 2 get curve 3 get
+ 			    xcurr ycurr ldiagsetcurve
+ 			}
+ 			{   xprev yprev xcurr ycurr
+ 			    curve length 1 ge { curve 0 get } { 0 } ifelse
+ 			    curve length 2 ge { curve 1 get } { 0 } ifelse
+ 			    curve length 3 ge { curve 2 get } { true } ifelse
+ 			    7 1 roll
+ 			    ldiagsetarc
+ 			} ifelse
+ 		    }
+ 		    {	xcurr ycurr lineto
+ 			xcurr ycurr xprev yprev ldiagangleto dup 180 sub
+ 			xprev yprev xcurr ycurr ldiagdistance
+ 		    } ifelse
+ 		    6 index 6 index cvx exec
+ 		    [ xprev yprev 5 -1 roll ]
+ 		    backarrow length 0 eq
+ 		    { /backarrow exch def }
+ 		    { pop } ifelse
+ 		    [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ 		} if
+ 		/xprev xcurr def
+ 		/yprev ycurr def
+ 		/prevseen true def
+ 		/curveseen false def
+ 	    } ifelse
+ 	} ifelse
+     } loop
+     pop pop pop pop
+     backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse
+     fwdarrow  length 0 eq { [ 0 0 0 ] } { fwdarrow  } ifelse
+   end
+ } def
+ 
+ 
+ % stroke a path of the given shape in the given linestyle and dash length.
+ % dashlength [ /linestyle ] [shape] ldiagdosegpath  -
+ /ldiagdosegpath
+ {
+   12 dict begin
+     1 index /seg exch def
+     1 index length /seglength exch def
+     0 /segcount exch def
+     0
+     /prevseen  false def
+     /curveseen false def
+     /backarrow []    def
+     /fwdarrow  []    def
+     {
+ 	ldiaggetnextitem
+ 	dup 0 eq { pop exit }
+ 	{
+ 	    1 eq
+ 	    {	/curveseen true def
+ 		/curve exch def
+ 		curve length 0 eq { /prevseen false def } if
+ 	    }
+ 	    {	/ycurr exch def
+ 		/xcurr exch def
+ 		prevseen
+ 		{   newpath xprev yprev moveto
+ 		    curveseen
+ 		    {	curve length 4 eq
+ 			{   xprev yprev
+ 			    curve 0 get curve 1 get
+ 			    curve 2 get curve 3 get
+ 			    xcurr ycurr ldiagsetcurve
+ 			}
+ 			{   xprev yprev xcurr ycurr
+ 			    curve length 1 ge { curve 0 get } { 0 } ifelse
+ 			    curve length 2 ge { curve 1 get } { 0 } ifelse
+ 			    curve length 3 ge { curve 2 get } { true } ifelse
+ 			    7 1 roll
+ 			    ldiagsetarc
+ 			} ifelse
+ 		    }
+ 		    {	xcurr ycurr lineto
+ 			xcurr ycurr xprev yprev ldiagangleto dup 180 sub
+ 			xprev yprev xcurr ycurr ldiagdistance
+ 		    } ifelse
+ 		    6 index seg segcount seglength mod get cvx exec
+ 		    /segcount segcount 1 add def
+ 		    [ xprev yprev 5 -1 roll ]
+ 		    backarrow length 0 eq
+ 		    { /backarrow exch def }
+ 		    { pop } ifelse
+ 		    [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ 		} if
+ 		/xprev xcurr def
+ 		/yprev ycurr def
+ 		/prevseen true def
+ 		/curveseen false def
+ 	    } ifelse
+ 	} ifelse
+     } loop
+     pop pop pop pop
+   end
+ } def
+ 
+ % ldiagnodebegin: start of node parameters
+ % ldiagnodebegin -
+ /ldiagnodebegin
+ { % (Entering ldiagnodebegin) 0 ldiagdebugprint
+   ldiagmaxlabels dict begin 
+ } def
+ 
+ % ldiagnodeend: end of node parameters (so do the node)
+ % <outline> <dashlength> <style> <linewidth> <paint> ldiagnodeend -
+ /ldiagnodeend
+ {
+   % (Entering ldiagnodeend) 0 ldiagdebugprint
+   end % matches begin in ldiagnodebegin
+   4 index gsave ldiagpaintpath grestore
+   3 index ldiagsetpath clip newpath
+   2 mul setlinewidth
+   3 -1 roll ldiagdosegpath
+   % (Leaving ldiagnodeend) 0 ldiagdebugprint
+ } def
+ 
+ % ldiaglinkbegin: start of link parameters
+ % <direct> ldiaglinkbegin -
+ /ldiaglinkbegin
+ { ldiagmaxlabels dict begin 
+   1 eq /direct exch def
+ } def
+ 
+ % ldiaglinkend: end of link parameters (so do the link)
+ % <outline> <dashlength> <style> <linewidth> ldiaglinkend -
+ /ldiaglinkend
+ {
+   end % matches begin in ldiaglinkbegin
+   setlinewidth
+   3 -1 roll ldiagdosegpath
+ } def
+ 
+ % ldiagdoarrow: draw an arrow head of given form
+ % dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] ldiagdoarrow -
+ /ldiagdoarrow
+ {  matrix currentmatrix 8 1 roll
+    dup 0 get 1 index 1 get translate
+    2 get rotate
+    [ 2 index neg 2 index 0 0
+      3 index 3 index neg
+      1 index 10 index mul 0
+      7 index 7 index ]
+    4 1 roll pop pop pop
+    dup 3 1 roll
+    gsave ldiagpaintpath grestore ldiagdopath pop pop
+    setmatrix
+ } def
+ 
+ % arrow head styles
+ /ldiagopen     0.0 def
+ /ldiaghalfopen 0.5 def
+ /ldiagclosed   1.0 def
+ 
+ % stroke no arrows, forward, back, and both
+ /ldiagnoarrow { pop pop pop pop pop pop pop pop                        } def
+ /ldiagforward { 7 -1 roll ldiagdoarrow pop                              } def
+ /ldiagback    { 8 -2 roll pop ldiagdoarrow                              } def
+ /ldiagboth    { 8 -1 roll 7 copy ldiagdoarrow pop 7 -1 roll ldiagdoarrow } def
+ 
+ % ldiagprevious: return previous point on path
+ /ldiagprevious
+ { ldiagisnumbertype
+   { 2 copy }
+   { ldiagisarraytype
+     { 2 index 2 index }
+     { 0 0 }
+     ifelse
+   } ifelse
+ } def
+ 
+ % Tag dictionary operators
+ %
+ % Diag's tag dictionaries are kept on the same stack as other dictionaries,
+ % since there is nowhere else to put them.  However, they are managed like
+ % a separate stack using the following operators:
+ %
+ %  <tag>  ldiagpushtagdict  -      Push a new, empty tag dictionary
+ %         ldiagtoptagdict   dict   Find the top tag dictionary
+ %         ldiagpoptagdict   -      Pop and destroy the top tag dictionary
+ %         ldiagpopuptagdict -      Pop top tag dict and promote its entries
+ %         ldiagdebugtagdict -      Debug print of dictionary stack
+ %
+ % They are distinguished from other dictionaries by containing /ldiagtagdict,
+ % whose value is the <tag> which is used by ldiagpopuptagdict,
+ % and they are hopefully never the target of any non-tag definition because
+ % they are never the top dictionary, since push places the new dict second.
+ 
+ /ldiagpushtagdict
+ { ldiagmaxlabels dict dup
+   currentdict end exch begin begin
+   exch /ldiagtagdict exch put
+ } def
+ 
+ /ldiagtoptagdict
+ { /ldiagtagdict where not
+   { (Diag internal error: no tag dictionary) show stop
+   } if
+ } def
+ 
+ /ldiagpoptagdict
+ {
+   % (Entering poptagdict) 0 ldiagdebugprint
+   % ldiagdebugtagdict
+   mark
+   { currentdict end
+     dup /ldiagtagdict known
+     { exit
+     } if
+   } loop
+   pop
+   counttomark
+   { begin
+   } repeat
+   pop
+   % (Leaving poptagdict) 0 ldiagdebugprint
+   % ldiagdebugtagdict
+ } def
+ 
+ % promote labels from top tag dictionary to second top tag dictionary
+ % each prefixed by <string>@ if <string> (value of /ldiagtagdict) is not empty
+ % - ldiagpopuptagdict -
+ /ldiagpopuptagdict
+ {
+   ldiagtagdict
+   % (Entering ldiagpopuptagdict) 1 ldiagdebugprint
+   % ldiagdebugtagdict
+   ldiagtoptagdict ldiagpoptagdict ldiagtoptagdict exch
+   { exch 50 string cvs 3 index
+     dup length 0 ne
+     { (@) ldiagconcat
+     } if
+     exch ldiagconcat cvn exch 2 index 3 1 roll put
+   } forall
+   pop pop
+   % (Leaving ldiagpopuptagdict) 0 ldiagdebugprint
+   % ldiagdebugtagdict
+ } def
+ 
+ % debug tag dictionary stack
+ /ldiagdebugtagdict
+ { (Entering ldiagdebugtagdict) 0 ldiagdebugprint
+   30 array dictstack
+   { dup /ldiagtagdict known
+     { dup /ldiagtagdict get 0 ldiagdebugprint
+       { pop 50 string cvs (   ) exch ldiagconcat
+ 	dup 0 ldiagdebugprint
+ 	pop
+       }
+       forall
+     }
+     { pop (other) 0 ldiagdebugprint
+     } ifelse
+   } forall
+   (Leaving ldiagdebugtagdict) 0 ldiagdebugprint
+ } def
+ 
+ % label a point in top tag dictionary:  <point> /name ldiagpointdef -
+ /ldiagpointdef
+ {
+   % (Entering ldiagpointdef) 3 ldiagdebugprint
+   [ 4 2 roll transform /itransform cvx ] cvx
+   ldiagtoptagdict 3 1 roll put
+   % (Leaving ldiagpointdef) 0 ldiagdebugprint
+ } def
+ 
+ % label an angle in top tag dictionary:  <angle> /name ldiagangledef -
+ /ldiagangledef
+ {
+   % (Entering ldiagangledef) 2 ldiagdebugprint
+   exch ldiagfixangle ldiagtoptagdict 3 1 roll put
+   % (Leaving ldiagangledef) 0 ldiagdebugprint
+ } def
+ 
+ % add CIRCUM operator with this body:  <array> ldiagcircumdef -
+ /ldiagcircumdef
+ {   % (Entering ldiagcircumdef) 1 ldiagdebugprint
+     /CIRCUM exch cvx
+     ldiagtoptagdict 3 1 roll put
+     % currentdict end
+     % 3 1 roll
+     % def
+     % begin
+     % (Leaving ldiagcircumdef) 0 ldiagdebugprint
+ } def
+ 
+ % show points (except CIRCUM and ANGLE): - ldiagshowpoints -
+ /ldiagshowpoints
+ {
+   % (Entering ldiagshowpoints) 0 ldiagdebugprint
+   ldiagtoptagdict
+   { 1 index 50 string cvs
+     (ldiagdebugpos) search
+     { pop pop pop pop pop }
+     {
+       (CIRCUM) search % if CIRCUM in key
+       { pop pop pop pop pop }
+       { 
+         (ANGLE) search % if ANGLE in key
+         {
+           pop pop pop pop pop
+         }
+         {
+           (ldiagtagdict) search
+           {
+             pop pop pop pop pop
+           }
+           {
+ 	    pop cvx exec
+ 	    newpath 2.0 pt 0 360 arc 0 setgray fill pop
+           } ifelse
+         } ifelse
+       } ifelse
+     } ifelse
+   } forall
+   % (Leaving ldiagshowpoints) 0 ldiagdebugprint
+ } def
+ 
+ 
+ /ldiagshowtags
+ {
+   % (Entering ldiagshowtags) 0 ldiagdebugprint
+   ldiagtoptagdict
+   { 1 index 50 string cvs
+     % dup 0 ldiagdebugprint
+     (ldiagdebugpos) search
+     { pop pop pop pop pop }
+     {
+       (CIRCUM) search % if CIRCUM in key
+       { pop pop pop pop pop }
+       { 
+         (ANGLE) search % if ANGLE in key
+         {
+           pop pop pop pop pop
+         }
+         {
+           (ldiagtagdict) search
+           {
+             pop pop pop pop pop
+           }
+           {
+ 	    pop cvx exec 2 copy
+ 	    gsave
+ 	    newpath 2.0 pt 0 360 arc 0 setgray fill
+             /Times-Roman findfont 8 pt scalefont setfont
+             translate 40 rotate 0.2 cm 0.1 cm moveto 20 string cvs show
+ 	    grestore
+           } ifelse
+         } ifelse
+       } ifelse
+     } ifelse
+   } forall
+   % (Leaving ldiagshowtags) 0 ldiagdebugprint
+ } def
+ 
+ 
+ % show angles: - ldiagshowangles -
+ /ldiagshowangles
+ {
+   % (Entering ldiagshowangles) 0 ldiagdebugprint
+   ldiagtoptagdict
+   { 1 index 20 string cvs
+     % dup 0 ldiagdebugprint
+     (ldiagdebugpos) search
+     { pop pop pop pop pop }
+     {
+       (ldiagtagdict) search
+       {
+         pop pop pop pop pop
+       }
+       {
+         (CIRCUM) search % if CIRCUM in key
+         { pop pop pop pop pop }
+         { 
+           (@ANGLE) search % if ANGLE in key, draw the angle at the point
+           {
+             % (showing ANGLE) 5 ldiagdebugprint
+             gsave exch pop exch pop cvx
+             % (about to execute) 1 ldiagdebugprint
+             exec translate rotate 0.8 0.8 scale pop
+             newpath 0 0 2.0 pt 0 360 arc 0 setgray fill
+             newpath 4 pt 0 moveto 9 pt 0 lineto
+             9 pt 1.5 pt lineto 11 pt 0 lineto 9 pt -1.5 pt lineto
+             9 pt 0 lineto [] 0 setdash 4 pt setlinewidth 0 setlinejoin
+ 	    stroke grestore
+             % (finished ANGLE) 5 ldiagdebugprint
+           }
+           {
+             % else must be a point, we aren't showing those
+             pop pop pop
+           } ifelse
+         } ifelse
+       } ifelse
+     } ifelse
+   } forall
+   % (Leaving ldiagshowangles) 0 ldiagdebugprint
+ } def
+ 
+ % fix an angle to 0 <= res < 360:  <angle> ldiagfixangle <angle>
+ /ldiagfixangle
+ {
+   % (Entering ldiagfixangle) 1 ldiagdebugprint
+   { dup 0 ge { exit } if
+     360 add
+   } loop
+   { dup 360 lt { exit } if
+     360 sub
+   } loop
+   % (Leaving ldiagfixangle) 1 ldiagdebugprint
+ } def
+ 
+ % find point on circumference of box:  alpha a b ldiagboxcircum x y
+ /ldiagboxcircum
+ {
+   % (Entering ldiagboxcircum) 3 ldiagdebugprint
+   4 dict begin
+     /b exch def
+     /a exch def
+     ldiagfixangle /alpha exch def
+     0 0 a b ldiagangleto /theta exch def
+ 
+     % if alpha <= theta, return (a, a*tan(alpha))
+     alpha theta le
+     { a  a alpha sin mul alpha cos div }
+     {
+       % else if alpha <= 180 - theta, return (b*cot(alpha), b)
+       alpha 180 theta sub le
+       { b alpha cos mul alpha sin div  b }
+       {
+         % else if alpha <= 180 + theta, return (-a, -a*tan(alpha))
+         alpha 180 theta add le
+         { a neg  a neg alpha sin mul alpha cos div }
+         {
+ 	  % else if alpha <= 360 - theta, return (-b*cot(alpha), -b)
+ 	  alpha 360 theta sub le
+           { b neg alpha cos mul alpha sin div  b neg }
+ 	  {
+ 	    % else 360 - theta <= alpha, return (a, a*tan(alpha))
+ 	    a  a alpha sin mul alpha cos div
+ 	  } ifelse
+         } ifelse
+       } ifelse
+     } ifelse
+   end
+   % (Leaving ldiagboxcircum) 2 ldiagdebugprint
+ } def
+ 
+ % find quadratic roots (assume a != 0): a b c ldiagqroots x1 x2 2
+ %                                                     or    x2 1
+ %                                                     or       0
+ /ldiagqroots
+ {
+   4 dict begin
+     /c exch def
+     /b exch def
+     /a exch def
+     /disc b b mul 4 a c mul mul sub def
+     disc 0 lt
+     { 0
+     }
+     { disc 0 eq
+       { b neg 2 a mul div
+ 	1
+       }
+       { b neg disc sqrt add 2 a mul div
+         b neg disc sqrt sub 2 a mul div
+ 	2
+       }
+       ifelse
+     }
+     ifelse
+   end
+ } def
+ 
+ % work our which quadrant: <angle> ldiagquadrant <0-3>
+ /ldiagquadrant
+ { dup 90 lt
+   { pop 0
+   }
+   { dup 180 lt
+     { pop 1
+     }
+     { 270 lt
+       { 2
+       }
+       { 3
+       } ifelse
+     } ifelse
+   } ifelse
+ } def
+ 
+ % find curvebox circum, assuming upper right quadrant: alpha a b xmk ldiagcb x y
+ /ldiagcb
+ {
+   6 dict begin
+     /xmk exch def
+     /b exch def
+     /a exch def
+     /alpha exch def
+     /theta1 0 0 a b xmk sub ldiagangleto def
+     /theta2 0 0 a xmk sub b ldiagangleto def
+     alpha theta1 le
+     { % if alpha <= theta1, return (a, a*tan(alpha))
+       a  a alpha sin mul alpha cos div
+     }
+     { alpha theta2 ge
+       { % else if alpha > theta2, return (b*cot(alpha), b)
+ 	b alpha cos mul alpha sin div  b
+       }
+       {
+ 	% else, return the intersection of line and circle
+ 	a xmk sub b xmk sub xmk  0 0 alpha ldiagcircleintersect
+ 	dup 0 eq
+ 	{ % should never happen, just return any reasonable point
+ 	  pop
+ 	  a b 0.5 ldiagpmul
+ 	}
+ 	{ 1 eq
+ 	  { % should never happen, just return the point on top of stack
+ 	  }
+ 	  { % the usual case, two points on stack, return the larger
+ 	    ldiagpmax
+ 	  } ifelse
+ 	} ifelse
+       } ifelse
+     } ifelse
+   end
+ } def
+ 
+ % find point on circumference of curvebox: alpha a b xmk ldiagcurveboxcircum x y
+ /ldiagcurveboxcircum
+ {
+   % (Entering ldiagcurveboxcircum) 4 ldiagdebugprint
+   5 dict begin
+     /xmk exch def
+     /b exch def
+     /a exch def
+     ldiagfixangle /alpha exch def
+ 
+     % work out which quadrant we are in, and reflect accordingly
+     /quad alpha ldiagquadrant def
+     quad 0 eq
+     { alpha a b xmk ldiagcb
+     }
+     { quad 1 eq
+       { 180 alpha sub a b xmk ldiagcb exch neg exch
+       }
+       { quad 2 eq
+ 	{ alpha 180 sub a b xmk ldiagcb neg exch neg exch
+ 	}
+ 	{ 360 alpha sub a b xmk ldiagcb neg
+ 	} ifelse
+       } ifelse
+     } ifelse
+   end
+   % (Leaving ldiagcurveboxcircum) 2 ldiagdebugprint
+ } def
+ 
+ % find point on circumference of diamond:  alpha a b ldiagdiamondcircum x y
+ /ldiagdiamondcircum
+ {
+   % (Entering ldiagdiamondcircum) 3 ldiagdebugprint
+   4 dict begin
+     /b exch def
+     /a exch def
+     ldiagfixangle /alpha exch def
+     b alpha cos abs mul  a alpha sin abs mul  add  /denom exch def
+     a b mul alpha cos mul denom div
+     a b mul alpha sin mul denom div
+   end
+   % (Leaving ldiagdiamondcircum) 2 ldiagdebugprint
+ } def
+ 
+ % find point on circumference of ellipse:  alpha a b ldiagellipsecircum x y
+ /ldiagellipsecircum
+ {
+   % (Entering ldiagellipsecircum) 3 ldiagdebugprint
+   4 dict begin
+     /b exch def
+     /a exch def
+     ldiagfixangle /alpha exch def
+     b alpha cos mul dup mul  a alpha sin mul dup mul  add sqrt /denom exch def
+     a b mul alpha cos mul denom div
+     a b mul alpha sin mul denom div
+   end
+   % (Leaving ldiagellipsecircum) 2 ldiagdebugprint
+ } def
+ 
+ % find point on circumference of isosceles:  alpha a b ldiagisoscelescircum x y
+ /ldiagisoscelescircum
+ {
+   % (Entering ldiagisoscelescircum) 3 ldiagdebugprint
+   7 dict begin
+     /b exch def
+     /a exch def
+     /alpha exch ldiagfixangle def
+     /theta1 90 def
+     /theta2 a b 0.5 ldiagpmul 0 0 ldiagangleto def
+     /theta3 a b 0.5 ldiagpmul a 0 ldiagangleto def
+     alpha theta1 ge alpha theta2 le and
+     { 0 0 a 2 div b
+     }
+     { alpha theta2 ge alpha theta3 le and
+       { 0 0 a 0
+       }
+       { a 0 a 2 div b
+       } ifelse
+     } ifelse
+     a 2 div b 2 div 2 copy 1 ft alpha ldiagatangle ldiaglineintersect
+     a 2 div b 2 div 4 2 roll ldiagpsub
+   end
+   % (Leaving ldiagisoscelescircum) 2 ldiagdebugprint
+ } def
+ 
+ % find point of intersection of two lines each defined by two points
+ % x1 y1 x2 y2  x3 y3 x4 y4  ldiaglineintersect x y
+ /ldiaglineintersect
+ {
+   % (Entering ldiaglineintersect) 8 ldiagdebugprint
+   13 dict begin
+     /y4 exch def
+     /x4 exch def
+     /y3 exch def
+     /x3 exch def
+     /y2 exch def
+     /x2 exch def
+     /y1 exch def
+     /x1 exch def
+     x2 x1 sub /x21 exch def
+     x4 x3 sub /x43 exch def
+     y2 y1 sub /y21 exch def
+     y4 y3 sub /y43 exch def
+     y21 x43 mul y43 x21 mul sub /det exch def
+   
+     % calculate x 
+     y21 x43 mul x1 mul
+     y43 x21 mul x3 mul sub
+     y3 y1 sub x21 mul x43 mul add
+     det div
+ 
+     % calculate y
+     x21 y43 mul y1 mul
+     x43 y21 mul y3 mul sub
+     x3 x1 sub y21 mul y43 mul add
+     det neg div
+ 
+   end
+   % (Leaving ldiaglineintersect) 2 ldiagdebugprint
+ } def
+ 
+ % find point on circumference of polygon
+ % alpha radius num theta ldiagpolycircum x y
+ /ldiagpolycircum
+ {
+   % (Entering ldiagpolycircum) 4 ldiagdebugprint
+   13 dict begin
+     /theta exch def
+     /num exch def
+     /radius exch def
+     /alpha exch def
+ 
+     % calculate delta, the angle from theta to alpha
+     alpha theta sub ldiagfixangle
+ 
+     % calculate the angle which is the multiple of 360/num closest to delta
+     360 num div div truncate 360 num div mul theta add /anglea exch def
+ 
+     % calculate the next multiple of 360/num after anglea
+     anglea 360 num div add /angleb exch def
+ 
+     % intersect the line through these two points with the alpha line
+     anglea cos anglea sin  angleb cos angleb sin
+     0 0  alpha cos 2 mul alpha sin 2 mul
+     ldiaglineintersect radius ldiagpmul
+ 
+   end
+   % (Leaving ldiagpolycircum) 2 ldiagdebugprint
+ } def
+ 
+ % find point of intersection of a line and a circle
+ % x0 y0 r  x1 y1 theta  ldiagcircleintersect xa ya xb yb 2
+ %                                        or       xb yb 1
+ %                                        or             0
+ /ldiagcircleintersect
+ {
+   % (Entering ldiagcircleintersect) 6 ldiagdebugprint
+   15 dict begin
+     /theta exch def
+     /y1    exch def
+     /x1    exch def
+     /r     exch def
+     /y0    exch def
+     /x0    exch def
+ 
+     % if sin(theta) = 0 then line is horizontal and y must be y1
+     theta sin abs 0.00001 lt
+     { 
+       /a 1 def
+       /b -2 x0 mul def
+       /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def
+       a b c ldiagqroots dup
+       0 eq
+       { pop
+ 	0
+       }
+       { 1 eq
+ 	{ y1 1
+ 	}
+ 	{ y1 exch y1 2
+ 	} ifelse
+       } ifelse
+     }
+     {
+       /ct theta cos theta sin div def
+       /a ct ct mul 1 add def
+       /b ct x1 x0 sub mul y1 add y0 sub 2 mul def
+       /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def
+       a b c ldiagqroots dup
+       0 eq
+       { pop
+ 	0
+       }
+       { 1 eq
+ 	{ y1 add /yb exch def
+ 	  yb y1 sub ct mul x1 add /xb exch def
+ 	  xb yb 1
+ 	}
+ 	{ y1 add /ya exch def
+ 	  ya y1 sub ct mul x1 add /xa exch def
+ 	  y1 add /yb exch def
+ 	  yb y1 sub ct mul x1 add /xb exch def
+ 	  xa ya xb yb 2
+ 	} ifelse
+       } ifelse
+     } ifelse
+   end
+   % (Leaving ldiagcircleintersect) 1 ldiagdebugprint
+ } def
+ 
+ % find line which is the perpendicular bisector of two points, defined
+ % by two points
+ % x1 y1 x2 y2 ldiaglinebetween x3 y3 x4 y4
+ /ldiaglinebetween
+ { % (Entering ldiaglinebetween) 4 ldiagdebugprint
+   /y2 exch def /x2 exch def
+   /y1 exch def /x1 exch def
+ 
+   % let x3, y3 be the point halfway between the two points
+   x1 y1 x2 y2 ldiagpadd 0.5 ldiagpmul
+   /y3 exch def /x3 exch def
+ 
+   % find a point perpendicular to x3, y3
+   x3 y3 50 x1 y1 x2 y2 ldiagangleto 90 dg add ldiagatangle
+ 
+   % plus x3 y3 gives the two points
+   x3 y3
+ 
+   % (Leaving ldiaglinebetween) 4 ldiagdebugprint
+ } def
+ 
+ % find <proc>@<string>:  <proc> <string> ldiagfindlabel <any> true
+ %                                                      <proc> <string> false
+ /ldiagfindlabel
+ {
+   % (Entering ldiagfindlabel) 2 ldiagdebugprint
+   exch dup length 1 ne
+   { exch false
+     % (Leaving ldiagfindabel (length not 1)) 3 ldiagdebugprint
+   }
+   { dup 0 get type /nametype ne
+     { exch false
+       % (Leaving ldiagfindabel (not a name)) 3 ldiagdebugprint
+     }
+     { dup 0 get 50 string cvs (@) ldiagconcat 2 index ldiagconcat dup where
+       { exch get exch pop exch pop cvx exec true
+ 	% (Leaving ldiagfindlabel with success) 100 ldiagdebugprint
+       }
+       {
+ 	pop exch false
+ 	% (Leaving ldiagfindabel (concat not sensible)) 3 ldiagdebugprint
+       } ifelse
+     } ifelse
+   } ifelse
+ } bind def
+ 
+ % execute <proc>@<string> or else default:  <proc> <string> ldiagdolabel <various>
+ /ldiagdolabel
+ {
+   % (Entering ldiagdolabel) 2 ldiagdebugprint
+   ldiagfindlabel not
+   {
+     dup (CIRCUM) eq
+     { pop pop pop 0 0
+     }
+     {
+       dup (ANGLE) eq
+       { pop pop 0
+       }
+       { pop cvx exec
+       } ifelse
+     } ifelse
+   } if
+   % (Leaving ldiagdolabel) 2 ldiagdebugprint
+ } bind def
+ 
+ % execute a proc depending on whether number is negative, zero, or positive
+ % procneg proczero procpos number ldiagsigncase <anything>
+ /ldiagsigncase
+ {
+   % (Entering ldiagsigncase) 4 ldiagdebugprint
+   dup 0 lt
+   { pop pop pop exec
+   }
+   { 0 gt
+     { exch pop exch pop exec
+     }
+     { pop exch pop exec
+     } ifelse
+   } ifelse
+   % (Leaving ldiagsigncase) 0 ldiagdebugprint
+ } bind def
+ 
+ % execute proci if angle is in ith quadrant
+ % proc45 proc270 proc180 proc90 proc0 proc315 proc225 proc135 angle ldiagquadcase <anything>
+ /ldiagquadcase
+ {
+   % (Entering ldiagquadcase) 9 ldiagdebugprint
+   round ldiagfixangle cvi dup 90 mod 0 eq
+   { 90 idiv 4 add } { 90 idiv } ifelse
+   8 exch roll pop pop pop pop pop pop pop exec
+   % (Leaving ldiagquadcase) 0 ldiagdebugprint
+ } bind def
+ 
+ % decode Lout length into PostScript length
+ % <string> ldiagdecodelength <number>
+ /ldiagdecodelength
+ {
+   % (Entering ldiagdecodelength) 1 ldiagdebugprint
+   (f) search
+   { exch pop exch pop cvr ft
+   }
+   { (c) search
+     { exch pop exch pop cvr cm
+     }
+     { (p) search
+       { exch pop exch pop cvr pt
+       }
+       { (m) search
+ 	{ exch pop exch pop cvr em
+ 	}
+ 	{ (s) search
+ 	  { exch pop exch pop cvr sp
+ 	  }
+ 	  { (v) search
+ 	    { exch pop exch pop cvr vs
+ 	    }
+ 	    { (i) search
+ 	      { exch pop exch pop cvr in
+ 	      }
+ 	      { pop 0
+ 	      } ifelse
+ 	    } ifelse
+ 	  } ifelse
+ 	} ifelse
+       } ifelse
+     } ifelse
+   } ifelse
+   % (Leaving ldiagdecodelength) 1 ldiagdebugprint
+ } def
+ 
+ % implement aabout function
+ % logical form:  <circum> <extra> <centre> aabout <point>
+ % actual form:   { <labelorpoint> } cvlit <length> [ <point> ] cvx aabout <point>
+ /ldiagaabout
+ {
+   /centre exch def
+   /extra exch def
+   /circum exch def
+ 
+   /ZXCTR [ centre ] cvx def
+   /ZFCTR [ circum (CTR) ldiagdolabel ] cvx def
+   /ZAREF ZFCTR ZXCTR ldiagangleto def
+   /ZAMIN 0 dg def
+   /ZPMIN [ circum (CTR) ldiagdolabel ZAREF ZAMIN sub
+ 	 circum (CIRCUM) ldiagdolabel ldiagpadd
+ 	 0 0 extra ZAREF ZAMIN sub ldiagatangle
+ 	 ldiagpadd ] cvx def
+ 
+   /ZAMAX 90 dg def
+   /ZPMAX [ circum (CTR) ldiagdolabel ZAREF ZAMAX sub
+ 	 circum (CIRCUM) ldiagdolabel ldiagpadd
+ 	 0 0 extra ZAREF ZAMAX sub ldiagatangle
+ 	 ldiagpadd ] cvx def
+ 
+   1 1 20
+   { /xval exch def
+     /ZAMID ZAMIN ZAMAX add 0.5 mul def
+     /ZPMID [ circum (CTR) ldiagdolabel ZAREF ZAMID sub
+ 	   circum (CIRCUM) ldiagdolabel ldiagpadd
+ 	   0 0 extra ZAREF ZAMID sub ldiagatangle
+ 	   ldiagpadd ] cvx def
+     ZPMID ZXCTR ldiagdistance ZFCTR ZXCTR ldiagdistance gt
+     {
+       /ZAMAX [ ZAMID ] cvx def
+       /ZPMAX [ ZPMID ] cvx def
+     }
+     {
+       /ZAMIN [ ZAMID ] cvx def
+       /ZPMIN [ ZPMID ] cvx def
+     } ifelse
+   } for
+   ZPMID
+ } def
+ 
+ % implement cabout function
+ % logical form:  <circum> <extra> <centre> cabout <point>
+ % actual form:   { <labelorpoint> } cvlit <length> [ <point> ] cvx cabout <point>
+ /ldiagcabout
+ {
+   /centre exch def
+   /extra exch def
+   /circum exch def
+ 
+   /ZXCTR [ centre ] cvx def
+   /ZFCTR [ circum (CTR) ldiagdolabel ] cvx def
+   /ZAREF ZFCTR ZXCTR ldiagangleto def
+   /ZAMIN 0 dg def
+   /ZPMIN [ circum (CTR) ldiagdolabel ZAREF ZAMIN add
+ 	 circum (CIRCUM) ldiagdolabel ldiagpadd
+ 	 0 0 extra ZAREF ZAMIN add ldiagatangle
+ 	 ldiagpadd ] cvx def
+ 
+   /ZAMAX 90 dg def
+   /ZPMAX [ circum (CTR) ldiagdolabel ZAREF ZAMAX add
+ 	 circum (CIRCUM) ldiagdolabel ldiagpadd
+ 	 0 0 extra ZAREF ZAMAX add ldiagatangle
+ 	 ldiagpadd ] cvx def
+ 
+   1 1 20
+   { /xval exch def
+     /ZAMID ZAMIN ZAMAX add 0.5 mul def
+     /ZPMID [ circum (CTR) ldiagdolabel ZAREF ZAMID add
+ 	   circum (CIRCUM) ldiagdolabel ldiagpadd
+ 	   0 0 extra ZAREF ZAMID add ldiagatangle
+ 	   ldiagpadd ] cvx def
+     ZPMID ZXCTR ldiagdistance ZFCTR ZXCTR ldiagdistance gt
+     {
+       /ZAMAX [ ZAMID ] cvx def
+       /ZPMAX [ ZPMID ] cvx def
+     }
+     {
+       /ZAMIN [ ZAMID ] cvx def
+       /ZPMIN [ ZPMID ] cvx def
+     } ifelse
+   } for
+   ZPMID
+ } def
+ 
+ % fromarrowlength toarrowlength { from } { to } xindent zindent ldiaglinepath -
+ /ldiaglinepath
+ {
+   % (entering ldiaglinepath) 0 ldiagdebugprint
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagangleto
+   /FROM at ANGLE ldiagangledef 
+   from (CTR) ldiagdolabel FROM at ANGLE from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength FROM at ANGLE ldiagatangle ldiagpadd
+   /FROM ldiagpointdef
+ 
+   FROM at ANGLE /TO at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel TO at ANGLE 180 dg sub to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength TO at ANGLE 180 dg sub ldiagatangle ldiagpadd /TO ldiagpointdef
+ 
+   FROM 0.5 ldiagpmul TO 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   FROM at ANGLE /LMID at ANGLE ldiagangledef
+ 
+   /XINDENT xindent FROM LMID ldiagdistance ldiagmin def
+   FROM 0 0 XINDENT FROM at ANGLE ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+ 
+   /ZINDENT zindent TO LMID ldiagdistance ldiagmin def
+   0 0 ZINDENT FROM at ANGLE ldiagatangle TO ldiagpsub /LTO ldiagpointdef
+   FROM at ANGLE /LTO at ANGLE ldiagangledef
+ 
+   direct { FROM TO } { FROM LFROM LMID LTO TO } ifelse
+ 
+   % (leaving ldiaglinepath) 0 ldiagdebugprint
+ } def
+ 
+ % fromarrowlength toarrowlength { from } { to } xindent zindent pathgap ldiagdoublelinepath -
+ /ldiagdoublelinepath
+ {
+   % (entering ldiagdoublelinepath) 0 ldiagdebugprint
+   /pathgap exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagangleto
+   /FROM at ANGLE ldiagangledef 
+   from (CTR) ldiagdolabel FROM at ANGLE from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength FROM at ANGLE ldiagatangle ldiagpadd
+   /FROM ldiagpointdef
+ 
+   FROM at ANGLE /TO at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel TO at ANGLE 180 dg sub to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength TO at ANGLE 180 dg sub ldiagatangle ldiagpadd /TO ldiagpointdef
+ 
+   FROM 0.5 ldiagpmul TO 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   FROM at ANGLE /LMID at ANGLE ldiagangledef
+ 
+   /XINDENT xindent FROM LMID ldiagdistance ldiagmin def
+   FROM 0 0 XINDENT FROM at ANGLE ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+ 
+   /ZINDENT zindent TO LMID ldiagdistance ldiagmin def
+   0 0 ZINDENT FROM at ANGLE ldiagatangle TO ldiagpsub /LTO ldiagpointdef
+   FROM at ANGLE /LTO at ANGLE ldiagangledef
+ 
+   direct {
+     FROM pathgap 2 div FROM at ANGLE 90 dg sub ldiagatangle
+     TO   pathgap 2 div FROM at ANGLE 90 dg sub ldiagatangle
+     []
+     FROM pathgap 2 div FROM at ANGLE 90 dg add ldiagatangle
+     TO   pathgap 2 div FROM at ANGLE 90 dg add ldiagatangle
+   }
+   {
+     FROM  pathgap 2 div FROM at ANGLE 90 dg sub ldiagatangle
+     LFROM pathgap 2 div FROM at ANGLE 90 dg sub ldiagatangle
+     LMID  pathgap 2 div FROM at ANGLE 90 dg sub ldiagatangle
+     LTO   pathgap 2 div FROM at ANGLE 90 dg sub ldiagatangle
+     TO    pathgap 2 div FROM at ANGLE 90 dg sub ldiagatangle
+     []
+     FROM  pathgap 2 div FROM at ANGLE 90 dg add ldiagatangle
+     LFROM pathgap 2 div FROM at ANGLE 90 dg add ldiagatangle
+     LMID  pathgap 2 div FROM at ANGLE 90 dg add ldiagatangle
+     LTO   pathgap 2 div FROM at ANGLE 90 dg add ldiagatangle
+     TO    pathgap 2 div FROM at ANGLE 90 dg add ldiagatangle
+   } ifelse
+ 
+   % (leaving ldiagdoublelinepath) 0 ldiagdebugprint
+ } def
+ 
+ % fromarrowlen toarrowlen { from } { to } xindent zindent bias ldiagacurvepath -
+ /ldiagacurvepath
+ {
+   % (entering ldiagacurvepath) 0 ldiagdebugprint
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   %/B1 bias 0.02 ft ldiagmax def
+   %/B2 from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagdistance 0.5 mul def
+   %/BIAS B1 B2 ldiagmin def
+   /BIAS bias 0.02 ft ldiagmax def
+   /XMID [ from (CTR) ldiagdolabel 0.5 ldiagpmul
+ 	  to   (CTR) ldiagdolabel 0.5 ldiagpmul ldiagpadd ] cvx def
+   /XTOP [ XMID 0 0 BIAS from (CTR) ldiagdolabel to (CTR) ldiagdolabel
+ 	  ldiagangleto 90 dg sub ldiagatangle ldiagpadd ] cvx def
+   /CTR [ from (CTR) ldiagdolabel XTOP ldiaglinebetween
+ 	 to   (CTR) ldiagdolabel XTOP ldiaglinebetween
+ 	 ldiaglineintersect ] cvx def
+ 
+   from fromarrowlength [ CTR ] cvx ldiagaabout /FROM ldiagpointdef
+   from (CTR) ldiagdolabel FROM ldiagdistance 0 gt
+   { from (CTR) ldiagdolabel FROM ldiagangleto
+   }
+   { CTR FROM ldiagangleto 90 dg add
+   } ifelse /FROM at ANGLE ldiagangledef
+ 
+   to toarrowlength [ CTR ] cvx ldiagcabout /TO ldiagpointdef
+   TO to (CTR) ldiagdolabel ldiagdistance 0 gt
+   { TO to (CTR) ldiagdolabel ldiagangleto
+   }
+   { CTR TO ldiagangleto 90 dg add
+   } ifelse /TO at ANGLE ldiagangledef
+ 
+   /RADIUS CTR FROM ldiagdistance def
+   CTR 0 0 RADIUS CTR FROM ldiagangleto 360 dg CTR TO ldiagangleto
+   add CTR FROM ldiagangleto sub cvi 360 mod 0.5 mul add
+   ldiagatangle ldiagpadd /LMID ldiagpointdef
+   CTR LMID ldiagangleto 90 dg add /LMID at ANGLE ldiagangledef
+ 
+   /XINDENT xindent FROM LMID ldiagdistance ldiagmin def
+   CTR 0 0 RADIUS CTR FROM 0 0 XINDENT FROM at ANGLE ldiagatangle
+   ldiagpadd ldiagangleto ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   CTR LFROM ldiagangleto 90 dg add /LFROM at ANGLE ldiagangledef
+ 
+   /ZINDENT zindent TO LMID ldiagdistance ldiagmin def
+   CTR 0 0 RADIUS CTR TO 0 0 ZINDENT TO at ANGLE 180 dg add
+   ldiagatangle ldiagpadd ldiagangleto ldiagatangle ldiagpadd /LTO ldiagpointdef
+   CTR LTO ldiagangleto 90 dg add /LTO at ANGLE ldiagangledef
+ 
+   direct
+   { FROM [CTR] TO }
+   { FROM [CTR] LFROM [CTR] LMID [CTR] LTO [CTR] TO }
+   ifelse
+ 
+   % (leaving ldiagacurvepath) 0 ldiagdebugprint
+ } def
+ 
+ % fromarrowlen toarrowlen { from } { to } xindent zindent bias ldiagccurvepath -
+ /ldiagccurvepath
+ {
+   % (entering ldiagccurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   %/B1 bias 0.02 ft ldiagmax def
+   %/B2 from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagdistance 0.5 mul def
+   %/BIAS B1 B2 ldiagmin def
+   /BIAS bias 0.02 ft ldiagmax def
+   /XMID [ from (CTR) ldiagdolabel 0.5 ldiagpmul
+ 	to (CTR) ldiagdolabel 0.5 ldiagpmul ldiagpadd ] cvx def
+   /XTOP [ XMID 0 0 BIAS from (CTR) ldiagdolabel to (CTR) ldiagdolabel
+ 	ldiagangleto 90 dg add ldiagatangle ldiagpadd ] cvx def
+   /CTR [ from (CTR) ldiagdolabel XTOP ldiaglinebetween
+          to (CTR) ldiagdolabel XTOP ldiaglinebetween ldiaglineintersect ] cvx def
+ 
+   from fromarrowlength [ CTR ] cvx ldiagcabout /FROM ldiagpointdef
+   from (CTR) ldiagdolabel FROM ldiagdistance 0 gt
+   { from (CTR) ldiagdolabel FROM ldiagangleto }
+   { CTR FROM ldiagangleto 90 dg sub }
+   ifelse /FROM at ANGLE ldiagangledef
+ 
+   to toarrowlength [ CTR ] cvx ldiagaabout /TO ldiagpointdef
+   TO to (CTR) ldiagdolabel ldiagdistance 0 gt
+   { TO to (CTR) ldiagdolabel ldiagangleto }
+   { CTR TO ldiagangleto 90 dg sub }
+   ifelse /TO at ANGLE ldiagangledef
+ 
+   /RADIUS [ CTR FROM ldiagdistance ] cvx def
+   CTR 0 0 RADIUS CTR TO ldiagangleto 360 dg CTR FROM ldiagangleto add
+   CTR TO ldiagangleto sub cvi 360 cvi mod 2 div add ldiagatangle
+   ldiagpadd /LMID ldiagpointdef
+   CTR LMID ldiagangleto 90 dg sub /LMID at ANGLE ldiagangledef
+ 
+   /XINDENT [ xindent FROM LMID ldiagdistance ldiagmin ] cvx def
+   CTR 0 0 RADIUS CTR FROM 0 0 XINDENT FROM at ANGLE ldiagatangle ldiagpadd
+   ldiagangleto ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   CTR LFROM ldiagangleto 90 dg sub /LFROM at ANGLE ldiagangledef
+ 
+   /ZINDENT [ zindent TO LMID ldiagdistance ldiagmin ] cvx def
+   CTR 0 0 RADIUS CTR TO 0 0 ZINDENT TO at ANGLE 180 dg add ldiagatangle
+   ldiagpadd ldiagangleto ldiagatangle ldiagpadd /LTO ldiagpointdef
+   CTR LTO ldiagangleto 90 dg sub /LTO at ANGLE ldiagangledef
+ 
+   direct
+   { FROM [CTR clockwise] TO }
+   { FROM [CTR clockwise] LFROM [CTR clockwise]
+   LMID [CTR clockwise] LTO [CTR clockwise] TO }
+   ifelse
+   % (leaving ldiagccurvepath) 0 ldiagdebugprint
+ } def
+ 
+ 
+ % farr tarr { from } { to } xindent zindent [frompt] [topt] ldiagbezierpath -
+ /ldiagbezierpath
+ {
+   % (entering ldiagbezierpath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   cvx /topt exch def
+   cvx /frompt exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   from (CTR) ldiagdolabel frompt ldiagangleto /FROM at ANGLE ldiagangledef
+   from (CTR) ldiagdolabel FROM at ANGLE from (CIRCUM) ldiagdolabel
+   ldiagpadd 0 0 fromarrowlength FROM at ANGLE ldiagatangle ldiagpadd
+   /FROM ldiagpointdef
+ 
+   topt to (CTR) ldiagdolabel ldiagangleto /TO at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel TO at ANGLE 180 dg add to (CIRCUM) ldiagdolabel
+   ldiagpadd 0 0 toarrowlength TO at ANGLE 180 dg add ldiagatangle ldiagpadd
+   /TO ldiagpointdef
+ 
+   FROM 0 0 xindent FROM at ANGLE ldiagatangle ldiagpadd
+   /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+ 
+   TO 0 0 zindent TO at ANGLE 180 dg add ldiagatangle ldiagpadd
+   /LTO ldiagpointdef
+   TO at ANGLE /LTO at ANGLE ldiagangledef
+ 
+   FROM TO ldiagpadd frompt ldiagpadd topt ldiagpadd 0.25 ldiagpmul
+   /LMID ldiagpointdef
+ 
+   FROM [frompt topt] TO
+ 
+   % (leaving ldiagbezierpath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ 
+ % farr tarr { from } { to } xindent zindent ldiagvhlinepath -
+ /ldiagvhlinepath
+ {
+   % (entering ldiagvhlinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   /CTR [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel exch pop ] cvx def
+   /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+   /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+ 
+   from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef
+   FANG /FROM at ANGLE ldiagangledef
+ 
+   to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef
+   TANG 180 dg add /TO at ANGLE ldiagangledef
+ 
+   /FDIST [ FROM CTR ldiagdistance ] cvx def
+   /TDIST [ TO CTR ldiagdistance ] cvx def
+   /XINDENT [ xindent FDIST ldiagmin ] cvx def
+   /ZINDENT [ zindent TDIST ldiagmin ] cvx def
+   FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+   TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef
+   TO at ANGLE /LTO at ANGLE ldiagangledef
+ 
+   CTR /LMID ldiagpointdef
+   0 0 1 ft FANG 180 dg add ldiagatangle
+   0 0 1 ft TANG 180 dg add ldiagatangle
+   ldiagangleto /LMID at ANGLE ldiagangledef
+ 
+   FROM LFROM LMID LTO TO
+ 
+   % (leaving ldiagvhlinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent radius ldiagvhcurvepath -
+ /ldiagvhcurvepath
+ {
+   % (entering ldiagvhcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /radius exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   /CTR [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel exch pop ] cvx def
+   /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+   /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+ 
+   from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef
+   FANG /FROM at ANGLE ldiagangledef
+ 
+   to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef
+   TANG 180 dg add /TO at ANGLE ldiagangledef
+ 
+   /FDIST [ FROM CTR ldiagdistance ] cvx def
+   /TDIST [ TO CTR ldiagdistance ] cvx def
+   /RADIUS [ radius FDIST TDIST ldiagmin ldiagmin ] cvx def
+   /XINDENT [ xindent FDIST RADIUS sub ldiagmin ] cvx def
+   /ZINDENT [ zindent TDIST RADIUS sub ldiagmin ] cvx def
+ 
+   FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+   TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef
+   TO at ANGLE /LTO at ANGLE ldiagangledef
+ 
+   /FCTR [ CTR 0 0 RADIUS FROM at ANGLE 180 dg add ldiagatangle ldiagpadd ] cvx def
+   /TCTR [ CTR 0 0 RADIUS TO at ANGLE ldiagatangle ldiagpadd ] cvx def
+   /XCTR [ CTR 0 0 RADIUS FROM at ANGLE 180 dg add ldiagatangle ldiagpadd
+               0 0 RADIUS TO at ANGLE ldiagatangle ldiagpadd ] cvx def
+   XCTR 0 0 RADIUS XCTR CTR ldiagangleto ldiagatangle ldiagpadd
+   /LMID ldiagpointdef
+   FCTR TCTR ldiagangleto /LMID at ANGLE ldiagangledef
+ 
+   FROM LFROM FCTR
+   {[XCTR clockwise]} {} {} {} {} {[XCTR]} {[XCTR clockwise]} {[XCTR]}
+   FCTR TCTR ldiagangleto ldiagquadcase
+   TCTR LTO TO
+ 
+   % (leaving ldiagvhcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent ldiaghvlinepath -
+ /ldiaghvlinepath
+ {
+   % (entering ldiaghvlinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   /CTR [ to (CTR) ldiagdolabel pop from (CTR) ldiagdolabel exch pop ] cvx def
+   /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+   /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+ 
+   from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef
+   FANG /FROM at ANGLE ldiagangledef
+ 
+   to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef
+   TANG 180 dg add /TO at ANGLE ldiagangledef
+ 
+   /FDIST [ FROM CTR ldiagdistance ] cvx def
+   /TDIST [ TO CTR ldiagdistance ] cvx def
+   /XINDENT [ xindent FDIST ldiagmin ] cvx def
+   /ZINDENT [ zindent TDIST ldiagmin ] cvx def
+ 
+   FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+   TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef
+   TO at ANGLE /LTO at ANGLE ldiagangledef
+ 
+   CTR /LMID ldiagpointdef
+   0 0 1 ft FANG 180 dg add ldiagatangle
+   0 0 1 ft TANG 180 dg add ldiagatangle ldiagangleto
+   /LMID at ANGLE ldiagangledef
+ 
+   FROM LFROM LMID LTO TO
+ 
+   % (leaving ldiaghvlinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent radius ldiaghvcurvepath -
+ /ldiaghvcurvepath
+ {
+   % (entering ldiaghvcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /radius exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   /CTR [ to (CTR) ldiagdolabel pop from (CTR) ldiagdolabel exch pop ] cvx def
+   /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+   /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+ 
+   from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef
+   FANG /FROM at ANGLE ldiagangledef
+ 
+   to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef
+   TANG 180 dg add /TO at ANGLE ldiagangledef
+ 
+   /FDIST [ FROM CTR ldiagdistance ] cvx def
+   /TDIST [ TO CTR ldiagdistance ] cvx def
+   /RADIUS [ radius FDIST TDIST ldiagmin ldiagmin ] cvx def
+   /XINDENT [ xindent FDIST RADIUS sub ldiagmin ] cvx def
+   /ZINDENT [ zindent TDIST RADIUS sub ldiagmin ] cvx def
+   FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+   TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef
+   TO at ANGLE /LTO at ANGLE ldiagangledef
+ 
+   /FCTR [ CTR 0 0 RADIUS FROM at ANGLE 180 dg add ldiagatangle ldiagpadd ] cvx def
+   /TCTR [ CTR 0 0 RADIUS TO at ANGLE ldiagatangle ldiagpadd ] cvx def
+   /XCTR [ CTR 0 0 RADIUS FROM at ANGLE 180 dg add ldiagatangle ldiagpadd
+ 	      0 0 RADIUS TO at ANGLE ldiagatangle ldiagpadd ] cvx def
+   XCTR 0 0 RADIUS XCTR CTR ldiagangleto ldiagatangle ldiagpadd
+   /LMID ldiagpointdef
+   FCTR TCTR ldiagangleto /LMID at ANGLE ldiagangledef
+ 
+   FROM LFROM FCTR
+   {[XCTR]} {} {} {} {} {[XCTR clockwise]} {[XCTR]} {[XCTR clockwise]}
+   FCTR TCTR ldiagangleto ldiagquadcase
+   TCTR LTO TO
+ 
+   % (leaving ldiaghvcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent bias ldiaglvrlinepath -
+ /ldiaglvrlinepath
+ {
+   % (entering ldiaglvrlinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   from (CTR) ldiagdolabel 180 dg from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength 180 dg ldiagatangle ldiagpadd /FROM ldiagpointdef
+   180 dg /FROM at ANGLE ldiagangledef
+ 
+   to (CTR) ldiagdolabel 180 dg to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength 180 dg ldiagatangle ldiagpadd /TO ldiagpointdef
+   0 dg /TO at ANGLE ldiagangledef
+ 
+   /XLEFT [ FROM pop TO pop ldiagmin bias sub ] cvx def
+   XLEFT FROM exch pop /P1 ldiagpointdef
+   XLEFT TO exch pop /P2 ldiagpointdef
+   /VERT [ P1 P2 ldiagangleto ] cvx def
+   P1 P1 0 0 1 ft 180 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle
+   ldiagpadd ldiagangleto /P1 at ANGLE ldiagangledef
+   P2 P2 0 0 1 ft 0 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle
+   ldiagpadd ldiagangleto /P2 at ANGLE ldiagangledef
+ 
+   P1 0.5 ldiagpmul P2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   VERT /LMID at ANGLE ldiagangledef
+ 
+   /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def
+   /ZINDENT [ zindent P2 TO ldiagdistance ldiagmin ] cvx def
+   XINDENT 0 FROM ldiagpsub /LFROM ldiagpointdef
+   180 dg /LFROM at ANGLE ldiagangledef
+   ZINDENT 0 TO ldiagpsub /LTO ldiagpointdef
+   0 dg /LTO at ANGLE ldiagangledef
+ 
+   FROM LFROM P1 LMID P2 LTO TO
+ 
+   % (leaving ldiaglvrlinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent bias radius ldiaglvrcurvepath -
+ /ldiaglvrcurvepath
+ {
+   % (entering ldiaglvrcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /radius exch def
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   from (CTR) ldiagdolabel 180 dg from (CIRCUM) ldiagdolabel ldiagpadd 0 0
+   fromarrowlength 180 dg ldiagatangle ldiagpadd /FROM ldiagpointdef
+   180 dg /FROM at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel 180 dg to (CIRCUM) ldiagdolabel ldiagpadd 0 0
+   toarrowlength 180 dg ldiagatangle ldiagpadd /TO ldiagpointdef
+   0 dg /TO at ANGLE ldiagangledef
+   /XLEFT [ FROM pop TO pop ldiagmin bias sub ] cvx def
+   /XP1 [ XLEFT FROM exch pop ] cvx def
+   /XP2 [ XLEFT TO exch pop ] cvx def
+   /VERT [ XP1 XP2 ldiagangleto ] cvx def
+   XP1 0.5 ldiagpmul XP2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   VERT /LMID at ANGLE ldiagangledef
+   /XINDENT [ xindent FROM XP1 ldiagdistance ldiagmin ] cvx def
+   /ZINDENT [ zindent XP2 TO ldiagdistance ldiagmin ] cvx def
+   XINDENT 0 FROM ldiagpsub /LFROM ldiagpointdef
+   180 dg /LFROM at ANGLE ldiagangledef
+   ZINDENT 0 TO ldiagpsub /LTO ldiagpointdef
+   0 dg /LTO at ANGLE ldiagangledef
+   /RADIUS [ radius XP1 XP2 ldiagdistance 2 div ldiagmin ] cvx def
+   /XP1PRE [ XP1 0 0 RADIUS 0 dg ldiagatangle ldiagpadd ] cvx def
+   /XP1POST [ XP1 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def
+   /XP1CTR [ XP1PRE 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def
+   XP1CTR 0 0 RADIUS XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd
+   /P1 ldiagpointdef
+   XP1PRE XP1POST ldiagangleto /P1 at ANGLE ldiagangledef
+   /XP2PRE [ 0 0 RADIUS VERT ldiagatangle XP2 ldiagpsub ] cvx def
+   /XP2POST [ XP2 0 0 RADIUS 0 dg ldiagatangle ldiagpadd ] cvx def
+   /XP2CTR [ XP2PRE 0 0 RADIUS 0 dg ldiagatangle ldiagpadd ] cvx def
+   XP2CTR 0 0 RADIUS XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd
+   /P2 ldiagpointdef
+   XP2PRE XP2POST ldiagangleto /P2 at ANGLE ldiagangledef
+   FROM LFROM XP1PRE
+   {  } { [XP1CTR] P1 [XP1CTR] } {  } { [XP1CTR clockwise] P1 [XP1CTR clockwise] }
+   {  } {  } {  } {  } VERT round ldiagquadcase
+   XP1POST LMID XP2PRE
+   {  } { [XP2CTR] P2 [XP2CTR] } {  } { [XP2CTR clockwise] P2 [XP2CTR clockwise] }
+   {  } {  } {  } {  } VERT round ldiagquadcase
+   XP2POST LTO TO
+ 
+   % (leaving ldiaglvrcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent bias ldiagrvllinepath -
+ /ldiagrvllinepath
+ {
+   % (entering ldiagrvllinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   from (CTR) ldiagdolabel 0 dg from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength 0 dg ldiagatangle ldiagpadd /FROM ldiagpointdef
+   0 dg /FROM at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel 0 dg to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength 0 dg ldiagatangle ldiagpadd /TO ldiagpointdef
+   180 dg /TO at ANGLE ldiagangledef
+   /XRIGHT [ FROM pop TO pop ldiagmax bias add ] cvx def
+   XRIGHT FROM exch pop /P1 ldiagpointdef
+   XRIGHT TO exch pop /P2 ldiagpointdef
+   /VERT [ P1 P2 ldiagangleto ] cvx def
+   P1 P1 0 0 1 ft 0 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle
+   ldiagpadd ldiagangleto /P1 at ANGLE ldiagangledef
+   P2 P2 0 0 1 ft 180 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle
+   ldiagpadd ldiagangleto /P2 at ANGLE ldiagangledef
+   P1 0.5 ldiagpmul P2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   VERT /LMID at ANGLE ldiagangledef
+   /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def
+   /ZINDENT [ zindent P2 TO ldiagdistance ldiagmin ] cvx def
+   FROM XINDENT 0 ldiagpadd /LFROM ldiagpointdef
+   0 dg /LFROM at ANGLE ldiagangledef
+   TO ZINDENT 0 ldiagpadd /LTO ldiagpointdef
+   180 dg /LTO at ANGLE ldiagangledef
+   FROM LFROM P1 LMID P2 LTO TO
+ 
+   % (leaving ldiagrvllinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ 
+ % farr tarr { from } { to } xindent zindent bias radius ldiagrvlcurvepath -
+ /ldiagrvlcurvepath
+ {
+   % (entering ldiagrvlcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /radius exch def
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   from (CTR) ldiagdolabel 0 dg from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength 0 dg ldiagatangle ldiagpadd /FROM ldiagpointdef
+   0 dg /FROM at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel 0 dg to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength 0 dg ldiagatangle ldiagpadd /TO ldiagpointdef
+   180 dg /TO at ANGLE ldiagangledef
+   /XRIGHT [ FROM pop TO pop ldiagmax bias add ] cvx def
+   /XP1 [ XRIGHT FROM exch pop ] cvx def
+   /XP2 [ XRIGHT TO exch pop ] cvx def
+   /VERT [ XP1 XP2 ldiagangleto ] cvx def
+   XP1 0.5 ldiagpmul XP2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   VERT /LMID at ANGLE ldiagangledef
+   /XINDENT [ xindent FROM XP1 ldiagdistance ldiagmin ] cvx def
+   /ZINDENT [ zindent XP2 TO ldiagdistance ldiagmin ] cvx def
+   FROM XINDENT 0 ldiagpadd /LFROM ldiagpointdef
+   0 dg /LFROM at ANGLE ldiagangledef
+   TO ZINDENT 0 ldiagpadd /LTO ldiagpointdef
+   180 dg /LTO at ANGLE ldiagangledef
+   /RADIUS [ radius XP1 XP2 ldiagdistance 0.5 mul ldiagmin ] cvx def
+   /XP1PRE [ XP1 0 0 RADIUS 180 dg ldiagatangle ldiagpadd ] cvx def
+   /XP1POST [ XP1 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def
+   /XP1CTR [ XP1PRE 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def
+   XP1CTR 0 0 RADIUS XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd
+   /P1 ldiagpointdef
+   XP1PRE XP1POST ldiagangleto /P1 at ANGLE ldiagangledef
+   /XP2PRE [ 0 0 RADIUS VERT ldiagatangle XP2 ldiagpsub ] cvx def
+   /XP2POST [ XP2 0 0 RADIUS 180 dg ldiagatangle ldiagpadd ] cvx def
+   /XP2CTR [ XP2PRE 0 0 RADIUS 180 dg ldiagatangle ldiagpadd ] cvx def
+   XP2CTR 0 0 RADIUS XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd
+   /P2 ldiagpointdef
+   XP2PRE XP2POST ldiagangleto /P2 at ANGLE ldiagangledef
+   FROM LFROM XP1PRE
+   {} {[XP1CTR clockwise] P1 [XP1CTR clockwise]} {} {[XP1CTR] P1 [XP1CTR]}
+   {} {} {} {} VERT round ldiagquadcase
+   XP1POST LMID XP2PRE
+   {} {[XP2CTR clockwise] P2 [XP2CTR clockwise]} {} {[XP2CTR] P2 [XP2CTR]}
+   {} {} {} {} VERT round ldiagquadcase
+   XP2POST LTO TO
+ 
+   % (leaving ldiagrvlcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent bias fbias tbias ldiagdwraplinepath -
+ /ldiagdwraplinepath
+ {
+   % (entering ldiagdwraplinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /tbias exch def
+   /fbias exch def
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop
+   lt { 180 dg } { 0 dg } ifelse ] cvx def
+   from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd 0 0
+   fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef
+   DIRN /FROM at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef
+   DIRN /TO at ANGLE ldiagangledef
+   FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd /P1 ldiagpointdef
+   DIRN 180 dg eq { 225 dg } { -45 dg } ifelse /P1 at ANGLE ldiagangledef
+   TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd
+   /P4 ldiagpointdef
+   DIRN 180 dg eq { 135 dg } { 45 dg } ifelse /P4 at ANGLE ldiagangledef
+   /YC [ from (CTR) ldiagdolabel 270 dg from (CIRCUM) ldiagdolabel ldiagpadd
+   exch pop to (CTR) ldiagdolabel 270 dg to (CIRCUM) ldiagdolabel ldiagpadd
+   exch pop ldiagmin bias 0 ldiagmax sub ] cvx def
+   P1 pop YC /P2 ldiagpointdef
+   P4 at ANGLE 180 dg sub /P2 at ANGLE ldiagangledef
+   P4 pop YC /P3 ldiagpointdef
+   P1 at ANGLE 180 dg sub /P3 at ANGLE ldiagangledef
+   /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def
+   FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+   /ZINDENT [ zindent TO P4 ldiagdistance ldiagmin ] cvx def
+   TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef
+   TO at ANGLE /LTO at ANGLE ldiagangledef
+   P2 0.5 ldiagpmul P3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   DIRN 180 dg sub /LMID at ANGLE ldiagangledef
+   FROM P1 P2 P3 P4 TO
+ 
+   % (leaving ldiagdwraplinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent bias fbias tbias radius
+ % ldiagdwrapcurvepath -
+ /ldiagdwrapcurvepath
+ {
+   % (entering ldiagdwrapcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /radius exch def
+   /tbias exch def
+   /fbias exch def
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+   { 180 dg } { 0 dg } ifelse ] cvx def
+   /CLOCK [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+   { anticlockwise } { clockwise } ifelse ] cvx def
+   from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef
+   DIRN /FROM at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef
+   DIRN /TO at ANGLE ldiagangledef
+   /XP1 [ FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd ] cvx def
+   /XP4 [ TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd ] cvx def
+   /YC [ from (CTR) ldiagdolabel 270 dg from (CIRCUM) ldiagdolabel ldiagpadd
+   exch pop to (CTR) ldiagdolabel 270 dg to (CIRCUM) ldiagdolabel ldiagpadd
+   exch pop ldiagmin bias 0 ldiagmax sub ] cvx def
+   /XP2 [ XP1 pop YC ] cvx def
+   /XP3 [ XP4 pop YC ] cvx def
+   /RP1 [ radius XP1 FROM ldiagdistance XP1 XP2 ldiagdistance 2 div
+   ldiagmin ldiagmin ] cvx def
+   /XP1PRE [ XP1 0 0 RP1 XP1 FROM ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP1POST [ XP1 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP1CTR [ XP1PRE 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   XP1CTR 0 0 RP1 XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd /P1 ldiagpointdef
+   XP1CTR P1 ldiagangleto DIRN add 90 dg sub /P1 at ANGLE ldiagangledef
+   /RP2 [ radius XP1 XP2 ldiagdistance 2 div XP2 XP3 ldiagdistance 2 div
+   ldiagmin ldiagmin ] cvx def
+   /XP2PRE [ XP2 0 0 RP2 XP2 XP1 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP2POST [ XP2 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP2CTR [ XP2PRE 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   XP2CTR 0 0 RP2 XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd /P2 ldiagpointdef
+   XP2CTR P2 ldiagangleto DIRN add 90 dg sub /P2 at ANGLE ldiagangledef
+   /RP3 [ radius XP2 XP3 ldiagdistance 2 div XP3 XP4 ldiagdistance 2 div
+   ldiagmin ldiagmin ] cvx def
+   /XP3PRE [ XP3 0 0 RP3 XP3 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP3POST [ XP3 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP3CTR [ XP3PRE 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   XP3CTR 0 0 RP3 XP3CTR XP3 ldiagangleto ldiagatangle ldiagpadd /P3 ldiagpointdef
+   XP3CTR P3 ldiagangleto DIRN add 90 dg sub /P3 at ANGLE ldiagangledef
+   /RP4 [ radius XP4 XP3 ldiagdistance 2 div XP4 TO ldiagdistance
+   ldiagmin ldiagmin ] cvx def
+   /XP4PRE [ XP4 0 0 RP4 XP4 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP4POST [ XP4 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP4CTR [ XP4PRE 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   XP4CTR 0 0 RP4 XP4CTR XP4 ldiagangleto ldiagatangle ldiagpadd /P4 ldiagpointdef
+   XP4CTR P4 ldiagangleto DIRN add 90 dg sub /P4 at ANGLE ldiagangledef
+   /XINDENT [ xindent FROM XP1PRE ldiagdistance ldiagmin ] cvx def
+   FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+   XP2 0.5 ldiagpmul XP3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   DIRN 180 dg sub /LMID at ANGLE ldiagangledef
+   /ZINDENT [ zindent TO XP4POST ldiagdistance ldiagmin ] cvx def
+   TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef
+   TO at ANGLE /LTO at ANGLE ldiagangledef
+   FROM LFROM
+   XP1PRE [XP1CTR CLOCK] XP1POST
+   XP2PRE [XP2CTR CLOCK] XP2POST
+   LMID
+   XP3PRE [XP3CTR CLOCK] XP3POST
+   XP4PRE [XP4CTR CLOCK] XP4POST
+   LTO TO
+ 
+   % (leaving ldiagdwrapcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent bias fbias tbias ldiaguwraplinepath -
+ /ldiaguwraplinepath
+ {
+   % (entering ldiaguwraplinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /tbias exch def
+   /fbias exch def
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+   { 180 dg } { 0 dg } ifelse ] cvx def
+   from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef
+   DIRN /FROM at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef
+   DIRN /TO at ANGLE ldiagangledef
+   FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd /P1 ldiagpointdef
+   DIRN 180 dg eq { 135 dg } { 45 dg } ifelse /P1 at ANGLE ldiagangledef
+   TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd
+   /P4 ldiagpointdef
+   DIRN 180 dg eq { 225 dg } { -45 dg } ifelse /P4 at ANGLE ldiagangledef
+   /YC [ from (CTR) ldiagdolabel 90 dg from (CIRCUM) ldiagdolabel ldiagpadd
+   exch pop to (CTR) ldiagdolabel 90 dg to (CIRCUM) ldiagdolabel ldiagpadd
+   exch pop ldiagmax bias 0 ldiagmax add ] cvx def
+   P1 pop YC /P2 ldiagpointdef
+   P4 at ANGLE 180 dg sub /P2 at ANGLE ldiagangledef
+   P4 pop YC /P3 ldiagpointdef
+   P1 at ANGLE 180 dg sub /P3 at ANGLE ldiagangledef
+   /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def
+   FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+   /ZINDENT [ zindent TO P4 ldiagdistance ldiagmin ] cvx def
+   TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef
+   TO at ANGLE /LTO at ANGLE ldiagangledef
+   P2 0.5 ldiagpmul P3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   DIRN 180 dg sub /LMID at ANGLE ldiagangledef
+   FROM P1 P2 P3 P4 TO
+ 
+   % (leaving ldiaguwraplinepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % farr tarr { from } { to } xindent zindent bias fbias tbias radius
+ % ldiaguwrapcurvepath -
+ /ldiaguwrapcurvepath
+ {
+   % (entering ldiaguwrapcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+   /radius exch def
+   /tbias exch def
+   /fbias exch def
+   /bias exch def
+   /zindent exch def
+   /xindent exch def
+   cvlit /to exch def
+   cvlit /from exch def
+   /toarrowlength exch def
+   /fromarrowlength exch def
+ 
+   /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+   { 180 dg } { 0 dg } ifelse ] cvx def
+   /CLOCK [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+   { clockwise } { anticlockwise } ifelse ] cvx def
+   from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef
+   DIRN /FROM at ANGLE ldiagangledef
+   to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd
+   0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef
+   DIRN /TO at ANGLE ldiagangledef
+   /XP1 [ FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd ] cvx def
+   /XP4 [ TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd ] cvx def
+   /YC [ from (CTR) ldiagdolabel 90 dg from (CIRCUM) ldiagdolabel ldiagpadd
+   exch pop to (CTR) ldiagdolabel 90 dg to (CIRCUM) ldiagdolabel ldiagpadd
+   exch pop ldiagmax bias 0 ldiagmax add ] cvx def
+   /XP2 [ XP1 pop YC ] cvx def
+   /XP3 [ XP4 pop YC ] cvx def
+   /RP1 [ radius XP1 FROM ldiagdistance XP1 XP2 ldiagdistance 2 div
+   ldiagmin ldiagmin ] cvx def
+   /XP1PRE [ XP1 0 0 RP1 XP1 FROM ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP1POST [ XP1 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP1CTR [ XP1PRE 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   XP1CTR 0 0 RP1 XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd /P1 ldiagpointdef
+   XP1CTR P1 ldiagangleto DIRN add 90 dg add /P1 at ANGLE ldiagangledef
+   /RP2 [ radius XP1 XP2 ldiagdistance 2 div XP2 XP3 ldiagdistance 2 div
+   ldiagmin ldiagmin ] cvx def
+   /XP2PRE [ XP2 0 0 RP2 XP2 XP1 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP2POST [ XP2 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP2CTR [ XP2PRE 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   XP2CTR 0 0 RP2 XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd /P2 ldiagpointdef
+   XP2CTR P2 ldiagangleto DIRN add 90 dg add /P2 at ANGLE ldiagangledef
+   /RP3 [ radius XP2 XP3 ldiagdistance 2 div XP3 XP4 ldiagdistance 2 div
+   ldiagmin ldiagmin ] cvx def
+   /XP3PRE [ XP3 0 0 RP3 XP3 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP3POST [ XP3 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP3CTR [ XP3PRE 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   XP3CTR 0 0 RP3 XP3CTR XP3 ldiagangleto ldiagatangle ldiagpadd /P3 ldiagpointdef
+   XP3CTR P3 ldiagangleto DIRN add 90 dg add /P3 at ANGLE ldiagangledef
+   /RP4 [ radius XP4 XP3 ldiagdistance 2 div XP4 TO ldiagdistance
+   ldiagmin ldiagmin ] cvx def
+   /XP4PRE [ XP4 0 0 RP4 XP4 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP4POST [ XP4 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   /XP4CTR [ XP4PRE 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def
+   XP4CTR 0 0 RP4 XP4CTR XP4 ldiagangleto ldiagatangle ldiagpadd /P4 ldiagpointdef
+   XP4CTR P4 ldiagangleto DIRN add 90 dg add /P4 at ANGLE ldiagangledef
+   /XINDENT [ xindent FROM XP1PRE ldiagdistance ldiagmin ] cvx def
+   FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef
+   FROM at ANGLE /LFROM at ANGLE ldiagangledef
+   XP2 0.5 ldiagpmul XP3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+   DIRN 180 dg sub /LMID at ANGLE ldiagangledef
+   /ZINDENT [ zindent TO XP4POST ldiagdistance ldiagmin ] cvx def
+   TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef
+   TO at ANGLE /LTO at ANGLE ldiagangledef
+   FROM LFROM
+   XP1PRE [XP1CTR CLOCK] XP1POST
+   XP2PRE [XP2CTR CLOCK] XP2POST
+   LMID
+   XP3PRE [XP3CTR CLOCK] XP3POST
+   XP4PRE [XP4CTR CLOCK] XP4POST
+   LTO TO
+ 
+   % (leaving ldiaguwrapcurvepath) 0 ldiagdebugprint
+   % count (  stack size is) 1 ldiagdebugprint pop
+ } def
+ 
+ % shape and labels of the @SolidArrowHead symbol
+ % - ldiagsolidarrowhead -
+ /ldiagsolidarrowhead
+ {
+   0 0 xsize ysize 0.5 mul 0 ysize
+ } def
+ 
+ % shape and labels of the @OpenArrowHead symbol
+ % <pathwidth> ldiagopenarrowhead -
+ /ldiagopenarrowhead
+ {
+   /pathwidth exch def
+   /PSW [ 0 0 ] cvx def
+   /PNW [ 0 ysize ] cvx def
+   /PE  [ xsize ysize 0.5 mul ] cvx def
+   /REL [ 0 0 pathwidth PE PNW ldiagangleto 90 add ldiagatangle ] cvx def
+   /PNA [ 0 ysize 0.5 mul pathwidth 0.5 mul add ] cvx def
+   /PSA [ 0 ysize 0.5 mul pathwidth 0.5 mul sub ] cvx def
+   /PNI [ PNA PNA xsize 0 ldiagpadd PNW REL ldiagpadd
+ 	 PE REL ldiagpadd ldiaglineintersect ] cvx def
+   /PSI [ 0 pathwidth PNI ldiagpsub ] cvx def
+ 
+   PSW PE PNW PNI PNA PSA PSI PSW
+ } def
+ 
+ % shape and labels of the @HalfOpenArrowHead symbol
+ % <pathwidth> ldiaghalfopenarrowhead -
+ /ldiaghalfopenarrowhead
+ {
+   /pathwidth exch def
+   0 0
+   xsize ysize 0.5 mul
+   0 ysize
+   xsize 0.3 mul ysize 0.5 mul pathwidth 0.5 mul add
+   0             ysize 0.5 mul pathwidth 0.5 mul add
+   0             ysize 0.5 mul pathwidth 0.5 mul sub
+   xsize 0.3 mul ysize 0.5 mul pathwidth 0.5 mul sub
+   0 0
+ } def
+ 
+ % shape and labels of the @SolidCurvedArrowHead symbol
+ % - ldiagsolidcurvedarrowhead -
+ /ldiagsolidcurvedarrowhead
+ {
+   0 0
+   [0 0 xsize ysize 0.5 mul ldiaglinebetween
+    xsize 0 xsize ysize ldiaglineintersect clockwise]
+   xsize ysize 0.5 mul
+   [xsize ysize 0.5 mul 0 ysize ldiaglinebetween
+    xsize 0 xsize ysize ldiaglineintersect clockwise]
+   0 ysize
+ } def
+ 
+ % shape and labels of the @OpenCurvedArrowHead symbol
+ % <pathwidth> ldiagopencurvedarrowhead -
+ /ldiagopencurvedarrowhead
+ {
+   /pathwidth exch def
+   /LR [ 0 0 xsize ysize 0.5 mul ldiaglinebetween
+ 	xsize 0 xsize ysize ldiaglineintersect
+       ] cvx def
+   /UR [ xsize ysize 0.5 mul 0 ysize ldiaglinebetween
+ 	xsize 0 xsize ysize ldiaglineintersect
+       ] cvx def
+   /PW2 [ pathwidth 0.5 mul ] cvx def
+   /UMID [
+       0 ysize 0.5 mul PW2 add
+       xsize ysize 0.5 mul PW2 add
+       0 ysize 0 0 1 ft UR 0 ysize ldiagangleto 90 add ldiagatangle
+       ldiagpadd 0 ysize ldiaglineintersect
+       ] cvx def
+   /LMID [ 0 pathwidth UMID ldiagpsub ] cvx def
+   0 0
+   [LR clockwise]
+   xsize ysize 0.5 mul
+   [UR clockwise]
+   0 ysize
+   UMID
+   0 ysize 0.5 mul PW2 add
+   0 ysize 0.5 mul PW2 sub
+   LMID
+   0 0
+ } def
+ 
+ % shape and labels of the @HalfOpenCurvedArrowHead symbol
+ % <pathwidth> ldiaghalfopencurvedarrowhead -
+ /ldiaghalfopencurvedarrowhead
+ {
+   /pathwidth exch def
+   /LR [ 0 0 xsize ysize 0.5 mul ldiaglinebetween
+ 	xsize 0 xsize ysize ldiaglineintersect
+       ] cvx def
+   /UR [ xsize ysize 0.5 mul 0 ysize ldiaglinebetween
+ 	xsize 0 xsize ysize ldiaglineintersect
+       ] cvx def
+   /BR [ 0 0 LR 0 ysize UR ldiaglineintersect ] cvx def
+   /BRAD [ 0 0 BR ldiagdistance ] cvx def
+   /PW2 [ pathwidth 0.5 mul ] cvx def
+   /XDIST [ BRAD dup mul PW2 dup mul sub sqrt ] cvx def
+   /UMID [ BR XDIST PW2 ldiagpadd ] cvx def
+   /LMID [ BR XDIST 0 PW2 sub ldiagpadd ] cvx def
+   0 0
+   [LR clockwise]
+   xsize ysize 0.5 mul
+   [UR clockwise]
+   0 ysize
+   [BR clockwise]
+   UMID
+   0 ysize 0.5 mul PW2 add
+   0 ysize 0.5 mul PW2 sub
+   LMID
+   [BR clockwise]
+   0 0
+ } def
+ 
+ end
+ %%EndResource


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/doc
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/doc:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/doc	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,371 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for ordinary documents                                    #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude commands for standard packages.                                #
+ #                                                                             #
+ ###############################################################################
+ 
+   @SysInclude { langdefs	} # language definitions
+   @SysInclude { bsf		} # BasicSetup package
+   @SysInclude { dsf		} # DocumentSetup package
+   @SysInclude { docf		} # OrdinarySetup extension
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Include command for reading personal definitions from current directory.  #
+ #                                                                             #
+ ###############################################################################
+ 
+   @Include { mydefs }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @BasicSetup @Use clause - basics, lists, paragraphs, displays.         #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @BasicSetup
+   # @InitialFont	{ Times Base 12p	} # initial font
+   # @InitialBreak	{{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}}
+   # @InitialSpace	{ lout			} # initial space style
+   # @InitialLanguage	{ English		} # initial language
+   # @InitialColour	{ black			} # initial colour
+   # @OptimizePages	{ No			} # optimize page breaks?
+   # @HeadingFont	{ Bold			} # font for @Heading
+   # @ParaGap		{ 1.3vx @OrIfPlain 1f	} # gap between paragraphs
+   # @ParaIndent		{ 2.00f	@OrIfPlain 5s	} # first-line indent for @PP
+   # @DisplayGap		{ 1.00v	@OrIfPlain 1f	} # gap above, below displays
+   # @DisplayIndent	{ 2.00f	@OrIfPlain 5s	} # @IndentedDisplay indent
+   # @DefaultIndent	{ 0.5rt			} # @Display indent
+   # @DisplayNumStyle	{ (num)			} # style of display numbers
+   # @WideIndent		{ 4.00f	@OrIfPlain 10s	} # @WideTaggedList indent
+   # @VeryWideIndent	{ 8.00f	@OrIfPlain 20s	} # @VeryWideTaggedList indent
+   # @ListOuterGap	{ 1.00v	@OrIfPlain 1f	} # gap before, after lists
+   # @ListGap		{ 1.00v	@OrIfPlain 1f	} # gap between list items
+   # @ListIndent		{ 0s			} # indent of list items
+   # @ListRightIndent	{ 0s			} # right indent of list items
+   # @ListLabelWidth	{ 2.00f	@OrIfPlain 5s	} # width allowed for list tags
+   # @NumberSeparator	{ .			} # separates nums like 2.3.7
+   # @CrossLinkFormat	{ @Body			} # format of cross links
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @DocumentSetup @Use clause - page layout plus figures, tables, etc.    #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @DocumentSetup
+   # @PageType		{ A4	@OrIfPlain Other} # page type (width, height)
+   # @PageWidth		{ 80s			} # page width if type Other
+   # @PageHeight		{ 66f			} # page height if type Other
+   # @PageOrientation	{ Portrait		} # Portrait, Landscape, etc.
+   # @PageBackground	{  			} # background of each page
+   # @TopMargin		{ 2.5c	@OrIfPlain 6f	} # top margin of all pages
+   # @FootMargin		{ 2.5c	@OrIfPlain 6f	} # bottom margin of all pages
+   # @OddLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of odd pages
+   # @OddRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of odd pages
+   # @EvenLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of even pages
+   # @EvenRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of even pages
+   # @OddLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @OddRightBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenRightBodyMargin{ 0c			} # extra margin for page body
+   # @PageBoxType	{ None			} # None Box CurveBox ShadowBox
+   # @PageBoxMargin	{ 1.00c			} # page box margin
+   # @PageBoxLineWidth	{			} # page box line thickness
+   # @PageBoxPaint	{ none			} # page box paint
+   # @PageBoxShadow	{ 0.60c			} # shadow margin if ShadowBox
+   # @PageEnclose	{ @Body			} # enclose every page in this
+   # @ColumnNumber	{ 1			} # number of columns (1 to 10)
+   # @ColumnGap		{ 1.00c	@OrIfPlain 6s	} # column gap
+ 
+   # @FigureLocation	{ PageTop		} # default figure location
+   # @TableLocation	{ PageTop		} # default table location
+   # @FigureFormat	{ @CC @Body		} # default figure format
+   # @TableFormat	{ @CC @Body		} # default table format
+   # @FigureWord		{ figure		} # "Figure" word else anything
+   # @TableWord		{ table			} # "Table" word else anything
+   # @FigureNumbers	{ Arabic		} # method of numbering figures
+   # @TableNumbers	{ Arabic		} # method of numbering tables
+   # @FigureCaptionPos	{ Below 		} # Above or Below
+   # @TableCaptionPos	{ Below			} # Above or Below
+   # @FigureCaptionFont  { -2p                   } # figure caption font
+   # @FigureCaptionBreak { adjust hyphen 1.2fx   } # figure caption break
+   # @FigureCaptionFormat{ {@B { word @NumSep number. &2s }} @Insert caption }
+   # @TableCaptionFont   { -2p                   } # table caption font
+   # @TableCaptionBreak  { adjust hyphen 1.2fx   } # table caption break
+   # @TableCaptionFormat { {@B { word @NumSep number. &2s }} @Insert caption }
+   # @MakeFigureContents { No                    } # list of figures at start
+   # @MakeTableContents  { No                    } # list of tables at start
+   # @MakeContents	{ No			} # make contents? Yes or No
+   # @ContentsGap	{ 0.20v	@OrIfPlain 0f	} # extra gap above minor entry
+   # @ContentsGapAbove	{ 0.80v	@OrIfPlain 1f	} # extra gap above major entry
+   # @ContentsGapBelow	{ 0.00v	@OrIfPlain 0f	} # extra gap below major entry
+   # @ContentsFont       { Bold                  } # font for major entry
+   # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f	} # extra gap above `part' entry
+   # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f	} # extra gap below `part' entry
+   # @ContentsFormat	{ number @DotSep title	} # contents entry format
+   # @ContentsLeader	{ ..			} # leader symbol in contents
+   # @ContentsLeaderGap	{ 4s	@OrIfPlain 2s	} # gap between leaders
+   # @ContentsRightWidth	{ 3f	@OrIfPlain 6s	} # page numbers column width
+   # @MakeReferences	{ Yes			} # make references? Yes or No
+   # @RefCiteStyle	{ [cite]		} # citation style
+   # @RefCiteLabels	{ @RefNum		} # citation items
+   # @RefNumbers		{ Arabic		} # reference numbers
+   # @RefListFormat	{ Labels		} # NoLabels, Labels, etc.
+   # @RefListLabels	{ [@RefNum]		} # ref list label format
+   # @RefListTitle	{ references		} # title of reference list
+   # @ChapRefListTitle	{ references		} # title of chapter ref list
+   # @RefListIndent	{ 0s			} # indent to left of labels
+   # @RefListRightIndent	{ 0s			} # indent to right of items
+   # @RefListGap		{ @ListGap		} # gap between ref list items
+   # @RefListFont	{        		} # font used in reference list
+   # @RefListBreak	{        		} # break style of ref list
+   # @RefListLabelWidth 	{ @ListLabelWidth	} # Labels column width
+   # @RefListSortKey	{ @Tag			} # sorting key
+   # @MakeIndex		{ No			} # make index? Yes or No
+   # @IndexFont		{			} # index entries font
+   # @IndexBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexColumnNumber	{ 2			} # index columns (1 to 10)
+   # @IndexColumnGap	{ 1.00c	@OrIfPlain 6s	} # index column gap
+   # @IndexCtd		{ Yes			} # include (ctd.) lines
+   # @IndexCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexA		{ No 			} # make index A? Yes or No
+   # @IndexAFont		{			} # index A entries font
+   # @IndexABreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexAColumnNumber	{ 2			} # index A columns (1 to 10)
+   # @IndexAColumnGap	{ 1.00c	@OrIfPlain 6s	} # index A column gap
+   # @IndexACtd		{ Yes			} # include (ctd.) lines
+   # @IndexACtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexACtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexB		{ No 			} # make index B? Yes or No
+   # @IndexBFont		{			} # index B entries font
+   # @IndexBBreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexBColumnNumber	{ 2			} # index B columns (1 to 10)
+   # @IndexBColumnGap	{ 1.00c	@OrIfPlain 6s	} # index B column gap
+   # @IndexBCtd		{ Yes			} # include (ctd.) lines
+   # @IndexBCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexBCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @TopGap		{ 0.75c	@OrIfPlain 2f	} # gap between figures
+   # @MidGap		{ 0.75c	@OrIfPlain 2f	} # gap above/below body text
+   # @FootNoteNumbers	{ Arabic		} # footnote numbers
+   # @FootNoteThrough	{ No			} # numbered through chapter?
+   # @FootNoteLocation	{ ColFoot		} # where the footnote appears
+   # @FootNoteFont	{ 0.80f			} # font for footnotes
+   # @FootNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for footnotes
+   # @FootNoteFormat     { { number &0.05f } @Insert body } # footnote format
+   # @FootLen		{ 2.00c	@OrIfPlain 10s	} # length of footnote line
+   # @FootAboveGap	{ @DisplayGap		} # gap above footnote line
+   # @FootGap		{ 0.20c	@OrIfPlain 1fx	} # gap between footnotes
+   # @MarginNoteFont	{ 0.80f			} # font of margin notes
+   # @MarginNoteBreak	{ ragged 1.10fx		} # break style of margin notes
+   # @MarginNoteHGap	{ 0.5c   		} # horizontal gap to notes
+   # @MarginNoteVGap	{ @DisplayGap  		} # min vertical gap between
+   # @MarginNoteWidth	{ 1.50c  		} # width of margin notes
+   # @EndNoteNumbers	{ Arabic		} # endnote numbers
+   # @EndNoteFont	{ 0.80f			} # font of endnotes
+   # @EndNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for endnotes
+   # @EndNoteFormat	{ { number &0.05f } @Insert body } # endnote format
+   # @EndNoteGap		{ 0.20c	@OrIfPlain 1f	} # gap between endnotes
+   # @TheoremWord	{ theorem		} # "Theorem" word, etc.
+   # @TheoremTitleFormat	{ (title)		} # only if title present
+   # @TheoremFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @DefinitionWord	{ definition		} # "Definition" word, etc.
+   # @DefinitionTitleFormat { (title)		} # only if title present
+   # @DefinitionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ClaimWord		{ claim			} # "Claim" word, etc.
+   # @ClaimTitleFormat	{ (title)		} # only if title present
+   # @ClaimFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @PropositionWord	{ proposition		} # "Proposition" word, etc.
+   # @PropositionTitleFormat { (title)		} # only if title present
+   # @PropositionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @LemmaWord		{ lemma			} # "Lemma" word, etc.
+   # @LemmaTitleFormat	{ (title)		} # only if title present
+   # @LemmaFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @CorollaryWord	{ corollary		} # "Corollary" word, etc.
+   # @CorollaryTitleFormat { (title)		} # only if title present
+   # @CorollaryFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ExampleWord	{ example		} # "Example" word, etc.
+   # @ExampleTitleFormat	{ (title)		} # only if title present
+   # @ExampleFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ProofWord		{ proof			} # "Proof" word, etc.
+   # @PageHeaders	{ Simple		} # None Simple Titles NoTitles
+   # @PageNumbers	{ Arabic		} # page numbers
+   # @FirstPageNumber	{ 1			} # number of first page 
+   # @IntroPageNumbers	{ Roman			} # intro page numbers
+   # @IntroFirstPageNumber{ 1			} # number of first intro page 
+   # @StructPageNums	{ No			} # make structured page numbers
+ 
+   # @OddTop		{ @Centre{- @PageNum -}	} # Simple page headers
+   # @OddFoot		{ @Null			}
+   # @EvenTop		{ @Centre{- @PageNum -}	}
+   # @EvenFoot		{ @Null			}
+   # @StartOddTop	{ @Null			}
+   # @StartOddFoot	{ @Null			}
+   # @StartEvenTop	{ @Null			}
+   # @StartEvenFoot	{ @Null			}
+   # @IntroOddTop	{ @Null			}
+   # @IntroOddFoot	{ @Centre @PageNum	}
+   # @IntroEvenTop	{ @Null			}
+   # @IntroEvenFoot	{ @Centre @PageNum	}
+   # @IntroStartOddTop	{ @Null			}
+   # @IntroStartOddFoot	{ @Null			}
+   # @IntroStartEvenTop	{ @Null			}
+   # @IntroStartEvenFoot	{ @Null			}
+ 
+ 						  # Titles, NoTitles headers
+   # @RunningOddTop  { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum }
+   # @RunningOddFoot		{ @Null					}
+   # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} }
+   # @RunningEvenFoot		{ @Null					}
+   # @RunningStartOddTop 	{ @Null					}
+   # @RunningStartOddFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+   # @RunningStartEvenTop	{ @Null					}
+   # @RunningStartEvenFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+   # @RunningIntroOddTop		{ @Null					}
+   # @RunningIntroOddFoot	{ @Right @PageNum			}
+   # @RunningIntroEvenTop	{ @Null					}
+   # @RunningIntroEvenFoot	{ @PageNum				}
+   # @RunningIntroStartOddTop	{ @Null					}
+   # @RunningIntroStartOddFoot	{ @Null					}
+   # @RunningIntroStartEvenTop	{ @Null					}
+   # @RunningIntroStartEvenFoot	{ @Null					}
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @OrdinarySetup @Use clause - options specific to ordinary documents.   #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @OrdinarySetup
+   # @IndexWord			{ index		} # word for "Index" word etc.
+   # @IndexAWord			{ index		} # word for "Index" (A)
+   # @IndexBWord			{ index		} # word for "Index" (B)
+   # @AppendixWord		{ appendix	} # word for "Appendix"
+   # @SectionNumbers		{ Arabic	} # kind of section numbers
+   # @FirstSectionNumber		{ 1		} # first section num (Arabic)
+   # @SubSectionNumbers		{ Arabic	} # kind of subsection numbers
+   # @FirstSubSectionNumber	{ 1		} # first subsect num (Arabic)
+   # @SubSubSectionNumbers	{ Arabic	} # kind of sub-subsect numbers
+   # @FirstSubSubSectionNumber	{ 1		} # first subsub. num (Arabic)
+   # @AppendixNumbers		{ UCAlpha	} # kind of appendix numbers
+   # @FirstAppendixNumber	{ 1		} # first appendix num (Arabic)
+   # @SubAppendixNumbers		{ Arabic	} # kind of subappendix numbers
+   # @FirstSubAppendixNumber	{ 1		} # first sub-app. num (Arabic)
+   # @SubSubAppendixNumbers	{ Arabic	} # kind of sub-subapp. numbers
+   # @FirstSubSubAppendixNumber	{ 1		} # first sub-sub. num (Arabic)
+   # @SectionHeadingFont		{ Bold			} # section head font
+   # @SectionHeadingBreak	{ ragged 1.2fx nohyphen	} # section head break
+   # @SectionHeadingFormat	{ number @DotSep title	} # section head fmt
+   # @SubSectionHeadingFont	{ Bold			} # subsect head font
+   # @SubSectionHeadingBreak	{ ragged 1.2fx nohyphen	} # subsect head break
+   # @SubSectionHeadingFormat	{ number @DotSep title	} # subsect head fmt
+   # @SubSubSectionHeadingFont	{ Slope			} # sub-ss. head font
+   # @SubSubSectionHeadingBreak	{ ragged 1.2fx nohyphen	} # sub-ss. head break
+   # @SubSubSectionHeadingFormat	{ number @DotSep title	} # sub-ss. head fmt
+   # @AppendixHeadingFont	{ Bold			} # appendix head font
+   # @AppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # appendix head break
+   # @AppendixHeadingFormat	{ number @DotSep title	} # appendix head fmt
+   # @SubAppendixHeadingFont	{ Bold			} # subapp. head font
+   # @SubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # subapp. head break
+   # @SubAppendixHeadingFormat	{ number @DotSep title	} # subapp. head format
+   # @SubSubAppendixHeadingFont	{ Slope			} # sub-sa. head font
+   # @SubSubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # sub-sa. head break
+   # @SubSubAppendixHeadingFormat{ number @DotSep title	} # sub-sa. head fmt
+   # @ReferencesHeadingFont	{ Bold			} # refs head font
+   # @ReferencesHeadingBreak	{ ragged 1.2fx nohyphen	} # refs head break
+   # @ReferencesHeadingFormat	{ title			} # refs head format
+   # @IndexHeadingFont		{ Bold			} # index head font
+   # @IndexHeadingBreak		{ ragged 1.2fx nohyphen	} # index head break
+   # @IndexHeadingFormat		{ title			} # index head format
+   # @IndexAHeadingFont		{ Bold			} # index A head font
+   # @IndexAHeadingBreak		{ ragged 1.2fx nohyphen	} # index A head break
+   # @IndexAHeadingFormat	{ title			} # index A head fmt
+   # @IndexBHeadingFont		{ Bold			} # index B head font
+   # @IndexBHeadingBreak		{ ragged 1.2fx nohyphen	} # index B head break
+   # @IndexBHeadingFormat	{ title			} # index B head fmt
+   # @SectionGap			{ 2.0v	@OrIfPlain 3f	} # between sections
+   # @SubSectionGap		{ 1.5v	@OrIfPlain 2f	} # between subsects
+   # @SubSubSectionGap		{ 1.5v	@OrIfPlain 2f	} # between sub-subs.
+   # @AppendixGap		{ 2.0v	@OrIfPlain 3f	} # between appendices
+   # @SubAppendixGap		{ 1.5v	@OrIfPlain 2f	} # between subappendices
+   # @SubSubAppendixGap		{ 1.5v	@OrIfPlain 2f	} # between sub-subapps
+   # @SectionInContents		{ Yes		} # add sections to contents
+   # @SubSectionInContents	{ Yes		} # add subsections to contents
+   # @SubSubSectionInContents	{ No		} # add sub-subsects to contents
+   # @AppendixInContents		{ Yes		} # add appendices to contents
+   # @SubAppendixInContents	{ Yes		} # add subappendices to contents
+   # @SubSubAppendixInContents	{ No		} # add sub-subapps to contents
+   # @ReferencesInContents	{ Yes		} # add ref. section to contents
+   # @IndexInContents		{ Yes		} # add index to contents
+   # @IndexAInContents		{ Yes		} # add index A to contents
+   # @IndexBInContents		{ Yes		} # add index B to contents
+   # @SectionNumInTheorems	{ No		} # theorem num has section num
+   # @SubSectionNumInTheorems	{ No		} # theorem num has subsect num
+   # @SubSubSectionNumInTheorems	{ No		} # theorem num has sub-ss. num
+   # @AppendixNumInTheorems	{ No		} # theorem num has appendix num
+   # @SubAppendixNumInTheorems	{ No		} # theorem num has sub-app num
+   # @SubSubAppendixNumInTheorems{ No		} # theorem num has sub-sa. num
+   # @SectionNumInDisplays	{ Yes		} # display num has section num
+   # @SubSectionNumInDisplays	{ No		} # display num has subsect num
+   # @SubSubSectionNumInDisplays	{ No		} # display num has sub-ss. num
+   # @AppendixNumInDisplays	{ Yes		} # display num has appendix num
+   # @SubAppendixNumInDisplays	{ Yes		} # display num has sub-app num
+   # @SubSubAppendixNumInDisplays{ No		} # display num has sub-sa. num
+   # @SectionNumInFigures	{ No		} # figure num has section num
+   # @SubSectionNumInFigures	{ No		} # figure num has subsect num
+   # @SubSubSectionNumInFigures	{ No		} # figure num has sub-ss. num
+   # @AppendixNumInFigures	{ No		} # figure num has appendix num
+   # @SubAppendixNumInFigures	{ No		} # figure num has sub-app num
+   # @SubSubAppendixNumInFigures	{ No		} # figure num has sub-sa. num
+   # @SectionNumInTables		{ No		} # table num has section num
+   # @SubSectionNumInTables	{ No		} # table num has subsect num
+   # @SubSubSectionNumInTables	{ No		} # table num has sub-ss. num
+   # @AppendixNumInTables	{ No		} # table num has appendix num
+   # @SubAppendixNumInTables	{ No		} # table num has sub-app num
+   # @SubSubAppendixNumInTables	{ No		} # table num has sub-sa. num
+   # @SectionNumInRunners 	{ Yes		} # runners have section num
+   # @SubSectionNumInRunners 	{ No		} # runners have subsect num
+   # @SubSubSectionNumInRunners 	{ No		} # runners have sub-ss. num
+   # @AppendixNumInRunners 	{ Yes		} # runners have appendix num
+   # @SubAppendixNumInRunners 	{ No		} # runners have sub-app num
+   # @SubSubAppendixNumInRunners { No		} # runners have sub-sa. num
+   # @SectionPrefix		{		} # for structured page nums
+   # @AppendixPrefix		{		} # for structured page nums
+   # @ReferencesPrefix		{		} # for structured page nums
+   # @IndexPrefix		{		} # for structured page nums
+   # @IndexAPrefix		{		} # for structured page nums
+   # @IndexBPrefix		{		} # for structured page nums
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Database (and @SysDatabase) clauses go here.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysDatabase @FontDef  { fontdefs }		  # font definitions
+ @SysDatabase @RefStyle { refstyle }		  # reference printing styles


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/docf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/docf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/docf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,779 ----
+ 
+ ###########################################################################
+ #                                                                         #
+ #  @OrdinarySetup extension to @DocumentSetup.                            #
+ #                                                                         #
+ #  Jeffrey H. Kingston                                                    #
+ #  August 1994                                                            #
+ #  5 February 1999                                                        #
+ #                                                                         #
+ #  This package extends DocumentSetup for ordinary documents.             #
+ #                                                                         #
+ ###########################################################################
+ 
+ extend @BasicSetup @DocumentSetup
+ export @Doc @Document @Text
+ def @OrdinarySetup
+ 
+     named @IndexWord			{ index			}
+     named @IndexAWord			{ index			}
+     named @IndexBWord			{ index			}
+     named @AppendixWord			{ appendix		}
+ 
+     named @SectionNumbers		{ Arabic		}
+     named @FirstSectionNumber		{ 1			}
+     named @SubSectionNumbers		{ Arabic		}
+     named @FirstSubSectionNumber	{ 1			}
+     named @SubSubSectionNumbers		{ Arabic		}
+     named @FirstSubSubSectionNumber	{ 1			}
+     named @AppendixNumbers		{ UCAlpha		}
+     named @FirstAppendixNumber		{ 1			}
+     named @SubAppendixNumbers		{ Arabic		}
+     named @FirstSubAppendixNumber	{ 1			}
+     named @SubSubAppendixNumbers	{ Arabic		}
+     named @FirstSubSubAppendixNumber	{ 1			}
+ 
+     named @SectionHeadingFont		{ Bold			}
+     named @SectionHeadingBreak		{ ragged 1.2fx nohyphen }
+     named @SectionHeadingFormat
+ 	    left number right title	{ number @Sep title	}
+ 
+     named @SubSectionHeadingFont	{ Bold			}
+     named @SubSectionHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @SubSectionHeadingFormat
+ 	    left number right title	{ number @Sep title	}
+ 
+     named @SubSubSectionHeadingFont	{ Slope			}
+     named @SubSubSectionHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @SubSubSectionHeadingFormat
+ 	    left number right title	{ number @Sep title	}
+ 
+     named @AppendixHeadingFont		{ Bold			}
+     named @AppendixHeadingBreak		{ ragged 1.2fx nohyphen	}
+     named @AppendixHeadingFormat
+ 	    left number right title	{ number @Sep title	}
+ 
+     named @SubAppendixHeadingFont	{ Bold			}
+     named @SubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @SubAppendixHeadingFormat
+ 	    left number right title	{ number @Sep title	}
+ 
+     named @SubSubAppendixHeadingFont	{ Slope			}
+     named @SubSubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @SubSubAppendixHeadingFormat
+ 	    left number right title	{ number @Sep title	}
+ 
+     named @ReferencesHeadingFont	{ Bold			}
+     named @ReferencesHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @ReferencesHeadingFormat
+ 	    right title			{ title			}
+ 
+     named @IndexHeadingFont		{ Bold			}
+     named @IndexHeadingBreak		{ ragged 1.2fx nohyphen	}
+     named @IndexHeadingFormat
+ 	    right title			{ title			}
+ 
+     named @IndexAHeadingFont		{ Bold			}
+     named @IndexAHeadingBreak		{ ragged 1.2fx nohyphen	}
+     named @IndexAHeadingFormat
+ 	    right title			{ title			}
+ 
+     named @IndexBHeadingFont		{ Bold			}
+     named @IndexBHeadingBreak		{ ragged 1.2fx nohyphen	}
+     named @IndexBHeadingFormat
+ 	    right title			{ title			}
+ 
+     named @SectionGap			{ 2.0v  @OrIfPlain 3f	}
+     named @SubSectionGap		{ 1.5v  @OrIfPlain 2f	}
+     named @SubSubSectionGap		{ 1.5v  @OrIfPlain 2f	}
+     named @AppendixGap			{ 2.0v  @OrIfPlain 3f	}
+     named @SubAppendixGap		{ 1.5v  @OrIfPlain 2f	}
+     named @SubSubAppendixGap		{ 1.5v  @OrIfPlain 2f	}
+ 
+     named @SectionInContents		{ Yes			}
+     named @SubSectionInContents		{ Yes			}
+     named @SubSubSectionInContents	{ No			}
+     named @AppendixInContents		{ Yes			}
+     named @SubAppendixInContents	{ Yes			}
+     named @SubSubAppendixInContents	{ No			}
+     named @ReferencesInContents		{ Yes			}
+     named @IndexInContents		{ Yes			}
+     named @IndexAInContents		{ Yes			}
+     named @IndexBInContents		{ Yes			}
+ 
+     named @SectionNumInTheorems		{ No			}
+     named @SubSectionNumInTheorems	{ No			}
+     named @SubSubSectionNumInTheorems	{ No			}
+     named @AppendixNumInTheorems	{ No			}
+     named @SubAppendixNumInTheorems	{ No			}
+     named @SubSubAppendixNumInTheorems	{ No			}
+ 
+     named @SectionNumInDisplays		{ Yes			}
+     named @SubSectionNumInDisplays	{ No			}
+     named @SubSubSectionNumInDisplays	{ No			}
+     named @AppendixNumInDisplays	{ Yes			}
+     named @SubAppendixNumInDisplays	{ No			}
+     named @SubSubAppendixNumInDisplays	{ No			}
+ 
+     named @SectionNumInFigures		{ No			}
+     named @SubSectionNumInFigures	{ No			}
+     named @SubSubSectionNumInFigures	{ No			}
+     named @AppendixNumInFigures		{ No			}
+     named @SubAppendixNumInFigures	{ No			}
+     named @SubSubAppendixNumInFigures	{ No			}
+ 
+     named @SectionNumInTables		{ No			}
+     named @SubSectionNumInTables	{ No			}
+     named @SubSubSectionNumInTables	{ No			}
+     named @AppendixNumInTables		{ No			}
+     named @SubAppendixNumInTables	{ No			}
+     named @SubSubAppendixNumInTables	{ No			}
+ 
+     named @SectionNumInRunners		{ Yes			}
+     named @SubSectionNumInRunners	{ No			}
+     named @SubSubSectionNumInRunners	{ No			}
+     named @AppendixNumInRunners		{ Yes			}
+     named @SubAppendixNumInRunners	{ No			}
+     named @SubSubAppendixNumInRunners	{ No			}
+ 
+     named @SectionPrefix		{			}
+     named @AppendixPrefix		{			}
+     named @ReferencesPrefix		{			}
+     named @IndexPrefix			{			}
+     named @IndexAPrefix			{			}
+     named @IndexBPrefix			{			}
+ @Begin
+ 
+     #######################################################################
+     #                                                                     #
+     #  Lists of sections, sub(-sub)sections, appendices, etc.             #
+     #                                                                     #
+     #######################################################################
+ 
+     def @TextPlace { @Galley }
+ 
+     export num
+     def @SectionList named @Tag {} right num
+     {
+ 	@Galley
+         //@SectionGap	@SectionList @Next num
+     }
+ 
+     export num
+     def @SubSectionList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubSectionGap    @SubSectionList @Next num
+     }
+ 
+     export num
+     def @SubSubSectionList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubSubSectionGap @SubSubSectionList @Next num
+     }
+ 
+     export num
+     def @AppendixList named @Tag {} right num
+     {
+ 	@Galley
+         //@AppendixGap	@AppendixList @Next num
+     }
+ 
+     export num
+     def @SubAppendixList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubAppendixGap   @SubAppendixList @Next num
+     }
+ 
+     export num
+     def @SubSubAppendixList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubSubAppendixGap   @SubSubAppendixList @Next num
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @SendFull - send full-width text.                                  #
+     #                                                                     #
+     #######################################################################
+ 
+     def @SendFull force into { @FullPlace&&following }
+ 	right x
+     {
+ 	x
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Document.                                                          #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Document
+         named @InitialFont { @InitialFont }
+         named @InitialBreak { @InitialBreak }
+         named @InitialSpace { @InitialSpace }
+         named @InitialLanguage { @InitialLanguage }
+ 	named @PageOrientation { @PageOrientation }
+         named @PageHeaders { @PageHeaders }
+         named @ColumnNumber { @ColumnNumber }
+         named @FirstPageNumber { @FirstPageNumber }
+ 	named @OptimizePages { @OptimizePages }
+ 	named @Unpaginated { No }
+     {
+ 	def @ReferencesPart
+ 	    named @Tag {}
+ 	{
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Major }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @RefHeading @RefListTitle }
+ 		headingfont { @ReferencesHeadingFont }
+ 		headingbreak { @ReferencesHeadingBreak }
+ 		headingformat { @ReferencesHeadingFormat @Body }
+ 		incontents { @ReferencesInContents }
+ 		pnprefix { @ReferencesPrefix }
+ 		majornum {}
+ 		majortitle {}
+ 		minornum {}
+ 		minortitle { @RefHeading @RefListTitle }
+ 		inrunners { Yes }
+ 		sendheader { @Body }
+ 		aboveheadinggap { 0f }
+ 		{ //@RefListGap @ReferencesSection }
+ 
+ 	}
+ 
+         def @IndexPart
+ 	    named @Tag {}
+         {
+ 
+ 	    def @Run
+ 	    {
+ 		NonStart @Runner
+ 		    @MajorNum {}
+ 		    @MajorTitle { index @WordVal @IndexWord }
+ 		    @MinorNum {}
+ 		    @MinorTitle {}
+ 		    @Owner { @Tag }
+ 		    @Prefix { @IndexPrefix }
+ 	    }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Major }
+ 		initiallanguage { @InitialLanguage }
+ 		title { index @WordVal @IndexWord }
+ 		headingfont { @IndexHeadingFont }
+ 		headingbreak { @IndexHeadingBreak }
+ 		headingformat { @IndexHeadingFormat @Body }
+ 		incontents { @IndexInContents }
+ 		pnprefix { @IndexPrefix }
+ 		inrunners { Yes }
+ 		majornum {}
+ 		majortitle {}
+ 		minornum {}
+ 		minortitle { index @WordVal @IndexWord }
+ 		sendheader { @SendFull @Body }
+ 		innergap { @SectionGap }
+ 		wantindefinite { Yes }
+ 		@IndexSection @Run
+ 
+         }
+ 
+         def @IndexAPart
+ 	    named @Tag {}
+         {
+ 	    def @Run
+ 	    {
+ 		NonStart @Runner
+ 		    @MajorNum {}
+ 		    @MajorTitle { index @WordVal @IndexAWord }
+ 		    @MinorNum {}
+ 		    @MinorTitle {}
+ 		    @Owner { @Tag }
+ 		    @Prefix { @IndexAPrefix }
+ 	    }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Major }
+ 		initiallanguage { @InitialLanguage }
+ 		title { index @WordVal @IndexAWord }
+ 		headingfont { @IndexAHeadingFont }
+ 		headingbreak { @IndexAHeadingBreak }
+ 		headingformat { @IndexAHeadingFormat @Body }
+ 		incontents { @IndexAInContents }
+ 		pnprefix { @IndexAPrefix }
+ 		inrunners { Yes }
+ 		majornum {}
+ 		majortitle {}
+ 		minornum {}
+ 		minortitle { index @WordVal @IndexAWord }
+ 		sendheader { @SendFull @Body }
+ 		innergap { @SectionGap }
+ 		wantindefinite { Yes }
+ 		@IndexASection @Run
+ 
+         }
+ 
+         def @IndexBPart
+ 	    named @Tag {}
+         {
+ 	    def @Run
+ 	    {
+ 		NonStart @Runner
+ 		    @MajorNum {}
+ 		    @MajorTitle { index @WordVal @IndexBWord }
+ 		    @MinorNum {}
+ 		    @MinorTitle {}
+ 		    @Owner { @Tag }
+ 		    @Prefix { @IndexBPrefix }
+ 	    }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Major }
+ 		initiallanguage { @InitialLanguage }
+ 		title { index @WordVal @IndexBWord }
+ 		headingfont { @IndexBHeadingFont }
+ 		headingbreak { @IndexBHeadingBreak }
+ 		headingformat { @IndexBHeadingFormat @Body }
+ 		incontents { @IndexBInContents }
+ 		pnprefix { @IndexBPrefix }
+ 		inrunners { Yes }
+ 		majornum {}
+ 		majortitle {}
+ 		minornum {}
+ 		minortitle { index @WordVal @IndexBWord }
+ 		sendheader { @SendFull @Body }
+ 		innergap { @SectionGap }
+ 		wantindefinite { Yes }
+ 		@IndexBSection @Run
+ 
+         }
+ 
+         def @DocumentBody force into { @ColPlace&&preceding }
+ 	    named @Optimize { @OptimizePages }
+         {
+ 	    # this whole comment is now obsolete:
+ 	    # It's important that the first component of @DocumentBody be
+ 	    # indefinite.  If it was definite, then @DocumentBody would
+ 	    # attach immediately to the first page.  This would prevent
+ 	    # @FullWidth from attaching to that page, with the result that
+ 	    # a document starting with @FullWidth would start on page 2!
+ 
+ 	    //  @FootNoteThrough @Do @BeginFootNoteCounter
+ 	    //	@TextPlace
+ 	    //@SectionGap @EndFigureList
+ 	    //@SectionGap @EndNoteList 1
+ 	    //@SectionGap @MakeReferences @Do @ReferencesPart
+ 	    //  @MakeIndexA @Do @IndexAPart
+ 	    //  @MakeIndexB @Do @IndexBPart
+ 	    //  @MakeIndex  @Do @IndexPart
+             //	NonStart @Runner
+         }
+ 
+         @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language
+ 	@InitialSpace @Space { @ColourCommand @InitialColour } @SetColour
+         {
+ 		Yes @BeginAllCounters {}
+ 		Yes @BeginDisplayCounter {}
+ 		Yes @BeginFigureCounter {}
+ 		Yes @BeginTableCounter {}
+             //  @BackEnd @Case {
+ 
+ 		    PlainText @Yield {
+ 			@Unpaginated @Case {
+ 
+ 			    { Yes yes } @Yield {
+ 				@ContinuousPageList
+ 				    @Orient { @PageOrientation }
+ 			    }
+ 
+ 			    { No no } @Yield {
+ 				@PageList
+ 				    @ColumnNumber { @ColumnNumber }
+ 				    @PageHeaders { @PageHeaders }
+ 				    @Orient { @PageOrientation }
+ 				    extra { Yes }
+ 				    @FirstPageNumber
+ 			    }
+ 			}
+ 		    }
+ 
+ 		    else @Yield {
+ 			    @PageList
+ 				@ColumnNumber { @ColumnNumber }
+ 				@PageHeaders { @PageHeaders }
+ 				@Orient { @PageOrientation }
+ 				extra { Yes }
+ 				@FirstPageNumber
+ 		    }
+ 		}
+ 	    //  @DocumentBody
+         }
+     }
+ 
+     macro @Doc { @Document // }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @Text containing sections, appendices, etc.                        #
+     #                                                                     #
+     #######################################################################
+ 
+     export @ContentsGoesHere @FullWidth
+ 	   @BeginSections @EndSections @Section
+ 	   @BeginAppendices @EndAppendices @Appendix
+     def @Text force into { @TextPlace&&preceding }
+         body @Body
+     {
+ 
+ 	def @ContentsGoesHere { @ContentsSection }
+ 
+ 	export @ContentsGoesHere
+ 	def @FullWidth body @Body
+ 	{
+ 	    def @ContentsGoesHere {}
+ 
+             @SendFull { Start @Runner // @Body }
+ 	    & NonStart @Runner & &2.1b &
+ 	}
+ 
+         def @EndSectionsPlace { @Galley }
+ 
+         def @EndSections force into { @EndSectionsPlace&&preceding }
+ 	{}
+ 
+         macro @BeginSections
+ 	{   //@SectionGap @SectionList @FirstSectionNumber
+ 	    // @EndSectionsPlace //
+ 	}
+ 
+         export @BeginSubSections @EndSubSections @SubSection @Title
+         def @Section force into { @SectionList&&preceding }
+             named @Tag {}
+             named @Title {}
+             named @RunningTitle { dft }
+ 	    named @InitialLanguage {}
+ 	    named @BypassNumber { dft }
+             body @Body
+         {
+ 
+             def @EndSubSectionsPlace { @Galley }
+ 
+             def @EndSubSections force into { @EndSubSectionsPlace&&preceding }
+ 	    {}
+ 
+             macro @BeginSubSections
+             {	//@SubSectionGap @SubSectionList @FirstSubSectionNumber
+ 		// @EndSubSectionsPlace //
+ 	    }
+ 
+             def @SectionShortNum
+ 	    {
+ 		@SectionNumbers @Then {
+ 		    @BypassNumber @Dft {
+ 			@SectionNumbers @Num @SectionList&&@Tag @Open { num }
+ 		    }
+ 		}
+ 	    }
+ 
+ 	    export @BeginSubSubSections @EndSubSubSections @SubSubSection
+             def @SubSection force into { @SubSectionList&&preceding }
+ 		named @Tag {}
+ 		named @Title {}
+ 		named @RunningTitle { dft }
+ 		named @InitialLanguage { @InitialLanguage }
+ 		named @BypassNumber { dft }
+ 		body @Body
+             {
+ 
+                 def @EndSubSubSectionsPlace { @Galley }
+ 
+                 def @EndSubSubSections force into
+ 		    { @EndSubSubSectionsPlace&&preceding }
+ 		{}
+ 
+                 macro @BeginSubSubSections
+                 {   //@SubSubSectionGap
+ 			@SubSubSectionList @FirstSubSubSectionNumber
+ 		    // @EndSubSubSectionsPlace //
+ 		}
+ 
+                 def @SubSectionShortNum
+ 		{
+ 		    @SubSectionNumbers @Then {
+ 			@BypassNumber @Dft {
+ 			    @SectionShortNum @Join @SubSectionNumbers @Num
+ 			    { @SubSectionList&&@Tag @Open { num } }
+ 			}
+ 		    }
+ 		}
+ 
+ 		def @SubSubSection force into { @SubSubSectionList&&preceding }
+ 		    named @Tag {}
+ 		    named @Title {}
+ 		    named @RunningTitle { dft }
+ 		    named @InitialLanguage { @InitialLanguage }
+ 		    named @BypassNumber { dft }
+ 		    body @Body
+ 		{
+ 
+ 		    @LargeScaleStructure
+ 			tag { @Tag }
+ 			type { Minor }
+ 			initiallanguage { @InitialLanguage }
+ 			title { @Title }
+ 			runningtitle { @RunningTitle }
+ 			headingfont { @SubSubSectionHeadingFont }
+ 			headingbreak { @SubSubSectionHeadingBreak }
+ 			headingformat { @Num @SubSubSectionHeadingFormat @Body }
+ 			incontents { @SubSubSectionInContents }
+ 			contentsindent { 6f }
+ 			numbers { @SubSubSectionNumbers }
+ 			attachnum { @SubSubSectionList&&preceding @Tagged @Tag }
+ 			retrievenum { @SubSubSectionList&&@Tag @Open { num } }
+ 			bypassnumber { @BypassNumber }
+ 			prefix { @SubSectionShortNum }
+ 			majornum {}
+ 			majortitle {}
+ 			intheorems { @SubSubSectionNumInTheorems }
+ 			indisplays { @SubSubSectionNumInDisplays }
+ 			infigures { @SubSubSectionNumInFigures }
+ 			intables { @SubSubSectionNumInTables }
+ 			inrunners { @SubSubSectionNumInRunners }
+ 			@Body
+ 
+ 	        }
+ 
+ 		@LargeScaleStructure
+ 		    tag { @Tag }
+ 		    type { Minor }
+ 		    initiallanguage { @InitialLanguage }
+ 		    title { @Title }
+ 		    runningtitle { @RunningTitle }
+ 		    headingfont { @SubSectionHeadingFont }
+ 		    headingbreak { @SubSectionHeadingBreak }
+ 		    headingformat { @Num @SubSectionHeadingFormat @Body }
+ 		    incontents { @SubSectionInContents }
+ 		    contentsindent { 3f }
+ 		    numbers { @SubSectionNumbers }
+ 		    attachnum { @SubSectionList&&preceding @Tagged @Tag }
+ 		    retrievenum { @SubSectionList&&@Tag @Open { num } }
+ 		    bypassnumber { @BypassNumber }
+ 		    prefix { @SectionShortNum }
+ 		    majornum {}
+ 		    majortitle {}
+ 		    intheorems { @SubSectionNumInTheorems }
+ 		    indisplays { @SubSectionNumInDisplays }
+ 		    infigures { @SubSectionNumInFigures }
+ 		    intables { @SubSectionNumInTables }
+ 		    inrunners { @SubSectionNumInRunners }
+ 		    @Body
+ 
+             }
+ 
+             @LargeScaleStructure
+                 tag { @Tag }
+                 type { Minor }
+                 initiallanguage { @InitialLanguage }
+                 title { @Title }
+                 runningtitle { @RunningTitle }
+                 headingfont { @SectionHeadingFont }
+                 headingbreak { @SectionHeadingBreak }
+                 headingformat { @Num @SectionHeadingFormat @Body }
+                 incontents { @SectionInContents }
+                 numbers { @SectionNumbers }
+                 attachnum { @SectionList&&preceding @Tagged @Tag }
+                 retrievenum { @SectionList&&@Tag @Open { num } }
+ 		pnprefix { @SectionPrefix }
+ 		majornum {}
+ 		majortitle {}
+                 bypassnumber { @BypassNumber }
+                 intheorems { @SectionNumInTheorems }
+                 indisplays { @SectionNumInDisplays }
+                 infigures { @SectionNumInFigures }
+                 intables { @SectionNumInTables }
+                 inrunners { @SectionNumInRunners }
+                 @Body
+ 
+         }
+ 
+         def @EndAppendicesPlace { @Galley }
+ 
+         def @EndAppendices force into { @EndAppendicesPlace&&preceding }
+ 	{}
+ 
+         macro @BeginAppendices
+         {   //@AppendixGap @AppendixList @FirstAppendixNumber
+ 	    // @EndAppendicesPlace //
+ 	}
+ 
+ 	export @BeginSubAppendices @EndSubAppendices @SubAppendix
+ 	def @Appendix force into { @AppendixList&&preceding }
+             named @Tag {}
+             named @Title {}
+             named @RunningTitle { dft }
+ 	    named @InitialLanguage {}
+ 	    named @BypassNumber { dft }
+             body @Body
+ 	{
+ 
+             def @EndSubAppendicesPlace { @Galley }
+ 
+             def @EndSubAppendices force into
+ 		{ @EndSubAppendicesPlace&&preceding }
+ 	    {}
+ 
+             macro @BeginSubAppendices
+             {	//@SubAppendixGap @SubAppendixList @FirstSubAppendixNumber
+ 		// @EndSubAppendicesPlace //
+ 	    }
+ 
+             def @AppendixShortNum
+             {
+ 		@AppendixNumbers @Then {
+ 		    @BypassNumber @Dft {
+ 			@AppendixNumbers @Num @AppendixList&&@Tag @Open { num }
+ 		    }
+ 		}
+             }
+ 
+             export @BeginSubSubAppendices @EndSubSubAppendices @SubSubAppendix
+             def @SubAppendix force into { @SubAppendixList&&preceding }
+ 		named @Tag {}
+ 		named @Title {}
+ 		named @RunningTitle { dft }
+ 		named @InitialLanguage { @InitialLanguage }
+ 		named @BypassNumber { dft }
+ 		body @Body
+             {
+ 
+ 		def @EndSubSubAppendicesPlace { @Galley }
+ 
+ 		def @EndSubSubAppendices force into
+ 		    { @EndSubSubAppendicesPlace&&preceding }
+ 		{}
+ 
+ 		macro @BeginSubSubAppendices
+ 		{   //@SubSubAppendixGap
+ 			@SubSubAppendixList @FirstSubSubAppendixNumber
+ 		    // @EndSubSubAppendicesPlace //
+ 		}
+ 
+ 		def @SubAppendixShortNum
+ 		{
+ 		    @SubAppendixNumbers @Then {
+ 			@BypassNumber @Dft {
+ 			    @AppendixShortNum @Join @SubAppendixNumbers @Num
+ 			    { @SubAppendixList&&@Tag @Open { num } }
+ 			}
+ 		    }
+ 		}
+ 
+ 		def @SubSubAppendix force into {@SubSubAppendixList&&preceding}
+ 		    named @Tag {}
+ 		    named @Title {}
+ 		    named @RunningTitle { dft }
+ 		    named @InitialLanguage { @InitialLanguage }
+ 		    named @BypassNumber { dft }
+ 		    body @Body
+ 		{
+ 
+ 		    @LargeScaleStructure
+ 			tag { @Tag }
+ 			type { Minor }
+ 			initiallanguage { @InitialLanguage }
+ 			title { @Title }
+ 			runningtitle { @RunningTitle }
+ 			headingfont { @SubSubAppendixHeadingFont }
+ 			headingbreak { @SubSubAppendixHeadingBreak }
+ 			headingformat { @Num @SubSubAppendixHeadingFormat @Body }
+ 			incontents { @SubSubAppendixInContents }
+ 			contentsindent { 6f }
+ 			numbers { @SubSubAppendixNumbers }
+ 			attachnum { @SubSubAppendixList&&preceding @Tagged @Tag }
+ 			retrievenum { @SubSubAppendixList&&@Tag @Open { num } }
+ 			bypassnumber { @BypassNumber }
+ 			prefix { @SubAppendixShortNum }
+ 			majornum {}
+ 			majortitle {}
+ 			intheorems { @SubSubAppendixNumInTheorems }
+ 			indisplays { @SubSubAppendixNumInDisplays }
+ 			infigures { @SubSubAppendixNumInFigures }
+ 			intables { @SubSubAppendixNumInTables }
+ 			inrunners { @SubSubAppendixNumInRunners }
+ 			@Body
+ 
+ 		}
+ 
+ 		@LargeScaleStructure
+ 		    tag { @Tag }
+ 		    type { Minor }
+ 		    initiallanguage { @InitialLanguage }
+ 		    title { @Title }
+ 		    runningtitle { @RunningTitle }
+ 		    headingfont { @SubAppendixHeadingFont }
+ 		    headingbreak { @SubAppendixHeadingBreak }
+ 		    headingformat { @Num @SubAppendixHeadingFormat @Body }
+ 		    incontents { @SubAppendixInContents }
+ 		    contentsindent { 3f }
+ 		    numbers { @SubAppendixNumbers }
+ 		    attachnum { @SubAppendixList&&preceding @Tagged @Tag }
+ 		    retrievenum { @SubAppendixList&&@Tag @Open { num } }
+ 		    bypassnumber { @BypassNumber }
+ 		    prefix { @AppendixShortNum }
+ 		    majornum {}
+ 		    majortitle {}
+ 		    intheorems { @SubAppendixNumInTheorems }
+ 		    indisplays { @SubAppendixNumInDisplays }
+ 		    infigures { @SubAppendixNumInFigures }
+ 		    intables { @SubAppendixNumInTables }
+ 		    inrunners { @SubAppendixNumInRunners }
+ 		    @Body
+ 	    }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Minor }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @Title }
+ 		runningtitle { @RunningTitle }
+ 		headingfont { @AppendixHeadingFont }
+ 		headingbreak { @AppendixHeadingBreak }
+ 		headingformat { @Num @AppendixHeadingFormat @Body }
+ 		incontents { @AppendixInContents }
+ 		contentsindent { 0f }
+ 		word { appendix @WordVal @AppendixWord }
+ 		numbers { @AppendixNumbers }
+ 		attachnum { @AppendixList&&preceding @Tagged @Tag }
+ 		retrievenum { @AppendixList&&@Tag @Open { num } }
+ 		pnprefix { @AppendixPrefix }
+ 		majornum {}
+ 		majortitle {}
+ 		bypassnumber { @BypassNumber }
+ 		intheorems { @AppendixNumInTheorems }
+ 		indisplays { @AppendixNumInDisplays }
+ 		infigures { @AppendixNumInFigures }
+ 		intables { @AppendixNumInTables }
+ 		inrunners { Yes }
+ 		@Body
+ 
+ 	}
+ 
+ 	//  Start @Runner
+ 	//  @Body
+ 	//  NonStart @Runner
+ 
+     }
+ 
+ @End @OrdinarySetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/dsf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/dsf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/dsf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,4566 ----
+ ###############################################################################
+ #                                                                             #
+ #  Lout @DocumentSetup package                                                #
+ #                                                                             #
+ #  Version 1.0 by Jeffrey H. Kingston, 17 July 1991.                          #
+ #  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
+ #  Version 3.0 by Jeffrey H. Kingston, 19 April 1994.                         #
+ #  Version 3.03 by Jeffrey H. Kingston, 6 May 1995.                           #
+ #  Versions 3.04 and 3.05 by Jeffrey H. Kingston, 11 June 1995.               #
+ #  Version 3.05 by Jeffrey H. Kingston, 25 July 1995.                         #
+ #  Version 3.07 by Jeffrey H. Kingston, February 1996.                        #
+ #  Version 3.10 by Jeffrey H. Kingston, September 1996.                       #
+ #  Version 3.11 by Jeffrey H. Kingston, December 1996.                        #
+ #  Version 3.13 by Jeffrey H. Kingston, October 1998.                         #
+ #  Version 3.16 by Jeffrey H. Kingston, May 1999.                             #
+ #  Version 3.17 by Jeffrey H. Kingston, September 1999.                       #
+ #  Version 3.21 by Jeffrey H. Kingston, May 2000.                             #
+ #                                                                             #
+ #  This Lout package contains the general definitions used by all types of    #
+ #  documents.  It needs to be extended (see docf, reportf, bookf, slidesf,    #
+ #  etc.) with definitions for particular document types.  Consult "A User's   #
+ #  Guide to the Lout Document Formatting System" for user information.        #
+ #                                                                             #
+ ###############################################################################
+ 
+ extend @BasicSetup
+ 
+ export
+ 
+     @Runner
+ 	
+     @Figure @Table
+     @FootNote @AnotherFootNote @EndNote
+     @LeftNote @RightNote @OuterNote @InnerNote @Place
+     @Theorem @Proof @EndProof
+     @Definition @Claim @Proposition @Lemma @Corollary @Example
+     @Reference @RefStyle @RefPrint
+     @Ref @NoRef @ChapRef @NoChapRef
+     @Cite @NoCite @ChapCite @NoChapCite
+ 
+     @IndexA @SubIndexA @SubSubIndexA @RawIndexA
+     @RawSubIndexA @RawSubSubIndexA @IndexABlanks
+ 
+     @IndexB @SubIndexB @SubSubIndexB @RawIndexB
+     @RawSubIndexB @RawSubSubIndexB @IndexBBlanks
+ 
+     @Index @SubIndex @SubSubIndex @RawIndex
+     @RawSubIndex @RawSubSubIndex @IndexBlanks
+ 
+     @BypassContentsEntry @BypassMajorContentsEntry
+     @BypassFigureContentsEntry @BypassTableContentsEntry
+     @BypassReference @BypassChapReference
+     @BypassBeginIndex @BypassRawIndex @BypassEndIndex
+     @BypassBeginIndexA @BypassRawIndexA @BypassEndIndexA
+     @BypassBeginIndexB @BypassRawIndexB @BypassEndIndexB
+ 
+ 
+ def @DocumentSetup
+     named @PageType		{ A4    @OrIfPlain Other} # page type (width, height)
+     named @PageWidth		{ 80s			} # page width if type Other
+     named @PageHeight		{ 66f			} # page height if type Other
+     named @PageOrientation	{ Portrait		} # Portrait, Landscape, etc.
+     named @PageBackground	{			} # background of each page
+     named @TopMargin		{ 2.50c  @OrIfPlain 6f	} # top margin of all pages
+     named @FootMargin		{ 2.50c  @OrIfPlain 6f	} # bottom margin of all pages
+     named @OddLeftMargin	{ 2.50c  @OrIfPlain 10s	} # left margin of odd pages
+     named @OddRightMargin	{ 2.50c  @OrIfPlain 10s	} # right margin of odd pages
+     named @EvenLeftMargin	{ 2.50c  @OrIfPlain 10s	} # left margin of even pages
+     named @EvenRightMargin	{ 2.50c  @OrIfPlain 10s	} # right margin of even pages
+     named @OddLeftBodyMargin	{ 0c			} # extra margin for page body
+     named @OddRightBodyMargin	{ 0c			} # extra margin for page body
+     named @EvenLeftBodyMargin	{ 0c			} # extra margin for page body
+     named @EvenRightBodyMargin	{ 0c			} # extra margin for page body
+     named @PageBoxType		{ None			} # None Box CurveBox ShadowBox
+     named @PageBoxMargin	{ 1.00c			} # page box margin
+     import @LengthUnits named @PageBoxLineWidth
+ 				{			} # page box line thickness
+     named @PageBoxPaint		{  none			} # page box paint
+     named @PageBoxShadow	{  0.60c		} # shadow margin if ShadowBox
+     named @PageEnclose right @Body { @Body		} # page enclose
+     named @ColumnNumber		{  1			} # number of columns (1 to 10)
+     named @ColumnGap		{  1.00c @OrIfPlain 6s	} # column gap
+     named @FigureLocation	{  PageTop		} # default figure location
+     named @TableLocation	{  PageTop		} # default table location
+     named @FigureFormat
+     	named @II right x { |@DisplayIndent x |      }
+     	named @QQ right x { |@DisplayIndent x |@DisplayIndent }
+     	named @CC right x { |0.5rt x |      }
+     	named @RR right x { |1.0rt x |      }
+ 	right @Body
+ 				{  @CC @Body		} # default figure format
+     named @TableFormat
+     	named @II right x { |@DisplayIndent x |      }
+     	named @QQ right x { |@DisplayIndent x |@DisplayIndent }
+     	named @CC right x { |0.5rt x |      }
+     	named @RR right x { |1.0rt x |      }
+ 	right @Body
+ 				{  @CC @Body		} # default table format
+     named @FigureWord		{  figure		} # "Figure" word else anything
+     named @TableWord		{  table		} # "Table" word else anything
+     named @FigureNumbers	{  Arabic		} # method of numbering figures
+     named @TableNumbers		{  Arabic		} # method of numbering tables
+     named @FigureCaptionPos	{  Below		} # Above or Below
+     named @TableCaptionPos	{  Below		} # Above or Below
+     named @FigureCaptionFont    {  -2p 			} # figure caption font
+     named @FigureCaptionBreak   {  adjust hyphen 1.2fx	} # figure caption break
+     named @FigureCaptionFormat named word {} named number {} named caption {}
+ 				{  {@B { word @NumSep number. &2s }} @Insert caption }
+     named @TableCaptionFont     {  -2p			} # figure caption font
+     named @TableCaptionBreak    {  adjust hyphen 1.2fx	} # figure caption break
+     named @TableCaptionFormat named word {} named number {} named caption {}
+ 				{  {@B { word @NumSep number. &2s }} @Insert caption }
+     named @MakeFigureContents   {  No			} # list of figures at start
+     named @MakeTableContents    {  No			} # list of tables at start
+     named @MakeContents		{  No			} # make contents? Yes or No
+     named @ContentsGap		{  0.20v @OrIfPlain 0f	} # extra gap above minor entry
+     named @ContentsGapAbove	{  0.80v @OrIfPlain 1f	} # extra gap above major entry
+     named @ContentsGapBelow	{  0.00v @OrIfPlain 0f	} # extra gap below major entry
+     named @ContentsFont    	{  Bold                 } # font for major entry
+     named @ContentsPartGapAbove	{  1.00v @OrIfPlain 1f  } # extra gap above part entry
+     named @ContentsPartGapBelow	{  0.00v @OrIfPlain 0f  } # extra gap below part entry
+     named @ContentsFormat
+ 	left number
+ 	right title
+ 				{  number @Sep title } # contents format
+     named @ContentsLeader	{  ..			} # leader symbol in contents
+     named @ContentsLeaderGap	{  4s    @OrIfPlain 2s	} # gap between leaders
+     named @ContentsRightWidth	{  3f    @OrIfPlain 6s	} # page numbers column width
+ 
+     named @MakeReferences	{  Yes			} # make references? Yes or No
+     named @RefCiteStyle right cite {  [cite]		} # citation style
+     named @RefCiteLabels
+ 	named @RefNum       {}
+ 	named @Tag          {}
+ 	named @Type         {}
+ 	named @Abstract     {}
+ 	named @Address      {}
+ 	named @Annote       {}
+ 	named @Author       {}
+ 	named @Day          {}
+ 	named @Edition      {}
+ 	named @HowPublished {}
+ 	named @InAuthor     {}
+ 	named @InTitle      {}
+ 	named @Institution  {}
+ 	named @Journal      {}
+ 	named @Keywords     {}
+ 	named @Label        {}
+ 	named @Month        {}
+ 	named @Note         {}
+ 	named @Number       {}
+ 	named @Organization {}
+ 	named @Page         {}
+ 	named @Pages        {}
+ 	named @Pinpoint     {}
+ 	named @Publisher    {}
+ 	named @Title        {}
+ 	named @TitleNote    {}
+ 	named @TRType       {}
+ 	named @Volume       {}
+ 	named @Year         {}
+ 				{  @RefNum		} # citation items
+     named @RefNumbers		{  Arabic		} # reference numbers
+ 
+     named @RefListFormat	{  Labels		} # NoLabels, Labels,
+ 						  	# DropLabels, IntegrateLabels
+     named @RefListLabels
+ 	named @RefNum       {}
+ 	named @Tag          {}
+ 	named @Type         {}
+ 	named @Abstract     {}
+ 	named @Address      {}
+ 	named @Annote       {}
+ 	named @Author       {}
+ 	named @Day          {}
+ 	named @Edition      {}
+ 	named @HowPublished {}
+ 	named @InAuthor     {}
+ 	named @InTitle      {}
+ 	named @Institution  {}
+ 	named @Journal      {}
+ 	named @Keywords     {}
+ 	named @Label        {}
+ 	named @Month        {}
+ 	named @Note         {}
+ 	named @Number       {}
+ 	named @Organization {}
+ 	named @Page         {}
+ 	named @Pages        {}
+ 	named @Pinpoint     {}
+ 	named @Publisher    {}
+ 	named @Title        {}
+ 	named @TitleNote    {}
+ 	named @TRType       {}
+ 	named @Volume       {}
+ 	named @Year         {}
+ 				{  [@RefNum]		} # ref list label format
+     named @RefListTitle		{  references		} # title of reference list
+     named @ChapRefListTitle	{  references		} # title of chapter ref list
+     named @RefListIndent	{  0s			} # indent to left of labels
+     named @RefListRightIndent	{  0s			} # indent to right of items
+     named @RefListGap		{  @ListGap		} # gap between ref list items
+     named @RefListFont		{			} # font used in reference list
+     named @RefListBreak		{			} # break style of ref list
+     named @RefListLabelWidth 	{  @ListLabelWidth	} # numeric labels column width
+     named @RefListSortKey
+ 	named @Tag          {}
+ 	named @Type         {}
+ 	named @Abstract     {}
+ 	named @Address      {}
+ 	named @Annote       {}
+ 	named @Author       {}
+ 	named @Day          {}
+ 	named @Edition      {}
+ 	named @HowPublished {}
+ 	named @InAuthor     {}
+ 	named @InTitle      {}
+ 	named @Institution  {}
+ 	named @Journal      {}
+ 	named @Keywords     {}
+ 	named @Label        {}
+ 	named @Month        {}
+ 	named @Note         {}
+ 	named @Number       {}
+ 	named @Organization {}
+ 	named @Page         {}
+ 	named @Pages        {}
+ 	named @Pinpoint     {}
+ 	named @Publisher    {}
+ 	named @Title        {}
+ 	named @TitleNote    {}
+ 	named @TRType       {}
+ 	named @Volume       {}
+ 	named @Year         {}
+ 	named ":"	    { "\037" }
+ 				{  @Tag			} # sorting key
+ 
+     named @MakeIndex		{  No			} # make index? Yes or No
+     named @IndexFont		{			} # index entries font
+     named @IndexBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx}	} # index entries break
+     named @IndexColumnNumber	{  2			} # index columns (1 to 10)
+     named @IndexColumnGap	{  1.00c @OrIfPlain 6s	} # index column gap
+     named @IndexCtd		{  Yes			} # include (ctd.) lines
+     named @IndexCtdWord		{  continued		} # "ctd." in current lang
+     named @IndexCtdFormat
+ 	left @Body
+ 	right @CtdWord
+ 				{  @Body @I (@CtdWord)	} # (ctd.) format
+     named @MakeIndexA		{  No			} # make index A? Yes or No
+     named @IndexAFont		{			} # index A entries font
+     named @IndexABreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx}	} # index A entries break
+     named @IndexAColumnNumber	{  2			} # index A columns (1 to 10)
+     named @IndexAColumnGap	{  1.00c @OrIfPlain 6s	} # index A column gap
+     named @IndexACtd		{  Yes			} # include (ctd.) lines
+     named @IndexACtdWord	{  continued		} # "ctd." in current lang
+     named @IndexACtdFormat
+ 	left @Body
+ 	right @CtdWord
+ 				{  @Body @I (@CtdWord)	} # (ctd.) format
+     named @MakeIndexB		{  No			} # make index B? Yes or No
+     named @IndexBFont		{			} # index B entries font
+     named @IndexBBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx}	} # index B entries break
+     named @IndexBColumnNumber	{  2			} # index B columns (1 to 10)
+     named @IndexBColumnGap	{  1.00c @OrIfPlain 6s	} # index B column gap
+     named @IndexBCtd		{  Yes			} # include (ctd.) lines
+     named @IndexBCtdWord	{  continued		} # "ctd." in current lang
+     named @IndexBCtdFormat
+ 	left @Body
+ 	right @CtdWord
+ 				{  @Body @I (@CtdWord)	} # (ctd.) format
+     named @TopGap		{  0.75c @OrIfPlain 2f	} # gap between figures
+     named @MidGap		{  0.75c @OrIfPlain 2f	} # gap above/below body text
+ 
+     named @FootNoteNumbers	{  Arabic		} # footnote numbers
+     named @FootNoteThrough	{  No			} # numbered through chapter?
+     named @FootNoteLocation	{  ColFoot		} # where the footnote appears
+     named @FootNoteFont		{  0.80f		} # font for footnotes
+     named @FootNoteBreak	{  1.2fx @OrIfPlain 1fx	} # break for footnotes
+     named @FootNoteFormat left number right body
+ 				{  { number &0.05f } @Insert body } # break for footnotes
+     named @FootLen		{  2.00c @OrIfPlain 10s	} # length of footnote line
+     named @FootAboveGap		{  @DisplayGap		} # gap above footnote line
+     named @FootGap		{  0.20c @OrIfPlain 1fx	} # gap between footnotes
+ 
+     named @MarginNoteFont	{  0.80f		} # font of margin notes
+     named @MarginNoteBreak	{  ragged 1.10fx	} # break style of margin notes
+     named @MarginNoteHGap	{  0.5c			} # horizontal gap to notes
+     named @MarginNoteVGap	{  @DisplayGap		} # min vertical gap between
+     named @MarginNoteWidth	{  1.50c		} # width of margin notes
+ 
+     named @EndNoteNumbers	{  Arabic		} # endnote numbers
+     named @EndNoteFont		{  0.80f		} # font of endnotes
+     named @EndNoteBreak		{  1.2fx @OrIfPlain 1fx	} # break for endnotes
+     named @EndNoteFormat left number right body
+ 				{  { number &0.05f } @Insert body } # break for endnotes
+     named @EndNoteGap		{  0.20c @OrIfPlain 1f	} # gap between endnotes
+ 
+     named @TheoremWord		{  theorem		} # "Theorem" word, etc.
+     named @TheoremTitleFormat right title
+ 				{  (title)              } # Theorem title format if present
+     named @TheoremFormat named word {} named number {} named title {} named body {} # theorem format
+ 				{  { @B { word @NumSep number title: } &2s } @Insert body }
+     named @DefinitionWord	{  definition		} # "Definition" word, etc.
+     named @DefinitionTitleFormat{  (title)              } # Definition title format if present
+     named @DefinitionFormat named word {} named number {} named title {} named body {} # definition format
+ 				{  { @B { word @NumSep number title: } &2s } @Insert body }
+     named @ClaimWord		{  claim		} # "Claim" word, etc.
+     named @ClaimTitleFormat	{  (title)              } # Claim title format if present
+     named @ClaimFormat named word {} named number {} named title {} named body {} # claim format
+ 				{  { @B { word @NumSep number title: } &2s } @Insert body }
+     named @PropositionWord	{  proposition		} # "Proposition" word, etc.
+     named @PropositionTitleFormat{  (title)             } # Proposition title format if present
+     named @PropositionFormat named word {} named number {} named title {} named body {} # proposition format
+ 				{  { @B { word @NumSep number title: } &2s } @Insert body }
+     named @LemmaWord		{  lemma		} # "Lemma" word, etc.
+     named @LemmaTitleFormat	{  (title)              } # Lemma title format if present
+     named @LemmaFormat named word {} named number {} named title {} named body {} # lemma format
+ 				{  { @B { word @NumSep number title: } &2s } @Insert body }
+     named @CorollaryWord	{  corollary		} # "Corollary" word, etc.
+     named @CorollaryTitleFormat	{  (title)              } # Corollary title format if present
+     named @CorollaryFormat named word {} named number {} named title {} named body {} # corollary format
+ 				{  { @B { word @NumSep number title: } &2s } @Insert body }
+     named @ExampleWord		{  example		} # "Example" word, etc.
+     named @ExampleTitleFormat	{  (title)              } # Example title format if present
+     named @ExampleFormat named word {} named number {} named title {} named body {} # example format
+ 				{  { @B { word @NumSep number title: } &2s } @Insert body }
+     named @ProofWord		{  proof		} # "Proof" word, etc.
+ 
+     named @PageHeaders		{  Simple		} # None Simple Titles NoTitles
+     named @PageNumbers		{  Arabic		} # page numbers
+     named @FirstPageNumber	{  1			} # number of first page 
+     named @IntroPageNumbers	{  Roman		} # intro page numbers
+     named @IntroFirstPageNumber	{  1			} # number of first intro page 
+     named @StructPageNums	{  No			} # structured page numbers
+ 
+     named @OddTop	      right @PageNum { @Centre { - @PageNum - }	}
+     named @OddFoot	      right @PageNum { @Null                    }
+     named @EvenTop	      right @PageNum { @Centre { - @PageNum - }	}
+     named @EvenFoot	      right @PageNum { @Null                    }
+     named @StartOddTop	      right @PageNum { @Null                    }
+     named @StartOddFoot	      right @PageNum { @Null                    }
+     named @StartEvenTop	      right @PageNum { @Null                    }
+     named @StartEvenFoot      right @PageNum { @Null                    }
+ 
+     named @IntroOddTop	      right @PageNum { @Null                    }
+     named @IntroOddFoot	      right @PageNum { @Centre @PageNum         }
+     named @IntroEvenTop	      right @PageNum { @Null                    }
+     named @IntroEvenFoot      right @PageNum { @Centre @PageNum         }
+     named @IntroStartOddTop   right @PageNum { @Null                    }
+     named @IntroStartOddFoot  right @PageNum { @Null                    }
+     named @IntroStartEvenTop  right @PageNum { @Null                    }
+     named @IntroStartEvenFoot right @PageNum { @Null                    }
+ 
+     named @RunningOddTop
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @I { @MinorNum @Sep @MinorTitle } @Right @B @PageNum }
+ 
+     named @RunningOddFoot
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+     named @RunningEvenTop
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @B @PageNum @Right @I { @MajorNum @Sep @MajorTitle } }
+ 
+     named @RunningEvenFoot
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+     named @RunningStartOddTop
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+     named @RunningStartOddFoot
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Centre { Bold 0.8f } @Font @PageNum }
+ 
+     named @RunningStartEvenTop
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+     named @RunningStartEvenFoot
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Centre { Bold 0.8f } @Font @PageNum }
+ 
+ 
+     named @RunningIntroOddTop
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+     named @RunningIntroOddFoot
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Right @PageNum  }
+ 
+     named @RunningIntroEvenTop
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+     named @RunningIntroEvenFoot
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @PageNum }
+ 
+     named @RunningIntroStartOddTop
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+     named @RunningIntroStartOddFoot
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+     named @RunningIntroStartEvenTop
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+     named @RunningIntroStartEvenFoot
+ 	named @MajorNum {} named @MajorTitle {}
+ 	named @MinorNum {} named @MinorTitle {} right @PageNum
+     { @Null }
+ 
+ 
+ @Begin
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Protect x                                                             #
+     #                                                                         #
+     #  Like @CNP, this reserves space on the current page or else makes sure  #
+     #  x appears on the following page.  Lookahead is proportional to font    #
+     #  size.                                                                  #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Protect right x { 3.0f @High //0io // x }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @HLine                                                                #
+     #                                                                         #
+     #   Draws a horizontal line to fill available space.                      #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @HLine
+     {
+ 	@BackEnd @Case {
+ 	   PlainText @Yield { "-" @PlainGraphic 1f @High }
+ 	   PostScript @Yield { {0 0 moveto xsize 0 lineto stroke} @Graphic {} }
+ 	   PDF @Yield { {0 0 m __xsize 0 l S} @Graphic {} }
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  x @WordVal y                                                           #
+     #                                                                         #
+     #  Returns @Word&&x if x == y, otherwise y.                               #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @WordVal
+ 	left x
+ 	right y
+     {
+ 	y @Case {
+ 	    x    @Yield @Word&&x
+ 	    else @Yield y
+ 	}
+     }
+ 
+     ###########################################################################
+     #                                                                         #
+     #  x @Dft y                                                               #
+     #                                                                         #
+     #  This returns x unless its value is "dft", in which case it returns y.  #
+     #  Useful for defaulting the value of one parameter to another.           #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Dft
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    dft  @Yield y
+ 	    else @Yield x
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  x @Do y                                                                #
+     #                                                                         #
+     #  This returns @Null if x is No or None, otherwise y.                    #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Do
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    { No None } @Yield @Null
+ 	    else        @Yield y
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  x @NoDo y                                                              #
+     #                                                                         #
+     #  Negation of @Do: This returns y if x is No or None, otherwise @Null.   #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @NoDo
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    { No None } @Yield y
+ 	    else        @Yield @Null
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  x @Then y                                                              #
+     #                                                                         #
+     #  This returns the empty object if x is No or None, otherwise y.         #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Then
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    { No None } @Yield {}
+ 	    else        @Yield y
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  x @NoThen y                                                            #
+     #                                                                         #
+     #  Negation of @Then: returns y if x is No or None, otherwise empty.      #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @NoThen
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    { No None } @Yield y
+ 	    else        @Yield {}
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Number markers.                                                        #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Num
+ 	left numtype
+ 	right num
+     {
+ 	numtype @Case {
+ 	    None    @Yield {}
+ 	    Arabic  @Yield num
+ 	    Roman   @Yield @Roman&&num
+ 	    UCRoman @Yield @UCRoman&&num
+ 	    Alpha   @Yield @Alpha&&num
+ 	    UCAlpha @Yield @UCAlpha&&num
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @MakePageNum                                                          #
+     #                                                                         #
+     #   Make a page number.                                                   #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @MakePageNum
+ 	named numbers {}
+ 	named rawnum {}
+ 	named prefix {}
+ 	named owner {}
+     {
+ 	def @OwnerNum { @PageMarker&&owner @Open { rawnum } }
+ 
+ 	def @StructNum { @FirstPageNumber @Plus rawnum @Minus @OwnerNum }
+ 
+ 	@PageHeaders. at StructPageNums @Case {
+ 	    { Titles.Yes NoTitles.Yes } @Yield {
+ 		prefix @Join { numbers @Num @StructNum } }
+ 	    else @Yield { numbers @Num rawnum }
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Page size, margins, and boxes.  This code culminates in @OddPage x     #
+     #  and @EvenPage x, which produce one odd or even page containing x.      #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Width
+     {
+ 	@PageType @Case {
+ 	    Letter      @Yield  612p
+ 	    Tabloid     @Yield  792p
+ 	    Ledger      @Yield 1224p
+ 	    Legal       @Yield  612p
+ 	    Statement   @Yield  396p
+ 	    Executive   @Yield  540p
+ 	    A3          @Yield  842p
+ 	    A4          @Yield  595p
+ 	    A5          @Yield  420p
+ 	    B4          @Yield  729p
+ 	    B5          @Yield  516p
+ 	    Folio       @Yield  612p
+ 	    Quarto      @Yield  610p
+ 	    10x14       @Yield  720p
+ 	    Other	@Yield @PageWidth
+ 	}
+     }
+ 
+     def @Height
+     {
+ 	@PageType @Case {
+ 	    Letter      @Yield  792p
+ 	    Tabloid     @Yield 1224p
+ 	    Ledger      @Yield  792p
+ 	    Legal       @Yield 1008p
+ 	    Statement   @Yield  612p
+ 	    Executive   @Yield  720p
+ 	    A3          @Yield 1190p
+ 	    A4          @Yield  842p
+ 	    A5          @Yield  595p
+ 	    B4          @Yield 1032p
+ 	    B5          @Yield  729p
+ 	    Folio       @Yield  936p
+ 	    Quarto      @Yield  780p
+ 	    10x14       @Yield 1008p
+ 	    Other       @Yield @PageHeight
+ 	}
+     }
+ 
+     def @OrientedWidth right @Orient
+     {
+ 	@Orient @Case {
+ 	    { Portrait ReversePortrait }   @Yield @Width
+ 	    { Landscape ReverseLandscape } @Yield @Height
+ 	}
+     }
+ 
+     def @OrientedHeight right @Orient
+     {
+ 	@Orient @Case {
+ 	    { Portrait ReversePortrait }   @Yield @Height
+ 	    { Landscape ReverseLandscape } @Yield @Width
+ 	}
+     }
+ 
+     def @OrientationAngle right @Orient
+     {
+ 	@Orient @Case {
+ 	    Portrait         @Yield 0d
+ 	    Landscape        @Yield 90d
+ 	    ReversePortrait  @Yield 180d
+ 	    ReverseLandscape @Yield 270d
+ 	}
+     }
+ 
+     def @PageBox right x
+     {
+ 	@PageBoxType @Case {
+ 	    None      @Yield x
+ 	    Box       @Yield @Box
+ 			margin { @PageBoxMargin }
+ 			paint { @PageBoxPaint }
+ 			linewidth { @PageBoxLineWidth } x
+ 	    CurveBox  @Yield @CurveBox
+ 			margin { @PageBoxMargin }
+ 			paint { @PageBoxPaint }
+ 			linewidth { @PageBoxLineWidth } x
+ 	    ShadowBox @Yield @ShadowBox
+ 			margin { @PageBoxMargin }
+ 			paint { @PageBoxPaint }
+ 			linewidth { @PageBoxLineWidth }
+ 			shadow { @PageBoxShadow } x
+ 	}
+     }
+ 
+     def @PageSet right x
+     {	
+ #     "LoutPageSet" @Graphic	# VT: case PDF produces nothing
+       { @BackEnd @Case {
+           PostScript @Yield "LoutPageSet"
+           else @Yield "% @DoBackground/LoutPageSet UNIMPLEMENTED"
+         }
+       } @Graphic x
+     }
+ 
+     def @MargSet
+ 	left parity
+ 	right x
+     {
+ #	{ parity "LoutMargSet" } @Graphic x	# VT: case PDF produces nothing
+ 	{ @BackEnd @Case {
+ 	    PostScript @Yield { parity "LoutMargSet" }
+ 	    else @Yield "% @MargSet/LoutMargSet UNIMPLEMENTED"
+ 	  }
+ 	} @Graphic x
+     }
+ 
+     def @OddPage
+ 	left extra
+ 	named @Orient {}
+ 	right x
+     {
+ 	@PageSet
+ 	{ @OrientationAngle @Orient } @Rotate
+ 	{ @OrientedWidth @Orient } @Wide { @OrientedHeight @Orient } @High
+ 	{   //@TopMargin ||@OddLeftMargin
+ 		{ // || @PageBackground } @Background
+ 	        # 1 @MargSet
+ 		@PageEnclose @PageBox @HExpand { extra // @VExpand x }
+ 	    ||@OddRightMargin //@FootMargin
+ 	}
+     }
+ 
+     def @EvenPage
+ 	left extra
+ 	named @Orient {}
+ 	right x
+     {
+ 	@PageSet
+ 	{ @OrientationAngle @Orient } @Rotate
+ 	{ @OrientedWidth @Orient } @Wide { @OrientedHeight @Orient } @High
+ 	{   //@TopMargin ||@EvenLeftMargin
+ 		{ // || @PageBackground } @Background
+ 	        # 0 @MargSet
+ 		@PageEnclose @PageBox @HExpand { extra // @VExpand x }
+ 	    ||@EvenRightMargin //@FootMargin
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Definitions for page headers and footers.  There are 16 symbols here,  #
+     #  in the following pattern:                                              #
+     #                                                                         #
+     #     @(- | Running)(- | Intro)(Odd | Even)(Top | Foot)Header             #
+     #                                                                         #
+     #  Running means that running headers are to be used.                     #
+     #  Intro means that the header is destined for an introductory page.      #
+     #  Odd or Even means whether the page number will be odd or even.         #
+     #  Top or Foot means whether the header is for the top or foot of page.   #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Start @MajorNum @MajorTitle @MinorNum @MinorTitle @Owner @Prefix
+     def @Runner
+ 	left  @Start
+ 	named @MajorNum   {}
+ 	named @MajorTitle {}
+ 	named @MinorNum   {}
+ 	named @MinorTitle {}
+ 	named @Owner      {}
+ 	named @Prefix     {}
+ 	named @Tag        {}
+     { @Null
+     }
+ 
+     def @DupRunner # duplicate previous runner
+     {
+ 	@Runner&&preceding @Open {
+ 	    NonStart @Runner
+ 		@MajorNum { @MajorNum }
+ 		@MajorTitle { @MajorTitle }
+ 		@MinorNum { @MinorNum }
+ 		@MinorTitle { @MinorTitle }
+ 		@Owner { @Owner }
+ 		@Prefix { @Prefix }
+ 	}
+     }
+ 
+     def @OddTopHeader
+ 	left @PageHeadersAndStart
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    None.Start      @Yield @Null
+ 	    None.NonStart   @Yield @Null
+ 	    None.None       @Yield @Null
+ 	    Simple.Start    @Yield @StartOddTop @PageNum
+ 	    Simple.NonStart @Yield @OddTop @PageNum
+ 	    Simple.None     @Yield @Null
+ 	}
+     }
+ 
+     def @OddFootHeader
+ 	left @PageHeadersAndStart
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    None.Start      @Yield @Null
+ 	    None.NonStart   @Yield @Null
+ 	    None.None       @Yield @Null
+ 	    Simple.Start    @Yield @StartOddFoot @PageNum
+ 	    Simple.NonStart @Yield @OddFoot @PageNum
+ 	    Simple.None     @Yield @Null
+ 	}
+     }
+ 
+     def @EvenTopHeader
+ 	left @PageHeadersAndStart
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    None.Start      @Yield @Null
+ 	    None.NonStart   @Yield @Null
+ 	    None.None       @Yield @Null
+ 	    Simple.Start    @Yield @StartEvenTop @PageNum
+ 	    Simple.NonStart @Yield @EvenTop @PageNum
+ 	    Simple.None     @Yield @Null
+ 	}
+     }
+ 
+     def @EvenFootHeader
+ 	left @PageHeadersAndStart
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    None.Start      @Yield @Null
+ 	    None.NonStart   @Yield @Null
+ 	    None.None       @Yield @Null
+ 	    Simple.Start    @Yield @StartEvenFoot @PageNum
+ 	    Simple.NonStart @Yield @EvenFoot @PageNum
+ 	    Simple.None     @Yield @Null
+ 	}
+     }
+ 
+     def @IntroOddTopHeader
+ 	left @PageHeadersAndStart
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    None.Start      @Yield @Null
+ 	    None.NonStart   @Yield @Null
+ 	    None.None       @Yield @Null
+ 	    Simple.Start    @Yield @IntroStartOddTop @PageNum
+ 	    Simple.NonStart @Yield @IntroOddTop @PageNum
+ 	    Simple.None     @Yield @Null
+ 	}
+     }
+ 
+     def @IntroOddFootHeader
+ 	left @PageHeadersAndStart
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    None.Start      @Yield @Null
+ 	    None.NonStart   @Yield @Null
+ 	    None.None       @Yield @Null
+ 	    Simple.Start    @Yield @IntroStartOddFoot @PageNum
+ 	    Simple.NonStart @Yield @IntroOddFoot @PageNum
+ 	    Simple.None     @Yield @Null
+ 	}
+     }
+ 
+     def @IntroEvenTopHeader
+ 	left @PageHeadersAndStart
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    None.Start      @Yield @Null
+ 	    None.NonStart   @Yield @Null
+ 	    None.None       @Yield @Null
+ 	    Simple.Start    @Yield @IntroStartEvenTop @PageNum
+ 	    Simple.NonStart @Yield @IntroEvenTop @PageNum
+ 	    Simple.None     @Yield @Null
+ 	}
+     }
+ 
+     def @IntroEvenFootHeader
+ 	left @PageHeadersAndStart
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    None.Start      @Yield @Null
+ 	    None.NonStart   @Yield @Null
+ 	    None.None       @Yield @Null
+ 	    Simple.Start    @Yield @IntroStartEvenFoot @PageNum
+ 	    Simple.NonStart @Yield @IntroEvenFoot @PageNum
+ 	    Simple.None     @Yield @Null
+ 	}
+     }
+ 
+ 
+     def @RunningOddTopHeader
+ 	left @PageHeadersAndStart
+ 	named @MajorNum   {}
+ 	named @MajorTitle {}
+ 	named @MinorNum   {}
+ 	named @MinorTitle {}
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    NoTitles.??       @Yield ??
+ 	    NoTitles.Start    @Yield @RunningStartOddTop @PageNum
+ 	    NoTitles.NonStart @Yield @RunningOddTop @PageNum
+ 	    NoTitles.None     @Yield @Null
+ 	    Titles.??         @Yield ??
+ 	    Titles.Start      @Yield @RunningStartOddTop
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.NonStart   @Yield @RunningOddTop
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.None	      @Yield @Null
+ 	}
+     }
+ 
+     def @RunningOddFootHeader
+ 	left @PageHeadersAndStart
+ 	named @MajorNum   {}
+ 	named @MajorTitle {}
+ 	named @MinorNum   {}
+ 	named @MinorTitle {}
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    NoTitles.??       @Yield @Null
+ 	    NoTitles.Start    @Yield @RunningStartOddFoot @PageNum
+ 	    NoTitles.NonStart @Yield @RunningOddFoot @PageNum
+ 	    NoTitles.None     @Yield @Null
+ 	    Titles.??         @Yield @Null
+ 	    Titles.Start      @Yield @RunningStartOddFoot
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.NonStart   @Yield @RunningOddFoot
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.None	      @Yield @Null
+ 	}
+     }
+ 
+     def @RunningEvenTopHeader
+ 	left @PageHeadersAndStart
+ 	named @MajorNum   {}
+ 	named @MajorTitle {}
+ 	named @MinorNum   {}
+ 	named @MinorTitle {}
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    NoTitles.??       @Yield ??
+ 	    NoTitles.Start    @Yield @RunningStartEvenTop @PageNum
+ 	    NoTitles.NonStart @Yield @RunningEvenTop @PageNum
+ 	    NoTitles.None     @Yield @Null
+ 	    Titles.??         @Yield ??
+ 	    Titles.Start      @Yield @RunningStartEvenTop
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.NonStart   @Yield @RunningEvenTop
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.None	      @Yield @Null
+ 	}
+     }
+ 
+     def @RunningEvenFootHeader
+ 	left @PageHeadersAndStart
+ 	named @MajorNum   {}
+ 	named @MajorTitle {}
+ 	named @MinorNum   {}
+ 	named @MinorTitle {}
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    NoTitles.??       @Yield @Null
+ 	    NoTitles.Start    @Yield @RunningStartEvenFoot @PageNum
+ 	    NoTitles.NonStart @Yield @RunningEvenFoot @PageNum
+ 	    NoTitles.None     @Yield @Null
+ 	    Titles.??         @Yield @Null
+ 	    Titles.Start      @Yield @RunningStartEvenFoot
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.NonStart   @Yield @RunningEvenFoot
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.None	      @Yield @Null
+ 	}
+     }
+ 
+     def @RunningIntroOddTopHeader
+ 	left @PageHeadersAndStart
+ 	named @MajorNum   {}
+ 	named @MajorTitle {}
+ 	named @MinorNum   {}
+ 	named @MinorTitle {}
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    NoTitles.??       @Yield ??
+ 	    NoTitles.Start    @Yield @RunningIntroStartOddTop @PageNum
+ 	    NoTitles.NonStart @Yield @RunningIntroOddTop @PageNum
+ 	    NoTitles.None     @Yield @Null
+ 	    Titles.??         @Yield ??
+ 	    Titles.Start      @Yield @RunningIntroStartOddTop
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.NonStart   @Yield @RunningIntroOddTop
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.None	      @Yield @Null
+ 	}
+     }
+ 
+     def @RunningIntroOddFootHeader
+ 	left @PageHeadersAndStart
+ 	named @MajorNum   {}
+ 	named @MajorTitle {}
+ 	named @MinorNum   {}
+ 	named @MinorTitle {}
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    NoTitles.??       @Yield @Null
+ 	    NoTitles.Start    @Yield @RunningIntroStartOddFoot @PageNum
+ 	    NoTitles.NonStart @Yield @RunningIntroOddFoot @PageNum
+ 	    NoTitles.None     @Yield @Null
+ 	    Titles.??         @Yield @Null
+ 	    Titles.Start      @Yield @RunningIntroStartOddFoot
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.NonStart   @Yield @RunningIntroOddFoot
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.None	      @Yield @Null
+ 	}
+     }
+ 
+     def @RunningIntroEvenTopHeader
+ 	left @PageHeadersAndStart
+ 	named @MajorNum   {}
+ 	named @MajorTitle {}
+ 	named @MinorNum   {}
+ 	named @MinorTitle {}
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    NoTitles.??       @Yield ??
+ 	    NoTitles.Start    @Yield @RunningIntroStartEvenTop @PageNum
+ 	    NoTitles.NonStart @Yield @RunningIntroEvenTop @PageNum
+ 	    NoTitles.None     @Yield @Null
+ 	    Titles.??         @Yield ??
+ 	    Titles.Start      @Yield @RunningIntroStartEvenTop
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.NonStart   @Yield @RunningIntroEvenTop
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.None	      @Yield @Null
+ 	}
+     }
+ 
+     def @RunningIntroEvenFootHeader
+ 	left @PageHeadersAndStart
+ 	named @MajorNum   {}
+ 	named @MajorTitle {}
+ 	named @MinorNum   {}
+ 	named @MinorTitle {}
+ 	right @PageNum
+     {
+ 	@PageHeadersAndStart @Case {
+ 	    NoTitles.??       @Yield @Null
+ 	    NoTitles.Start    @Yield @RunningIntroStartEvenFoot @PageNum
+ 	    NoTitles.NonStart @Yield @RunningIntroEvenFoot @PageNum
+ 	    NoTitles.None     @Yield @Null
+ 	    Titles.??         @Yield @Null
+ 	    Titles.Start      @Yield @RunningIntroStartEvenFoot
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.NonStart   @Yield @RunningIntroEvenFoot
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    @PageNum
+ 	    Titles.None	      @Yield @Null
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Helper definitions for laying out pages.                               #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @PageTopPlace		{ @Galley }
+     def @PageFootAndTopPlace	{ @Galley }
+     def @PageFootNotePlace	{ @Galley }
+     def @FullPlace		{ @Galley }
+     def @OddFullPlace		{ @Galley }
+     def @EvenFullPlace		{ @Galley }
+     def @FullPagePlace		{ @Galley }
+     def @EvenFullPagePlace	{ @Galley }
+     def @EvenPagePlace		{ @Galley }
+     def @OddFullPagePlace	{ @Galley }
+     def @ColTopPlace		{ @Galley }
+     def @ColFootAndTopPlace	{ @Galley }
+     def @ColPlace		{ @Galley }
+     def @ColFootNotePlace	{ @Galley }
+     def @IntroFullPlace		{ @Galley }
+     def @IntroOddFullPlace	{ @Galley }
+     def @IntroEvenFullPlace	{ @Galley }
+     def @IntroColPlace		{ @Galley }
+     def @IndexPlace		{ @Galley }
+     def @IndexAPlace		{ @Galley }
+     def @IndexBPlace		{ @Galley }
+     def @AfterLinePlace		{ @ForceGalley }
+ 
+     def @TryAfterLinePlace right x
+     {
+ 	x @Case {
+ 	    noforce @Yield @Galley
+ 	    force   @Yield @ForceGalley
+ 	}
+     }
+ 
+     def @EvenFullPageSection
+     {
+ 		  @OneRow @EvenFullPagePlace
+ 	//	  @FullPagePlace
+ 	//@MidGap @EvenFullPageSection
+     }
+ 
+     def @OddFullPageSection
+     {
+ 		  @OneRow @OddFullPagePlace
+ 	//	  @FullPagePlace
+ 	//@MidGap @OddFullPageSection
+     }
+ 
+     def @EvenPageTopSect
+     {
+ 		  @OneRow @EvenPagePlace
+ 	//	  @PageTopPlace
+ 	//@MidGap @PageFootAndTopPlace
+ 	//@MidGap @EvenPageTopSect
+     }
+ 
+     def @OddPageTopSect
+     {
+ 		  @PageTopPlace
+ 	//@MidGap @PageFootAndTopPlace
+ 	//@MidGap @OddPageTopSect
+     }
+ 
+     def @PageOddTopSection right @Orient
+     {
+ 	@OddPageTopSect ||{@OrientedWidth @Orient} @FullPlace
+ 			||{@OrientedWidth @Orient} @OddFullPlace
+     }
+ 
+     def @PageEvenTopSection right @Orient
+     {
+ 	@EvenPageTopSect ||{@OrientedWidth @Orient} @FullPlace
+ 			 ||{@OrientedWidth @Orient} @EvenFullPlace
+     }
+ 
+     def @PageIntroOddTopSection right @Orient
+     {
+ 	@OddPageTopSect ||{@OrientedWidth @Orient} @IntroFullPlace
+ 			||{@OrientedWidth @Orient} @IntroOddFullPlace
+     }
+ 
+     def @PageIntroEvenTopSection right @Orient
+     {
+ 	@EvenPageTopSect
+ 	||{@OrientedWidth @Orient} @IntroFullPlace
+ 	||{@OrientedWidth @Orient} @IntroEvenFullPlace
+     }
+ 
+     def @PageFootNoteList
+     {
+ 		    @PageFootNotePlace
+ 	//@FootGap  @PageFootNoteList
+     }
+ 
+     def @PageFootNoteSection
+     {
+ 	            @FootLen @Wide @HLine
+ 	//@FootGap  @PageFootNoteList
+     }
+ 
+     def @PageFootAndTopSect
+     {
+ 		  @PageFootAndTopPlace
+ 	//@MidGap @PageFootAndTopSect
+     }
+ 
+     def @PageFootSection
+     {
+ 	//@MidGap       @PageFootAndTopSect
+ 	//@FootAboveGap @PageFootNoteSection
+     }
+ 
+     def @ColTopSection
+     {
+ 		  @ColTopPlace
+ 	//@MidGap @ColFootAndTopPlace
+ 	//@MidGap @TryAfterLinePlace noforce
+ 	//@MidGap @ColTopSection
+     }
+ 
+     def @RestOfColSection
+     {
+ 	          @AfterLinePlace
+ 	//@MidGap @TryAfterLinePlace force
+ 	//@MidGap @ColPlace @NotRevealed
+ 	//@MidGap @RestOfColSection
+     }
+ 
+     def @IntroRestOfColSection
+     {
+ 	          @AfterLinePlace
+ 	//@MidGap @TryAfterLinePlace force
+ 	//@MidGap @IntroColPlace @NotRevealed
+ 	//@MidGap @IntroRestOfColSection
+     }
+ 
+     def @ColFootAndTopList { @ColFootAndTopPlace //@TopGap @ColFootAndTopList }
+ 
+     def @ColFootNoteList
+     {
+ 		    @ColFootNotePlace
+ 	//@FootGap  @ColFootNoteList
+     }
+ 
+     def @ColFootNoteSection
+     {
+ 	           @FootLen @Wide @HLine
+ 	//@FootGap @ColFootNoteList
+     }
+ 
+     def @ColFootSection
+     {
+ 	//@TopGap       @ColFootAndTopList
+ 	//@FootAboveGap @ColFootNoteSection
+     }
+ 
+     def @ColsOf
+ 	left num
+ 	named gap { @ColumnGap }
+ 	right x
+     {
+ 	def @Two { x ||gap x }
+ 	def @Four { @Two ||gap @Two }
+ 	def @Eight { @Four ||gap @Four }
+ 
+ 	num @Case {
+ 	    1  @Yield { x				}
+ 	    2  @Yield { @Two				}
+ 	    3  @Yield { @Two  ||gap x			}
+ 	    4  @Yield { @Four				}
+ 	    5  @Yield { @Four ||gap x			}
+ 	    6  @Yield { @Four ||gap @Two		}
+ 	    7  @Yield { @Four ||gap @Two  ||gap x	}
+ 	    8  @Yield { @Four ||gap @Four		}
+ 	    9  @Yield { @Four ||gap @Four ||gap x	}
+ 	   10  @Yield { @Four ||gap @Four ||gap @Two	}
+ 	}
+     }
+ 
+     def @EqualWidth right x { 50c @Wide x }	# believe it or not
+ 
+     def @ColList right num
+     {
+ 	@HExpand num @ColsOf @EqualWidth @VExpand
+ 	{
+ 	    @ColTopSection //@TopGap
+ 	    @ColPlace //@MidGap @RestOfColSection // //1rt
+ 	    @OneRow { @ColFootSection }
+ 
+ 	}
+     }
+     
+     def @IntroColList right num
+     {
+ 	@HExpand num @ColsOf @EqualWidth @VExpand
+ 	{
+ 	    @ColTopSection //@TopGap
+ 	    @IntroColPlace //@MidGap @IntroRestOfColSection // //1rt
+ 	    @OneRow { @ColFootSection }
+ 	}
+     }
+     
+     def @ZeroColList right num
+     {
+ 	@HExpand num @ColsOf @EqualWidth 0c @High @ColPlace
+     }
+     
+     def @ZeroIntroColList right num
+     {
+ 	@HExpand num @ColsOf @EqualWidth 0c @High @IntroColPlace
+     }
+     
+     def @IndexColList right num
+     {
+ 	@HExpand num @ColsOf gap { @IndexColumnGap } @EqualWidth @VExpand @IndexPlace
+     }
+     
+     def @IndexAColList right num
+     {
+ 	@HExpand num @ColsOf gap { @IndexAColumnGap } @EqualWidth @VExpand @IndexAPlace
+     }
+     
+     def @IndexBColList right num
+     {
+ 	@HExpand num @ColsOf gap { @IndexBColumnGap } @EqualWidth @VExpand @IndexBPlace
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Footnotes.                                                             #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag count
+     def @FootNoteCounterMarker
+ 	named @Tag {}
+ 	named count {}
+     {
+ 	@Null
+     }
+ 
+     def @FootNoteNum right tag
+     {
+ 	@FootNoteCounterMarker&&tag @Open { @Next count }
+     }
+ 
+     def @FootNoteCounterIncrement
+ 	right tag
+     {
+ 	   @FootNoteCounterMarker&&preceding @Tagged tag
+ 	// @FootNoteCounterMarker count { @FootNoteNum tag }
+ 	// @NumberMarker @Tag { tag }
+ 		@Value { @FootNoteNumbers @Num @FootNoteNum tag }
+     }
+ 
+     def @BeginFootNoteCounter
+     {
+ 	@FootNoteCounterMarker count { 0 }
+     }
+ 
+     def @FootNote
+ 	named @Tag {}
+ 	named @Location { @FootNoteLocation }
+ 	named @Another { No }
+ 	named @Label { Numbered }
+ 	right x
+     {
+ 
+ 	def @FootLabelFmt
+ 	    right x
+ 	{
+ 	    @FootNoteFont @Font @FootNoteBreak @Break
+ 	    +0.3v @VShift { Base 0.8f } @Font x
+ 	}
+ 
+ 	def @FootExtra
+ 	{
+             @BackEnd @Case {
+ 	        PlainText @Yield ","
+ 	        else @Yield @FootLabelFmt ","
+             }
+ 	}
+ 
+ 	def @FootLabel
+ 	{
+ 	    @Label @Case {
+ 		"Numbered" @Yield { @BackEnd @Case {
+ 		    PlainText @Yield { ({@NumberOf @Tag}) }
+ 		    else @Yield @FootLabelFmt @NumberOf @Tag
+ 		} }
+ 		else @Yield { @BackEnd @Case {
+ 		    PlainText @Yield @Label
+ 		    else @Yield @FootLabelFmt @Label
+ 		} }
+             }
+ 	}
+ 
+ 	def @LongFootLabel
+ 	{
+ 	    @Another @Case {
+ 		No  @Yield {                 @FootLabel }
+ 		Yes @Yield { @FootExtra &0iu @FootLabel }
+ 	    }
+ 	}
+ 
+ 	def @FootVal
+ 	{
+ 	    @FootNoteFont @Font @FootNoteBreak @Break @Label @Case {
+ 		"Numbered" @Yield {
+ 		    { @FootNoteCounterIncrement @Tag & @FootLabel }
+ 		      @FootNoteFormat x
+ 		}
+ 		else @Yield { @FootLabel @FootNoteFormat x }
+ 	    }
+ 	}
+ 
+ 	def @PageFootNote into { @PageFootNotePlace&&following } { @FootVal }
+ 	def @ColFootNote  into { @ColFootNotePlace&&following  } { @FootVal }
+ 
+ 	@Location @Case {
+ 	    ColFoot  @Yield { @Null &0iu @LongFootLabel & @ColFootNote  }
+ 	    PageFoot @Yield { @Null &0iu @LongFootLabel & @PageFootNote }
+ 	}
+     }
+ 
+     macro @AnotherFootNote { @FootNote @Another { Yes } }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Definitions for page lists.  There are four symbols here, in the       #
+     #  following pattern:                                                     #
+     #                                                                         #
+     #    @(Simple | Running)(- | Intro)PageList                               #
+     #                                                                         #
+     #  Running means that the page list is to support running headers.        #
+     #  Intro means that the page list is an introductory page list.           #
+     #  These are then packaged into @PageList and @IntroPageList.             #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @SStart right @PageNum
+     {
+ 	@PageNum @Case {
+ 	    { 1 0 } @Yield Start
+ 	    else    @Yield NonStart
+ 	}
+     }
+ 
+     def @ChooseColList right colnum
+     {
+ 	@OneOf
+ 	{
+ 	    @ColList colnum
+ 	    @IndexAColList @IndexAColumnNumber
+ 	    @IndexBColList @IndexBColumnNumber
+ 	    @IndexColList  @IndexColumnNumber
+ 	}
+     }
+ 
+     def @ChooseIntroColList right colnum
+     {
+ 	@OneOf
+ 	{
+ 	    @IntroColList colnum
+ 	    @IndexAColList @IndexAColumnNumber
+ 	    @IndexBColList @IndexBColumnNumber
+ 	    @IndexColList  @IndexColumnNumber
+ 	}
+     }
+ 
+     def @OddBodyMargins right x
+     {
+ 	@OddLeftBodyMargin @Wide {} || 1 @MargSet x || @OddRightBodyMargin @Wide {}
+     }
+ 
+     def @EvenBodyMargins right x
+     {
+ 	@EvenLeftBodyMargin @Wide {} || 0 @MargSet x || @EvenRightBodyMargin @Wide {}
+     }
+ 
+     def @SimplePageList
+ 	named @ColumnNumber {}
+ 	named @PageHeaders {}
+ 	named extra { No }
+ 	named @Orient {}
+ 	named @AtTop { @Null }
+ 	right @PageNum
+     {
+ 
+ 	def @OrdinaryOddPage
+ 	{
+ 		{@PageHeaders.{@SStart @PageNum}} @OddTopHeader
+ 		    { @PageNumbers @Num @PageNum }
+ 		//@MidGap
+ 		@OddBodyMargins {
+ 			@AtTop
+ 			//@MidGap @PageOddTopSection @Orient
+ 			//@MidGap @ChooseColList @ColumnNumber
+ 		}
+ 		//1rt @OneRow
+ 		{  //         @OddBodyMargins @PageFootSection
+ 		   //@MidGap {@PageHeaders.{@SStart @PageNum}} @OddFootHeader
+ 				 { @PageNumbers @Num @PageNum }
+ 		}
+ 	}
+ 
+ 	def @FullPageOddPage
+ 	{
+ 		{@PageHeaders.{@SStart @PageNum}} @OddTopHeader
+ 		    { @PageNumbers @Num @PageNum }
+ 		//@MidGap @OddBodyMargins @OddFullPageSection
+ 		//1rt @OneRow
+ 		{ //@MidGap {@PageHeaders.{@SStart @PageNum}} @OddFootHeader
+ 				 { @PageNumbers @Num @PageNum }
+ 		}
+ 	}
+ 
+         def @SimpleEvenPageList
+ 	    named @ColumnNumber {}
+ 	    named @PageHeaders {}
+ 	    named extra { No }
+ 	    right @PageNum
+         {
+ 
+ 	    def @OrdinaryEvenPage
+ 	    {
+ 		@PageHeaders.NonStart @EvenTopHeader
+ 		    { @PageNumbers @Num @PageNum }
+ 		//@MidGap
+ 		@EvenBodyMargins {
+ 			@PageEvenTopSection @Orient
+ 			//@MidGap @ChooseColList @ColumnNumber
+ 		}
+ 		//1rt @OneRow
+ 		{  //        @EvenBodyMargins @PageFootSection
+ 		   //@MidGap @PageHeaders.NonStart @EvenFootHeader
+ 			     { @PageNumbers @Num @PageNum }
+ 		}
+ 	    }
+ 
+ 	    def @FullPageEvenPage
+ 	    {
+ 		@PageHeaders.NonStart @EvenTopHeader
+ 		    { @PageNumbers @Num @PageNum }
+ 		//@MidGap @EvenBodyMargins @EvenFullPageSection
+ 		//1rt @OneRow
+ 		{ //@MidGap @PageHeaders.NonStart @EvenFootHeader
+ 			     { @PageNumbers @Num @PageNum }
+ 		}
+ 	    }
+ 
+ 	        @PageMarker
+ 		    rawnum { @PageNum }
+ 		    num { @PageNumbers @Num @PageNum }
+ 	    //  @FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	    //  {} @EvenPage @Orient { @Orient }
+ 	        {
+ 		    @OrdinaryEvenPage ||{@OrientedWidth @Orient} @FullPageEvenPage
+ 	        }
+ 	    //  @SimplePageList
+ 		    @ColumnNumber { @ColumnNumber }
+ 		    @PageHeaders { @PageHeaders }
+ 		    @Orient { @Orient }
+ 		@Next @PageNum
+         }
+ 
+ 	    @PageMarker
+ 		rawnum { @PageNum }
+ 		num { @PageNumbers @Num @PageNum }
+ 	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	//  { extra @Then @OddBodyMargins @ZeroColList @ColumnNumber } @OddPage @Orient { @Orient }
+ 	    {
+ 		@OrdinaryOddPage ||{@OrientedWidth @Orient} @FullPageOddPage
+ 	    }
+ 	//  @SimpleEvenPageList
+ 		@ColumnNumber { @ColumnNumber }
+ 		@PageHeaders { @PageHeaders }
+ 	    @Next @PageNum
+     }
+ 
+     def @SimpleIntroPageList
+ 	named @ColumnNumber {}
+ 	named @PageHeaders {}
+ 	named @Orient {}
+ 	named extra { No }
+ 	named @AtTop { @Null }
+ 	right @PageNum
+     {
+ 	    @PageMarker
+ 		num { @IntroPageNumbers @Num @PageNum }
+ 		rawnum { @PageNum }
+ 	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	//  { extra @Then @OddBodyMargins @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient }
+ 	    {
+ 		{@PageHeaders.{@SStart @PageNum}} @IntroOddTopHeader
+ 		    { @IntroPageNumbers @Num @PageNum }
+ 		//@MidGap
+ 		@OddBodyMargins {
+ 			@AtTop
+ 			//@MidGap @PageIntroOddTopSection @Orient
+ 			//@MidGap @ChooseIntroColList @ColumnNumber
+ 		}
+ 		//1rt @OneRow
+ 		{  //        @OddBodyMargins @PageFootSection
+ 		   //@MidGap
+ 		       {@PageHeaders.{@SStart @PageNum}} @IntroOddFootHeader
+ 			   { @IntroPageNumbers @Num @PageNum }
+ 		}
+ 	    }
+ 	//  @PageMarker
+ 		num { @IntroPageNumbers @Num @Next @PageNum }
+ 		rawnum { @Next @PageNum }
+ 	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	//  {} @EvenPage @Orient { @Orient }
+ 	    @Runner&&following @Open
+ 	    {
+ 		@PageHeaders.NonStart @IntroEvenTopHeader { @IntroPageNumbers @Num @Next @PageNum }
+ 		//@MidGap
+ 		@EvenBodyMargins {
+ 			@PageIntroEvenTopSection @Orient
+ 			//@MidGap @ChooseIntroColList @ColumnNumber
+ 		}
+ 		//1rt @OneRow
+ 		{  //        @EvenBodyMargins @PageFootSection
+ 		   //@MidGap @PageHeaders.NonStart @IntroEvenFootHeader
+ 				{ @IntroPageNumbers @Num @Next @PageNum }
+ 		}
+ 	    }
+ 	//  @SimpleIntroPageList
+ 		@ColumnNumber { @ColumnNumber }
+ 		@PageHeaders { @PageHeaders }
+ 		@Orient { @Orient }
+ 	    @Next @Next @PageNum
+     }
+ 
+     def @SimpleOddOrEvenIntroPageList
+ 	named @ColumnNumber {}
+ 	named @PageHeaders {}
+ 	named @Orient {}
+ 	named extra { No }
+ 	named @AtTop { @Null }
+ 	right @PageNum
+     {
+ 
+         def @SimpleEvenIntroPageList
+ 	    named @ColumnNumber {}
+ 	    named @PageHeaders {}
+ 	    named @Orient {}
+ 	    named extra { No }
+ 	    named @AtTop { @Null }
+ 	    right @PageNum
+        {
+ 
+ 	    @PageMarker
+ 		num { @IntroPageNumbers @Num @PageNum }
+ 		rawnum { @PageNum }
+ 	 // @FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	 // {} @EvenPage @Orient { @Orient }
+ 	    @Runner&&following @Open
+ 	    {
+ 		@PageHeaders.NonStart @IntroEvenTopHeader { @IntroPageNumbers @Num @PageNum }
+ 		//@MidGap
+ 		@EvenBodyMargins {
+ 			@PageIntroEvenTopSection @Orient
+ 			//@MidGap @ChooseIntroColList @ColumnNumber
+ 		}
+ 		//1rt @OneRow
+ 		{  //        @EvenBodyMargins @PageFootSection
+ 		   //@MidGap @PageHeaders.NonStart @IntroEvenFootHeader
+ 				{ @IntroPageNumbers @Num @PageNum }
+ 		}
+ 	    }
+ 	 // @SimpleOddOrEvenIntroPageList
+ 		@ColumnNumber { @ColumnNumber }
+ 		@PageHeaders { @PageHeaders }
+ 		@Orient { @Orient }
+ 	    @Next @PageNum
+        }
+ 	    @PageMarker
+ 		num { @IntroPageNumbers @Num @PageNum }
+ 		rawnum { @PageNum }
+ 	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	//  { extra @Then @OddBodyMargins @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient }
+ 	    {
+ 		{@PageHeaders.{@SStart @PageNum}} @IntroOddTopHeader
+ 		    { @IntroPageNumbers @Num @PageNum }
+ 		//@MidGap
+ 		@OddBodyMargins {
+ 			@AtTop
+ 			//@MidGap @PageIntroOddTopSection @Orient
+ 			//@MidGap @ChooseIntroColList @ColumnNumber
+ 		}
+ 		//1rt @OneRow
+ 		{  //        @OddBodyMargins @PageFootSection
+ 		   //@MidGap
+ 		       {@PageHeaders.{@SStart @PageNum}} @IntroOddFootHeader
+ 			   { @IntroPageNumbers @Num @PageNum }
+ 		}
+ 	    }
+ 	//  @SimpleEvenIntroPageList
+ 		@ColumnNumber { @ColumnNumber }
+ 		@PageHeaders { @PageHeaders }
+ 		@Orient { @Orient }
+ 		@Next @PageNum
+     }
+ 
+     def @RunningPageList
+ 	named @ColumnNumber {}
+ 	named @PageHeaders {}
+ 	named extra { No }
+ 	named @Orient {}
+ 	named @AtTop { @Null }
+ 	right @PageNum
+     {
+ 
+ 	def @OrdinaryOddPage
+ 	{
+ 	    @Runner&&following @Open
+ 	    {
+ 		@PageMarker
+ 		    num { @MakePageNum
+ 				numbers { @PageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner } }
+ 		    rawnum { @PageNum }
+ 		// @PageHeaders. at Start @RunningOddTopHeader
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    {
+ 			@MakePageNum
+ 			    numbers { @PageNumbers }
+ 			    rawnum  { @PageNum }
+ 			    prefix  { @Prefix }
+ 			    owner   { @Owner }
+ 		    }
+ 		//@MidGap
+ 		@OddBodyMargins {
+ 			@AtTop
+ 			//@MidGap @PageOddTopSection @Orient
+ 			//@MidGap @ChooseColList @ColumnNumber
+ 		}
+ 		//1rt @OneRow
+ 		{  //        @OddBodyMargins @PageFootSection
+ 		   //@MidGap @PageHeaders. at Start @RunningOddFootHeader
+ 			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			{
+ 			    @MakePageNum
+ 				numbers { @PageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner }
+ 			}
+ 		}
+ 	    }
+ 	}
+ 
+ 	def @FullPageOddPage
+ 	{
+ 	    @Runner&&following @Open
+ 	    {
+ 		@PageMarker
+ 		    num { @MakePageNum
+ 				numbers { @PageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner } }
+ 		    rawnum { @PageNum }
+ 		// @PageHeaders. at Start @RunningOddTopHeader
+ 		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 		    {
+ 			@MakePageNum
+ 			    numbers { @PageNumbers }
+ 			    rawnum  { @PageNum }
+ 			    prefix  { @Prefix }
+ 			    owner   { @Owner }
+ 		    }
+ 		//@MidGap
+ 		@OddBodyMargins {
+ 			@AtTop
+ 			//@MidGap @OddFullPageSection
+ 		}
+ 		//1rt @OneRow
+ 		{
+ 		   //@MidGap @PageHeaders. at Start @RunningOddFootHeader
+ 			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			{
+ 			    @MakePageNum
+ 				numbers { @PageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner }
+ 			}
+ 		}
+ 	    }
+ 	}
+ 
+         def @RunningEvenPageList
+ 	    named @ColumnNumber {}
+ 	    named @PageHeaders {}
+ 	    right @PageNum
+         {
+ 
+ 	    def @OrdinaryEvenPage
+ 	    {
+ 	        @Runner&&following @Open
+ 	        {
+ 		    @PageMarker
+ 			num { @MakePageNum
+ 				numbers { @PageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner } }
+ 			rawnum { @PageNum }
+ 		    // @PageHeaders. at Start @RunningEvenTopHeader
+ 			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			{
+ 			    @MakePageNum
+ 				numbers { @PageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner }
+ 			}
+ 		    //@MidGap
+ 		    @EvenBodyMargins {
+ 			@PageEvenTopSection @Orient
+ 		    	//@MidGap @ChooseColList @ColumnNumber
+ 		    }
+ 		    //1rt @OneRow
+ 		    {  //        @EvenBodyMargins @PageFootSection
+ 		       //@MidGap @PageHeaders. at Start @RunningEvenFootHeader
+ 			   @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			   @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			   {
+ 				@MakePageNum
+ 				    numbers { @PageNumbers }
+ 				    rawnum  { @PageNum }
+ 				    prefix  { @Prefix }
+ 				    owner   { @Owner }
+ 			   }
+ 		    }
+ 	        }
+ 	    }
+ 
+ 	    def @FullPageEvenPage
+ 	    {
+ 	        @Runner&&following @Open
+ 	        {
+ 		    @PageMarker
+ 			num { @MakePageNum
+ 				numbers { @PageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner } }
+ 			rawnum { @PageNum }
+ 		    // @PageHeaders. at Start @RunningEvenTopHeader
+ 			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			{
+ 			    @MakePageNum
+ 				numbers { @PageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner }
+ 			}
+ 		    //@MidGap
+ 		    @EvenBodyMargins @EvenFullPageSection
+ 		    //1rt @OneRow
+ 		    {
+ 		       //@MidGap @PageHeaders. at Start @RunningEvenFootHeader
+ 			   @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			   @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			   {
+ 				@MakePageNum
+ 				    numbers { @PageNumbers }
+ 				    rawnum  { @PageNum }
+ 				    prefix  { @Prefix }
+ 				    owner   { @Owner }
+ 			   }
+ 		    }
+ 	        }
+ 	    }
+ 
+ 		@FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	    //  {} @EvenPage @Orient { @Orient }
+ 	        {
+ 		    @OrdinaryEvenPage ||{@OrientedWidth @Orient} @FullPageEvenPage
+ 	        }
+ 	    //  @RunningPageList
+ 		    @ColumnNumber { @ColumnNumber }
+ 		    @PageHeaders { @PageHeaders }
+ 		    @Orient { @Orient }
+ 		@Next @PageNum
+         }
+ 
+ 	    @FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	//  { extra @Then @OddBodyMargins @ZeroColList @ColumnNumber } @OddPage @Orient { @Orient }
+ 	    {
+ 		@OrdinaryOddPage ||{@OrientedWidth @Orient} @FullPageOddPage
+ 	    }
+ 	//  @RunningEvenPageList
+ 		@ColumnNumber { @ColumnNumber }
+ 		@PageHeaders { @PageHeaders }
+ 	    @Next @PageNum
+     }
+ 
+     def @RunningIntroPageList
+ 	named @ColumnNumber {}
+ 	named @PageHeaders {}
+ 	named @AtTop { @Null }
+ 	named @Orient {}
+ 	named extra { No }
+ 	right @PageNum
+     {
+ 	    @FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	//  { extra @Then @OddBodyMargins @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient }
+ 	    @Runner&&following @Open
+ 	    {
+ 		@PageMarker
+ 		    num { @MakePageNum
+ 			    numbers { @IntroPageNumbers }
+ 			    rawnum  { @PageNum }
+ 			    prefix  { @Prefix }
+ 			    owner   { @Owner } }
+ 		    rawnum { @PageNum }
+ 		// @PageHeaders. at Start @RunningIntroOddTopHeader
+ 			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			{
+ 			    @MakePageNum
+ 				numbers { @IntroPageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner }
+ 			}
+ 		//@MidGap
+ 		@OddBodyMargins {
+ 			@AtTop
+ 			//@MidGap @PageIntroOddTopSection @Orient
+ 			//@MidGap @IntroColList @ColumnNumber
+ 		}
+ 		//1rt @OneRow
+ 		{  //        @OddBodyMargins @PageFootSection
+ 		   //@MidGap @PageHeaders. at Start @RunningIntroOddFootHeader
+ 			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			{
+ 			    @MakePageNum
+ 				numbers { @IntroPageNumbers }
+ 				rawnum  { @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner }
+ 			}
+ 		}
+ 	    }
+ 	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
+ 	//  {} @EvenPage @Orient { @Orient }
+ 	    @Runner&&following @Open
+ 	    {
+ 		@PageMarker
+ 		    num { @MakePageNum
+ 			    numbers { @IntroPageNumbers }
+ 			    rawnum  { @Next @PageNum }
+ 			    prefix  { @Prefix }
+ 			    owner   { @Owner } }
+ 		    rawnum { @Next @PageNum }
+ 		// @PageHeaders. at Start @RunningIntroEvenTopHeader
+ 			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			{
+ 			    @MakePageNum
+ 				numbers { @IntroPageNumbers }
+ 				rawnum  { @Next @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner }
+ 			}
+ 		//@MidGap
+ 		@EvenBodyMargins {
+ 			@PageIntroEvenTopSection @Orient
+ 			//@MidGap @ChooseIntroColList @ColumnNumber
+ 		}
+ 		//1rt @OneRow
+ 		{  //        @EvenBodyMargins @PageFootSection
+ 		   //@MidGap @PageHeaders. at Start @RunningIntroEvenFootHeader
+ 			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
+ 			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
+ 			{
+ 			    @MakePageNum
+ 				numbers { @IntroPageNumbers }
+ 				rawnum  { @Next @PageNum }
+ 				prefix  { @Prefix }
+ 				owner   { @Owner }
+ 			}
+ 		}
+ 	    }
+ 	//  @RunningIntroPageList
+ 		@PageHeaders { @PageHeaders }
+ 		@ColumnNumber { @ColumnNumber }
+ 		@Orient { @Orient }
+ 	    @Next @Next @PageNum
+     }
+ 
+     def @PageList
+ 	named @ColumnNumber {}
+ 	named @PageHeaders {}
+ 	named extra { No }
+ 	named @Orient {}
+ 	named @AtTop { @Null }
+ 	right @FirstPageNum
+     {
+ 	@PageHeaders @Case {
+ 	    { None Simple } @Yield @SimplePageList
+ 		  @ColumnNumber { @ColumnNumber }
+ 		  @PageHeaders { @PageHeaders }
+ 		  @Orient { @Orient }
+ 		  extra { extra }
+ 		  @AtTop { @AtTop }
+ 		  @FirstPageNum
+ 	    { Running Titles NoTitles } @Yield @RunningPageList
+ 		  @ColumnNumber { @ColumnNumber }
+ 		  @PageHeaders { @PageHeaders }
+ 		  @Orient { @Orient }
+ 		  extra { extra }
+ 		  @AtTop { @AtTop }
+ 		  @FirstPageNum
+ 	}
+ 	//
+ 	@PageMark last.page
+     }
+ 
+     def @IntroPageList
+ 	named @ColumnNumber {}
+ 	named @PageHeaders {}
+ 	named @Orient {}
+ 	named extra { No }
+ 	named @AtTop { @Null }
+ 	right @FirstPageNum
+     {
+ 	@PageHeaders @Case {
+ 	    { None Simple } @Yield @SimpleIntroPageList
+ 		  @ColumnNumber { @ColumnNumber }
+ 		  @PageHeaders { @PageHeaders }
+ 		  @Orient { @Orient }
+ 		  extra { extra }
+ 		  @AtTop { @AtTop }
+ 		  @FirstPageNum
+ 	    { Running Titles NoTitles } @Yield @RunningIntroPageList
+ 		  @ColumnNumber { @ColumnNumber }
+ 		  @PageHeaders { @PageHeaders }
+ 		  @Orient { @Orient }
+ 		  extra { extra }
+ 		  @AtTop { @AtTop }
+ 		  @FirstPageNum
+ 	}
+     }
+ 
+     def @ContinuousPageList
+ 	named @Orient {}
+     {
+ 	{@OrientedWidth @Orient} @Wide
+ 	{   //@TopMargin ||@EvenLeftMargin
+ 	    {
+ 				@BeginFootNoteCounter
+ 		//		@ColPlace
+ 		//@FootAboveGap	@ColFootNoteSection
+ 		//@FootAboveGap	@PageFootNoteSection
+ 	    }
+ 	    ||@EvenRightMargin //@FootMargin
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Table of contents (including lists of figures and tables).             #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @ContentsItem
+ 	named indent { 0f }
+ 	named crosstag {}
+ 	named number {}
+ 	named title {}
+ 	named pagenum {}
+ 	named pregap { @ContentsGap }
+ 	named postgap { 0c }
+ 	named protect { No }
+     {
+ 	def @Leaders { @ContentsLeader &@ContentsLeaderGap @Leaders }
+ 
+ 	def @OptionalCrossLink right x
+ 	{
+ 	    crosstag @Case {
+ 		""   @Yield x
+ 		else @Yield { crosstag @CrossLink x }
+ 	    }
+ 	}
+ 
+ 	def @RightPart
+ 	{
+ 	    @ContentsRightWidth @Wide {
+ 		&1rt { @OptionalCrossLink pagenum //0.5vx }
+ 	    }
+ 	}
+ 
+ 	def @Item
+ 	{
+ 	    |indent @OptionalCrossLink number @ContentsFormat @HExpand {
+ 	        title & @ContentsLeaderGap @Wide &1rt @OneCol {
+ 		    @Leaders & @RightPart &0io
+ 	        }
+ 	    }
+ 	    |@ContentsRightWidth
+ 	}
+ 
+ 	//pregap
+ 	//0.5vx
+ 	protect @Case {
+ 	   No    @Yield @Item
+ 	   Yes   @Yield @Protect @Item
+ 	}
+ 	//postgap
+     }
+ 
+     def @ContentsPlace { @Galley }
+     def @FigureContentsPlace { @Galley }
+     def @TableContentsPlace { @Galley }
+ 
+     def @SendContents into { @ContentsPlace&&foll_or_prec }
+ 	right x
+     {
+ 	x
+     }
+ 
+     def @SendFigureContents into { @FigureContentsPlace&&foll_or_prec }
+ 	right x
+     {
+ 	x
+     }
+ 
+     def @SendTableContents into { @TableContentsPlace&&foll_or_prec }
+ 	right x
+     {
+ 	x
+     }
+ 
+     def @ContentsEntry
+ 	left  wanted
+ 	named indent { 0f }
+ 	named crosstag {}
+ 	named number {}
+ 	named title {}
+ 	named pagenum {}
+ 	named pregap { @ContentsGap }
+ 	named postgap { 0c }
+     {
+ 	@MakeContents.wanted @Case {
+ 	    Yes.Yes   @Yield { @SendContents @ContentsItem
+ 				   indent { indent }
+ 				   crosstag { crosstag }
+ 				   number { number }
+ 				   title { title }
+ 				   pagenum { pagenum }
+ 				   pregap { pregap }
+ 				   postgap { postgap }
+ 			     }
+ 	    else      @Yield @Null
+ 	}
+     }
+ 
+     def @FigureContentsEntry
+ 	left  wanted
+ 	named indent { 0f }
+ 	named crosstag {}
+ 	named number {}
+ 	named title {}
+ 	named pagenum {}
+ 	named pregap { @ContentsGap }
+ 	named postgap { 0c }
+     {
+ 	@MakeFigureContents.wanted @Case {
+ 	    Yes.Yes   @Yield { @SendFigureContents @ContentsItem
+ 				   indent { indent }
+ 				   crosstag { crosstag }
+ 				   number { number }
+ 				   title { title }
+ 				   pagenum { pagenum }
+ 				   pregap { pregap }
+ 				   postgap { postgap }
+ 			     }
+ 	    else      @Yield @Null
+ 	}
+     }
+ 
+     def @TableContentsEntry
+ 	left  wanted
+ 	named indent { 0f }
+ 	named crosstag {}
+ 	named number {}
+ 	named title {}
+ 	named pagenum {}
+ 	named pregap { @ContentsGap }
+ 	named postgap { 0c }
+     {
+ 	@MakeTableContents.wanted @Case {
+ 	    Yes.Yes   @Yield { @SendTableContents @ContentsItem
+ 				   indent { indent }
+ 				   crosstag { crosstag }
+ 				   number { number }
+ 				   title { title }
+ 				   pagenum { pagenum }
+ 				   pregap { pregap }
+ 				   postgap { postgap }
+ 			     }
+ 	    else      @Yield @Null
+ 	}
+     }
+ 
+     def @MajorContentsEntry
+ 	left  wanted
+ 	named indent { 0f }
+ 	named crosstag {}
+ 	named number {}
+ 	named title {}
+ 	named pagenum {}
+ 	named pregap { @ContentsGapAbove }
+ 	named postgap { @ContentsGapBelow }
+     {
+ 	@MakeContents.wanted @Case {
+ 	    Yes.Yes   @Yield { @SendContents @ContentsItem
+ 				   indent { indent }
+ 				   crosstag { crosstag }
+ 				   number { @ContentsFont @Font number }
+ 				   title { @ContentsFont @Font title }
+ 				   pagenum { pagenum }
+ 				   pregap { pregap }
+ 				   postgap { postgap }
+ 				   protect { Yes }
+ 			     }
+ 	    else      @Yield @Null
+ 	}
+     }
+ 
+     def @VeryMajorContentsEntry
+ 	left  wanted
+ 	named indent { 0.5rt }
+ 	named title {}
+ 	named pregap { @ContentsPartGapAbove }
+ 	named postgap { @ContentsPartGapBelow }
+     {
+ 	def item
+ 	{
+ 	    //pregap
+ 	    //0.5vx
+ 	    |indent @ContentsFont @Font @OneCol title |
+ 	    //0.5vx
+ 	    //postgap
+ 	}
+ 
+ 	@MakeContents.wanted @Case {
+ 	    Yes.Yes   @Yield @SendContents item
+ 	    else      @Yield @Null
+ 	}
+ 
+     }
+ 
+     def @ContentsSection
+     {
+ 	def @ContentsList { @ContentsPlace // @ContentsList }
+ 
+ 	@MakeContents @Case {
+ 	    { Yes Bypass }  @Yield @ContentsList
+ 	    else	    @Yield @Null
+ 	}
+     }
+ 
+     def @FigureContentsSection
+     {
+ 	def @FigureContentsList { @FigureContentsPlace // @FigureContentsList }
+ 
+ 	@MakeFigureContents @Case {
+ 	    { Yes Bypass }  @Yield @FigureContentsList
+ 	    else	    @Yield @Null
+ 	}
+     }
+ 
+     def @TableContentsSection
+     {
+ 	def @TableContentsList { @TableContentsPlace // @TableContentsList }
+ 
+ 	@MakeTableContents @Case {
+ 	    { Yes Bypass }  @Yield @TableContentsList
+ 	    else	    @Yield @Null
+ 	}
+     }
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Bypass table of contents.                                              #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @BypassContentsEntry into { @ContentsPlace&&preceding }
+ 	named indent { 0f }
+ 	named crosstag {}
+ 	named number {}
+ 	named title {}
+ 	named pagenum {}
+     {
+ 	@MakeContents @Case {
+ 	    Bypass @Yield { @ContentsItem
+ 				indent { indent }
+ 				crosstag { crosstag }
+ 				number { number }
+ 				title { title }
+ 				pagenum { pagenum }
+ 				pregap { @ContentsGap }
+ 				postgap { 0c }
+ 			  }
+ 	    else  @Yield  @Null
+ 	}
+     }
+ 
+     def @BypassFigureContentsEntry into { @FigureContentsPlace&&preceding }
+ 	named indent { 0f }
+ 	named crosstag {}
+ 	named number {}
+ 	named title {}
+ 	named pagenum {}
+     {
+ 	@MakeFigureContents @Case {
+ 	    Bypass @Yield { @ContentsItem
+ 				indent { indent }
+ 				crosstag { crosstag }
+ 				number { number }
+ 				title { title }
+ 				pagenum { pagenum }
+ 				pregap { @ContentsGap }
+ 				postgap { 0c }
+ 			  }
+ 	    else  @Yield  @Null
+ 	}
+     }
+ 
+     def @BypassTableContentsEntry into { @TableContentsPlace&&preceding }
+ 	named indent { 0f }
+ 	named crosstag {}
+ 	named number {}
+ 	named title {}
+ 	named pagenum {}
+     {
+ 	@MakeTableContents @Case {
+ 	    Bypass @Yield { @ContentsItem
+ 				indent { indent }
+ 				crosstag { crosstag }
+ 				number { number }
+ 				title { title }
+ 				pagenum { pagenum }
+ 				pregap { @ContentsGap }
+ 				postgap { 0c }
+ 			  }
+ 	    else  @Yield  @Null
+ 	}
+     }
+ 
+     def @BypassMajorContentsEntry into { @ContentsPlace&&preceding }
+ 	named indent { 0f }
+ 	named crosstag {}
+ 	named number {}
+ 	named title {}
+ 	named pagenum {}
+     {
+ 	@MakeContents @Case {
+ 	    Bypass @Yield { @ContentsItem
+ 				indent { indent }
+ 				crosstag { crosstag }
+ 				number { @B number }
+ 				title { @B title }
+ 				pagenum { pagenum }
+ 				pregap { @ContentsGapAbove }
+ 				postgap { @ContentsGapBelow }
+ 			  }
+ 	    else  @Yield  @Null
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Endnotes.                                                              #
+     #                                                                         #
+     ###########################################################################
+ 
+     export num
+     def @EndNoteList
+ 	named @Tag {}
+ 	right num
+     {
+ 	@Galley //@EndNoteGap @EndNoteList @Next num
+     }
+ 
+     def endtag right num
+     {
+         @BackEnd @Case {
+ 	    PlainText @Yield {
+ 	        ({@EndNoteNumbers @Num num})
+ 	    }
+ 	    else @Yield {
+ 	        +0.3v @VShift 0.8f @Font @EndNoteNumbers @Num num
+ 	    }
+         }
+     }
+ 
+     def @EndNote
+ 	named @Tag {}
+ 	right x
+     {
+ 	def ftag
+ 	{
+ 	    @EndNoteFont @Font @EndNoteList&&@Tag @Open { endtag num }
+ 	}
+ 
+ 	def @ENote into { @EndNoteList&&following }
+ 	{
+ 	    @EndNoteFont @Font @EndNoteBreak @Break
+ 	    { { @EndNoteList&&preceding @Tagged @Tag ftag } @EndNoteFormat x }
+ 	}
+ 
+ 	@Null & @EndNoteFont @Font ftag & @ENote
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Margin Notes.                                                          #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @ZeroSize right x
+     {
+ 	@HContract @VContract { ^/0io |0io @OneCol @OneRow x |0io /0io }
+     }
+ 
+     def @MargPut
+ 	left parity
+ 	right x
+     {
+ 	@MarginNoteFont @Font @MarginNoteBreak @Break @ZeroSize {
+ 	  @BackEnd @Case {
+ 	    PlainText @Yield ""
+ 	    PostScript @Yield {
+ 	    { parity "LoutMargShift gsave" // "grestore" } @Graphic
+ 	    {
+ 		|@MarginNoteHGap @MarginNoteWidth @Wide @OneRow x
+ 		|@MarginNoteHGap //@MarginNoteVGap
+ 	    }
+ 	    }
+ 	    PDF @Yield { "% @MargPut/LoutMargShift UNIMPLEMENTED" @Graphic {
+ 		  |@MarginNoteHGap @MarginNoteWidth @Wide @OneRow x
+ 		  |@MarginNoteHGap //@MarginNoteVGap
+ 	      }	# VT: PDF currently has no output
+ 	    }
+ 	  }
+ 	}
+     }
+ 
+     def @LeftNote  right x { @Null & 0 @MargPut x }
+     def @RightNote right x { @Null & 1 @MargPut x }
+     def @OuterNote right x { @Null & 2 @MargPut x }
+     def @InnerNote right x { @Null & 3 @MargPut x }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Place: places an object at an arbitrary point on the page.            #
+     #                                                                         #
+     ###########################################################################
+ 
+ #
+ # VT: the expressions in the braces will work for PostScript but not for PDF
+ # they should be modified in the way the "named c { " cm" }" blocks were modified above
+ # but since the point of @Place is to output a matrix (?), I have not implemented this change
+ #
+     def @Place
+       named x
+ 	named "+" precedence 96 associativity left left a right b { a b "add" }
+ 	named "-" precedence 96 associativity left left a right b { a b "sub" }
+ 	named "/" precedence 97 associativity left left a right b { a b "div" }
+ 	named "*" precedence 98 associativity left left a right b { a b "mul" }
+ 	named c   precedence 99                    left a         { a "cm"    }
+ 	named i   precedence 99                    left a         { a "in"    }
+ 	named e   precedence 99                    left a         { a "em"    }
+ 	named p   precedence 99                    left a         { a "pt"    }
+ 	named f   precedence 99                    left a         { a "ft"    }
+ 	named s   precedence 99                    left a         { a "sp"    }
+ 	named v   precedence 99                    left a         { a "vs"    }
+ 	named cm  precedence 99                    left a         { a "cm"    }
+ 	named in  precedence 99                    left a         { a "in"    }
+ 	named em  precedence 99                    left a         { a "em"    }
+ 	named pt  precedence 99                    left a         { a "pt"    }
+ 	named ft  precedence 99                    left a         { a "ft"    }
+ 	named sp  precedence 99                    left a         { a "sp"    }
+ 	named vs  precedence 99                    left a         { a "vs"    }
+ 	{ 0 }
+       named y
+ 	named "+" precedence 96 associativity left left a right b { a b "add" }
+ 	named "-" precedence 96 associativity left left a right b { a b "sub" }
+ 	named "/" precedence 97 associativity left left a right b { a b "div" }
+ 	named "*" precedence 98 associativity left left a right b { a b "mul" }
+ 	named c   precedence 99                    left a         { a "cm"    }
+ 	named i   precedence 99                    left a         { a "in"    }
+ 	named e   precedence 99                    left a         { a "em"    }
+ 	named p   precedence 99                    left a         { a "pt"    }
+ 	named f   precedence 99                    left a         { a "ft"    }
+ 	named s   precedence 99                    left a         { a "sp"    }
+ 	named v   precedence 99                    left a         { a "vs"    }
+ 	named cm  precedence 99                    left a         { a "cm"    }
+ 	named in  precedence 99                    left a         { a "in"    }
+ 	named em  precedence 99                    left a         { a "em"    }
+ 	named pt  precedence 99                    left a         { a "pt"    }
+ 	named ft  precedence 99                    left a         { a "ft"    }
+ 	named sp  precedence 99                    left a         { a "sp"    }
+ 	named vs  precedence 99                    left a         { a "vs"    }
+ 	{ 0 }
+       right val
+     {
+ 	@ZeroSize {
+ 	  @BackEnd @Case {
+ 	    PlainText @Yield ""
+ 	    PostScript @Yield {
+ 		{ "LoutPageDict begin matr setmatrix" x y "translate end gsave"
+ 		  // "grestore" } @Graphic val
+ 	    }
+ 	    else @Yield { { "% @Place UNIMPLEMENTED" } @Graphic val	# VT: PDF currently has no output
+ 	    }
+ 	  }
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @Theorem, @Proof, and @EndProof                                       #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag val
+     def @TheoremCounterMarker
+ 	named @Tag {}
+ 	named val {}
+     {
+ 	@Null
+     }
+ 
+     def @BeginTheoremCounter
+ 	right prefix
+     {
+ 	@TheoremCounterMarker val { prefix @Join 0 }
+     }
+ 
+     def @TheoremNum right tag
+     {
+ 	@TheoremCounterMarker&&tag @Open { @Next val }
+     }
+ 
+     def @TheoremCounterIncrement
+ 	right tag
+     {
+ 	@TheoremCounterMarker&&preceding @Tagged tag
+ 	@TheoremCounterMarker val { @TheoremNum tag }
+ 	@NumberMarker @Tag { tag } @Value { @TheoremNum tag }
+     }
+ 
+     def @Theorem
+        named @Tag {}
+        named @Title {}
+        right x
+     {
+ 	def @TheoremTitle
+ 	{
+ 	   @Title @Case {
+ 		""   @Yield @Null
+ 		else @Yield @TheoremTitleFormat @Title
+ 	   }
+ 	}
+ 
+ 	{ @PageMark @Tag & @TheoremCounterIncrement @Tag } @Insert
+ 	@TheoremFormat
+ 	    word { theorem @WordVal @TheoremWord }
+ 	    number { @TheoremNum @Tag }
+ 	    title { @TheoremTitle }
+ 	    body { x }
+     }
+ 
+     macro @Proof { @B { {proof @WordVal @ProofWord}: } &2s }
+ 
+     macro @EndProof { &1rt @Box {} }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @Definition                                                           #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag val
+     def @DefinitionCounterMarker
+ 	named @Tag {}
+ 	named val {}
+     {
+ 	@Null
+     }
+ 
+     def @BeginDefinitionCounter
+ 	right prefix
+     {
+ 	@DefinitionCounterMarker val { prefix @Join 0 }
+     }
+ 
+     def @DefinitionNum right tag
+     {
+ 	@DefinitionCounterMarker&&tag @Open { @Next val }
+     }
+ 
+     def @DefinitionCounterIncrement
+ 	right tag
+     {
+ 	@DefinitionCounterMarker&&preceding @Tagged tag
+ 	@DefinitionCounterMarker val { @DefinitionNum tag }
+ 	@NumberMarker @Tag { tag } @Value { @DefinitionNum tag }
+     }
+ 
+     def @Definition
+        named @Tag {}
+        named @Title {}
+        right x
+     {
+ 	def @DefinitionTitle
+ 	{
+ 	   @Title @Case {
+ 		""   @Yield @Null
+ 		else @Yield (@Title)
+ 	   }
+ 	}
+ 
+ 	{ @PageMark @Tag & @DefinitionCounterIncrement @Tag } @Insert
+ 	@DefinitionFormat
+ 	    word { definition @WordVal @DefinitionWord }
+ 	    number { @DefinitionNum @Tag }
+ 	    title { @DefinitionTitle }
+ 	    body { x }
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @Claim                                                                #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag val
+     def @ClaimCounterMarker
+ 	named @Tag {}
+ 	named val {}
+     {
+ 	@Null
+     }
+ 
+     def @BeginClaimCounter
+ 	right prefix
+     {
+ 	@ClaimCounterMarker val { prefix @Join 0 }
+     }
+ 
+     def @ClaimNum right tag
+     {
+ 	@ClaimCounterMarker&&tag @Open { @Next val }
+     }
+ 
+     def @ClaimCounterIncrement
+ 	right tag
+     {
+ 	@ClaimCounterMarker&&preceding @Tagged tag
+ 	@ClaimCounterMarker val { @ClaimNum tag }
+ 	@NumberMarker @Tag { tag } @Value { @ClaimNum tag }
+     }
+ 
+     def @Claim
+        named @Tag {}
+        named @Title {}
+        right x
+     {
+ 	def @ClaimTitle
+ 	{
+ 	   @Title @Case {
+ 		""   @Yield @Null
+ 		else @Yield (@Title)
+ 	   }
+ 	}
+ 
+ 	{ @PageMark @Tag & @ClaimCounterIncrement @Tag } @Insert
+ 	@ClaimFormat
+ 	    word { claim @WordVal @ClaimWord }
+ 	    number { @ClaimNum @Tag }
+ 	    title { @ClaimTitle }
+ 	    body { x }
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @Proposition                                                          #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag val
+     def @PropositionCounterMarker
+ 	named @Tag {}
+ 	named val {}
+     {
+ 	@Null
+     }
+ 
+     def @BeginPropositionCounter
+ 	right prefix
+     {
+ 	@PropositionCounterMarker val { prefix @Join 0 }
+     }
+ 
+     def @PropositionNum right tag
+     {
+ 	@PropositionCounterMarker&&tag @Open { @Next val }
+     }
+ 
+     def @PropositionCounterIncrement
+ 	right tag
+     {
+ 	@PropositionCounterMarker&&preceding @Tagged tag
+ 	@PropositionCounterMarker val { @PropositionNum tag }
+ 	@NumberMarker @Tag { tag } @Value { @PropositionNum tag }
+     }
+ 
+     def @Proposition
+        named @Tag {}
+        named @Title {}
+        right x
+     {
+ 	def @PropositionTitle
+ 	{
+ 	   @Title @Case {
+ 		""   @Yield @Null
+ 		else @Yield (@Title)
+ 	   }
+ 	}
+ 
+ 	{ @PageMark @Tag & @PropositionCounterIncrement @Tag } @Insert
+ 	@PropositionFormat
+ 	    word { proposition @WordVal @PropositionWord }
+ 	    number { @PropositionNum @Tag }
+ 	    title { @PropositionTitle }
+ 	    body { x }
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @Lemma                                                                #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag val
+     def @LemmaCounterMarker
+ 	named @Tag {}
+ 	named val {}
+     {
+ 	@Null
+     }
+ 
+     def @BeginLemmaCounter
+ 	right prefix
+     {
+ 	@LemmaCounterMarker val { prefix @Join 0 }
+     }
+ 
+     def @LemmaNum right tag
+     {
+ 	@LemmaCounterMarker&&tag @Open { @Next val }
+     }
+ 
+     def @LemmaCounterIncrement
+ 	right tag
+     {
+ 	@LemmaCounterMarker&&preceding @Tagged tag
+ 	@LemmaCounterMarker val { @LemmaNum tag }
+ 	@NumberMarker @Tag { tag } @Value { @LemmaNum tag }
+     }
+ 
+     def @Lemma
+        named @Tag {}
+        named @Title {}
+        right x
+     {
+ 	def @LemmaTitle
+ 	{
+ 	   @Title @Case {
+ 		""   @Yield @Null
+ 		else @Yield (@Title)
+ 	   }
+ 	}
+ 
+ 	{ @PageMark @Tag & @LemmaCounterIncrement @Tag } @Insert
+ 	@LemmaFormat
+ 	    word { lemma @WordVal @LemmaWord }
+ 	    number { @LemmaNum @Tag }
+ 	    title { @LemmaTitle }
+ 	    body { x }
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @Corollary                                                            #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag val
+     def @CorollaryCounterMarker
+ 	named @Tag {}
+ 	named val {}
+     {
+ 	@Null
+     }
+ 
+     def @BeginCorollaryCounter
+ 	right prefix
+     {
+ 	@CorollaryCounterMarker val { prefix @Join 0 }
+     }
+ 
+     def @CorollaryNum right tag
+     {
+ 	@CorollaryCounterMarker&&tag @Open { @Next val }
+     }
+ 
+     def @CorollaryCounterIncrement
+ 	right tag
+     {
+ 	@CorollaryCounterMarker&&preceding @Tagged tag
+ 	@CorollaryCounterMarker val { @CorollaryNum tag }
+ 	@NumberMarker @Tag { tag } @Value { @CorollaryNum tag }
+     }
+ 
+     def @Corollary
+        named @Tag {}
+        named @Title {}
+        right x
+     {
+ 	def @CorollaryTitle
+ 	{
+ 	   @Title @Case {
+ 		""   @Yield @Null
+ 		else @Yield (@Title)
+ 	   }
+ 	}
+ 
+ 	{ @PageMark @Tag & @CorollaryCounterIncrement @Tag } @Insert
+ 	@CorollaryFormat
+ 	    word { corollary @WordVal @CorollaryWord }
+ 	    number { @CorollaryNum @Tag }
+ 	    title { @CorollaryTitle }
+ 	    body { x }
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @Example                                                              #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag val
+     def @ExampleCounterMarker
+ 	named @Tag {}
+ 	named val {}
+     {
+ 	@Null
+     }
+ 
+     def @BeginExampleCounter
+ 	right prefix
+     {
+ 	@ExampleCounterMarker val { prefix @Join 0 }
+     }
+ 
+     def @ExampleNum right tag
+     {
+ 	@ExampleCounterMarker&&tag @Open { @Next val }
+     }
+ 
+     def @ExampleCounterIncrement
+ 	right tag
+     {
+ 	@ExampleCounterMarker&&preceding @Tagged tag
+ 	@ExampleCounterMarker val { @ExampleNum tag }
+ 	@NumberMarker @Tag { tag } @Value { @ExampleNum tag }
+     }
+ 
+     def @Example
+        named @Tag {}
+        named @Title {}
+        right x
+     {
+ 	def @ExampleTitle
+ 	{
+ 	   @Title @Case {
+ 		""   @Yield @Null
+ 		else @Yield (@Title)
+ 	   }
+ 	}
+ 
+ 	{ @PageMark @Tag & @ExampleCounterIncrement @Tag } @Insert
+ 	@ExampleFormat
+ 	    word { example @WordVal @ExampleWord }
+ 	    number { @ExampleNum @Tag }
+ 	    title { @ExampleTitle }
+ 	    body { x }
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @BeginAllCounters - begin all counters                                 #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @BeginAllCounters
+ 	left condition
+ 	right prefix
+     {
+ 	condition @Do {
+ 	    @BeginTheoremCounter prefix
+ 	    // @BeginDefinitionCounter prefix
+ 	    // @BeginClaimCounter prefix
+ 	    // @BeginPropositionCounter prefix
+ 	    // @BeginLemmaCounter prefix
+ 	    // @BeginCorollaryCounter prefix
+ 	    // @BeginExampleCounter prefix
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Reference - a reference.                                              #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag @Type @Abstract @Address @Annote @Author @Day @Edition
+ 	   @HowPublished @InAuthor @InTitle @Institution @Journal @Keywords
+ 	   @Label @Month @Note @Number @Organization @Page @Pages @Pinpoint
+ 	   @Publisher @Title @TitleNote @TRType @URL @Volume @Year
+ 
+     def @Reference
+ 	named compulsory @Tag		{}
+ 	named compulsory @Type		{}
+ 	named @Abstract			{}
+ 	named @Address			{}
+ 	named @Annote			{}
+ 	named @Author			{}
+ 	named @Day			{}
+ 	named @Edition			{}
+ 	named @HowPublished		{}
+ 	named @InAuthor			{}
+ 	named @InTitle			{}
+ 	named @Institution		{}
+ 	named @Journal			{}
+ 	named @Keywords			{}
+ 	named @Label			{}
+ 	named @Month			{}
+ 	named @Note			{}
+ 	named @Number			{}
+ 	named @Organization		{}
+ 	named @Page			{}
+ 	named @Pages			{}
+ 	named @Pinpoint			{}
+ 	named @Publisher		{}
+ 	named @Title			{}
+ 	named @TitleNote		{}
+ 	named @TRType			{}
+ 	named @URL
+ 	  named "~"  { "~"      }
+ 	  named "/"  { "/"  &0p }
+ 	  named "//" { "//" &0p }	{}
+ 	named @Volume			{}
+ 	named @Year			{}
+     { @Null }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @CiteLabel - the value of the label of a reference within a citation.  #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @CiteLabel
+ 	left label
+ 	right tag 
+     {
+ 	tag @CrossLink @RefCiteLabels
+ 	    @RefNum       { @NumberOf tag				}
+ 	    @Tag          { tag						}
+ 	    @Type         { @Reference&&tag @Open { @Type }		}
+ 	    @Abstract     { @Reference&&tag @Open { @Abstract }		}
+ 	    @Address      { @Reference&&tag @Open { @Address }		}
+ 	    @Annote       { @Reference&&tag @Open { @Annote }		}
+ 	    @Author       { @Reference&&tag @Open { @Author }		}
+ 	    @Day          { @Reference&&tag @Open { @Day }		}
+ 	    @Edition      { @Reference&&tag @Open { @Edition }		}
+ 	    @HowPublished { @Reference&&tag @Open { @HowPublished }	}
+ 	    @InAuthor     { @Reference&&tag @Open { @InAuthor }		}
+ 	    @InTitle      { @Reference&&tag @Open { @InTitle }		}
+ 	    @Institution  { @Reference&&tag @Open { @Institution }	}
+ 	    @Journal      { @Reference&&tag @Open { @Journal }		}
+ 	    @Keywords     { @Reference&&tag @Open { @Keywords }		}
+ 
+ 	    @Label        { label @Case {
+ 			      "" @Yield {@Reference&&tag @Open {@Label}}
+ 			      else @Yield label
+ 			    }						}
+ 
+ 	    @Month        { @Reference&&tag @Open { @Month }		}
+ 	    @Note         { @Reference&&tag @Open { @Note }		}
+ 	    @Number       { @Reference&&tag @Open { @Number }		}
+ 	    @Organization { @Reference&&tag @Open { @Organization }	}
+ 	    @Page         { @Reference&&tag @Open { @Page }		}
+ 	    @Pages        { @Reference&&tag @Open { @Pages }		}
+ 	    @Pinpoint     { @Reference&&tag @Open { @Pinpoint }		}
+ 	    @Publisher    { @Reference&&tag @Open { @Publisher }	}
+ 	    @Title        { @Reference&&tag @Open { @Title }		}
+ 	    @TitleNote    { @Reference&&tag @Open { @TitleNote }	}
+ 	    @TRType       { @Reference&&tag @Open { @TRType }		}
+ 	    @Volume       { @Reference&&tag @Open { @Volume }		}
+ 	    @Year         { @Reference&&tag @Open { @Year }		}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @ListLabel - the value of the label of a reference within a ref list.  #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @ListLabel
+ 	left label
+ 	right tag 
+     {
+ 	@RefListLabels
+ 	    @RefNum       { @NumberOf tag				}
+ 	    @Tag          { tag						}
+ 	    @Type         { @Reference&&tag @Open { @Type }		}
+ 	    @Abstract     { @Reference&&tag @Open { @Abstract }		}
+ 	    @Address      { @Reference&&tag @Open { @Address }		}
+ 	    @Annote       { @Reference&&tag @Open { @Annote }		}
+ 	    @Author       { @Reference&&tag @Open { @Author }		}
+ 	    @Day          { @Reference&&tag @Open { @Day }		}
+ 	    @Edition      { @Reference&&tag @Open { @Edition }		}
+ 	    @HowPublished { @Reference&&tag @Open { @HowPublished }	}
+ 	    @InAuthor     { @Reference&&tag @Open { @InAuthor }		}
+ 	    @InTitle      { @Reference&&tag @Open { @InTitle }		}
+ 	    @Institution  { @Reference&&tag @Open { @Institution }	}
+ 	    @Journal      { @Reference&&tag @Open { @Journal }		}
+ 	    @Keywords     { @Reference&&tag @Open { @Keywords }		}
+ 
+ 	    @Label        { label @Case {
+ 			      "" @Yield {@Reference&&tag @Open {@Label}}
+ 			      else @Yield label
+ 			    }						}
+ 
+ 	    @Month        { @Reference&&tag @Open { @Month }		}
+ 	    @Note         { @Reference&&tag @Open { @Note }		}
+ 	    @Number       { @Reference&&tag @Open { @Number }		}
+ 	    @Organization { @Reference&&tag @Open { @Organization }	}
+ 	    @Page         { @Reference&&tag @Open { @Page }		}
+ 	    @Pages        { @Reference&&tag @Open { @Pages }		}
+ 	    @Pinpoint     { @Reference&&tag @Open { @Pinpoint }		}
+ 	    @Publisher    { @Reference&&tag @Open { @Publisher }	}
+ 	    @Title        { @Reference&&tag @Open { @Title }		}
+ 	    @TitleNote    { @Reference&&tag @Open { @TitleNote }	}
+ 	    @TRType       { @Reference&&tag @Open { @TRType }		}
+ 	    @Volume       { @Reference&&tag @Open { @Volume }		}
+ 	    @Year         { @Reference&&tag @Open { @Year }		}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @SortKey - the value of the sort key of a reference.                   #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @SortKey
+ 	left label
+ 	right tag 
+     {
+ 	@RefListSortKey
+ 	    @Tag          { tag						}
+ 	    @Type         { @Reference&&tag @Open { @Type }		}
+ 	    @Abstract     { @Reference&&tag @Open { @Abstract }		}
+ 	    @Address      { @Reference&&tag @Open { @Address }		}
+ 	    @Annote       { @Reference&&tag @Open { @Annote }		}
+ 	    @Author       { @Reference&&tag @Open { @Author }		}
+ 	    @Day          { @Reference&&tag @Open { @Day }		}
+ 	    @Edition      { @Reference&&tag @Open { @Edition }		}
+ 	    @HowPublished { @Reference&&tag @Open { @HowPublished }	}
+ 	    @InAuthor     { @Reference&&tag @Open { @InAuthor }		}
+ 	    @InTitle      { @Reference&&tag @Open { @InTitle }		}
+ 	    @Institution  { @Reference&&tag @Open { @Institution }	}
+ 	    @Journal      { @Reference&&tag @Open { @Journal }		}
+ 	    @Keywords     { @Reference&&tag @Open { @Keywords }		}
+ 
+ 	    @Label        { label @Case {
+ 			      "" @Yield {@Reference&&tag @Open {@Label}}
+ 			      else @Yield label
+ 			    }						}
+ 
+ 	    @Month        { @Reference&&tag @Open { @Month }		}
+ 	    @Note         { @Reference&&tag @Open { @Note }		}
+ 	    @Number       { @Reference&&tag @Open { @Number }		}
+ 	    @Organization { @Reference&&tag @Open { @Organization }	}
+ 	    @Page         { @Reference&&tag @Open { @Page }		}
+ 	    @Pages        { @Reference&&tag @Open { @Pages }		}
+ 	    @Pinpoint     { @Reference&&tag @Open { @Pinpoint }		}
+ 	    @Publisher    { @Reference&&tag @Open { @Publisher }	}
+ 	    @Title        { @Reference&&tag @Open { @Title }		}
+ 	    @TitleNote    { @Reference&&tag @Open { @TitleNote }	}
+ 	    @TRType       { @Reference&&tag @Open { @TRType }		}
+ 	    @Volume       { @Reference&&tag @Open { @Volume }		}
+ 	    @Year         { @Reference&&tag @Open { @Year }		}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @RefStyle - a reference printing style.                                #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Style
+     def @RefStyle
+ 	left @Tag
+ 	named @Style right reftag {}
+     {}
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @RefPrint - prints reference with tag reftag in appropriate style.     #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @RefPrint right reftag
+     {	& @RefStyle&&{ @Reference&&reftag @Open { @Type } }
+ 	@Open { @Style reftag } &
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @ReferencesSection and @ChapReferencesSection - a list of references.  #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @RefPlace { @Galley }
+     def @ChapRefPlace { @Galley }
+ 
+     def @BypassRefPlace { @Galley }
+     def @BypassChapRefPlace { @Galley }
+ 
+     def @ReferencesSection
+     {
+ 	def @RefList right num
+ 	{
+ 	    @NumberMarker @Value { @RefNumbers @Num num } & | @RefPlace
+ 	    //@RefListGap @RefList @Next num
+ 	}
+ 
+ 	def @BypassRefList
+ 	{
+ 	    @BypassRefPlace //@RefListGap @BypassRefList
+ 	}
+ 
+ 	@RefList 1
+ 	//@RefListGap
+ 	@BypassRefList
+     }
+ 
+     def @ChapReferencesSection
+     {
+ 	def @ChapRefList right num
+ 	{
+ 	    @NumberMarker @Value { @RefNumbers @Num num } & | @ChapRefPlace
+ 	    //@RefListGap @ChapRefList @Next num
+ 	}
+ 
+ 	def @BypassChapRefList
+ 	{
+ 	    @BypassChapRefPlace //@RefListGap @BypassChapRefList
+ 	}
+ 
+ 	@ChapRefList 1
+ 	//@RefListGap
+ 	@BypassChapRefList
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #   @RefHeading - heading for reference lists.                            #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @RefHeading right x
+     {	x @Case {
+ 	    references @Yield @Word&&references
+ 	    bibliography @Yield @Word&&bibliography
+ 	    else @Yield x
+ 	}
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #   @ChapRefSection                                                   #
+     #                                                                     #
+     #######################################################################
+ 
+     def @ChapRefSection
+     {
+ 	@Heading @RefHeading @ChapRefListTitle
+ 	@DP
+ 	@ChapReferencesSection
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @SendRef and @ChapSendRef - send one reference to the reference list.  #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @RefItem
+ 	left lab
+ 	right ref
+     {
+ 	def @ZeroWidth right x { &0io @OneCol x &0io }
+ 
+ 	@RefListFormat @Case {
+ 	    NoLabels   @Yield {					   ref	}
+ 	    Labels     @Yield { @ZeroWidth lab |@RefListLabelWidth ref	}
+ 	    DropLabels @Yield { lab //1vx      |@RefListLabelWidth ref	}
+ 	    InLabels   @Yield { lab & 2s @Wide &		   ref	}
+ 	}
+     }
+ 
+ 
+     def @RefListItem
+ 	left label
+ 	right tag
+     {
+ 	@RefListFont @Font @RefListBreak @Break {
+ 	    @NumberMarker&&preceding @Tagged tag & @PageMark tag
+ 	    |@RefListIndent {label @ListLabel tag} @RefItem {@RefPrint tag}
+ 	    |@RefListRightIndent
+ 	}
+     }
+ 
+ 
+     def @SendRef into { @RefPlace&&foll_or_prec }
+ 	left label
+ 	right tag
+     {
+ 	def @Key { label @SortKey tag }
+ 
+ 	# no @Merge i.e. omit duplicates
+ 
+ 	label @RefListItem tag
+     }
+ 
+ 
+     def @ChapSendRef into { @ChapRefPlace&&foll_or_prec }
+ 	left label
+ 	right tag
+     {
+ 	def @Key { label @SortKey tag }
+ 
+ 	# no @Merge i.e. omit duplicates
+ 
+ 	label @RefListItem tag
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Ref (bare citation) and its variants.                                 #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @Ref
+ 	named label {}
+ 	right tag
+     {
+ 	@MakeReferences @Case {
+ 	    Yes	  @Yield { label @CiteLabel tag & label @SendRef tag }
+ 	    else  @Yield @Null
+ 	}
+     }
+ 
+     def @NoRef
+ 	named label {}
+ 	right tag
+     {
+ 	@MakeReferences @Case {
+ 	    Yes  @Yield { label @SendRef tag }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     def @ChapRef
+ 	named label {}
+ 	right tag
+     {
+ 	@MakeReferences @Case {
+ 	    Yes  @Yield { label @CiteLabel tag & label @ChapSendRef tag }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     def @NoChapRef
+ 	named label {}
+ 	right tag
+     {
+ 	@MakeReferences @Case {
+ 	    Yes  @Yield { label @ChapSendRef tag }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Bypass references.                                                     #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @BypassReference into { @BypassRefPlace&&preceding }
+ 	named label {}
+ 	named value {}
+     {
+ 	@MakeReferences @Case {
+ 	    Bypass @Yield { label @RefItem value }
+ 	    else   @Yield @Null
+ 	}
+     }
+ 
+     def @BypassChapReference into { @BypassChapRefPlace&&preceding }
+ 	named label {}
+ 	named value {}
+     {
+ 	@MakeReferences @Case {
+ 	    Bypass @Yield { label @RefItem value }
+ 	    else   @Yield @Null
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Cite (citation) and its variants.                                     #
+     #                                                                         #
+     ###########################################################################
+ 
+     export "$" "," ";"
+     def @Cite body cite
+     {
+ 	macro "$" { @Ref }
+ 	def "," precedence 90 left x { x"," }
+ 	def ";" precedence 90 left x { x";" }
+ 
+ 	@MakeReferences @Case {
+ 	    Yes  @Yield {
+ 	        @RefCiteStyle cite
+ 	    }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     export "$" "," ";"
+     def @NoCite body cite
+     {
+ 	macro "$" { @NoRef }
+ 	def "," precedence 90 left x { x"," }
+ 	def ";" precedence 90 left x { x";" }
+ 
+ 	@MakeReferences @Case {
+ 	    Yes  @Yield { cite }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     export "$" "," ";"
+     def @ChapCite body cite
+     {
+ 	macro "$" { @ChapRef }
+ 	def "," precedence 90 left x { x"," }
+ 	def ";" precedence 90 left x { x";" }
+ 
+ 	@MakeReferences @Case {
+ 	    Yes  @Yield { @RefCiteStyle cite }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     export "$" "," ";"
+     def @NoChapCite body cite
+     {
+ 	macro "$" { @NoChapRef }
+ 	def "," precedence 90 left x { x }
+ 	def ";" precedence 90 left x { x";" }
+ 
+ 	@MakeReferences @Case {
+ 	    Yes  @Yield { cite }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Floating figures.                                                      #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag prefix
+     def @FigurePrefixMarker
+ 	named @Tag {}
+ 	named prefix {}
+     {
+ 	@Null
+     }
+ 
+     export @Tag count
+     def @FigureCounterMarker
+ 	named @Tag {}
+ 	named count {}
+     {
+ 	@Null
+     }
+ 
+     def @RawFigureNum right tag
+     {
+ 	@FigureCounterMarker&&tag @Open { @Next count }
+     }
+ 
+     def @FigureCounterIncrement
+ 	right tag
+     {
+ 	   @FigureCounterMarker&&preceding @Tagged tag
+ 	// @FigurePrefixMarker&&preceding @Tagged tag
+ 	// @FigureCounterMarker count { @RawFigureNum tag }
+ 	// @NumberMarker @Tag { tag }
+ 		@Value { { @FigurePrefixMarker&&tag @Open { prefix } }
+ 		    @Join {@FigureNumbers @Num @RawFigureNum tag}
+ 		}
+     }
+ 
+     def @BeginFigureCounter
+ 	left condition
+ 	right prefix
+     {
+ 	condition @Do {
+ 	       @FigurePrefixMarker prefix { prefix }
+ 	    // @FigureCounterMarker count { 0 }
+ 	}
+     }
+ 
+     def @EndFigureList { @Galley //@MidGap @EndFigureList }
+ 
+     def @Figure
+ 	named @Tag {}
+ 	named @Caption { dft }
+ 	named @ShortCaption { dft }
+ 	named @CaptionPos { @FigureCaptionPos }
+ 	named @Format
+     	    named @II right x { |@DisplayIndent x |               }
+     	    named @QQ right x { |@DisplayIndent x |@DisplayIndent }
+     	    named @CC right x { |0.5rt x          |               }
+     	    named @RR right x { |1.0rt x          |               }
+ 		right @Body { @FigureFormat @Body }
+ 	named @InitialLanguage { @InitialLanguage }
+ 	named @BypassNumber { dft }
+ 	named @OnePage { dft }
+ 	named @Location { @FigureLocation }
+ 	right @Body
+     {
+ 	def @FigureNumber
+ 	{
+ 	    @BypassNumber @Dft @NumberOf @Tag
+ 	}
+ 
+ 	def @ContentsCaption
+ 	{
+ 	    @ShortCaption @Dft @Caption
+ 	}
+ 
+ 	def @OnePg
+ 	{
+ 	    @OnePage @Case {
+ 		{ No  no } @Yield No
+ 		{ Yes yes } @Yield Yes
+ 		dft @Yield { @Location @Case {
+ 				PageTop		@Yield No
+ 				EvenPageTop	@Yield No
+ 				FullPage	@Yield No
+ 				EvenFullPage	@Yield No
+ 				PageFoot	@Yield Yes
+ 				ColTop		@Yield No
+ 				ColFoot		@Yield Yes
+ 				ColEnd		@Yield No
+ 				Display		@Yield Yes
+ 				AfterLine	@Yield Yes
+ 				TryAfterLine	@Yield Yes
+ 				Raw		@Yield No
+ 			     }
+ 			   }
+ 	    }
+ 	}
+ 
+ 	def @CaptionState
+ 	{
+ 	    @Caption @Case {
+ 		dft  @Yield None
+ 		else @Yield { @CaptionPos @Case {
+ 		    { Below below } @Yield Below
+ 		    { Above above } @Yield Above
+ 		} }
+ 	    }
+ 	}
+ 
+ 	#def @FigureLabel
+ 	#{
+ 	#    @FigureNumbers @Case {
+ 	#	No   @Yield @Null
+ 	#	else @Yield {
+ 	#	    @CaptionFormat { {figure @WordVal @FigureWord} @NumSep @FigureNumber }
+ 	#	}
+ 	#    }
+ 	#}
+ 
+ 	def @CaptionVal
+ 	{
+ 	    @FigureCaptionFont @Font @FigureCaptionBreak @Break
+ 	    { ||0.5rt @FigureCaptionFormat
+ 		 word { figure @WordVal @FigureWord }
+ 		 number { @FigureNumber }
+ 		 caption { @Caption }
+ 	    }
+ 	}
+ 
+ 	def @FigureVal
+ 	{
+ 	    @InitialLanguage @Language
+ 	    {
+ 		@MakeFigureContents @FigureContentsEntry
+ 		    indent { 0f }
+ 		    crosstag { @Tag }
+ 		    number { @FigureNumber }
+ 		    title { @InitialLanguage @Language @ContentsCaption }
+ 		    pagenum { @PageOf @Tag }
+ 		// @FigureCounterIncrement @Tag
+ 		// @Body
+ 		// @PageMark @Tag
+ 	    }
+ 	}
+ 
+ 	def @FigureTarget
+ 	{
+ 	    @Location @Case {
+ 		PageTop		@Yield  @PageTopPlace&&following
+ 		EvenPageTop	@Yield  @PageTopPlace&&following
+ 		FullPage	@Yield  @FullPagePlace&&following
+ 		EvenFullPage	@Yield  @FullPagePlace&&following
+ 		PageFoot	@Yield  @PageFootAndTopPlace&&following
+ 		ColTop		@Yield  @ColTopPlace&&following
+ 		ColFoot		@Yield  @ColFootAndTopPlace&&following
+ 		ColEnd		@Yield  @EndFigureList&&following
+ 		Display		@Yield  @AfterLinePlace&&following
+ 		AfterLine	@Yield  @AfterLinePlace&&following
+ 		TryAfterLine	@Yield  @TryAfterLinePlace&&following
+ 	    }
+ 	}
+ 
+ 	def @SendEncl into { @FigureTarget }
+ 	    right x
+ 	{
+ 	    def @Enclose right x
+ 	    {
+ 		@OnePg @Case {
+                 	No  @Yield @Format x
+                 	Yes @Yield x
+             	}
+ 	    }
+ 
+ 	    x
+ 	}
+ 
+ 	def @Send into { @FigureTarget }
+ 	    right x
+ 	{
+ 	    x
+ 	}
+ 
+ 	def @EvenFullPageSend into { @EvenFullPagePlace&&following }
+ 	    right x
+ 	{
+ 	    @OneRow x
+ 	}
+ 
+ 	def @EvenPageSend into { @EvenPagePlace&&following }
+ 	    right x
+ 	{
+ 	    @OneRow x
+ 	}
+ 
+ 	def @RawFigureVal
+ 	{
+ 	    @OnePg. at CaptionState @Case
+ 	    {
+ 		Yes.Below @Yield @OneRow { @Format @FigureVal @DP @CaptionVal }
+ 		Yes.Above @Yield @OneRow { @CaptionVal @DP @Format @FigureVal }
+ 		Yes.None  @Yield @OneRow { @Format @FigureVal }
+ 		No.Below  @Yield         { @Format @FigureVal @DP @CaptionVal }
+ 		No.Above  @Yield         { @CaptionVal @DP @Format @FigureVal }
+ 		No.None   @Yield         { @Format @FigureVal }
+ 	    }
+ 	}
+ 
+ 	def @NonRawFigureVal
+ 	{
+ 	  @OnePg. at CaptionState @Case
+ 	  {
+ 	    Yes.Below @Yield {
+ 		@Send @OneRow { @Format @FigureVal @DP @CaptionVal // @DupRunner}
+ 	    }
+ 	    Yes.Above @Yield {
+ 		@Send @OneRow { @CaptionVal @DP @Format @FigureVal // @DupRunner}
+ 	    }
+ 	    Yes.None @Yield {
+ 		@Send @OneRow { @Format @FigureVal // @DupRunner }
+ 	    }
+ 	    No.Below @Yield {
+ 		@SendEncl { @FigureVal // @Send { @CaptionVal // @DupRunner } }
+ 	    }
+ 	    No.Above @Yield {
+ 		@Send { @CaptionVal // @SendEncl { @FigureVal // @DupRunner } }
+ 	    }
+ 	    No.None @Yield {
+ 		@SendEncl { @FigureVal // @DupRunner }
+ 	    }
+ 	  }
+ 	}
+ 
+ 	@Location @Case {
+ 	    Raw		  @Yield @RawFigureVal
+ 	    Display	  @Yield { @NonRawFigureVal &1rt }
+ 	    EvenPageTop   @Yield @EvenPageSend @NonRawFigureVal
+ 	    EvenFullPage  @Yield @EvenFullPageSend @NonRawFigureVal
+ 	    else	  @Yield @NonRawFigureVal
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Floating tables (exact clone of figure code immediately above).        #
+     #                                                                         #
+     ###########################################################################
+ 
+     export @Tag prefix
+     def @TablePrefixMarker
+ 	named @Tag {}
+ 	named prefix {}
+     {
+ 	@Null
+     }
+ 
+     export @Tag count
+     def @TableCounterMarker
+ 	named @Tag {}
+ 	named count {}
+     {
+ 	@Null
+     }
+ 
+     def @RawTableNum right tag
+     {
+ 	@TableCounterMarker&&tag @Open { @Next count }
+     }
+ 
+     def @TableCounterIncrement
+ 	right tag
+     {
+ 	   @TableCounterMarker&&preceding @Tagged tag
+ 	// @TablePrefixMarker&&preceding @Tagged tag
+ 	// @TableCounterMarker count { @RawTableNum tag }
+ 	// @NumberMarker @Tag { tag }
+ 		@Value { { @TablePrefixMarker&&tag @Open { prefix } }
+ 		    @Join {@TableNumbers @Num @RawTableNum tag}
+ 		}
+     }
+ 
+     def @BeginTableCounter
+ 	left condition
+ 	right prefix
+     {
+ 	condition @Do {
+ 	       @TablePrefixMarker prefix { prefix }
+ 	    // @TableCounterMarker count { 0 }
+ 	}
+     }
+ 
+     def @EndTableList { @Galley //@MidGap @EndTableList }
+ 
+     def @Table
+ 	named @Tag {}
+ 	named @Caption { dft }
+ 	named @ShortCaption { dft }
+ 	named @CaptionPos { @TableCaptionPos }
+ 	named @Format
+     	    named @II right x { |@DisplayIndent x |               }
+     	    named @QQ right x { |@DisplayIndent x |@DisplayIndent }
+     	    named @CC right x { |0.5rt x          |               }
+     	    named @RR right x { |1.0rt x          |               }
+ 		right @Body { @TableFormat @Body }
+ 	named @InitialLanguage { @InitialLanguage }
+ 	named @BypassNumber { dft }
+ 	named @OnePage { dft }
+ 	named @Location { @TableLocation }
+ 	right @Body
+     {
+ 	def @TableNumber
+ 	{
+ 	    @BypassNumber @Dft @NumberOf @Tag
+ 	}
+ 
+ 	def @ContentsCaption
+ 	{
+ 	    @ShortCaption @Dft @Caption
+ 	}
+ 
+ 	def @OnePg
+ 	{
+ 	    @OnePage @Case {
+ 		{ No  no } @Yield No
+ 		{ Yes yes } @Yield Yes
+ 		dft @Yield { @Location @Case {
+ 				PageTop		@Yield No
+ 				EvenPageTop	@Yield No
+ 				FullPage	@Yield No
+ 				EvenFullPage	@Yield No
+ 				PageFoot	@Yield Yes
+ 				ColTop		@Yield No
+ 				ColFoot		@Yield Yes
+ 				ColEnd		@Yield No
+ 				Display		@Yield Yes
+ 				AfterLine	@Yield Yes
+ 				TryAfterLine	@Yield Yes
+ 				Raw		@Yield No
+ 			     }
+ 			   }
+ 	    }
+ 	}
+ 
+ 	def @CaptionState
+ 	{
+ 	    @Caption @Case {
+ 		dft  @Yield None
+ 		else @Yield { @CaptionPos @Case {
+ 		    { Below below } @Yield Below
+ 		    { Above above } @Yield Above
+ 		} }
+ 	    }
+ 	}
+ 
+ 	#def @TableLabel
+ 	#{
+ 	#    @TableNumbers @Case {
+ 	#	No   @Yield @Null
+ 	#	else @Yield {
+ 	#	    @CaptionFormat { {table @WordVal @TableWord} @NumSep @TableNumber }
+ 	#	}
+ 	#    }
+ 	#}
+ 
+ 	def @CaptionVal
+ 	{
+ 	    @TableCaptionFont @Font @TableCaptionBreak @Break
+ 	    { ||0.5rt @TableCaptionFormat
+ 		 word { table @WordVal @TableWord }
+ 		 number { @TableNumber }
+ 		 caption { @Caption }
+ 	    }
+ 	}
+ 
+ 	def @TableVal
+ 	{
+ 	    @InitialLanguage @Language
+ 	    {
+ 		@MakeTableContents @TableContentsEntry
+ 		    indent { 0f }
+ 		    crosstag { @Tag }
+ 		    number { @TableNumber }
+ 		    title { @InitialLanguage @Language @ContentsCaption }
+ 		    pagenum { @PageOf @Tag }
+ 		// @TableCounterIncrement @Tag
+ 		// @Body
+ 		// @PageMark @Tag
+ 	    }
+ 	}
+ 
+ 	def @TableTarget
+ 	{
+ 	    @Location @Case {
+ 		PageTop		@Yield  @PageTopPlace&&following
+ 		EvenPageTop	@Yield  @PageTopPlace&&following
+ 		FullPage	@Yield  @FullPagePlace&&following
+ 		EvenFullPage	@Yield  @FullPagePlace&&following
+ 		PageFoot	@Yield  @PageFootAndTopPlace&&following
+ 		ColTop		@Yield  @ColTopPlace&&following
+ 		ColFoot		@Yield  @ColFootAndTopPlace&&following
+ 		ColEnd		@Yield  @EndTableList&&following
+ 		Display		@Yield  @AfterLinePlace&&following
+ 		AfterLine	@Yield  @AfterLinePlace&&following
+ 		TryAfterLine	@Yield  @TryAfterLinePlace&&following
+ 	    }
+ 	}
+ 
+ 	def @SendEncl into { @TableTarget }
+ 	    right x
+ 	{
+ 	    def @Enclose right x
+ 	    {
+ 		@OnePg @Case {
+                 	No  @Yield @Format x
+                 	Yes @Yield x
+             	}
+ 	    }
+ 
+ 	    x
+ 	}
+ 
+ 	def @Send into { @TableTarget }
+ 	    right x
+ 	{
+ 	    x
+ 	}
+ 
+ 	def @EvenFullPageSend into { @EvenFullPagePlace&&following }
+ 	    right x
+ 	{
+ 	    @OneRow x
+ 	}
+ 
+ 	def @EvenPageSend into { @EvenPagePlace&&following }
+ 	    right x
+ 	{
+ 	    @OneRow x
+ 	}
+ 
+ 	def @RawTableVal
+ 	{
+ 	    @OnePg. at CaptionState @Case
+ 	    {
+ 		Yes.Below @Yield @OneRow { @Format @TableVal @DP @CaptionVal }
+ 		Yes.Above @Yield @OneRow { @CaptionVal @DP @Format @TableVal }
+ 		Yes.None  @Yield @OneRow { @Format @TableVal }
+ 		No.Below  @Yield         { @Format @TableVal @DP @CaptionVal }
+ 		No.Above  @Yield         { @CaptionVal @DP @Format @TableVal }
+ 		No.None   @Yield         { @Format @TableVal }
+ 	    }
+ 	}
+ 
+ 	def @NonRawTableVal
+ 	{
+ 	  @OnePg. at CaptionState @Case
+ 	  {
+ 	    Yes.Below @Yield {
+ 		@Send @OneRow { @Format @TableVal @DP @CaptionVal // @DupRunner}
+ 	    }
+ 	    Yes.Above @Yield {
+ 		@Send @OneRow { @CaptionVal @DP @Format @TableVal // @DupRunner}
+ 	    }
+ 	    Yes.None @Yield {
+ 		@Send @OneRow { @Format @TableVal // @DupRunner }
+ 	    }
+ 	    No.Below @Yield {
+ 		@SendEncl { @TableVal // @Send { @CaptionVal // @DupRunner } }
+ 	    }
+ 	    No.Above @Yield {
+ 		@Send { @CaptionVal // @SendEncl { @TableVal // @DupRunner } }
+ 	    }
+ 	    No.None @Yield {
+ 		@SendEncl { @TableVal // @DupRunner }
+ 	    }
+ 	  }
+ 	}
+ 
+ 	@Location @Case {
+ 	    Raw		  @Yield @RawTableVal
+ 	    Display	  @Yield { @NonRawTableVal &1rt }
+ 	    EvenPageTop   @Yield @EvenPageSend @NonRawTableVal
+ 	    EvenFullPage  @Yield @EvenFullPageSend @NonRawTableVal
+ 	    else	  @Yield @NonRawTableVal
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Index.                                                                 #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @IndexList { @Galley //1vx @IndexList }
+     def @BypassIndexList { @Galley //1vx @BypassIndexList }
+ 
+     def @IndexSection into { @IndexPlace&&following }
+ 	right etc
+     {
+ 	// @IndexBreak @Break @IndexList
+ 	// @IndexBreak @Break @BypassIndexList
+ 	// @ClearHeaderComponent
+ 	// etc
+     }
+ 
+     def @DoIndex into { @IndexList&&following }
+ 	left @Key
+ 	named indent { 0f }
+ 	named stem {}
+ 	right @Body
+     {
+ 	def @Enclose right x
+ 	{
+ 	    @IndexCtd.indent @Case {
+ 
+ 		Yes.0f @Yield {
+ 		    @ClearHeaderComponent
+ 		    //1vx
+ 		    x
+ 		    //1vx
+ 		    1vx @SetHeaderComponent {
+ 			indent @Wide &
+ 			stem @IndexCtdFormat {continued @WordVal @IndexCtdWord}
+ 		    }
+ 		    //1vx
+ 		    1vx @BeginHeaderComponent (unused)
+ 		}
+ 
+ 		Yes.1f @Yield {
+ 		    @EndHeaderComponent
+ 		    //1vx
+ 		    x
+ 		    //1vx
+ 		    1vx @BeginHeaderComponent {
+ 			indent @Wide &
+ 			stem @IndexCtdFormat {continued @WordVal @IndexCtdWord}
+ 		    }
+ 		}
+ 
+ 		else @Yield x
+ 
+ 	    }
+ 	}
+ 
+ 	def @Merge left x right y
+ 	{
+ 	    {x @Rump y} @Case
+ 	    {
+ 	        ""      @Yield  x
+ 		else    @Yield  { { x &"0.03fu" , } @Meld y }
+ 	    }
+ 
+ 	}
+ 
+ 	@IndexFont @Font @IndexBreak @Break { indent @Wide & @Body }
+     }
+ 
+     def @RawIndex
+ 	left x
+ 	named @Tag {}
+ 	named indent { 0f }
+ 	right y
+     {
+ 	@MakeIndex @Case {
+ 	    Yes  @Yield { @PageMark @Tag & x @DoIndex stem { y } indent { indent } y }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     macro @RawSubIndex    { @RawIndex indent { "1f" } }
+     macro @RawSubSubIndex { @RawIndex indent { "2f" } }
+ 
+     def @Index
+ 	left x
+ 	named @Tag {}
+ 	named indent { 0f }
+ 	named to {}
+ 	right y
+     {
+ 	def @PgMk right tag
+ 	{
+ 	  tag @CrossLink @PageOf tag
+ 	}
+ 
+ 	def @PgRange
+ 	{
+ 	    to @Case
+ 	    {
+ 		""    @Yield @PgMk @Tag
+ 		else  @Yield {
+ 		    { @PageOf @Tag } @Case
+ 		    {
+ 			{ @PageOf to } @Yield { @PgMk @Tag }
+ 			else	       @Yield { {@PgMk @Tag}--{@PgMk to} }
+ 		    }
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	@MakeIndex @Case {
+ 	    Yes @Yield {
+ 	    @PageMark @Tag &
+ 	    x @DoIndex stem { y } indent { indent } { y &"0.03fu" , @PgRange }
+ 	    }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     macro @SubIndex { @Index indent { "1f" } }
+     macro @SubSubIndex { @Index indent { "2f" } }
+ 
+     def @IndexBlanks
+     {
+ 	b @RawIndex {} c @RawIndex {} d @RawIndex {} e @RawIndex {}
+ 	f @RawIndex {} g @RawIndex {} h @RawIndex {} i @RawIndex {}
+ 	j @RawIndex {} k @RawIndex {} l @RawIndex {} m @RawIndex {}
+ 	n @RawIndex {} o @RawIndex {} p @RawIndex {} q @RawIndex {}
+ 	r @RawIndex {} s @RawIndex {} t @RawIndex {} u @RawIndex {}
+ 	v @RawIndex {} w @RawIndex {} x @RawIndex {} y @RawIndex {}
+ 	z @RawIndex {}
+     }
+ 
+     def @BypassBeginIndexPlace { @Galley }
+ 
+     def @BypassBeginIndex force into { @BypassBeginIndexPlace&&preceding } {}
+ 
+     def @BypassRawIndex force into { @BypassIndexList&&preceding }
+ 	named indent { 0f }
+ 	right x
+     {
+ 	&indent x
+     }
+ 
+     def @BypassEndIndex { @Null }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  IndexA.                                                                #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @IndexAList { @Galley //1vx @IndexAList }
+     def @BypassIndexAList { @Galley //1vx @BypassIndexAList }
+ 
+     def @IndexASection into { @IndexAPlace&&following }
+ 	right etc
+     {
+ 	// @IndexAList // etc
+ 	// @BypassIndexAList // etc
+     }
+ 
+     def @DoIndexA into { @IndexAList&&following }
+ 	left @Key
+ 	named indent { 0f }
+ 	right @Body
+     {
+ 	def @Merge left x right y
+ 	{
+ 	    {x @Rump y} @Case
+ 	    {
+ 	        ""      @Yield  x
+ 		else    @Yield  { { x &"0.03fu" , } @Meld y }
+ 	    }
+ 	}
+ 
+ 	@IndexAFont @Font @IndexABreak @Break { indent @Wide & @Body }
+     }
+ 
+     def @RawIndexA
+ 	left x
+ 	named @Tag {}
+ 	named indent { 0f }
+ 	right y
+     {
+ 	@MakeIndexA @Case {
+ 	    Yes  @Yield { @PageMark @Tag & x @DoIndexA indent { indent } y }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     macro @RawSubIndexA    { @RawIndexA indent { "1f" } }
+     macro @RawSubSubIndexA { @RawIndexA indent { "2f" } }
+ 
+     def @IndexA
+ 	left x
+ 	named @Tag {}
+ 	named indent { 0f }
+ 	named to {}
+ 	right y
+     {
+ 	def @PgMk right tag
+ 	{
+ 	  tag @CrossLink @PageOf tag
+ 	}
+ 
+ 	def @PgRange
+ 	{
+ 	    to @Case
+ 	    {
+ 		""    @Yield @PgMk @Tag
+ 		else  @Yield {
+ 		    { @PageOf @Tag } @Case
+ 		    {
+ 			{ @PageOf to } @Yield { @PgMk @Tag }
+ 			else	       @Yield { {@PgMk @Tag}--{@PgMk to} }
+ 		    }
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	@MakeIndexA @Case {
+ 	    Yes @Yield {
+ 	      @PageMark @Tag &
+ 	      x @DoIndexA indent { indent } { y &"0.03fu" , @PgRange }
+ 	    }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     macro @SubIndexA { @IndexA indent { "1f" } }
+     macro @SubSubIndexA { @IndexA indent { "2f" } }
+ 
+     def @IndexABlanks
+     {
+ 	b @RawIndexA {} c @RawIndexA {} d @RawIndexA {} e @RawIndexA {}
+ 	f @RawIndexA {} g @RawIndexA {} h @RawIndexA {} i @RawIndexA {}
+ 	j @RawIndexA {} k @RawIndexA {} l @RawIndexA {} m @RawIndexA {}
+ 	n @RawIndexA {} o @RawIndexA {} p @RawIndexA {} q @RawIndexA {}
+ 	r @RawIndexA {} s @RawIndexA {} t @RawIndexA {} u @RawIndexA {}
+ 	v @RawIndexA {} w @RawIndexA {} x @RawIndexA {} y @RawIndexA {}
+ 	z @RawIndexA {}
+     }
+ 
+     def @BypassBeginIndexAPlace { @Galley }
+ 
+     def @BypassBeginIndexA force into { @BypassBeginIndexAPlace&&preceding } {}
+ 
+     def @BypassRawIndexA force into { @BypassIndexAList&&preceding }
+ 	named indent { 0f }
+ 	right x
+     {
+ 	&indent x
+     }
+ 
+     def @BypassEndIndexA { @Null }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  IndexB.                                                                #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @IndexBList { @Galley //1vx @IndexBList }
+     def @BypassIndexBList { @Galley //1vx @BypassIndexBList }
+ 
+     def @IndexBSection into { @IndexBPlace&&following }
+ 	right etc
+     {
+ 	// @IndexBList // etc
+ 	// @BypassIndexBList // etc
+     }
+ 
+     def @DoIndexB into { @IndexBList&&following }
+ 	left @Key
+ 	named indent { 0f }
+ 	right @Body
+     {
+ 	def @Merge left x right y
+ 	{
+ 	    {x @Rump y} @Case
+ 	    {
+ 	        ""      @Yield  x
+ 		else    @Yield  { { x &"0.03fu" , } @Meld y }
+ 	    }
+ 	}
+ 
+ 	@IndexBFont @Font @IndexBBreak @Break { indent @Wide & @Body }
+     }
+ 
+     def @RawIndexB
+ 	left x
+ 	named @Tag {}
+ 	named indent { 0f }
+ 	right y
+     {
+ 	@MakeIndexB @Case {
+ 	    Yes  @Yield { @PageMark @Tag & x @DoIndexB indent { indent } y }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     macro @RawSubIndexB    { @RawIndexB indent { "1f" } }
+     macro @RawSubSubIndexB { @RawIndexB indent { "2f" } }
+ 
+     def @IndexB
+ 	left x
+ 	named @Tag {}
+ 	named indent { 0f }
+ 	named to {}
+ 	right y
+     {
+ 	def @PgMk right tag
+ 	{
+ 	  tag @CrossLink @PageOf tag
+ 	}
+ 
+ 	def @PgRange
+ 	{
+ 	    to @Case
+ 	    {
+ 		""    @Yield @PgMk @Tag
+ 		else  @Yield {
+ 		    { @PageOf @Tag } @Case
+ 		    {
+ 			{ @PageOf to } @Yield { @PgMk @Tag }
+ 			else	       @Yield { {@PgMk @Tag}--{@PgMk to} }
+ 		    }
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	@MakeIndexB @Case {
+ 	    Yes @Yield {
+ 	        @PageMark @Tag &
+ 	        x @DoIndexB indent { indent } { y &"0.03fu" , @PgRange }
+ 	    }
+ 	    else @Yield @Null
+ 	}
+     }
+ 
+     macro @SubIndexB { @IndexB indent { "1f" } }
+     macro @SubSubIndexB { @IndexB indent { "2f" } }
+ 
+     def @IndexBBlanks
+     {
+ 	b @RawIndexB {} c @RawIndexB {} d @RawIndexB {} e @RawIndexB {}
+ 	f @RawIndexB {} g @RawIndexB {} h @RawIndexB {} i @RawIndexB {}
+ 	j @RawIndexB {} k @RawIndexB {} l @RawIndexB {} m @RawIndexB {}
+ 	n @RawIndexB {} o @RawIndexB {} p @RawIndexB {} q @RawIndexB {}
+ 	r @RawIndexB {} s @RawIndexB {} t @RawIndexB {} u @RawIndexB {}
+ 	v @RawIndexB {} w @RawIndexB {} x @RawIndexB {} y @RawIndexB {}
+ 	z @RawIndexB {}
+     }
+ 
+     def @BypassBeginIndexBPlace { @Galley }
+ 
+     def @BypassBeginIndexB force into { @BypassBeginIndexBPlace&&preceding } {}
+ 
+     def @BypassRawIndexB force into { @BypassIndexBList&&preceding }
+ 	named indent { 0f }
+ 	right x
+     {
+ 	&indent x
+     }
+ 
+     def @BypassEndIndexB { @Null }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @LargeScaleStructure                                                   #
+     #                                                                         #
+     #  The prototype for the value of each large-scale structure symbol       #
+     #  (@Chapter, @Section, etc.)                                             #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @LargeScaleStructure
+ 	named tag {}			# tag of this large-scale structure sym
+ 	named type {}			# MajorIntro, Major, VeryMajor, or Minor
+ 	named initiallanguage {}	# its language
+ 	named title {}			# its full title
+ 	named runningtitle {}		# its running title
+ 	named aboveheadinggap { 0f }	# gap above heading
+ 	named headingfont {}		# its heading font
+ 	named headingbreak {}		# its heading break
+ 	named headingformat		# its heading format
+ 	    left @Num right @Body {}
+ 	named incontents { No }         # entry in table of contents required
+ 	named contentsindent { 0f }	# only if type is Major
+ 	named word {}
+ 	named numbers { None }
+ 	named attachnum {}		# only if numbers is not None
+ 	named retrievenum {}		# only if numbers is not None
+ 	named bypassnumber {}		# only if numbers is not None, or VeryMajor
+ 	named prefix {}			# prefix of number of this symbol
+ 	named pnprefix {}		# prefix for page numbers of this sym
+ 	named majornum { dft }
+ 	named majortitle { dft }
+ 	named minornum { dft }
+ 	named minortitle { dft }
+ 	named intheorems { No }
+ 	named indisplays { No }
+ 	named infigures { No }
+ 	named intables { No }
+ 	named inrunners { No }
+ 	named sendheader right @Body {}
+ 	named innergap {}
+ 	named endifmajor right innergap {
+ 	    @EndFigureList
+ 	    //innergap @EndNoteList 1
+ 	    //innergap @ChapRefSection
+ 	}
+ 	named wantindefinite { No }
+ 	right @Body
+     {
+ 
+ 	def @ShortNum
+ 	{
+ 	    numbers @Then {
+ 		bypassnumber @Dft {
+ 		    prefix @Join { numbers @Num retrievenum }
+ 		}
+ 	    }
+ 	}
+ 
+ 	def @LongNum
+ 	{
+ 	    numbers @Then {
+ 		initiallanguage @Language { word @NumSep @ShortNum }
+ 	    }
+ 	}
+ 
+ 	def @ShortTitle
+ 	{
+ 	    initiallanguage @Language { runningtitle @Dft title }
+ 	}
+ 
+         def @Run right start
+         {
+ 	    inrunners @Do type @Case {
+ 
+ 		{ Major MajorIntro } @Yield {
+ 		    start @Runner
+ 			@MajorNum { majornum @Dft @LongNum }
+ 			@MajorTitle { majortitle @Dft @ShortTitle }
+ 			@MinorNum {}
+ 			@MinorTitle {}
+ 			@Owner { tag }
+ 			@Prefix { pnprefix @Join @ShortNum }
+ 		}
+ 
+ 		{ ExtraMajor ExtraMajorIntro } @Yield {
+ 		    start @Runner
+ 			@MajorNum { majornum @Dft @LongNum }
+ 			@MajorTitle { majortitle @Dft @ShortTitle }
+ 			@MinorNum { majornum @Dft @LongNum }
+ 			@MinorTitle { majortitle @Dft @ShortTitle }
+ 			@Owner { tag }
+ 			@Prefix { pnprefix @Join @ShortNum }
+ 		}
+ 
+ 		{ VeryMajor } @Yield {
+ 		    start @Runner
+ 		        @MajorNum { majornum @Dft @LongNum }
+ 		        @MajorTitle { majortitle @Dft @ShortTitle }
+ 		        @MinorNum {}
+ 		        @MinorTitle {}
+ 		        @Owner { tag }
+ 		        @Prefix {}
+ 		}
+ 
+ 		Minor @Yield {
+ 		    start @Runner
+ 			@MajorNum { majornum @Dft @LongNum }
+ 			@MajorTitle { majortitle @Dft @ShortTitle }
+ 			@MinorNum { minornum @Dft @LongNum }
+ 			@MinorTitle { minortitle @Dft @ShortTitle }
+ 			@Owner { tag }
+ 			@Prefix { pnprefix @Join @ShortNum }
+ 		}
+ 	    }
+         }
+ 
+ 	def @ContentsStuff
+ 	{
+ 	    incontents.type @Case {
+ 
+ 		Yes.Minor @Yield {
+ 			incontents @ContentsEntry
+ 			    indent { contentsindent }
+ 			    crosstag { tag }
+ 			    number { @LongNum }
+ 			    title { initiallanguage @Language title }
+ 			    pagenum { @PageOf tag }
+ 	        }
+ 
+ 		{ Yes.Major Yes.MajorIntro Yes.ExtraMajor Yes.ExtraMajorIntro } @Yield {
+ 			incontents @MajorContentsEntry
+ 			    crosstag { tag }
+ 			    number { @LongNum }
+ 			    title { initiallanguage @Language title }
+ 			    pagenum { @PageOf tag }
+ 	        }
+ 
+ 		{ Yes.VeryMajor } @Yield {
+ 			incontents @VeryMajorContentsEntry
+ 			    title { initiallanguage @Language { bypassnumber: &2s title } }
+ 		}
+ 
+ 		else @Yield @Null
+ 	    }
+ 	}
+ 
+ 	def @Heading
+ 	{
+ 
+ 	    type @Case {
+ 
+ 		Minor @Yield {
+ 		    headingfont @Font
+ 		    headingbreak @Break @Protect {@LongNum headingformat title}
+ 		    // @PageMark tag
+ 		}
+ 
+ 		{ Major MajorIntro ExtraMajor ExtraMajorIntro } @Yield {
+ 		    sendheader {
+ 		    //aboveheadinggap
+ 		    headingfont @Font
+ 		    headingbreak @Break { @LongNum headingformat title }
+ 		    // @PageMark tag
+ 		    }
+ 		}
+ 
+ 		{ VeryMajor } @Yield { sendheader {
+ 		    //aboveheadinggap
+ 		    headingfont @Font
+ 		    headingbreak @Break { bypassnumber headingformat title }
+ 		    // @PageMark tag
+ 		    }
+ 		}
+ 	    }
+ 	}
+ 
+ 	def @IfMajor right x
+ 	{
+ 	    type @Case {
+ 		{ MajorIntro Major ExtraMajor ExtraMajorIntro } @Yield x
+ 		else @Yield @Null
+ 	    }
+ 	}
+ 
+ 	def @StartIfMajor {
+ 	    type @Case {
+ 		{ MajorIntro Major ExtraMajor ExtraMajorIntro VeryMajor } @Yield Start
+ 		else @Yield NonStart
+ 	    }
+ 	}
+ 
+ 	initiallanguage @Language {
+ 		@Heading
+ 	    //   wantindefinite @Case {
+ 		    Yes @Yield @Null
+ 		    No  @Yield ""
+ 		}
+             //  numbers @Do {
+ 		  attachnum & @NumberMarker @Tag { tag } @Value { @ShortNum }
+ 		}
+ 	    //  @IfMajor { @FootNoteThrough @Do @BeginFootNoteCounter }
+             //  @Run @StartIfMajor
+             //  @ContentsStuff
+             //  intheorems @BeginAllCounters @ShortNum
+             //  indisplays @BeginDisplayCounter @ShortNum
+             //  infigures @BeginFigureCounter @ShortNum
+             //  intables @BeginTableCounter @ShortNum
+             //  @Body
+ 	    //innergap  @IfMajor endifmajor innergap
+             //  @Run NonStart
+ 	}
+     }
+ 
+ @End @DocumentSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eiffel
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eiffel:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eiffel	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,109 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for Eiffel program printing                               #
+ #                                                                             #
+ #   Version 3.0                                                               #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 April 2000                                                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude line                                                           #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for this programming         #
+ #  language, and should not be touched.                                       #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { eiffelf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Use clause                                                                #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @EiffelSetup
+   # pipe			{		} # pipe source through this
+   # numbered			{ No		} # No, Yes, or a line number
+   # style	     { varying @OrIfPlain fixed	} # fixed, varying, or symbol
+ 
+   # the following options apply when style is "fixed"
+ 
+   # fixedfont			{ Courier	} # font family
+   # fixedsize			{ -1.0p		} # font size
+   # fixedline			{ 1.0vx		} # line-space
+   # fixedtabin			{ 8		} # tab interval
+   # fixedtabout			{ 8s		} # tab width
+ 
+   # fixedidentifiers		{ Base		} # identifier face
+   # fixedkeywords		{ Base		} # keyword face
+   # fixedoperators		{ Base		} # operator face
+   # fixednumbers		{ Base		} # number face
+   # fixedstrings		{ Base		} # string face
+   # fixedcomments		{ Base		} # comment face
+   # fixedlinenumbers		{ Base		} # line numbers face
+ 
+   # fixedidentifiersformat	{ @Body		} # identifiers format
+   # fixedkeywordsformat		{ @Body		} # keywords format
+   # fixedoperatorsformat	{ @Body		} # operators format
+   # fixednumbersformat		{ @Body		} # numbers format
+   # fixedstringsformat		{ @Body		} # strings format
+   # fixedcommentsformat		{ @Body		} # comments format
+   # fixedlinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "varying"
+ 
+   # varyingfont			{		} # font family
+   # varyingsize			{ 1.0f		} # font size
+   # varyingline			{ 1.0vx		} # line-space
+   # varyingtabin		{ 8		} # tab interval
+   # varyingtabout		{ 3f		} # tab width
+ 
+   # varyingidentifiers		{ Slope		} # identifier face
+   # varyingkeywords		{ Bold		} # keyword face
+   # varyingoperators		{ Base		} # operator face
+   # varyingnumbers		{ Base		} # number face
+   # varyingstrings		{ Slope		} # string face
+   # varyingcomments		{ Base		} # comment face
+   # varyinglinenumbers		{ Base		} # line numbers face
+ 
+   # varyingidentifiersformat	{ @Body		} # identifiers format
+   # varyingkeywordsformat	{ @Body		} # keywords format
+   # varyingoperatorsformat	{ @Body		} # operators format
+   # varyingnumbersformat	{ @Body		} # numbers format
+   # varyingstringsformat	{ @Body		} # strings format
+   # varyingcommentsformat	{ @Body		} # comments format
+   # varyinglinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "symbol"
+ 
+   # symbolfont			{		} # font family
+   # symbolsize			{ 1.0f		} # font size
+   # symbolline			{ 1.0vx		} # line-space
+   # symboltabin			{ 8		} # tab interval
+   # symboltabout		{ 3f		} # tab width
+ 
+   # symbolidentifiers		{ Slope		} # identifier face
+   # symbolkeywords		{ Bold		} # keyword face
+   # symboloperators		{ Base		} # operator face
+   # symbolnumbers		{ Base		} # number face
+   # symbolstrings		{ Slope		} # string face
+   # symbolcomments		{ Base		} # comment face
+   # symbollinenumbers		{ Base		} # line numbers face
+ 
+   # symbolidentifiersformat	{ @Body		} # identifiers format
+   # symbolkeywordsformat	{ @Body		} # keywords format
+   # symboloperatorsformat	{ @Body		} # operators format
+   # symbolnumbersformat		{ @Body		} # numbers format
+   # symbolstringsformat		{ @Body		} # strings format
+   # symbolcommentsformat	{ @Body		} # comments format
+   # symbollinenumbersformat	{ @Body		} # line numbers format
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eiffelf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eiffelf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eiffelf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,390 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @EiffelSetup package for formatting Eiffel programs                   #
+ #                                                                             #
+ #  Version 3.0                                                                #
+ #  Jeffrey H. Kingston                                                        #
+ #  5 April 2000                                                               #
+ #                                                                             #
+ #  This package uses a filtered body parameter to convert program source      #
+ #  code into Lout source.  The filter program is prg2lout, which is           #
+ #  distributed with Lout and should be compiled and installed wherever        #
+ #  Lout itself is.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ export @Eiffel
+ def @EiffelSetup
+     named pipe			{	}  # pipe through this first
+     named numbered		{ No	}  # want lines numbered?
+     named style
+ 	named @OrIfPlain left x right y
+ 	{ @BackEnd @Case { PlainText @Yield y else @Yield x } }
+ 				{ varying @OrIfPlain fixed }  # print style
+ 
+     # the following options apply when style is "fixed"
+     named fixedfont				{ Courier }# font family
+     named fixedsize				{ -1.0p	}  # font size
+     named fixedline				{ 1.0vx	}  # line-space
+     named fixedtabin				{ 8	}  # tab interval
+     named fixedtabout				{ 8s	}  # tab width
+ 
+     named fixedidentifiers			{ Base	}  # identifier face
+     named fixedkeywords				{ Base	}  # keyword face
+     named fixedoperators			{ Base	}  # operator face
+     named fixednumbers				{ Base	}  # number face
+     named fixedstrings				{ Base	}  # string face
+     named fixedcomments				{ Base	}  # comment face
+     named fixedlinenumbers			{ Base	}  # line numbers face
+ 
+     named fixedidentifiersformat right @Body	{ @Body	}  # identifier format
+     named fixedkeywordsformat right @Body	{ @Body	}  # keyword format
+     named fixedoperatorsformat right @Body	{ @Body	}  # operators format
+     named fixednumbersformat right @Body	{ @Body	}  # number format
+     named fixedstringsformat right @Body	{ @Body	}  # string format
+     named fixedcommentsformat right @Body	{ @Body	}  # comment format
+     named fixedlinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "varying"
+     named varyingfont				{	}  # font family
+     named varyingsize				{ 1.0f	}  # font size
+     named varyingline				{ 1.0vx	}  # line-space
+     named varyingtabin				{ 8	}  # tab interval
+     named varyingtabout				{ 3f	}  # tab width
+ 
+     named varyingidentifiers			{ Slope	}  # identifier face
+     named varyingkeywords			{ Bold	}  # keyword face
+     named varyingoperators			{ Base	}  # operator face
+     named varyingnumbers			{ Base	}  # number face
+     named varyingstrings			{ Slope	}  # string face
+     named varyingcomments			{ Base	}  # comment face
+     named varyinglinenumbers			{ Base	}  # line numbers face
+ 
+     named varyingidentifiersformat right @Body	{ @Body	}  # identifier format
+     named varyingkeywordsformat right @Body	{ @Body	}  # keyword format
+     named varyingoperatorsformat right @Body	{ @Body	}  # operators format
+     named varyingnumbersformat right @Body	{ @Body	}  # number format
+     named varyingstringsformat right @Body	{ @Body	}  # string format
+     named varyingcommentsformat right @Body	{ @Body	}  # comment format
+     named varyinglinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "symbol"
+     named symbolfont				{	}  # font family
+     named symbolsize				{ 1.0f	}  # font size
+     named symbolline				{ 1.0vx	}  # line-space
+     named symboltabin				{ 8	}  # tab interval
+     named symboltabout				{ 3f	}  # tab width
+ 
+     named symbolidentifiers			{ Slope	}  # identifier face
+     named symbolkeywords			{ Bold	}  # keyword face
+     named symboloperators			{ Base	}  # operator face
+     named symbolnumbers				{ Base	}  # number face
+     named symbolstrings				{ Slope	}  # string face
+     named symbolcomments			{ Base	}  # comment face
+     named symbollinenumbers			{ Base	}  # line numbers face
+ 
+     named symbolidentifiersformat right @Body	{ @Body	}  # identifier format
+     named symbolkeywordsformat right @Body	{ @Body	}  # keyword format
+     named symboloperatorsformat right @Body	{ @Body	}  # operators format
+     named symbolnumbersformat right @Body	{ @Body	}  # number format
+     named symbolstringsformat right @Body	{ @Body	}  # string format
+     named symbolcommentsformat right @Body	{ @Body	}  # comment format
+     named symbollinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+ @Begin
+ 
+     export
+     
+ 	@PI @PK @PO @PN @PS @PC @PL @PA @PM @PD
+ 	@A "$>"
+ 
+     def @Eiffel
+ 	named style        { style         }  # style
+ 	named numbered	   { numbered	   }  # want numbered lines?
+ 	named pipe         { pipe          }  # pipe through this first
+ 	named font         { dft           }  # font family
+ 	named size         { dft           }  # font size
+ 	named line         { dft           }  # line-space
+ 	named tabin        { dft           }  # tab interval
+ 	named tabout       { dft           }  # tab width
+ 	named identifiers  { dft           }  # ident. font
+ 	named keywords     { dft           }  # keyword font
+ 	named operators    { dft           }  # operator font
+ 	named numbers      { dft           }  # number font
+ 	named strings      { dft           }  # string font
+ 	named comments     { dft           }  # comment font
+ 	named linenumbers  { dft           }  # line numbers font
+ 	body @Body			      # filtered, see below
+     @Begin
+ 
+ 	def @Test	# returns x unless x is dft
+ 	    left x
+ 	    named iffixed {}
+ 	    named ifvarying {}
+ 	    named ifsymbol {}
+ 	{
+ 	    x @Case {
+ 		dft @Yield {
+ 		    style @Case {
+ 			fixed   @Yield { iffixed   }
+ 			varying @Yield { ifvarying }
+ 			symbol  @Yield { ifsymbol  }
+ 		    }
+ 		}
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @Else	# returns x, or y if x is dft
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		dft  @Yield y
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitTab
+ 	{
+ 	  tabin @Test
+ 	      iffixed   { fixedtabin   }
+ 	      ifvarying { varyingtabin }
+ 	      ifsymbol  { symboltabin  }
+ 	}
+ 
+ 
+ 	def @InitTabWidth
+ 	{
+ 	  tabout @Test
+ 	      iffixed   { fixedtabout   }
+ 	      ifvarying { varyingtabout }
+ 	      ifsymbol  { symboltabout  }
+ 	}
+ 
+ 
+ 	def @Filter
+ 	{
+ 	    def wantnumbered
+ 	    {
+ 		numbered @Case {
+ 		  { No no }	@Yield ""
+ 		  { Yes yes }	@Yield "-L"
+ 		  else          @Yield { "-L"numbered }
+ 		}
+ 	    }
+ 
+ 	    pipe @Case {
+ 		"" @Yield {
+ 	    	    "prg2lout -r -lEiffel" wantnumbered -i{@FilterIn}
+ 		    -o{@FilterOut} -e{@FilterErr}
+ 		    -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 		else @Yield {
+ 	    	    "cat" @FilterIn "|" pipe "|"
+ 		    "prg2lout -r -lEiffel" wantnumbered -o{@FilterOut}
+ 		    -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitFontFamily
+ 	{
+ 	  font @Test
+ 	      iffixed   { fixedfont   }
+ 	      ifvarying { varyingfont }
+ 	      ifsymbol  { symbolfont  }
+ 	}
+ 
+ 
+ 	def @InitSize
+ 	{
+ 	  size @Test
+ 	      iffixed   { fixedsize   }
+ 	      ifvarying { varyingsize }
+ 	      ifsymbol  { symbolsize  }
+ 	}
+ 
+ 
+ 	def @InitLine
+ 	{
+ 	  line @Test
+ 	      iffixed   { fixedline   }
+ 	      ifvarying { varyingline }
+ 	      ifsymbol  { symbolline  }
+ 	}
+ 
+ 
+ 	def @PI		# for formatting identifiers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedidentifiersformat {
+ 		    { identifiers @Else fixedidentifiers } @Font x
+ 		}
+ 		varying @Yield varyingidentifiersformat {
+ 		    { identifiers @Else varyingidentifiers } @Font x
+ 		}
+ 		symbol @Yield symbolidentifiersformat {
+ 		    { identifiers @Else symbolidentifiers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PK		# for formatting keywords
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedkeywordsformat {
+ 		    { keywords @Else fixedkeywords } @Font x
+ 		}
+ 		varying @Yield varyingkeywordsformat {
+ 		    { keywords @Else varyingkeywords } @Font x
+ 		}
+ 		symbol @Yield symbolkeywordsformat {
+ 		    { keywords @Else symbolkeywords } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PO		# for formatting operators
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedoperatorsformat {
+ 		    { operators @Else fixedoperators } @Font x
+ 		}
+ 		varying @Yield varyingoperatorsformat {
+ 		    { operators @Else varyingoperators } @Font x
+ 		}
+ 		symbol @Yield symboloperatorsformat {
+ 		    { operators @Else symboloperators } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PN		# for formatting numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixednumbersformat {
+ 		    { numbers @Else fixednumbers } @Font x
+ 		}
+ 		varying @Yield varyingnumbersformat {
+ 		    { numbers @Else varyingnumbers } @Font x
+ 		}
+ 		symbol @Yield symbolnumbersformat {
+ 		    { numbers @Else symbolnumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PS		# for formatting strings
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedstringsformat {
+ 		    { strings @Else fixedstrings } @Font x
+ 		}
+ 		varying @Yield varyingstringsformat {
+ 		    { strings @Else varyingstrings } @Font x
+ 		}
+ 		symbol @Yield symbolstringsformat {
+ 		    { strings @Else symbolstrings } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PC		# for formatting comments
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedcommentsformat {
+ 		    { comments @Else fixedcomments } @Font x
+ 		}
+ 		varying @Yield varyingcommentsformat {
+ 		    { comments @Else varyingcomments } @Font x
+ 		}
+ 		symbol @Yield symbolcommentsformat {
+ 		    { comments @Else symbolcomments } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PL		# for formatting line numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedlinenumbersformat {
+ 		    { linenumbers @Else fixedlinenumbers } @Font x
+ 		}
+ 		varying @Yield varyinglinenumbersformat {
+ 		    { linenumbers @Else varyinglinenumbers } @Font x
+ 		}
+ 		symbol @Yield symbollinenumbersformat {
+ 		    { linenumbers @Else symbollinenumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PA		# for formatting asterisks
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "*"
+ 		else @Yield { "0.5w" @VShift "*" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PM		# for formatting minus signs
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "-"
+ 		else @Yield style @Case {
+ 		    fixed   @Yield "-"
+ 		    else    @Yield { { Symbol Base } @Font @Char "minus" }
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PD		# for formatting dots, if wanted larger
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "."
+ 		else @Yield { "1.4f" @Font "+0.04f" @VShift "." &"0.05f" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @A		# get characters from the Adobe Symbol font
+ 	    left sym
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		symbol	@Yield { { Symbol Base } @Font @Char sym }
+ 		else	@Yield { x			}
+ 	    }
+ 	}
+ 
+ 
+ 	macro "$>" { {} & }
+ 
+ 
+ 	{ @InitFontFamily Base @InitSize } @Font
+ 	{ @InitLine lines nohyphen } @Break @Body
+ 
+     @End @Eiffel
+ 
+ @End @EiffelSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eq
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eq:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eq	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,27 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for equation formatting                                   #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @SysInclude { eqf } line                                               #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for equations, and should    #
+ #  not be touched.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { eqf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  This package does not offer default options that can be changed.           #
+ #                                                                             #
+ ###############################################################################


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eqf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eqf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/eqf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,1696 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @Eq package for equation formatting (Version 3.0)                     #
+ #                                                                             #
+ #  Version 1.0 by Jeffrey H. Kingston, December 1990.                         #
+ #  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
+ #  Version 3.0 by Jeffrey H. Kingston and Robert Marsa, March 1996.           #
+ #                                                                             #
+ #  This package makes extensive use of the Adobe Systems Symbol font, and     #
+ #  it assumes that the font has not been recoded.  It could be rewritten      #
+ #  using the @Char symbol to be made independent of any recoding, but since   #
+ #  there seems no reason to ever recode this font, I haven't bothered.        #
+ #                                                                             #
+ #  See "Eq - a Lout package for typesetting mathematics" for user             #
+ #  information.  Acknowledgement:  the @Eq language is based closely on       #
+ #  the Eqn language of B. W. Kernighan and L. L. Cherry; the spacing rules    #
+ #  are similar to those of the TeX system by D. E. Knuth.                     #
+ #                                                                             #
+ #  Version 3.0 makes use of the new x and y units of measurement to improve   #
+ #  the spacing rules.                                                         #
+ #                                                                             #
+ ###############################################################################
+ 
+ export	"`" "``" "```" bin rel punct non vctr big small
+ 
+ 	space exclam universal numbersign existential percent
+ 	ampersand suchthat parenleft parenright asteriskmath
+ 	plus comma minus period slash zero one two three four
+ 	five six seven eight nine colon semicolon less equal
+ 	greater question congruent Alpha Beta Chi Delta Epsilon
+ 	Phi Gamma Eta Iota thetaone Kappa Lambda Mu Nu Omicron
+ 	Pi Theta Rho Sigma Tau Upsilon sigmaone Omega Xi Psi Zeta
+ 	bracketleft therefore bracketright perpendicular underscore
+ 	radicalex alpha beta chi delta epsilon phi gamma eta iota
+ 	phione kappa lambda mu nu omicron pi theta rho sigma tau
+ 	upsilon omegaone omega xi psi zeta braceleft bar braceright
+ 	similar Upsilonone minute lessequal fraction infinity florin
+ 	club diamond heart spade arrowboth arrowleft arrowup
+ 	arrowright arrowdown degree plusminus second greaterequal
+ 	multiply proportional partialdiff bullet divide notequal
+ 	equivalence approxequal ellipsis arrowvertex arrowhorizex
+ 	carriagereturn aleph Ifraktur Rfraktur weierstrass
+ 	circlemultiply circleplus emptyset intersection union
+ 	propersuperset reflexsuperset notsubset propersubset
+ 	reflexsubset element notelement angle gradient registerserif
+ 	copyrightserif trademarkserif product radical dotmath
+ 	logicalnot logicaland logicalor arrowdblboth arrowdblleft
+ 	arrowdblup arrowdblright arrowdbldown lozenge angleleft
+ 	registersans copyrightsans trademarksans summation parenlefttp
+ 	parenleftex parenleftbt bracketlefttp bracketleftex
+ 	bracketleftbt bracelefttp braceleftmid braceleftbt braceex
+ 	angleright integral integraltp integralex integralbt
+ 	parenrighttp parenrightex parenrightbt bracketrighttp
+ 	bracketrightex bracketrightbt bracerighttp bracerightmid
+ 	bracerightbt
+ 
+ 	hbar Re Im partial infty prime nabla surd top bot dbar
+ 	triangle backslash forall exists neg
+ 	circle filledcircle square
+ 
+ 	"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
+ 
+ 	sum prod coprod int oint bcap bcup bvee bwedge bodot botimes
+ 	boplus buplus
+ 
+ 	"+" "-" "+-" "-+" setminus cdot times "*" circ div cap cup uplus
+ 	sqcap sqcup triangleleft triangleright
+ 	wr bigcirc bigtriangleup bigtriangledown vee wedge oplus ominus
+ 	otimes oslash odot dagger daggerdbl amalg
+ 
+ 	"<" ">" "=" "<=" prec preceq "<<" subset subseteq sqsubseteq
+ 	in vdash smile frown ">=" succ succeq ">>" supset supseteq
+ 	sqsupseteq ni dashv mid parallel "==" "~" "-~" asymp "~~"
+ 	"=~" bowtie propto models doteq trieq perp notsub notin "!=" not
+ 	"<->" "<--" "-->" up down "<=>" "<==" "==>" dblup dbldown
+ 	":" "::" ":="
+ 
+ 	lpar blpar rpar brpar lbrack blbrack rbrack brbrack lbrace blbrace
+ 	rbrace brbrace lfloor blfloor rfloor brfloor lceil blceil
+ 	rceil brceil langle blangle rangle brangle
+ 
+ 	";" "," col
+ 	
+ 	"!" "?" "%" "(" ")" "[" "]"
+ 
+ 	arccos arcsin arctan arg cos cosh cot coth csc deg det dim exp
+ 	gcd hom inf ker lg lim liminf limsup ln log max min Pr sec sin
+ 	sinh supr tan tanh mod ldots cdots vdots ddots del grad
+ 	"..." ",...," "'" "''" "'''" "''''" empty
+ 
+ 	triangleup triangledown
+ 	
+ 	leftarrow longleftarrow dblleftarrow dbllongleftarrow
+ 	rightarrow longrightarrow dblrightarrow dbllongrightarrow
+ 	leftrightarrow longleftrightarrow dblleftrightarrow dbllongleftrightarrow
+ 	mapsto longmapsto hookleftarrow hookrightarrow leadsto
+ 	leftharpoonup rightharpoonup leftharpoondown rightharpoondown
+ 	rightleftharpoons
+ 	uparrow dbluparrow downarrow dbldownarrow updownarrow dblupdownarrow
+ 	nearrow searrow swarrow nwarrow
+ 
+ 	sup sub tsub supp on ton frac half third over from to widefrom wideto
+ 	dot dotdot hat tilde vec dyad overbar underbar sqrt root zroot
+ 	nextcol above labove cabove rabove mabove
+ 	matrix pmatrix bmatrix brmatrix fmatrix cmatrix amatrix
+ 
+ def @Eq                  
+     body @Body
+ @Begin
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #  Context-sensitive format changes.                              #
+     #                                                                 #
+     #  Equation formatting (according to Knuth) demands changes in    #
+     #  the appearance of equations depending on context.  These are:  #
+     #                                                                 #
+     #     @Smaller x      Superscripts and subscripts are to be set   #
+     #                     in a smaller font size.  The @Smaller       #
+     #                     symbol implements this by changing the      #
+     #                     f unit.                                     #
+     #                                                                 #
+     #     @HSqueeze x     The horizontal space surrounding binary     #
+     #                     operators and relations is to be reduced    #
+     #                     within superscripts and subscripts, etc.    #
+     #                     The @HSqueeze symbol implements this by     #
+     #                     changing the y unit, which is not used by   #
+     #                     Lout but which is used by symbols @ThinGap, #
+     #                     @MedGap and @ThickGap.                      #
+     #                                                                 #
+     #     @VSqueeze x     The vertical space taken by superscripts    #
+     #                     and subscripts is to be reduced within      #
+     #                     built-up fractions and under root signs.    #
+     #                     The @VSqueeze symbol implements this by     #
+     #                     changing the z unit, which is not used by   #
+     #                     Lout but is used by the @SupGap symbol.     #
+     #                                                                 #
+     #  Knuth also recommends some changes that depend on whether the  #
+     #  equation is displayed or inline; these are not implemented.    #
+     #                                                                 #
+     ###################################################################
+ 
+     def @SpaceGap { 0.05f  }
+ 
+     def @Smaller  right x { 0.7f @Font @SpaceGap @Space x }
+ 
+     def @HSqueeze right x { 0.2f @YUnit x }
+ 
+     def @VSqueeze right x { 0.7f @ZUnit x }
+ 
+     def @SkewGap  { 0.05f  }
+     def @SupGap   { 0.43zk }
+     def @ThinGap  { 0.15y  }
+     def @MedGap   { 0.20y  }
+     def @ThickGap { 0.25y  }
+     def @ColGap   { 0.8f   }
+     def @RowGap   { 0.5f   }
+ 
+     def "`"       { &@ThinGap  }
+     def "``"      { &@MedGap   }
+     def "```"     { &@ThickGap }
+ 
+     def bin	right x { ``  x ``  }
+     def rel	right x { ``` x ``` }
+     def punct	right x {     x `   }
+     def non	right x { 0c @YUnit x }
+     def big	right x { 1.3f @Font @SpaceGap @Space x }
+     def small	right x { 0.6f @Font @SpaceGap @Space x }
+ 
+     def @Base   right x { Base @Font x }
+     def @Sym    right x { {Symbol Base} @Font x }
+ 
+     def @HLine
+ 	named line { @BackEnd @Case { PostScript @Yield { "0.05 ft setlinewidth" } PDF @Yield { "__mul(__loutf, 0.05) w" } } }
+     {
+ 	@BackEnd @Case {
+ 	  PostScript @Yield {
+ 	    { "0 0 moveto xsize 0 lineto" line "stroke" } @Graphic {}
+ 	  }
+ 	  PDF @Yield {	# note re-arrangement of commands (setlinewidth (='w') not allowed in a path)
+ 	    { line "0 0 m __xsize 0 l s" } @Graphic {}
+ 	  }
+ 	}
+     }
+ 
+     def @VLine
+     {
+ 	@BackEnd @Case {
+ 	  PostScript @Yield {
+ 	    "0 0 moveto 0 ysize lineto 0.05 ft setlinewidth stroke" @Graphic {}
+ 	  }
+ 	  PDF @Yield {
+ 	    "__mul(__loutf, 0.05) w 0 0 m 0 __ysize l s" @Graphic {}
+ 	  }
+ 	}
+     }
+ 
+     def vctr
+ 	right x
+     {
+ 	0.5w @VShift x
+     }
+ 
+     def @Strut right x
+     {
+ 	@OneCol { x | @OneRow { 0.5f @High ^/ 0.5f @High } }
+     }
+ 
+     ###################################################################
+     #                                                                 #
+     #   Full names                                                    #
+     #                                                                 #
+     #   These symbols and their names are taken directly from the     #
+     #   Adobe Systems Inc. Symbol font (see PostScript Language       #
+     #   Reference Manual, pp. 256-257).  The only differences are:    #
+     #                                                                 #
+     #      Adobe:  theta1        Eq:  thetaone                        #
+     #              sigma1             sigmaone                        #
+     #              phi1               phione                          #
+     #              omega1             omegaone                        #
+     #                                                                 #
+     #   These were needed since Lout identifiers do not have digits.  #
+     #                                                                 #
+     ###################################################################
+ 
+     def space           { @Sym "\040"  }
+     def exclam          { @Sym "\041"  }
+     def universal       { @Sym "\042"  }
+     def numbersign      { @Sym "\043"  }
+     def existential     { @Sym "\044"  }
+     def percent         { @Sym "\045"  }
+     def ampersand       { @Sym "\046"  }
+     def suchthat        { @Sym "\047"  }
+     def parenleft       { @Sym "\050"  }
+     def parenright      { @Sym "\051"  }
+     def asteriskmath    { @Sym "\052"  }
+     def plus            { @Sym "+"     }
+     def comma           { @Sym "\054"  }
+     def minus           { @Sym "-"     }
+     def period          { @Sym "\056"  }
+     def slash           { @Sym "\057"  }
+     def zero            { @Sym "\060"  }
+     def one             { @Sym "\061"  }
+     def two             { @Sym "\062"  }
+     def three           { @Sym "\063"  }
+     def four            { @Sym "\064"  }
+     def five            { @Sym "\065"  }
+     def six             { @Sym "\066"  }
+     def seven           { @Sym "\067"  }
+     def eight           { @Sym "\070"  }
+     def nine            { @Sym "\071"  }
+     def colon           { @Sym "\072"  }
+     def semicolon       { @Sym "\073"  }
+     def less            { @Sym "\074"  }
+     def equal           { @Sym "\075"  }
+     def greater         { @Sym "\076"  }
+     def question        { @Sym "\077"  }
+     def congruent       { @Sym "\100"  }
+     def Alpha           { @Sym "\101"  }
+     def Beta            { @Sym "\102"  }
+     def Chi             { @Sym "\103"  }
+     def Delta           { @Sym "\104"  }
+     def Epsilon         { @Sym "\105"  }
+     def Phi             { @Sym "\106"  }
+     def Gamma           { @Sym "\107"  }
+     def Eta             { @Sym "\110"  }
+     def Iota            { @Sym "\111"  }
+     def thetaone        { @Sym "\112"  }
+     def Kappa           { @Sym "\113"  }
+ 
+     def Lambda          { @Sym "\114"  }
+     def Mu              { @Sym "\115"  }
+     def Nu              { @Sym "\116"  }
+     def Omicron         { @Sym "\117"  }
+     def Pi              { @Sym "\120"  }
+     def Theta           { @Sym "\121"  }
+     def Rho             { @Sym "\122"  }
+     def Sigma           { @Sym "\123"  }
+     def Tau             { @Sym "\124"  }
+     def Upsilon         { @Sym "\125"  }
+     def sigmaone        { @Sym "\126"  }
+     def Omega           { @Sym "\127"  }
+     def Xi              { @Sym "\130"  }
+     def Psi             { @Sym "\131"  }
+     def Zeta            { @Sym "\132"  }
+     def bracketleft     { @Sym "\133"  }
+     def therefore       { @Sym "\134"  }
+     def bracketright    { @Sym "\135"  }
+     def perpendicular   { @Sym "\136"  }
+     def underscore      { @Sym "\137"  }
+     def radicalex       { @Sym "\140"  }
+     def alpha           { @Sym "\141"  }
+     def beta            { @Sym "\142"  }
+     def chi             { @Sym "\143"  }
+     def delta           { @Sym "\144"  }
+     def epsilon         { @Sym "\145"  }
+     def phi             { @Sym "\146"  }
+     def gamma           { @Sym "\147"  }
+     def eta             { @Sym "\150"  }
+     def iota            { @Sym "\151"  }
+     def phione          { @Sym "\152"  }
+     def kappa           { @Sym "\153"  }
+     def lambda          { @Sym "\154"  }
+     def mu              { @Sym "\155"  }
+     def nu              { @Sym "\156"  }
+ 
+     def omicron         { @Sym "\157"  }
+     def pi              { @Sym "\160"  }
+     def theta           { @Sym "\161"  }
+     def rho             { @Sym "\162"  }
+     def sigma           { @Sym "\163"  }
+     def tau             { @Sym "\164"  }
+     def upsilon         { @Sym "\165"  }
+     def omegaone        { @Sym "\166"  }
+     def omega           { @Sym "\167"  }
+     def xi              { @Sym "\170"  }
+     def psi             { @Sym "\171"  }
+     def zeta            { @Sym "\172"  }
+     def braceleft       { @Sym "\173"  }
+     def bar             { @Sym "\174"  }
+     def braceright      { @Sym "\175"  }
+     def similar         { @Sym "\176"  }
+     def Upsilonone      { @Sym "\241"  }
+     def minute          { @Sym "\242"  }
+     def lessequal       { @Sym "\243"  }
+     def fraction        { @Sym "\244"  }
+     def infinity        { "1.2f" @Font @Sym "\245"  }
+     def florin          { @Sym "\246"  }
+     def club            { @Sym "\247"  }
+     def diamond         { @Sym "\250"  }
+     def heart           { @Sym "\251"  }
+     def spade           { @Sym "\252"  }
+     def arrowboth       { @Sym "\253"  }
+     def arrowleft       { @Sym "\254"  }
+     def arrowup         { @Sym "\255"  }
+     def arrowright      { @Sym "\256"  }
+     def arrowdown       { @Sym "\257"  }
+     def degree          { @Sym "\260"  }
+     def plusminus       { @Sym "\261"  }
+     def second          { @Sym "\262"  }
+     def greaterequal    { @Sym "\263"  }
+ 
+     def multiply        { @Sym "\264"  }
+     def proportional    { @Sym "\265"  }
+     def partialdiff     { @Sym "\266"  }
+     def bullet          { @Sym "\267"  }
+     def divide          { @Sym "\270"  }
+     def notequal        { @Sym "\271"  }
+     def equivalence     { @Sym "\272"  }
+     def approxequal     { @Sym "\273"  }
+     def ellipsis        { @Sym "\274"  }
+     def arrowvertex     { @Sym "\275"  }
+     def arrowhorizex    { @Sym "\276"  }
+     def carriagereturn  { @Sym "\277"  }
+     def aleph           { @Sym "\300"  }
+     def Ifraktur        { @Sym "\301"  }
+     def Rfraktur        { @Sym "\302"  }
+     def weierstrass     { @Sym "\303"  }
+     def circlemultiply  { @Sym "\304"  }
+     def circleplus      { @Sym "\305"  }
+     def emptyset        { @Sym "\306"  }
+     def intersection    { @Sym "\307"  }
+     def union           { @Sym "\310"  }
+     def propersuperset  { @Sym "\311"  }
+     def reflexsuperset  { @Sym "\312"  }
+     def notsubset       { @Sym "\313"  }
+     def propersubset    { @Sym "\314"  }
+     def reflexsubset    { @Sym "\315"  }
+     def element         { @Sym "\316"  }
+     def notelement      { @Sym "\317"  }
+     def angle           { @Sym "\320"  }
+     def gradient        { @Sym "\321"  }
+     def registerserif   { @Sym "\322"  }
+     def copyrightserif  { @Sym "\323"  }
+     def trademarkserif  { @Sym "\324"  }
+     def product         { @Sym "\325"  }
+     def radical         { @Sym "\326"  }
+     def dotmath         { @Sym "\327"  }
+ 
+     def @PureDot   # dot with no extra space
+     {
+ 	@HContract { &0io 0.4w @HShift dotmath }
+     }
+ 
+     def logicalnot      { @Sym "\330"  }
+     def logicaland      { @Sym "\331"  }
+     def logicalor       { @Sym "\332"  }
+     def arrowdblboth    { @Sym "\333"  }
+     def arrowdblleft    { @Sym "\334"  }
+     def arrowdblup      { @Sym "\335"  }
+     def arrowdblright   { @Sym "\336"  }
+     def arrowdbldown    { @Sym "\337"  }
+     def lozenge         { @Sym "\340"  }
+     def angleleft       { @Sym "\341"  }
+     def registersans    { @Sym "\342"  }
+     def copyrightsans   { @Sym "\343"  }
+     def trademarksans   { @Sym "\344"  }
+     def summation       { @Sym "\345"  }
+     def parenlefttp     { @Sym "\346"  }
+     def parenleftex     { @Sym "\347"  }
+     def parenleftbt     { @Sym "\350"  }
+     def bracketlefttp   { @Sym "\351"  }
+     def bracketleftex   { @Sym "\352"  }
+     def bracketleftbt   { @Sym "\353"  }
+     def bracelefttp     { @Sym "\354"  }
+     def braceleftmid    { @Sym "\355"  }
+     def braceleftbt     { @Sym "\356"  }
+     def braceex         { @Sym "\357"  }
+     def angleright      { @Sym "\361"  }
+     def integral        { @Sym "\362"  }
+     def integraltp      { @Sym "\363"  }
+     def integralex      { @Sym "\364"  }
+     def integralbt      { @Sym "\365"  }
+     def parenrighttp    { @Sym "\366"  }
+     def parenrightex    { @Sym "\367"  }
+     def parenrightbt    { @Sym "\370"  }
+     def bracketrighttp  { @Sym "\371"  }
+     def bracketrightex  { @Sym "\372"  }
+     def bracketrightbt  { @Sym "\373"  }
+     def bracerighttp    { @Sym "\374"  }
+     def bracerightmid   { @Sym "\375"  }
+     def bracerightbt    { @Sym "\376"  }
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Short names                                                   #
+     #                                                                 #
+     #   These symbols, their names, and their spacing, are based on   #
+     #   the list in Appendix F of Donald E. Knuth's The TeXBook.      #
+     #                                                                 #
+     #   Group 1 (lowercase Greek letters):  see full names above      #
+     #   Group 2 (uppercase Greek letters):  see full names above      #
+     #   Group 3 (calligraphic capitals):    not provided by Eq        #
+     #                                                                 #
+     ###################################################################
+ 
+     ###################################################################
+     #                                                                 #
+     #   Group 4 (miscellaneous Ord symbols)                           #
+     #                                                                 #
+     #   Not all of Knuth's symbols are available.  The four suits     #
+     #   (heartsuit, etc.), have definitions above.                    #
+     #                                                                 #
+     ###################################################################
+ 
+     def hbar         { @OneCol { &0.1f @Base "-" ^/0.25fo h }	}
+     def Re           { Rfraktur					}
+     def Im           { Ifraktur					}
+     def partial      { partialdiff				}
+     def infty        { infinity					}
+     def prime        { minute        				}
+    #def emptyset     { defined above				}
+     def nabla        { gradient					}
+     def surd         { radical					}
+     def top          { 180d @Rotate perpendicular		}
+     def bot          { perpendicular				}
+     def dbar         { @Base "||"                         	}
+    #def angle        { defined above				}
+     def backslash    { "\\"					}
+     def forall       { universal					}
+     def exists       { existential				}
+     def neg          { logicalnot				}
+ 
+     def circle
+     { @HContract @VContract @BackEnd @Case {
+ 	PostScript @Yield {
+ 	  {
+ 	    "xsize ysize 2 div moveto"
+ 	    "xsize 2 div ysize 2 div xsize 2 div 0 360 arc"
+ 	    "0.04 ft setlinewidth stroke"
+ 	  } @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High }
+ 	}
+ 	PDF @Yield {
+ 	  #
+ 	  # VT: draws a counterclockwise 360 degree arc from 0 to +360
+ 	  # degree positions (straight right to straight right) with
+ 	  # centre = (xsize/2, ysize/2) and radius = xsize/2, 
+ 	  # implemented as two counterclockwise 180 degree arcs.
+ 	  # start at (xsize, ysize/2); the control points are:
+ 	  #
+ 	  #     pt1 = (xsize, ysize/2 + (4/3 * xsize/2))
+ 	  #     pt2 = (0, ysize/2 + (4/3 * xsize/2))
+ 	  #
+ 	  # end at (0, ysize/2).  Then start at (0, ysize/2); control points
+ 	  #
+ 	  #     pt1 = (0, ysize/2 - (4/3 * xsize/2))
+ 	  #     pt2 = (xsize, ysize/2 - (4/3 * xsize/2))
+ 	  #
+ 	  # and end at (xsize, ysize/2).
+ 
+ 	  {
+ 	    "__mul(0.04, __loutf) w"
+ 	    "__xsize __div(__ysize, 2) m"
+ 	    "__xsize __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ 	    "0 __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ 	    "0 __div(__ysize, 2) c"
+ 	    "0 __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ 	    "__xsize __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ 	    "__xsize __div(__ysize, 2) c S"
+ 	  } @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High }
+ 	}
+       }
+     }
+ 
+     def filledcircle
+     { @HContract @VContract @BackEnd @Case {
+ 	PostScript @Yield {
+ 	  {
+ 	    "xsize ysize 2 div moveto"
+ 	    "xsize 2 div ysize 2 div xsize 2 div 0 360 arc"
+ 	    "0.04 ft setlinewidth fill"
+ 	  } @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High }
+ 	}
+ 	PDF @Yield {
+ 	  #
+ 	  # JK: I don't know how to fill in PDF, so this doesn't!
+ 	  #
+ 	  # VT: draws a counterclockwise 360 degree arc from 0 to +360
+ 	  # degree positions (straight right to straight right) with
+ 	  # centre = (xsize/2, ysize/2) and radius = xsize/2, 
+ 	  # implemented as two counterclockwise 180 degree arcs.
+ 	  # start at (xsize, ysize/2); the control points are:
+ 	  #
+ 	  #     pt1 = (xsize, ysize/2 + (4/3 * xsize/2))
+ 	  #     pt2 = (0, ysize/2 + (4/3 * xsize/2))
+ 	  #
+ 	  # end at (0, ysize/2).  Then start at (0, ysize/2); control points
+ 	  #
+ 	  #     pt1 = (0, ysize/2 - (4/3 * xsize/2))
+ 	  #     pt2 = (xsize, ysize/2 - (4/3 * xsize/2))
+ 	  #
+ 	  # and end at (xsize, ysize/2).
+ 
+ 	  {
+ 	    "__mul(0.04, __loutf) w"
+ 	    "__xsize __div(__ysize, 2) m"
+ 	    "__xsize __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ 	    "0 __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ 	    "0 __div(__ysize, 2) c"
+ 	    "0 __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ 	    "__xsize __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ 	    "__xsize __div(__ysize, 2) c S"
+ 	  } @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High }
+ 	}
+       }
+     }
+ 
+     def square
+     { @HContract @VContract @BackEnd @Case {
+ 	PostScript @Yield {
+ 	  {
+ 	    "0 0 moveto xsize 0 lineto xsize ysize lineto"
+ 	    "0 ysize lineto closepath"
+ 	    "0.04 ft setlinewidth stroke"
+ 	  } @Graphic { 0.6f @Wide 0.3f @High ^/ 0.3f @High }
+ 	}
+ 	PDF @Yield {
+ 	  {
+ 	    "__mul(__loutf, 0.04) w"
+ 	    "0 0 m __xsize 0 l __xsize __ysize l"
+ 	    "0 __ysize l s"
+ 	  } @Graphic { 0.6f @Wide 0.3f @High ^/ 0.3f @High }
+ 	}
+       }
+     }
+ 
+     def triangle
+     { @HContract @VContract @BackEnd @Case {
+ 	PostScript @Yield {
+ 	  {
+ 	    "0 0 moveto xsize 0 lineto"
+ 	    "xsize 2 div ysize lineto closepath"
+ 	    "0.04 ft setlinewidth stroke"
+ 	  } @Graphic { 0.3f @Wide 0.3f @High ^| ^/ 0.3f @Wide 0.3f @High }
+ 	}
+ 	PDF @Yield {
+ 	  {
+ 	    "__mul(__loutf, 0.04) w"
+ 	    "0 0 m __xsize 0 l"
+ 	    "__div(__xsize, 2) __ysize l s"
+ 	  } @Graphic { 0.3f @Wide 0.3f @High ^| ^/ 0.3f @Wide 0.3f @High }
+ 	}
+       }
+     }
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Group 5 (digits)                                              #
+     #                                                                 #
+     ###################################################################
+ 
+     def "0" { zero            }
+     def "1" { one             }
+     def "2" { two             }
+     def "3" { three           }
+     def "4" { four            }
+     def "5" { five            }
+     def "6" { six             }
+     def "7" { seven           }
+     def "8" { eight           }
+     def "9" { nine            }
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Group 6 ("Large" operators)                                   #
+     #                                                                 #
+     #   Knuth's large operators automatically change size depending   #
+     #   on whether the equation is display or inline.  Eq does not    #
+     #   do this; instead, the `big' operator must be used.            #
+     #                                                                 #
+     ###################################################################
+ 
+     def sum	{ summation					}
+     def prod	{ product					}
+     def coprod	{ 180d @Rotate vctr product			}
+     def int	{ 1.3f @Font vctr integral			}
+     def oint	{ @OneCol { vctr degree |0.015fo int }		}
+     def bcap	{ 1.3f @Font intersection			}
+     def bcup	{ 1.3f @Font union				}
+     def bvee	{ 1.3f @Font logicalor				}
+     def bwedge	{ 1.3f @Font logicaland				}
+     def bodot	{ & 1.3f @Font @HContract { circle /0io &0.5rt @PureDot } }
+     def botimes	{ 1.3f @Font circlemultiply			}
+     def boplus	{ 1.3f @Font circleplus				}
+     def buplus	{ & 1.3f @Font @HContract { &0.5rt 0.7f @Font plus ^/0.2fo union } }
+ 
+     ###################################################################
+     #                                                                 #
+     #   Group 7 (binary operations)                                   #
+     #                                                                 #
+     #   All of Knuth's symbols are available except \star, \diamond   #
+     #   and \bullet; a few have been given more mnemonic names.       #
+     #                                                                 #
+     ###################################################################
+ 
+     def "+"		{ bin plus				}
+     def "-"		{ bin minus				}
+     def "+-"		{ bin plusminus				}
+     def "-+"		{ bin 180d @Rotate plusminus		}
+     def setminus		{ bin backslash				}
+     def cdot		{ bin dotmath				}
+     def times		{ bin multiply				}
+     def "*"		{ bin asteriskmath			}
+    #def diamond		{ name used above			}
+     def circ		{ bin circle				}
+    #def bullet		{ name used above			}
+     def div		{ bin divide				}
+     def cap		{ bin intersection			}
+     def cup		{ bin union				}
+     def uplus		{ bin @OneRow @HContract { &0.5rt 0.7f @Font plus ^/0.2fo union}}
+     def sqcap		{ bin
+ 			  { @HContract @VContract
+ 				@BackEnd @Case {
+ 				  PostScript @Yield {
+ 				    {	"0 0 moveto 0 ysize lineto xsize ysize lineto"
+ 					"xsize 0 lineto"
+ 					"0.04 ft setlinewidth stroke"
+ 				    }
+ 				    @Graphic
+ 				    {	0.3f @Wide 0.3f @High ^| ^/
+ 					0.3f @Wide 0.3f @High
+ 				    }
+ 				  }
+ 				  PDF @Yield {
+ 				    {	"__mul(__loutf, 0.04) w"
+ 					"0 0 m 0 __ysize l __xsize __ysize l"
+ 					"__xsize 0 l s"
+ 				    }
+ 				    @Graphic
+ 				    {	0.3f @Wide 0.3f @High ^| ^/
+ 					0.3f @Wide 0.3f @High
+ 				    }
+ 				  }
+ 				}
+ 			  }
+ 			}
+     def sqcup		{ 180d @Rotate sqcap			}
+     def triangleleft	{ bin 90d @Rotate 0.8f @Font triangle	}
+     def triangleright	{ bin "-90d" @Rotate 0.8f @Font triangle}
+     def wr		{ bin vctr {90d @Rotate similar}	}
+     def bigcirc		{ bin 1.2f @Font circle			}
+     def bigtriangleup	{ bin 1.2f @Font triangle		}
+     def bigtriangledown	{ bin 180d @Rotate 1.2f @Font triangle	}
+     def vee		{ bin logicalor				}
+     def wedge		{ bin logicaland			}
+     def oplus		{ bin circleplus			}
+     def ominus		{ bin @OneRow @HContract { circle /0io &0.5rt minus}}
+     def otimes		{ bin circlemultiply			}
+     def oslash		{`vctr 60d @Rotate @HContract {circle /0io &0.5rt minus`}}
+     def odot		{ bin @OneRow @HContract {circle /0io &0.5rt @PureDot }}
+     def dagger		{ bin @Base @Char "dagger"		}
+     def daggerdbl	{ bin @Base @Char "daggerdbl"		}
+     def amalg		{ bin 180d @Rotate vctr product		}
+ 
+     ###################################################################
+     #                                                                 #
+     #   Group 8 (relations)                                           #
+     #                                                                 #
+     #   All Knuth's operators are available, but many have been       #
+     #   given different, more mnemonic names.  Also included is       #
+     #   a not operator for negating the relations.                    #
+     #                                                                 #
+     ###################################################################
+ 
+     def "<"		{ rel less				}
+     def ">"		{ rel greater				}
+     def "="		{ rel equal				}
+     def "<="		{ rel lessequal				}
+     def prec		{ rel { 0.45f @Font "-90d" @Rotate
+ 				{ parenrighttp ^| parenlefttp }
+ 			      }
+ 			}
+     def preceq		{ rel { @OneRow non prec /0.1f minus }	}
+     def "<<"		{ rel {less less}			}
+     def subset		{ rel propersubset			}
+     def subseteq	{ rel reflexsubset			}
+     def sqsubseteq	{ rel @HContract @VContract
+ 					@BackEnd @Case {
+ 					  PostScript @Yield {
+ 						{ { "xsize 0 moveto"
+ 						  "0 0 lineto"
+ 						  "0 ysize lineto"
+ 						  "xsize ysize lineto"
+ 						  "0.04 ft setlinewidth stroke"
+ 						  }
+ 						  @Graphic
+ 						  { 0.5f @Wide 0.25f @High ^/
+ 						    0.25f @High
+ 						  }
+ 						  /0.1f minus
+ 						}
+ 					  }
+ 					  PDF @Yield {
+ 						{ { "__mul(__loutf, 0.04) w"
+ 						    "__xsize 0 m"
+ 						    "0 0 l"
+ 						    "0 __ysize l"
+ 						    "__xsize __ysize l s"
+ 						  }
+ 						  @Graphic
+ 						  { 0.5f @Wide 0.25f @High ^/
+ 						    0.25f @High
+ 						  }
+ 						  /0.1f minus
+ 						}
+ 					  }
+ 					}
+ 			}
+ 
+     def in		{ rel element				}
+     def vdash		{ rel vctr{"-90d" @Rotate perpendicular}}
+     def smile		{ rel vctr 90d @Rotate parenleft	}
+     def frown		{ rel vctr 90d @Rotate parenright	}
+ 
+     def ">="		{ rel greaterequal			}
+     def succ		{ rel { 0.45f @Font 90d @Rotate
+ 			        { parenrighttp ^| parenlefttp }
+ 			      }
+ 			}
+     def succeq		{ rel { @OneRow non succ /0.1f minus }	}
+     def ">>"		{ rel {greater greater}			}
+     def supset		{ rel propersuperset			}
+     def supseteq	{ rel reflexsuperset			}
+     def sqsupseteq	{ rel @HContract @VContract
+ 					@BackEnd @Case {
+ 					  PostScript @Yield {
+ 					    {	{ "0 0 moveto xsize 0 lineto"
+ 						  "xsize ysize lineto"
+ 						  "0 ysize lineto"
+ 						  "0.04 ft setlinewidth stroke"
+ 						}
+ 						@Graphic
+ 						{ 0.5f @Wide 0.25f @High ^/
+ 						  0.25f @High
+ 						}
+ 					      /0.1f minus
+ 					    }
+ 					  }
+ 					  PDF @Yield {
+ 					    {	{ "__mul(__loutf, 0.04) w"
+ 					      "0 0 m __xsize 0 l"
+ 						  "__xsize __ysize l"
+ 						  "0 __ysize l s"
+ 						}
+ 						@Graphic
+ 						{ 0.5f @Wide 0.25f @High ^/
+ 						  0.25f @High
+ 						}
+ 					      /0.1f minus
+ 					    }
+ 					  }
+ 					}
+ 			}
+     def ni		{ rel 180d @Rotate element		}
+     def dashv		{ rel vctr {90d @Rotate perpendicular}	}
+     def mid		{ rel @Base "|"				}
+     def parallel	{ rel @Base "||"			}
+ 
+     def "=="		{ rel equivalence			}
+     def "~"		{ rel similar				}
+     def "-~"		{ rel @OneRow{similar^/0.07f/0.07f minus}}
+     def asymp		{ rel 0.7f @Font @OneRow
+ 			      { 90d @Rotate parenleft ^/0.008f
+ 			      /0.008f 90d @Rotate parenright }
+ 			}
+     def "~~"		{ rel approxequal			}
+     def "=~"		{ rel congruent				}
+     def bowtie		{ rel{non triangleright non triangleleft}}
+     def propto		{ rel proportional			}
+     def models		{ rel{@Base vctr "|" &0.05fo vctr equal}}
+     def trieq		{ rel @OneRow @HContract {&0.5rt small triangle^/0.15f equal}}
+     def doteq		{ rel @OneRow @HContract {&0.5rt dotmath^/0.15f equal}}
+     def perp		{ rel perpendicular			}
+ 
+     def notsub		{ rel notsubset				}
+     def notin		{ rel notelement			}
+     def "!="		{ rel notequal				}
+ 
+     def "<->"		{ rel arrowboth				}
+     def "<--"		{ rel arrowleft				}
+     def "-->"		{ rel arrowright			}
+     def up		{ rel arrowup				}
+     def down		{ rel arrowdown				}
+     def "<=>"		{ rel arrowdblboth			}
+     def "<=="		{ rel arrowdblleft			}
+     def "==>"		{ rel arrowdblright			}
+     def dblup		{ rel arrowdblup			}
+     def dbldown		{ rel arrowdbldown			}
+ 
+     def ":"		{ rel colon				}
+     def "::"		{ rel @OneCol {colon ` colon}		}
+     def ":="		{ rel { colon{ //0.05fo equal} }	}
+ 
+     def not right x	{ @HContract {@OneCol x /0co &0.5rt slash}}
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Groups 11 and 12 - openings and closings.                     #
+     #                                                                 #
+     ###################################################################
+ 
+     def lpar	{ parenleft				}
+     def rpar	{ parenright				}
+     def lbrack	{ bracketleft				}
+     def rbrack	{ bracketright				}
+     def lbrace	{ braceleft				}
+     def rbrace	{ braceright				}
+     def lfloor	{ ` "-0.15f" @VShift bracketleftbt	}
+     def rfloor	{   "-0.15f" @VShift bracketrightbt `	}
+     def lceil	{ ` "-0.1f"  @VShift bracketlefttp	}
+     def rceil	{   "-0.1f"  @VShift bracketrighttp `	}
+     def langle	{ angleleft				}
+     def rangle	{ angleright				}
+ 
+     def blpar	{ @OneRow {parenlefttp    ^/ parenleftex    / parenleftbt   } }
+     def brpar	{ @OneRow {parenrighttp   ^/ parenrightex   / parenrightbt  } }
+     def blbrack	{ @OneRow {bracketlefttp  ^/ bracketleftex  / bracketleftbt } }
+     def brbrack	{ @OneRow {bracketrighttp ^/ bracketrightex / bracketrightbt} }
+     def blbrace	{ @OneRow {bracelefttp    ^/ braceleftmid   / braceleftbt   } }
+     def brbrace	{ @OneRow {bracerighttp   ^/ bracerightmid  / bracerightbt  } }
+     def blfloor	{ @OneRow {bracketleftex  ^/ bracketleftex  / bracketleftbt } }
+     def brfloor	{ @OneRow {bracketrightex ^/ bracketrightex / bracketrightbt} }
+     def blceil	{ @OneRow {bracketlefttp  ^/ bracketleftex  / bracketleftex } }
+     def brceil	{ @OneRow {bracketrighttp ^/ bracketrightex / bracketrightex} }
+     def blangle	{ @HContract @VContract
+ 				@BackEnd @Case {
+ 				  PostScript @Yield {
+ 				    { "xsize 0 moveto"
+ 				      "0 ysize 2 div lineto"
+ 				      "xsize ysize lineto"
+ 				      "0.04 ft setlinewidth stroke"
+ 			          }
+ 			          @Graphic { 0.5f @Wide 2f @High ^/ 2f @High }
+ 				  }
+ 				  PDF @Yield {
+ 				    { "__mul(__loutf, 0.04) w"
+ 				      "__xsize 0 m"
+ 				      "0 __div(__ysize, 2) l"
+ 				      "__xsize __ysize l S"
+ 			          }
+ 			          @Graphic { 0.5f @Wide 2f @High ^/ 2f @High }
+ 				  }
+ 				}
+ 		}
+     def brangle	{ @HContract @VContract
+ 				@BackEnd @Case {
+ 				  PostScript @Yield {
+ 				    { "0 0 moveto"
+ 				      "xsize ysize 2 div lineto"
+ 				      "0 ysize lineto"
+ 				      "0.04 ft setlinewidth stroke"
+ 			          }
+ 			          @Graphic { 0.5f @Wide 2f @High ^/ 2f @High }
+ 				  }
+ 				  PDF @Yield {
+ 				    { "__mul(__loutf, 0.04) w"
+ 				      "0 0 m"
+ 				      "__xsize __div(__ysize, 2) l"
+ 				      "0 __ysize l S"
+ 			          }
+ 			          @Graphic { 0.5f @Wide 2f @High ^/ 2f @High }
+ 				  }
+ 				}
+ 		}
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Group 13 - punctuation.                                       #
+     #                                                                 #
+     ###################################################################
+ 
+     def ";"     { punct semicolon     }
+     def ","     { punct comma         }
+     def col     { punct colon         }
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Additional short symbols (Knuth p. 132)                       #
+     #                                                                 #
+     ###################################################################
+ 
+     def "!" { exclam          }
+     def "?" { question        }
+     def "%" { percent         }
+     def "(" { parenleft       }
+     def ")" { parenright      }
+     def "[" { bracketleft     }
+     def "]" { bracketright    }
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Common mathematical functions (from Knuth p. 162).            #
+     #   mod is included, since @Rel mod is easily typed if needed.    #
+     #                                                                 #
+     ###################################################################
+ 
+     def arccos	{ @Base "arccos"	}
+     def arcsin	{ @Base "arcsin"	}
+     def arctan	{ @Base "arctan"	}
+     def arg	{ @Base "arg"		}
+     def cos	{ @Base "cos"		}
+     def cosh	{ @Base "cosh"		}
+     def cot	{ @Base "cot"		}
+     def coth	{ @Base "coth"		}
+     def csc	{ @Base "csc"		}
+     def deg	{ @Base "deg"		}
+     def det	{ @Base "det"		}
+     def dim	{ @Base "dim"		}
+     def exp	{ @Base "exp"		}
+     def gcd	{ @Base "gcd"		}
+     def hom	{ @Base "hom"		}
+     def inf	{ @Base "inf"		}
+     def ker	{ @Base "ker"		}
+     def lg	{ @Base "lg"		}
+     def lim	{ @Base "lim"		}
+     def liminf	{ @OneCol { @Base "lim" ` @Base "inf" }	}
+     def limsup	{ @OneCol { @Base "lim" ` @Base "sup" }	}
+     def ln	{ @Base "ln"		}
+     def log	{ @Base "log"		}
+     def max	{ @Base "max"		}
+     def min	{ @Base "min"		}
+     def Pr	{ @Base "Pr"		}
+     def sec	{ @Base "sec"		}
+     def sin	{ @Base "sin"		}
+     def sinh	{ @Base "sinh"		}
+     def supr	{ @Base "sup"		}
+     def tan	{ @Base "tan"		}
+     def tanh	{ @Base "tanh"		}
+     def mod	{ @Base "mod"		}
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #  Arrow symbols.                                                 #
+     #                                                                 #
+     ###################################################################
+ 
+     def leftarrow		{ arrowleft }
+     def longleftarrow		{ { 1.6 1 } @Scale arrowleft }
+     def dblleftarrow		{ arrowdblleft }
+     def dbllongleftarrow	{ { 1.6 1 } @Scale arrowdblleft }
+     def rightarrow		{ arrowright }
+     def longrightarrow		{ { 1.6 1 } @Scale arrowright }
+     def dblrightarrow		{ arrowdblright }
+     def dbllongrightarrow	{ { 1.6 1 } @Scale arrowdblright }
+     def leftrightarrow		{ arrowboth }
+     def longleftrightarrow	{ { 1.6 1 } @Scale arrowboth }
+     def dblleftrightarrow	{ arrowdblboth }
+     def dbllongleftrightarrow	{ { 1.6 1 } @Scale arrowdblboth }
+ 
+     def mapsto
+     {
+ 	@HContract @VContract {
+ 	  @BackEnd @Case {
+ 	    PostScript @Yield {
+ 	      "0 ymark 0.16 ft sub moveto 0 ymark 0.16 ft add lineto stroke"
+ 	      @Graphic arrowright
+ 	    }
+ 	    PDF @Yield {
+ 		"0 __sub(__ymark, __mul(__loutf, 0.16)) m 0 __add(__ymark, __mul(__loutf, 0.16)) l S"
+ 		@Graphic arrowright
+ 	    }
+ 	  }
+ 	}
+     }
+ 
+     def longmapsto
+     {
+ 	@HContract @VContract {
+ 	  @BackEnd @Case {
+ 	    PostScript @Yield {
+ 		"0 ymark 0.16 ft sub moveto 0 ymark 0.16 ft add lineto stroke"
+ 		@Graphic { { 1.6 1 } @Scale arrowright }
+ 	    }
+ 	    PDF @Yield {
+ 		"0 __sub(__ymark, __mul(__loutf, 0.16)) m 0 __add(__ymark, __mul(__loutf, 0.16)) l S"
+ 		@Graphic { { 1.6 1 } @Scale arrowright }
+ 	    }
+ 	  }
+ 	}
+     }
+ 
+     def hookleftarrow
+     {
+ 	@HContract @VContract {
+ 	  @BackEnd @Case {
+ 
+ 	    PostScript @Yield {
+ 		"xsize ymark moveto xsize ymark 0.1 ft add 0.1 ft -90 90 arc stroke"
+ 		@Graphic leftarrow
+ 	    }
+ 
+ 	    PDF @Yield {
+ #
+ # VT: draws a counterclockwise 180 degree arc from -90 to +90 degree positions
+ #     (straight down to straight up) with centre = (xsize, ymark + 0.1 ft)
+ #     and radius = 0.1 ft
+ #
+ # the control points therefore are:
+ #   pt1 = (xsize + (4/3 * 0.1 ft), ymark) and pt2 = (xsize + (4/3 * 0.1 ft), ymark + 0.2 ft)
+ #
+ 		{
+ 		  "__xsize __ymark m"											# pt0
+ 		  "__add(__xsize, __div(__mul(0.4, __loutf), 3)) __ymark"					# pt1
+ 		  "__add(__xsize, __div(__mul(0.4, __loutf), 3)) __add(__ymark, __mul(0.2, __loutf))"	# pt2
+ 		  "__xsize __add(__ymark, __mul(0.2, __loutf)) c S"						# pt3
+ 		}
+ 		@Graphic leftarrow
+ 	    }
+ 
+ 	  }
+ 	}
+     }
+ 
+     def hookrightarrow
+     {
+ 	@HContract @VContract {
+ 	  @BackEnd @Case {
+ 
+ 	    PostScript @Yield {
+ 		"0 ymark moveto 0 0.1 ft ymark add 0.1 ft -90 90 arcn stroke"
+ 		@Graphic rightarrow
+ 	    }
+ 
+ 	    PDF @Yield {
+ #
+ # VT: draws a clockwise 180 degree arc from -90 to +90 degree positions
+ #     (straight down to straight up) with centre = (0, ymark + 0.1 ft)
+ #     and radius = 0.1 ft
+ #
+ # the control points therefore are:
+ #   pt1 = (-4/3 * 0.1 ft, ymark) and pt2 = (-4/3 * 0.1 ft, ymark + 0.2 ft)
+ #
+ 		{
+ 		  "0 __ymark m"										# pt0
+ 		  "__div(__mul(-0.4, __loutf), 3) __ymark"					# pt1
+ 		  "__div(__mul(-0.4, __loutf), 3) __add(__ymark, __mul(0.2, __loutf))"	# pt2
+ 		  "0 __add(__ymark, __mul(0.2, __loutf)) c S"					# pt3
+ 		}
+ 		@Graphic rightarrow
+ 	    }
+ 
+ 	  }
+ 	}
+     }
+ 
+     def @ClipToSize right x
+     {
+ 	@HContract @VContract
+ 	  @BackEnd @Case {
+ 	    PostScript @Yield {
+ 		{
+ 		"grestore newpath 0 0 moveto xsize 0 lineto xsize ysize lineto"
+ 		"0 ysize lineto closepath clip gsave"
+ 		} @Graphic x
+ 	    }
+ 	    PDF @Yield {
+ 		"Q n 0 0 __xsize __ysize re W n q" @Graphic x
+ 	    }
+ 	  }
+     }
+ 
+     def @ClipAboveMark
+ 	left amount
+ 	right x
+     {
+ 	@ClipToSize { ^//{{amount}o} x }
+     }
+ 
+     def @ClipBelowMark
+ 	left amount
+ 	right x
+     {
+ 	@ClipToSize { x //{{amount}o} }
+     }
+ 
+     def leftharpoonup
+     {
+ 	0.04f @ClipBelowMark leftarrow
+     }
+ 
+     def rightharpoonup
+     {
+ 	0.04f @ClipBelowMark rightarrow
+     }
+ 
+     def leftharpoondown
+     {
+ 	0.02f @ClipAboveMark leftarrow
+     }
+ 
+     def rightharpoondown
+     {
+ 	0.02f @ClipAboveMark rightarrow
+     }
+ 
+     def rightleftharpoons
+     {
+ 	@HContract @VContract {
+ 		rightharpoonup
+ 		^//0.1fo
+ 		 //0.1fo
+ 		leftharpoondown
+ 	}
+     }
+ 
+     def leadsto		{ @HContract { similar &0.4fo arrowright } }
+ 
+     def uparrow		{ arrowup }
+     def dbluparrow	{ arrowdblup }
+     def downarrow	{ arrowdown }
+     def dbldownarrow	{ arrowdbldown }
+     def updownarrow	{ @HContract { arrowup &0io arrowdown } }
+     def dblupdownarrow	{ @VContract { arrowdblup ^//0.2fo arrowdbldown } }
+     def nearrow		{ 0.5w @VShift 0.5w @HShift  45d @Rotate arrowright }
+     def searrow		{ 0.5w @VShift 0.5w @HShift 315d @Rotate arrowright }
+     def swarrow		{ 0.5w @VShift 0.5w @HShift 225d @Rotate arrowright }
+     def nwarrow		{ 0.5w @VShift 0.5w @HShift 135d @Rotate arrowright }
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Other symbols taken from TeX.                                 #
+     #                                                                 #
+     ###################################################################
+ 
+     def ldots { .       &0.3f .       &0.3f .			}
+     def cdots { dotmath &0.3f dotmath &0.3f dotmath		}
+     def vdots { @OneRow { dotmath ^/0.3f dotmath /0.3f dotmath } }
+     def ddots { @OneCol @OneRow
+ 	       {        dotmath
+ 	         ^/0.3f |0.3f dotmath
+                   /0.3f |     |0.3f dotmath
+ 	       }
+ 	      }
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Symbols taken from eqn (Kernighan and Cherry 1975).           #
+     #                                                                 #
+     ###################################################################
+ 
+     def del	{ gradient			}
+     def grad	{ gradient			}
+     def "..."	{ ellipsis			}
+     def ",...,"	{ , ellipsis ``` ,		}
+     def "'"	{ minute			}
+     def "''"	{ minute minute			}
+     def "'''"	{ minute minute minute		}
+     def "''''"	{ minute minute minute minute	}
+     def empty	{ emptyset			}
+ 
+ 
+ 
+     ###################################################################
+     #                                                                 #
+     #   Miscellaneous                                                 #
+     #                                                                 #
+     ###################################################################
+ 
+     def triangleup	{ 0.8f @Font triangle	}
+     def triangledown	{ 180d @Rotate 0.8f @Font triangle	}
+ 
+     ###################################################################
+     #                                                                 #
+     #   Symbols with parameters.                                      #
+     #                                                                 #
+     #   These symbols are essentially those of eqn, with some         #
+     #   changes and additions.                                        #
+     #                                                                 #
+     ###################################################################
+ 
+     def sup
+ 	precedence 60
+ 	associativity left
+ 	left x
+ 	named gap { @SupGap }
+ 	right y
+     {
+ 	@HContract @VContract
+ 	{          | 0.45w @VShift @Smaller @HSqueeze @VSqueeze y
+ 	  ^/gap  x
+ 	}
+     }
+ 
+     def sub
+ 	precedence 60
+ 	associativity left
+ 	left x
+ 	named gap { @SupGap }
+ 	right y
+     {
+ 	@HContract @VContract
+ 	{
+ 	       # x
+ 	       "." @KernShrink x
+ 	  /gap    |  @Smaller @HSqueeze @VSqueeze y
+ 	}
+     }
+ 
+     def tsub
+ 	precedence 60
+ 	associativity left
+ 	left x
+ 	named gap { @SupGap }
+ 	right y
+     {
+ 	@HContract @VContract
+ 	{
+ 	       x
+ 	  /gap    |  &0io 0.2f @HShift @Smaller @HSqueeze @VSqueeze y
+ 	}
+     }
+ 
+     def supp
+ 	precedence 60
+ 	associativity left
+ 	left x
+ 	named gap { @SupGap }
+ 	right y
+     {
+ 	@HContract @VContract
+ 	{
+ 	    { ^/gap x /gap } |  y
+ 	}
+     }
+ 
+     def on
+ 	precedence 61
+ 	associativity left
+ 	left x
+ 	named gap { @SupGap }
+ 	right y
+     {
+ 	@Smaller @HSqueeze @VSqueeze x ^/  /
+ 	@Smaller @HSqueeze @VSqueeze y 
+     }
+ 
+     def ton
+ 	precedence 61
+ 	associativity left
+ 	left x
+ 	named gap { @SupGap }
+ 	right y
+     {
+ 	@Smaller @HSqueeze @VSqueeze x ^/  /
+ 	&0io 0.3f @HShift @Smaller @HSqueeze @VSqueeze y
+     }
+ 
+     def frac
+ 	precedence 54
+ 	associativity left
+ 	left x
+ 	named gap { 0.2f }
+ 	right y
+     {
+ 	@HContract @VContract @Smaller @HSqueeze @VSqueeze
+ 	{ 1w @VShift { x /gap } | fraction &0io | 0w @VShift { |gap y }
+ 	}
+     }
+ 
+     def half { 1 frac 2 }
+     def third { 1 frac 3 }
+ 
+     def over
+ 	precedence 54
+ 	associativity left
+ 	left x
+ 	named gap { 0.2f }
+ 	right y
+     {  
+ 	@HContract @VContract
+ 	{          |0.5rt @OneCol @VSqueeze x
+ 	  ^//gap   @HLine
+ 	   //gap   |0.5rt @OneCol @VSqueeze @Strut y
+ 	}
+     }
+ 
+     def from
+ 	precedence 58
+ 	associativity left
+ 	left x
+ 	named gap { @ThinGap  }
+ 	named skew { 0c }
+ 	right y
+     {  
+ 	@HContract @VContract
+ 	{          |0.5rt x
+ 	   //gap   |0.5rt &skew @Smaller @HSqueeze @VSqueeze y
+ 	}
+     }
+ 
+     def to
+ 	precedence 58
+ 	associativity left
+ 	left x
+ 	named gap { @ThinGap  }
+ 	named skew { 0c }
+ 	right y
+     {
+ 	@HContract @VContract
+ 	{          |0.5rt &skew @Smaller @HSqueeze @VSqueeze y
+ 	  ^//gap   |0.5rt x
+ 	}
+     }
+ 
+     def widefrom
+ 	precedence 58
+ 	associativity left
+ 	left x
+ 	named gap { @ThinGap  }
+ 	right y
+     {
+ 	@HContract @VContract
+ 	{
+ 	    x //gap @HScale y
+ 	}
+     }
+ 
+     def wideto
+ 	precedence 58
+ 	associativity left
+ 	left x
+ 	named gap { @ThinGap  }
+ 	right y
+     {
+ 	@HContract @VContract
+ 	{
+ 	    @HScale y ^//gap x
+ 	}
+     }
+ 
+     def dot
+ 	precedence 62
+ 	left x
+ 	named gap { @ThinGap }
+     {
+ 	x to gap { gap } skew { @SkewGap } .
+     }
+ 
+     def dotdot
+ 	precedence 62
+ 	left x
+ 	named gap { @ThinGap }
+     {
+ 	x to gap { gap } skew { @SkewGap } ..
+     }
+ 
+     def hat
+ 	precedence 62
+ 	left x
+ 	named gap { @ThinGap }
+     {
+ 	x to gap { gap } skew { @SkewGap } @Base "^"
+     }
+ 
+     def tilde
+ 	precedence 62
+ 	left x
+ 	named gap { @ThinGap }
+     {
+ 	x to gap { gap } skew { @SkewGap } @Base "~"
+     }
+ 
+     def vec
+ 	precedence 62
+ 	left x
+ 	named gap { @ThinGap }
+     {
+ 	x to gap { gap } skew { @SkewGap } arrowright
+     }
+ 
+     def dyad
+ 	precedence 62
+ 	left x
+ 	named gap { @ThinGap }
+     {
+ 	x to gap { gap } skew { @SkewGap } arrowboth
+     }
+ 
+     def overbar
+ 	precedence 62
+ 	left x
+ 	named gap { @ThinGap }
+     {
+ 	x wideto gap { gap } minus
+     }
+ 
+     def underbar
+ 	precedence 62
+ 	left x
+ 	named gap { @ThinGap }
+     {
+ 	x widefrom gap { gap } minus
+     }
+ 
+     def sqrt
+ 	precedence 56
+ 	named gap { @ThinGap }
+ 	right x
+     {
+ 	@BackEnd @Case {
+ 	  PostScript @Yield {
+ 	    @HContract @VContract
+ 		{
+ 		    @VScale surd | @OneRow
+ 		    {
+ 			@HLine line { "0.03 ft setlinewidth 2 setlinecap" }
+ 			^//gap  |gap  @VSqueeze @Strut x # //gap
+ 		    }
+ 		}
+ 	  }
+ 	  PDF @Yield {
+ 		@HContract @VContract
+ 		{
+ #
+ #	VT: this PDF is correct but it renders badly in Acrobat (?problem
+ #	    with scaling by fractional factors)
+ #	In other words, the @VScale value comes through correctly but it
+ #	    looks ugly; GhostScript's translation actually expands the
+ #	    "draw surd" instruction into raw moveto's and lineto's which
+ #	    it presumably gets from the font's definition of the glyph!
+ #
+ 		    @VScale surd | @OneRow
+ 		    {
+ 			@HLine line { "__mul(__loutf, 0.03) w 2 J" }
+ 			^//gap  |gap  @VSqueeze @Strut x # //gap
+ 		    }
+ 		}
+ 	  }
+ 	}
+     }
+ 
+     def root
+ 	precedence 56
+ 	left x
+ 	right y
+     {
+ 	"" sup x &0io sqrt y
+     }
+ 
+     def zroot
+ 	precedence 56
+ 	left x
+ 	right y
+     {
+ 	def zsup right x { "+0.3f" @VShift 0.5f @Font @Space x }
+ 
+ 	"-0.4f" @HShift { 1w @HShift { zsup x } }  &0co sqrt y
+     }
+ 
+     def above
+ 	precedence 52
+ 	left x
+ 	named gap { @RowGap }
+ 	right y
+     {
+ 	|0.5rt x //gap |0.5rt y
+     }
+ 
+     def labove
+ 	precedence 52
+ 	left x
+ 	named gap { @RowGap }
+ 	right y
+     {
+ 	x //gap y
+     }
+ 
+     def cabove
+ 	precedence 52
+ 	left x
+ 	named gap { @RowGap }
+ 	right y
+     {
+ 	|0.5rt x //gap |0.5rt y
+     }
+ 
+     def rabove
+ 	precedence 52
+ 	left x
+ 	named gap { @RowGap }
+ 	right y
+     {
+ 	|1rt x //gap |1rt y
+     }
+ 
+     def mabove
+ 	precedence 52
+ 	left x
+ 	named gap { @RowGap }
+ 	right y
+     {
+ 	x /gap y
+     }
+ 
+     def nextcol
+ 	precedence 50
+ 	left x
+ 	named gap { @ColGap }
+ 	right y
+     {
+ 	x |gap y
+     }
+ 
+     export row axisrow col lcol ccol rcol mcol
+     def matrix
+ 	precedence 100
+ 	named gap { @MedGap }
+ 	named strut
+ 	    named no  { }
+ 	    named No  { }
+ 	    named yes { 0.5f }
+ 	    named Yes { 0.5f }
+ 	{ No }
+ 	named atleft {}
+ 	named atright {}
+ 	named userow { No }
+ 	named shiftdelim { Yes }
+ 	body x
+     { 
+ 	def @Strut
+ 	{
+ 	    strut @Case {
+ 		"" @Yield {}
+ 		else @Yield { @OneRow { strut @High ^/ strut @High } }
+ 	    }
+ 	}
+ 
+ 	def newrow
+ 	    precedence 50
+ 	    associativity left
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		"" @Yield { y | @Strut }
+ 		else @Yield { x /@RowGap y | @Strut }
+ 	    }
+ 	}
+ 
+ 	macro row { newrow "" }
+ 
+ 	def newaxisrow
+ 	    precedence 50
+ 	    associativity left
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		"" @Yield { y | @Strut }
+ 		else @Yield { x ^/@RowGap y | @Strut }
+ 	    }
+ 	}
+ 
+ 	macro axisrow { newaxisrow "" }
+ 
+ 	def col
+ 	    precedence 52
+ 	    associativity left
+ 	    left x
+ 	    named indent { 0.5rt }
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		""   @Yield {            &indent @OneCol y }
+ 		else @Yield { x |@ColGap &indent @OneCol y }
+ 	    }
+ 	}
+ 
+ 	def lcol
+ 	    precedence 52
+ 	    associativity left
+ 	    left x
+ 	    right y
+ 	{
+ 	    x col indent { 0i } y
+ 	}
+ 
+ 	def ccol
+ 	    precedence 52
+ 	    associativity left
+ 	    left x
+ 	    right y
+ 	{
+ 	    x col indent { 0.5rt } y
+ 	}
+ 
+ 	def rcol
+ 	    precedence 52
+ 	    associativity left
+ 	    left x
+ 	    right y
+ 	{
+ 	    x col indent { 1rt } y
+ 	}
+ 
+ 	def mcol
+ 	    precedence 52
+ 	    associativity left
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		""   @Yield {            @OneCol y }
+ 		else @Yield { x |@ColGap @OneCol y }
+ 	    }
+ 	}
+ 
+ 	def delim right x
+ 	{
+ 	    x @Case
+ 	    {
+ 		""   @Yield @Null
+ 		else @Yield
+ 		{
+ 		    shiftdelim @Case {
+ 		    { Yes yes } @Yield { @VScale x }
+ 		    else        @Yield { @VCover x }
+ 		    }
+ 		}
+ 	    }
+ 	}
+ 
+ 	@HContract @VContract {
+ 	    delim atleft &@ThinGap
+ 	    userow @Case {
+ 		{Yes yes} @Yield @HContract @VContract {^//gap @OneRow x //gap}
+ 		else      @Yield vctr @HContract @VContract { //gap x //gap }
+ 	    }
+ 	    &@ThinGap delim atright
+ 	}
+     }
+ 
+     macro pmatrix  { matrix atleft { "1.5f" @Font ( } atright { "1.5f" @Font ) }}
+     macro bmatrix  { matrix atleft { blbrack } atright { brbrack } }
+     macro brmatrix { matrix atleft { blbrace } atright { brbrace } }
+     macro fmatrix  { matrix atleft { blfloor } atright { brfloor } }
+     macro cmatrix  { matrix atleft { blceil  } atright { brceil  } }
+     macro amatrix  { matrix atleft { blangle } atright { brangle } }
+ 
+     Slope @Font { separate @SpaceGap } @Space 1f @ZUnit 1f @YUnit @Body
+ 
+ @End @Eq                  
+ 
+ macro @E { @OneCol @Eq }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/fig
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/fig:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/fig	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,27 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for figure drawing (OBSOLETE: use @Diag instead)          #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @SysInclude { figf } line                                              #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for equations, and should    #
+ #  not be touched.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { figf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  This package does not offer the ability to change default options.         #
+ #                                                                             #
+ ###############################################################################


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/figf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/figf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/figf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,909 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @Fig package for drawing figures (Version 2.0)                        #
+ #                                                                             #
+ #  Version 1.0 by Jeffrey H. Kingston, October 1991.                          #
+ #  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
+ #  Symbol names changed by JHK 5 March 1993 to avoid clashes with EPS files.  #
+ #  @CurveBox and @ShadowBox added by JHK April 1995.                          #
+ #                                                                             #
+ #  See "Fig - a Lout package for drawing figures" for user information.       #
+ #                                                                             #
+ #  This package is now obsolete, having been replaced by @Diag.               #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysPrependGraphic { "figf.lpg" }
+ 
+ export in cm pt em sp vs ft dg
+        "<<" "**" "++" "--" @Max @Min
+        @Distance @XDistance @YDistance @Angle
+        @Prev "::" @Label @BaseOf @MarkOf @ShowLabels @Figure
+        @Frame @Box @CurveBox @ShadowBox @Square @Diamond @Polygon @Ellipse
+        @Circle @HLine @VLine @Line @HArrow @VArrow @Arrow @Arc
+ 
+ def @Fig                  
+     named maxlabels  { 200     }
+     named linestyle  { solid   }
+     named linewidth  { 0.5 pt  }
+     named linecap    { round   }
+     named dashlength { 0.15 cm }
+     named paint      { nopaint }
+     named margin     { 0.4c    }
+     named arrow      { noarrow }
+     named headstyle  { open    }
+     named headwidth  { 0.05 cm }
+     named headlength { 0.15 cm }
+     body @Body
+ @Begin
+ 
+     # Like @Graphic, but affects the graphics state of right parameter
+     def @InnerGraphic
+ 	left ps
+ 	right x
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield { { ps gsave // grestore } @Graphic x }
+ 	    	PDF        @Yield { }
+ 	    }
+     }
+ 
+     def in precedence 39 left x {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield { x "in" }
+ 	    	PDF        @Yield { "__mul(__in, "x")" }
+ 	    }
+ 	}
+ 
+     def cm precedence 39 left x {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield { x "cm" }
+ 	    	PDF        @Yield { "__mul(__cm, "x")" }
+ 	    }
+ 	}
+ 
+     def pt precedence 39 left x {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield { x "pt" }
+ 	    	PDF        @Yield { "__mul(__pt, "x")" }
+ 	    }
+ 	}
+ 
+     def em precedence 39 left x {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield { x "em" }
+ 	    	PDF        @Yield { "__mul(__em, "x")" }
+ 	    }
+ 	}
+ 
+     def sp precedence 39 left x {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield { x "sp" }
+ 	    	PDF        @Yield { "__mul(__louts, "x")" }
+ 	    }
+ 	}
+ 
+     def vs precedence 39 left x {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield { x "vs" }
+ 	    	PDF        @Yield { "__mul(__loutv, "x")" }
+ 	    }
+ 	}
+ 
+     def ft precedence 39 left x {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield { x "ft" }
+ 	    	PDF        @Yield { "__mul(__loutf, "x")" }
+ 	    }
+ 	}
+ 
+     def dg precedence 39 left x {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield { x "dg" }
+ 	    	PDF        @Yield { }
+ 	    }
+ 	}
+ 
+     def "<<"
+ 	precedence 38
+ 	left length
+ 	right angle
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				0 0 length angle "lfigatangle"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def "**"
+ 	precedence 37
+ 	left point
+ 	right length
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				point length "lfigpmul"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def "++"
+ 	precedence 36
+ 	associativity left
+ 	left x
+ 	right y
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				x y "lfigpadd"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def "--"
+ 	precedence 36
+ 	associativity left
+ 	left x
+ 	right y
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				y x "lfigpsub"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @Max
+ 	precedence 36
+ 	left x
+ 	right y
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				x y "lfigpmax"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @Min
+ 	precedence 36
+ 	left x
+ 	right y
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				x y "lfigpmin"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @Distance
+ 	precedence 35
+ 	left x
+ 	right y
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				x y "lfigdistance"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @XDistance
+ 	precedence 35
+ 	left x
+ 	right y
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				x y "lfigxdistance"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @YDistance
+ 	precedence 35
+ 	left x
+ 	right y
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				x y "lfigydistance"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @Angle
+ 	precedence 35
+ 	left x
+ 	right y
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				x y "lfigangle"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @Prev
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				"lfigprevious"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def "::"
+ 	precedence 33
+ 	left name
+ 	right x
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				{ "currentdict end" maxlabels "dict begin begin"
+ 				  // "("name") lfigpromotelabels" } @Graphic x
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @Label
+ 	right name
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				"/"name "lfigpointdef"
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @MarkOf
+ 	precedence 32
+ 	left point
+ 	right x
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				{ point "translate" } @InnerGraphic
+ 				{
+ 				    /0io |0io @OneCol @OneRow x |0io /0io
+ 				}
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @BaseOf
+ 	precedence 32
+ 	left point
+ 	right x
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				{ point "translate" } @InnerGraphic
+ 				{
+ 				    /0io |0io @OneRow @OneCol {
+ 				    | @OneCol @OneRow x ^/
+ 				    } |0io /0io
+ 				}
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @ShowLabels
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				"lfigshowlabels" @Graphic
+ 			}
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @Figure
+ 	named shape      {            }
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named arrow      { arrow      }
+ 	named headstyle  { headstyle  }
+ 	named headwidth  { headwidth  }
+ 	named headlength { headlength }
+ 	named paint      { paint      }
+ 	named margin     { 0c         }
+ 	right x
+     {
+ 	    @BackEnd @Case {
+ 	    	PostScript @Yield {
+ 				@HContract @VContract
+ 				{
+ 				    #fill the shape
+ 				    paint @Case
+ 				    {
+ 					nopaint @Yield {}
+ 			
+ 					{ nochange darkblue blue lightblue darkgreen green lightgreen
+ 					  darkred red lightred darkcyan cyan lightcyan darkmagenta
+ 					  magenta lightmagenta darkyellow yellow lightyellow darkgray
+ 					  gray lightgray darkgrey grey lightgrey black white }
+ 					@Yield
+ 					{ "/lfig"paint "[" shape "] gsave lfigpaintpath grestore" }
+ 				    }
+ 			
+ 				    # stroke the path and add any arrowheads
+ 				    linestyle @Case
+ 				    {
+ 					{ solid dashed cdashed dotted noline } @Yield
+ 					{
+ 					    linewidth "setlinewidth" "lfig"linecap "setlinecap"
+ 					    dashlength "/lfig"linestyle "[" shape "] lfigdopath"
+ 					    arrow @Case
+ 					    {
+ 						noarrow @Yield { pop pop }
+ 						{ forward back both } @Yield
+ 						{  dashlength "/lfig"linestyle "/"lfigblack
+ 						   headstyle @Case
+ 						   { { open halfopen closed } @Yield "lfig"headstyle }
+ 						   headlength headwidth "lfig"arrow
+ 						}
+ 					    }
+ 					}
+ 				    }
+ 				}
+ 				@Graphic
+ 				{
+ 				    ^/margin ^|margin @OneCol @OneRow x |margin
+ 				     /margin
+ 				}
+ 			}
+ 
+ 			PDF @Yield {
+ 			}
+ 		}
+     }
+ 
+     def @Frame
+ 	right x
+     {
+ 	@Figure
+ 	    shape {xsize 0 @Label X 0 ysize @Label Y}
+ 	{ x }
+     }
+ 
+     def @Box
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { margin     }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		# 0     0      @Label SW
+ 		# xsize 0      @Label SE
+ 		# xsize ysize  @Label NE
+ 		# 0     ysize  @Label NW
+ 		# SE ** 0.5    @Label S
+ 		# NW ** 0.5    @Label W
+ 		# W ++ SE      @Label E
+ 		# S ++ NW      @Label N
+ 		# NE ** 0.5    @Label CTR
+ 		# SW SE NE NW SW
+ 		lfigbox
+ 	    }
+ 	    linestyle  { linestyle }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	x
+     }
+ 
+ 
+     def @CurveBox
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { margin     }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		lfigcurvebox
+ 	    }
+ 	    linestyle  { linestyle }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	{ 0c @HShift x }
+     }
+ 
+     def @ShadowBox
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { margin     }
+ 	named shadow     { 0.2f       }
+ 	right x
+     {
+ 		@BackEnd @Case {
+ 			PostScript @Yield {
+ 				@VContract @HContract 0c @HShift "lfigshadow" @Graphic
+ 				{
+ 				  ^/shadow ^|shadow 0c @HShift
+ 				  @Figure
+ 				    shape {
+ 					lfigbox
+ 				    }
+ 				    linestyle  { linestyle }
+ 				    linewidth  { linewidth  }
+ 				    linecap    { linecap    }
+ 				    dashlength { dashlength }
+ 				    paint      { paint      }
+ 				    margin     { margin     }
+ 				  0c @HShift x
+ 				  |shadow /shadow
+ 				}
+ 			}
+ 			PDF @Yield {
+ 				@VContract @HContract 0c @HShift
+ 
+ #				"lfigshadow" @Graphic is this:
+ 				{ "__mul(__xmark, 2) 0 m __xsize 0 l"			#  xmark 2 mul 0 moveto xsize 0 lineto
+ 				  "__xsize __sub(__ysize, __mul(__xmark, 2)) l"	#  xsize ysize xmark 2 mul sub lineto
+ 				  "__sub(__xsize, __xmark) __sub(ysize, __mul(__xmark, 2)) l"	#  xsize xmark sub ysize xmark 2 mul sub lineto
+ 				  "__sub(__xsize, __xmark) __xmark l"			#  xsize xmark sub xmark lineto
+ 				  "__mul(__xmark, 2) __xmark l h f"				#  xmark 2 mul xmark lineto closepath fill
+ 				} @Graphic
+ 
+ 				{
+ 				  ^/shadow ^|shadow 0c @HShift
+ 				  @Figure
+ 				    shape {
+ 					lfigbox
+ 				    }
+ 				    linestyle  { linestyle }
+ 				    linewidth  { linewidth  }
+ 				    linecap    { linecap    }
+ 				    dashlength { dashlength }
+ 				    paint      { paint      }
+ 				    margin     { margin     }
+ 				  0c @HShift x
+ 				  |shadow /shadow
+ 				}
+ 			}
+ 		}
+     }
+ 
+     def @Square
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { margin     }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		# {xsize ysize} ** 0.5                           @Label CTR
+ 		# CTR ++ {{xsize xsize} @Max {ysize ysize}}**0.5 @Label NE
+ 		# CTR ++ { {CTR @Distance NE} << 135 }           @Label NW
+ 		# CTR ++ { {CTR @Distance NE} << 225 }           @Label SW
+ 		# CTR ++ { {CTR @Distance NE} << 315 }           @Label SE
+ 		# SW ** 0.5 ++ SE ** 0.5                         @Label S
+ 		# NW ** 0.5 ++ NE ** 0.5                         @Label N
+ 		# SW ** 0.5 ++ NW ** 0.5                         @Label W
+ 		# SE ** 0.5 ++ NE ** 0.5                         @Label E
+ 		# SW SE NE NW SW
+ 		lfigsquare
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	x
+     }
+ 
+     def @Diamond
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { margin     }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		# {xsize 0} ** 0.5  @Label S
+ 		# {0 ysize} ** 0.5  @Label W
+ 		# S ++ W            @Label CTR
+ 		# CTR ++ W          @Label N
+ 		# CTR ++ S          @Label E
+ 		# S E N W S
+ 		lfigdiamond
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	x
+     }
+ 
+     def @Polygon
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { margin     }
+ 	named sides      { 3          }
+ 	named angle      { "dup 180 exch div" }
+ 	right x
+     {
+ 	@Figure
+ 	    shape      { sides angle lfigpolygon }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	x
+     }
+ 
+     def @Ellipse
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { margin     }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		# {xsize 0} ** 0.5  @Label S
+ 		# {0 ysize} ** 0.5  @Label W
+ 		# S ++ W            @Label CTR
+ 		# CTR ++ W          @Label N
+ 		# CTR ++ S          @Label E
+ 		# CTR ++ {xsize 0} ** 0.3536 ++ {0 ysize} ** 0.3536  @Label NE
+ 		# CTR ++ {xsize 0} ** 0.3536 -- {0 ysize} ** 0.3536  @Label SE
+ 		# CTR -- {xsize 0} ** 0.3536 ++ {0 ysize} ** 0.3536  @Label NW
+ 		# CTR -- {xsize 0} ** 0.3536 -- {0 ysize} ** 0.3536  @Label SW
+ 		# S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+ 		lfigellipse
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	x
+     }
+ 
+     def @Circle
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { margin     }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		# {xsize ysize} **0.5                    @Label CTR
+ 		# CTR ++ {{xsize 0} @Max {ysize 0}}**0.5 @Label E
+ 		# CTR ++ { {CTR @Distance E} << 45  }    @Label NE
+ 		# CTR ++ { {CTR @Distance E} << 90  }    @Label N
+ 		# CTR ++ { {CTR @Distance E} << 135 }    @Label NW
+ 		# CTR ++ { {CTR @Distance E} << 180 }    @Label W
+ 		# CTR ++ { {CTR @Distance E} << 225 }    @Label SW
+ 		# CTR ++ { {CTR @Distance E} << 270 }    @Label S
+ 		# CTR ++ { {CTR @Distance E} << 315 }    @Label SE
+ 		# S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+ 		lfigcircle
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	x
+     }
+ 
+     def @HLine
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { 0c         }
+ 	named arrow      { arrow      }
+ 	named headstyle  { headstyle  }
+ 	named headwidth  { headwidth  }
+ 	named headlength { headlength }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		# 0     ymark @Prev @Label FROM
+ 		# xsize ymark @Prev @Label TO
+ 		lfighline
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	    arrow      { arrow      }
+ 	    headstyle  { headstyle  }
+ 	    headwidth  { headwidth  }
+ 	    headlength { headlength }
+ 	x
+     }
+ 
+     def @VLine
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { 0c         }
+ 	named arrow      { arrow      }
+ 	named headstyle  { headstyle  }
+ 	named headwidth  { headwidth  }
+ 	named headlength { headlength }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		# xmark ysize @Prev @Label FROM
+ 		# xmark 0     @Prev @Label TO
+ 		lfigvline
+ 	    }
+ 	    linestyle  { linestyle }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	    arrow      { arrow      }
+ 	    headstyle  { headstyle  }
+ 	    headwidth  { headwidth  }
+ 	    headlength { headlength }
+ 	x
+     }
+ 
+     def @HArrow
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { 0c         }
+ 	named arrow      { forward    }
+ 	named headstyle  { headstyle  }
+ 	named headwidth  { headwidth  }
+ 	named headlength { headlength }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		# 0     ymark @Prev @Label FROM
+ 		# xsize ymark @Prev @Label TO
+ 		lfighline
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	    arrow      { arrow      }
+ 	    headstyle  { headstyle  }
+ 	    headwidth  { headwidth  }
+ 	    headlength { headlength }
+ 	x
+     }
+ 
+     def @VArrow
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { 0c         }
+ 	named arrow      { forward    }
+ 	named headstyle  { headstyle  }
+ 	named headwidth  { headwidth  }
+ 	named headlength { headlength }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		# xmark ysize @Prev @Label FROM
+ 		# xmark 0     @Prev @Label TO
+ 		lfigvline
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	    arrow      { arrow      }
+ 	    headstyle  { headstyle  }
+ 	    headwidth  { headwidth  }
+ 	    headlength { headlength }
+ 	x
+     }
+ 
+     def @Line
+ 	named from       { 0 ysize    }
+ 	named to         { xsize 0    }
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { 0c         }
+ 	named arrow      { arrow      }
+ 	named headstyle  { headstyle  }
+ 	named headwidth  { headwidth  }
+ 	named headlength { headlength }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		from @Prev @Label FROM
+ 		to   @Prev @Label TO
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	    arrow      { arrow      }
+ 	    headstyle  { headstyle  }
+ 	    headwidth  { headwidth  }
+ 	    headlength { headlength }
+ 	x
+     }
+ 
+     def @Arrow
+ 	named from       { 0 ysize    }
+ 	named to         { xsize 0    }
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { 0c         }
+ 	named arrow      { forward    }
+ 	named headstyle  { headstyle  }
+ 	named headwidth  { headwidth  }
+ 	named headlength { headlength }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		from @Prev @Label FROM
+ 		to   @Prev @Label TO
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	    arrow      { arrow      }
+ 	    headstyle  { headstyle  }
+ 	    headwidth  { headwidth  }
+ 	    headlength { headlength }
+ 	x
+     }
+ 
+     def @Arc
+ 	named from       { 0 ysize    }
+ 	named to         { xsize 0    }
+ 	named ctr        { 0 0        }
+ 	named direction  { clockwise  }
+ 	named linestyle  { linestyle  }
+ 	named linewidth  { linewidth  }
+ 	named linecap    { linecap    }
+ 	named dashlength { dashlength }
+ 	named paint      { paint      }
+ 	named margin     { 0c         }
+ 	named arrow      { noarrow    }
+ 	named headstyle  { headstyle  }
+ 	named headwidth  { headwidth  }
+ 	named headlength { headlength }
+ 	right x
+     {
+ 	@Figure
+ 	    shape {
+ 		from @Label FROM
+ 		to   @Label TO
+ 		ctr  @Label CTR
+ 		FROM [ CTR
+ 		direction @Case { {clockwise anticlockwise} @Yield direction }
+ 		] TO
+ 	    }
+ 	    linestyle  { linestyle  }
+ 	    linewidth  { linewidth  }
+ 	    linecap    { linecap    }
+ 	    dashlength { dashlength }
+ 	    paint      { paint      }
+ 	    margin     { margin     }
+ 	    arrow      { arrow      }
+ 	    headstyle  { headstyle  }
+ 	    headwidth  { headwidth  }
+ 	    headlength { headlength }
+ 	x
+     }
+ 
+     @BackEnd @Case {
+         PostScript @Yield {
+             { "grestore save gsave" maxlabels "dict begin lfigdict begin"
+               // "end end restore"
+             } @Graphic @Body
+         }
+         PDF @Yield {
+         }
+     }
+ 
+ @End @Fig                  


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/figf.lpg
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/figf.lpg:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/figf.lpg	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,1003 ----
+ %%BeginResource: procset LoutFigPrependGraphic
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %                                                                    %
+ %  PostScript @SysPrependGraphic file for @Fig  Jeffrey H. Kingston  %
+ %  Version 2.0 (includes CIRCUM label)                 January 1992  %
+ %                                                                    %
+ %  To assist in avoiding name clashes, the names of all symbols      %
+ %  defined here begin with "lfig".  However, this is not feasible    %
+ %  with user-defined labels and some labels used by users.           %
+ %                                                                    %
+ %  <point>      is two numbers, a point.                             %
+ %  <length>     is one number, a length                              %
+ %  <angle>      is one number, an angle in degrees                   %
+ %  <dashlength> is one number, the preferred length of a dash        %
+ %                                                                    %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 
+ errordict begin
+    /handleerror
+    {
+       {  /Times-Roman findfont 8 pt scalefont setfont
+ 	 0 setgray 4 pt 4 pt moveto
+ 	 $error /errorname get
+ 	 dup lfigdict exch known
+ 	 { lfigdict exch get }
+ 	 { 30 string cvs } ifelse
+ 	 show
+ 	 (  Command: ) show
+ 	 $error /command get 30 string cvs show
+       } stopped {} if
+       showpage stop
+    } def
+ end
+ 
+ % concat strings: <string> <string> lfigconcat <string>
+ % must be defined outside lfigdict since used in lfigpromotelabels
+ /lfigconcat
+ { 2 copy length exch length add string
+   dup 0 4 index putinterval
+   dup 3 index length 3 index putinterval
+   3 1 roll pop pop
+ } def
+ 
+ % <string> lfigdebugprint -
+ % must be defined outside lfigdict since used in arbitrary places
+ % /lfigdebugprint
+ % { print
+ %   (;  operand stack:\n) print
+ %   count copy
+ %   count 2 idiv
+ %   { ==
+ %     (\n) print
+ %   } repeat
+ %   (\n) print
+ % } def
+ 
+ /lfigdict 120 dict def
+ lfigdict begin
+ 
+ % error messages
+ /dictfull (dictfull error:  too many labels?) def
+ /dictstackoverflow (dictstackoverflow error:  labels nested too deeply?) def
+ /execstackoverflow (execstackoverflow error:  figure nested too deeply?) def
+ /limitcheck (limitcheck error:  figure nested too deeply or too large?) def
+ /syntaxerror (syntaxerror error:  syntax error in text of figure?) def
+ /typecheck (typecheck error:  syntax error in text of figure?) def
+ /undefined (undefined error:  unknown or misspelt label?) def
+ /VMError (VMError error:  run out of memory?) def
+ 
+ % push pi onto stack:  - lfigpi <num>
+ /lfigpi 3.14159 def
+ 
+ % arc directions
+ /clockwise     false def
+ /anticlockwise true  def
+ 
+ % maximum of two numbers:  <num> <num> lfigmax <num>
+ /lfigmax { 2 copy gt { pop } { exch pop } ifelse } def
+ 
+ % minimum of two numbers:  <num> <num> lfigmin <num>
+ /lfigmin { 2 copy lt { pop } { exch pop } ifelse } def
+ 
+ % add two points:  <point> <point> lfigpadd <point>
+ /lfigpadd { exch 3 1 roll add 3 1 roll add exch } def
+ 
+ % subtract first point from second:  <point> <point> lfigpsub <point>
+ /lfigpsub { 3 2 roll sub 3 1 roll exch sub exch } def
+ 
+ % max two points:  <point> <point> lfigpmax <point>
+ /lfigpmax { exch 3 1 roll lfigmax 3 1 roll lfigmax exch } def
+ 
+ % min two points:  <point> <point> lfigpmin <point>
+ /lfigpmin { exch 3 1 roll lfigmin 3 1 roll lfigmin exch } def
+ 
+ % scalar multiplication: <point> <num> lfigpmul <point>
+ /lfigpmul { dup 3 1 roll mul 3 1 roll mul exch } def
+ 
+ % point at angle and distance:  <point> <length> <angle> lfigatangle <point>
+ /lfigatangle { 2 copy cos mul 3 1 roll sin mul lfigpadd } def
+ 
+ % angle from one point to another:  <point> <point> lfigangle <angle>
+ /lfigangle { lfigpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+ 
+ % distance between two points:  <point> <point> lfigdistance <length>
+ /lfigdistance { lfigpsub dup mul exch dup mul add sqrt } def
+ 
+ % difference in x coords: <point> <point> lfigxdistance <length>
+ /lfigxdistance { pop 3 1 roll pop sub } def
+ 
+ %difference in y coords: <point> <point> lfigydistance <length>
+ /lfigydistance { 3 1 roll pop sub exch pop } def
+ 
+ % stroke a solid line:  <length> <dashlength> lfigsolid -
+ /lfigsolid
+ {  pop pop [] 0 setdash stroke
+ } def
+ 
+ % stroke a lfigdashed line:   <length> <dashlength> lfigdashed -
+ /lfigdashed
+ {  2 copy div 2 le 1 index 0 le or
+    {  exch pop 1 pt lfigmax [ exch dup ] 0 setdash }
+    {  dup [ exch 4 2 roll 2 copy div
+       1 sub 2 div ceiling dup 4 1 roll
+       1 add mul sub exch div ] 0 setdash
+    } ifelse stroke
+ } def
+ 
+ % stroke a lfigcdashed line:  <length> <dashlength> lfigcdashed -
+ /lfigcdashed
+ {  2 copy le 1 index 0 le or
+    { exch pop 1 pt lfigmax [ exch dup ] dup 0 get 2 div setdash }
+    { dup [ 4 2 roll exch 2 copy exch div
+      2 div ceiling div 1 index sub
+      ] exch 2 div setdash
+    } ifelse stroke
+ } def
+ 
+ % stroke a dotted line:  <length> <dashlength> lfigdotted -
+ /lfigdotted
+ {  2 copy le 1 index 0 le or
+    { exch pop 1 pt lfigmax [ exch 0 exch ] 0 setdash }
+    { 1 index exch div ceiling div
+      [ 0 3 2 roll ] 0 setdash
+    } ifelse stroke
+ } def
+ 
+ % stroke a noline line:  <length> <dashlength> lfignoline -
+ /lfignoline
+ { pop pop
+ } def
+ 
+ % painting (i.e. filling): - lfigwhite - (etc.)
+ /lfignopaint		{			       } def
+ /lfignochange		{ 			  fill } def
+ /lfigdarkblue		{ 0.0 0.0 0.5 setrgbcolor fill } def
+ /lfigblue		{ 0.0 0.0 1.0 setrgbcolor fill } def
+ /lfiglightblue		{ 0.5 0.5 1.0 setrgbcolor fill } def
+ /lfigdarkgreen		{ 0.0 0.5 0.0 setrgbcolor fill } def
+ /lfiggreen		{ 0.0 1.0 0.0 setrgbcolor fill } def
+ /lfiglightgreen		{ 0.5 1.0 0.5 setrgbcolor fill } def
+ /lfigdarkred		{ 0.5 0.0 0.0 setrgbcolor fill } def
+ /lfigred		{ 1.0 0.0 0.0 setrgbcolor fill } def
+ /lfiglightred		{ 1.0 0.5 0.5 setrgbcolor fill } def
+ /lfigdarkcyan		{ 0.0 0.5 0.5 setrgbcolor fill } def
+ /lfigcyan		{ 0.0 1.0 1.0 setrgbcolor fill } def
+ /lfiglightcyan		{ 0.5 1.0 1.0 setrgbcolor fill } def
+ /lfigdarkmagenta	{ 0.5 0.0 0.5 setrgbcolor fill } def
+ /lfigmagenta		{ 1.0 0.0 1.0 setrgbcolor fill } def
+ /lfiglightmagenta	{ 1.0 0.5 1.0 setrgbcolor fill } def
+ /lfigdarkyellow		{ 0.5 0.5 0.0 setrgbcolor fill } def
+ /lfigyellow		{ 1.0 1.0 0.0 setrgbcolor fill } def
+ /lfiglightyellow	{ 1.0 1.0 0.5 setrgbcolor fill } def
+ /lfigdarkgray		{ 0.2 0.2 0.2 setrgbcolor fill } def
+ /lfiggray		{ 0.5 0.5 0.5 setrgbcolor fill } def
+ /lfiglightgray		{ 0.8 0.8 0.8 setrgbcolor fill } def
+ /lfigdarkgrey		{ 0.2 0.2 0.2 setrgbcolor fill } def
+ /lfiggrey		{ 0.5 0.5 0.5 setrgbcolor fill } def
+ /lfiglightgrey		{ 0.8 0.8 0.8 setrgbcolor fill } def
+ /lfigblack		{ 0.0 0.0 0.0 setrgbcolor fill } def
+ /lfigwhite		{ 1.0 1.0 1.0 setrgbcolor fill } def
+ 
+ % line caps (and joins, not currently used)
+ /lfigbutt       0 def
+ /lfiground      1 def
+ /lfigprojecting 2 def
+ /lfigmiter      0 def
+ /lfigbevel      2 def
+ 
+ % shape and labels of the @Box symbol
+ /lfigbox
+ {
+    0     0     /SW  lfigpointdef
+    xsize 0     /SE  lfigpointdef
+    xsize ysize /NE  lfigpointdef
+    0     ysize /NW  lfigpointdef
+    SE 0.5 lfigpmul /S   lfigpointdef
+    NW 0.5 lfigpmul /W   lfigpointdef
+    W SE lfigpadd   /E   lfigpointdef
+    S NW lfigpadd   /N   lfigpointdef
+    NE 0.5 lfigpmul /CTR lfigpointdef
+    [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+    SW SE NE NW SW
+ } def
+ 
+ % shape and labels of the @CurveBox symbol
+ /lfigcurvebox
+ {
+ 
+    xsize 0.5 mul	ysize 0.5 mul	/CTR lfigpointdef
+    xsize 0.5 mul	0		/S   lfigpointdef
+    xsize		ysize 0.5 mul	/E   lfigpointdef
+    xsize 0.5 mul	ysize		/N   lfigpointdef
+    0			ysize 0.5 mul	/W   lfigpointdef
+ 
+    xmark 0.293 mul		xmark 0.293 mul		  /SW  lfigpointdef
+    xsize xmark 0.293 mul sub	xmark 0.293 mul		  /SE  lfigpointdef
+    xsize xmark 0.293 mul sub	ysize xmark 0.293 mul sub /NE  lfigpointdef
+    xmark 0.293 mul		ysize xmark 0.293 mul sub /NW  lfigpointdef
+ 
+    [ xsize ysize 0.5 lfigpmul xmark /lfigcurveboxcircum cvx ] lfigcircumdef
+ 
+    xmark		0
+    xsize xmark sub	0
+    [ xsize xmark sub	xmark		]
+    xsize		xmark
+    xsize		ysize xmark sub
+    [ xsize xmark sub	ysize xmark sub	]
+    xsize xmark sub	ysize
+    xmark		ysize
+    [ xmark		ysize xmark sub	]
+    0			ysize xmark sub
+    0			xmark
+    [ xmark		xmark		]
+    xmark		0
+ } def
+ 
+ % shadow of the @ShadowBox symbol
+ % its shape and labels are done, somewhat inaccurately, with lfigbox
+ /lfigshadow
+ { xmark 2 mul 0 moveto xsize 0 lineto
+   xsize ysize xmark 2 mul sub lineto
+   xsize xmark sub ysize xmark 2 mul sub lineto
+   xsize xmark sub xmark lineto
+   xmark 2 mul xmark lineto closepath fill
+ } def
+ 
+ % shape and labels of the @Square symbol
+ /lfigsquare
+ {
+    xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+    CTR xsize xsize ysize ysize lfigpmax 0.5 lfigpmul lfigpadd /NE lfigpointdef
+    CTR 0 0 CTR NE lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+    CTR 0 0 CTR NE lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+    CTR 0 0 CTR NE lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+    SW 0.5 lfigpmul SE 0.5 lfigpmul lfigpadd /S lfigpointdef
+    NW 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /N lfigpointdef
+    SW 0.5 lfigpmul NW 0.5 lfigpmul lfigpadd /W lfigpointdef
+    SE 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /E lfigpointdef
+    [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+    SW SE NE NW SW
+ } def
+ 
+ % shape and labels of the @Diamond symbol
+ /lfigdiamond
+ {
+    xsize 0 0.5 lfigpmul /S   lfigpointdef
+    0 ysize 0.5 lfigpmul /W   lfigpointdef
+    S W         lfigpadd /CTR lfigpointdef
+    CTR W       lfigpadd /N   lfigpointdef
+    CTR S       lfigpadd /E   lfigpointdef
+    [ xsize ysize 0.5 lfigpmul /lfigdiamondcircum cvx ] lfigcircumdef
+    S E N W S
+ } def
+ 
+ % shape and labels of the @Ellipse symbol
+ /lfigellipse
+ {
+    xsize 0 0.5 lfigpmul /S   lfigpointdef
+    0 ysize 0.5 lfigpmul /W   lfigpointdef
+    S W         lfigpadd /CTR lfigpointdef
+    CTR W       lfigpadd /N   lfigpointdef
+    CTR S       lfigpadd /E   lfigpointdef
+    CTR xsize 0 0.3536 lfigpmul lfigpadd 0 ysize 0.3536 lfigpmul lfigpadd /NE lfigpointdef
+    0 ysize 0.3536 lfigpmul CTR xsize 0 0.3536 lfigpmul lfigpadd lfigpsub /SE lfigpointdef
+    xsize 0 0.3536 lfigpmul CTR lfigpsub 0 ysize 0.3536 lfigpmul lfigpadd /NW lfigpointdef
+    0 ysize 0.3536 lfigpmul xsize 0 0.3536 lfigpmul CTR lfigpsub lfigpsub /SW lfigpointdef
+    [ xsize ysize 0.5 lfigpmul /lfigellipsecircum cvx ] lfigcircumdef
+    S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+ } def
+ 
+ % shape and labels of the @Circle symbol
+ /lfigcircle
+ {
+    xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+    CTR xsize 0 ysize 0 lfigpmax 0.5 lfigpmul lfigpadd /E lfigpointdef
+    CTR 0 0 CTR E lfigdistance 45 lfigatangle lfigpadd /NE lfigpointdef
+    CTR 0 0 CTR E lfigdistance 90 lfigatangle lfigpadd /N lfigpointdef
+    CTR 0 0 CTR E lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+    CTR 0 0 CTR E lfigdistance 180 lfigatangle lfigpadd /W lfigpointdef
+    CTR 0 0 CTR E lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+    CTR 0 0 CTR E lfigdistance 270 lfigatangle lfigpadd /S lfigpointdef
+    CTR 0 0 CTR E lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+    [ S E lfigpsub /lfigellipsecircum cvx ] lfigcircumdef
+    S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+ } def
+ 
+ % shape and labels of the @HLine and @HArrow symbols
+ /lfighline
+ {
+    0 ymark lfigprevious /FROM lfigpointdef
+    xsize ymark lfigprevious /TO lfigpointdef
+ } def
+ 
+ % shape and labels of the @VLine and @VArrow symbols
+ /lfigvline
+ {
+    xmark ysize lfigprevious /FROM lfigpointdef
+    xmark 0 lfigprevious /TO lfigpointdef
+ } def
+ 
+ % points of a polygon around base with given no of sides, vert init angle:
+ % <sides> <angle> figpolygon <point> ... <point>
+ /lfigpolygon
+ {  xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+    90 sub CTR 2 copy lfigmax 5 3 roll
+    [ 4 copy pop /lfigpolycircum cvx ] lfigcircumdef
+    exch dup 360 exch div exch
+    1 1  3 2 roll
+    {  4 string cvs (P) exch lfigconcat cvn
+       6 copy pop pop lfigatangle 2 copy 10 2 roll
+       3 2 roll lfigpointdef
+       dup 3 1 roll add exch
+    }  for
+    pop lfigatangle
+ } def
+ 
+ % next array element:  <array> <index> lfiggetnext <array> <index> <any> true
+ %                                               or <array> <index> false
+ /lfiggetnext
+ {  2 copy exch length ge
+    { false }
+    { 2 copy get exch 1 add exch true } ifelse
+ } def
+ 
+ % check whether thing is number:  <any> lfigisnumbertype <any> <bool>
+ /lfigisnumbertype
+ {  dup type dup
+    /integertype eq exch /realtype eq or
+ } def
+ 
+ % check whether thing is an array:  <any> lfigisarraytype <any> <bool>
+ /lfigisarraytype { dup type /arraytype eq } def
+ 
+ % get next item:  <array> <index> lfiggetnextitem <array> <index> 0
+ %                                              or <array> <index> <array> 1
+ %                                              or <array> <index> <point> 2
+ /lfiggetnextitem
+ {   lfiggetnext
+     {	lfigisarraytype
+ 	{   1
+ 	}
+ 	{   lfigisnumbertype
+ 	    {	3 1 roll
+ 		lfiggetnext
+ 		{   lfigisnumbertype
+ 		    {	4 3 roll exch  2
+ 		    }
+ 		    {	pop 3 2 roll pop  0
+ 		    } ifelse
+ 		}
+ 		{   3 2 roll pop  0
+ 		} ifelse
+ 	    }
+ 	    {	pop 0
+ 	    } ifelse
+ 	} ifelse
+     }
+     {	0
+     } ifelse
+ } def
+ 
+ % set arc path:  bool x1 y1  x2 y2  x0 y0  lfigsetarc  <angle> <angle> <dist>
+ % the path goes from x1 y1 to x2 y2 about centre x0 y0,
+ % anticlockwise if bool is true else clockwise.
+ % The orientations of backwards pointing and forwards pointing
+ % arrowheads are returned in the two angles, and
+ % the length of the arc is returned in <dist>.
+ /lfigsetarc
+ {
+   20 dict begin
+      matrix currentmatrix 8 1 roll
+      2 copy translate 2 copy 8 2 roll
+      4 2 roll lfigpsub 6 2 roll lfigpsub
+      dup /y1 exch def dup mul /y1s exch def
+      dup /x1 exch def dup mul /x1s exch def
+      dup /y2 exch def dup mul /y2s exch def
+      dup /x2 exch def dup mul /x2s exch def
+ 
+      y1s y2s eq
+      {	-1
+      }
+      {	y1s x2s mul y2s x1s mul sub y1s y2s sub div
+      } ifelse
+      /da exch def
+ 
+      x1s x2s eq
+      {	-1
+      }
+      {	x1s y2s mul x2s y1s mul sub x1s x2s sub div
+      } ifelse
+      /db exch def
+ 
+      da 0 gt db 0 gt and
+      {	/LMax da sqrt db sqrt lfigmax def
+ 	/scalex da sqrt LMax div def
+ 	/scaley db sqrt LMax div def
+ 	scalex scaley scale
+ 	0 0 LMax
+ 	0 0 x1 scalex mul y1 scaley mul lfigangle
+ 	0 0 x2 scalex mul y2 scaley mul lfigangle
+ 	2 copy eq { 360 add } if
+ 	2 copy 8 2 roll
+ 	5 index { arc } { arcn } ifelse
+ 	2 index 1 index
+ 	{ 90 sub } { 90 add } ifelse
+ 	dup sin scaley mul exch cos scalex mul atan
+ 	2 index 2 index
+ 	{ 90 add } { 90 sub } ifelse
+ 	dup sin scaley mul exch cos scalex mul atan
+ 	5 2 roll  % res1 res2 ang1 ang2 anticlockwise
+ 	{ exch sub } { sub } ifelse
+ 	dup 0 le { 360 add } if  lfigpi mul LMax mul 180 div
+      }
+      {	0 0 x1 y1 lfigdistance 0 0 x2 y2 lfigdistance eq
+ 	0 0 x1 y1 lfigdistance 0 gt and
+ 	{	0 0
+ 		0 0 x1 y1 lfigdistance
+ 		0 0 x1 y1 lfigangle
+ 		0 0 x2 y2 lfigangle
+ 		2 copy eq { 360 add } if
+ 		2 copy 8 2 roll
+ 		5 index { arc } { arcn } ifelse
+ 		2 index 1 index
+ 		{ 90 sub } { 90 add } ifelse
+ 		2 index 2 index
+ 		{ 90 add } { 90 sub } ifelse
+ 		5 2 roll % res1 res2 ang1 ang2 clockwise
+ 		{ exch sub } { sub } ifelse
+ 		dup 0 le { 360 add } if lfigpi mul 0 0 x1 y1 lfigdistance mul 180 div
+ 	}
+ 	{	x2 y2 lineto pop
+ 		x2 y2 x1 y1 lfigangle
+ 		x1 y1 x2 y2 lfigangle
+ 		x1 y1 x2 y2 lfigdistance
+ 	} ifelse
+      } ifelse
+      4 -1 roll setmatrix
+    end
+ } def
+ 
+ % lfigsetcurve: set up a Bezier curve from x0 y0 to x3 y3
+ % and return arrowhead angles and length of curve (actually 0)
+ % x0 y0 x1 y1 x2 y2 x3 y3 lfigsetcurve <angle> <angle> <length>
+ /lfigsetcurve
+ { 8 copy curveto pop pop
+   lfigangle
+   5 1 roll
+   4 2 roll lfigangle
+   exch
+   0
+ } def
+ 
+ % lfigpaintpath: paint a path of the given shape
+ % /paint [ shape ] lfigpaintpath -
+ /lfigpaintpath
+ {
+   10 dict begin
+     0 newpath
+     /prevseen false def
+     /curveseen false def
+     { lfiggetnextitem
+       dup 0 eq { pop exit }
+       { 1 eq
+         { /curveseen true def
+ 	  /curve exch def
+ 	  curve length 0 eq { /curveseen false def } if
+         }
+         { /ycurr exch def
+ 	  /xcurr exch def
+ 	  prevseen
+ 	  { curveseen
+ 	    { curve length 4 eq
+ 	      { xprev yprev
+ 		curve 0 get curve 1 get
+ 		curve 2 get curve 3 get
+ 		xcurr ycurr
+ 		lfigsetcurve pop pop pop
+ 	      }
+ 	      { xprev yprev xcurr ycurr
+ 	        curve length 1 ge { curve 0 get } { 0 } ifelse
+ 	        curve length 2 ge { curve 1 get } { 0 } ifelse
+ 	        curve length 3 ge { curve 2 get } { true } ifelse
+ 	        7 1 roll
+ 	        lfigsetarc pop pop pop
+ 	      } ifelse
+ 	    }
+ 	    { xcurr ycurr lineto
+ 	    } ifelse
+ 	  }
+ 	  { xcurr ycurr moveto
+ 	  } ifelse
+ 	  /xprev xcurr def
+ 	  /yprev ycurr def
+ 	  /prevseen true def
+ 	  /curveseen false def
+         } ifelse
+       } ifelse
+     } loop pop pop cvx exec
+   end
+ } def
+ 
+ % stroke a path of the given shape in the given linestyle and dash length.
+ % Return the origin and angle of the backward and forward arrow heads.
+ % dashlength /linestyle [shape] lfigdopath  [<point> <angle>] [<point> <angle>] 
+ /lfigdopath
+ {
+   10 dict begin
+     0
+     /prevseen  false def
+     /curveseen false def
+     /backarrow []    def
+     /fwdarrow  []    def
+     {
+ 	lfiggetnextitem
+ 	dup 0 eq { pop exit }
+ 	{
+ 	    1 eq
+ 	    {	/curveseen true def
+ 		/curve exch def
+ 		curve length 0 eq { /prevseen false def } if
+ 	    }
+ 	    {	/ycurr exch def
+ 		/xcurr exch def
+ 		prevseen
+ 		{   newpath xprev yprev moveto
+ 		    curveseen
+ 		    {	curve length 4 eq
+ 			{   xprev yprev
+ 			    curve 0 get curve 1 get
+ 			    curve 2 get curve 3 get
+ 			    xcurr ycurr lfigsetcurve
+ 			}
+ 			{   xprev yprev xcurr ycurr
+ 			    curve length 1 ge { curve 0 get } { 0 } ifelse
+ 			    curve length 2 ge { curve 1 get } { 0 } ifelse
+ 			    curve length 3 ge { curve 2 get } { true } ifelse
+ 			    7 1 roll
+ 			    lfigsetarc
+ 			} ifelse
+ 		    }
+ 		    {	xcurr ycurr lineto
+ 			xcurr ycurr xprev yprev lfigangle dup 180 sub
+ 			xprev yprev xcurr ycurr lfigdistance
+ 		    } ifelse
+ 		    6 index 6 index cvx exec
+ 		    [ xprev yprev 5 -1 roll ]
+ 		    backarrow length 0 eq
+ 		    { /backarrow exch def }
+ 		    { pop } ifelse
+ 		    [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ 		} if
+ 		/xprev xcurr def
+ 		/yprev ycurr def
+ 		/prevseen true def
+ 		/curveseen false def
+ 	    } ifelse
+ 	} ifelse
+     } loop
+     pop pop pop pop
+     backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse
+     fwdarrow  length 0 eq { [ 0 0 0 ] } { fwdarrow  } ifelse
+   end
+ } def
+ 
+ % lfigdoarrow: draw an arrow head of given form
+ % dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] lfigdoarrow -
+ /lfigdoarrow
+ {  matrix currentmatrix 8 1 roll
+    dup 0 get 1 index 1 get translate
+    2 get rotate
+    [ 2 index neg 2 index 0 0
+      3 index 3 index neg
+      1 index 10 index mul 0
+      7 index 7 index ]
+    4 1 roll pop pop pop
+    dup 3 1 roll
+    gsave lfigpaintpath grestore lfigdopath pop pop
+    setmatrix
+ } def
+ 
+ % arrow head styles
+ /lfigopen     0.0 def
+ /lfighalfopen 0.5 def
+ /lfigclosed   1.0 def
+ 
+ % stroke no arrows, forward, back, and both
+ /lfignoarrow { pop pop pop pop pop pop pop pop                        } def
+ /lfigforward { 7 -1 roll lfigdoarrow pop                              } def
+ /lfigback    { 8 -2 roll pop lfigdoarrow                              } def
+ /lfigboth    { 8 -1 roll 7 copy lfigdoarrow pop 7 -1 roll lfigdoarrow } def
+ 
+ % lfigprevious: return previous point on path
+ /lfigprevious
+ { lfigisnumbertype
+   { 2 copy }
+   { lfigisarraytype
+     { 2 index 2 index }
+     { 0 0 }
+     ifelse
+   } ifelse
+ } def
+ 
+ % label a point in 2nd top dictionary:  <point> /name lfigpointdef -
+ /lfigpointdef
+ {
+   % (Entering lfigpointdef) lfigdebugprint
+   [ 4 2 roll transform
+     /itransform cvx ] cvx
+     currentdict end
+     3 1 roll
+     % currentdict length currentdict maxlength lt
+     % { def }
+     % { exec moveto (too many labels) show stop }
+     % ifelse
+     def
+     begin
+   % (Leaving lfigpointdef) lfigdebugprint
+ } def
+ 
+ % promote labels from second top to third top dictionary
+ % <string> lfigpromotelabels -
+ /lfigpromotelabels
+ {
+   % (Entering lfigpromotelabels) lfigdebugprint
+   currentdict end exch currentdict end
+   { exch 20 string cvs 2 index
+     (@) lfigconcat exch lfigconcat cvn exch def
+   } forall pop begin
+   % (Leaving lfigpromotelabels) lfigdebugprint
+ } def
+ 
+ % show labels (except CIRCUM): - lfigshowlabels -
+ /lfigshowlabels
+ {
+   % (Entering lfigshowlabels) lfigdebugprint
+   currentdict end
+     currentdict
+     { 1 index 20 string cvs (CIRCUM) search % if CIRCUM in key
+       { pop pop pop pop pop }
+       { pop cvx exec 2 copy
+         newpath 1.5 pt 0 360 arc
+         0 setgray fill
+         /Times-Roman findfont 8 pt scalefont setfont
+         moveto 0.2 cm 0.1 cm rmoveto 20 string cvs show
+       }
+       ifelse
+     } forall
+   begin
+   % (Leaving lfigshowlabels) lfigdebugprint
+ } def
+ 
+ % fix an angle to 0 <= res < 360:  <angle> lfigfixangle <angle>
+ /lfigfixangle
+ {
+   % (Entering lfigfixangle) lfigdebugprint
+   { dup 0 ge { exit } if
+     360 add
+   } loop
+   { dup 360 lt { exit } if
+     360 sub
+   } loop
+   % (Leaving lfigfixangle) lfigdebugprint
+ } def
+ 
+ % find point on circumference of box:  alpha a b lfigboxcircum x y
+ /lfigboxcircum
+ {
+   % (Entering lfigboxcircum) lfigdebugprint
+   4 dict begin
+     /b exch def
+     /a exch def
+     lfigfixangle /alpha exch def
+     0 0 a b lfigangle /theta exch def
+ 
+     % if alpha <= theta, return (a, a*tan(alpha))
+     alpha theta le
+     { a  a alpha sin mul alpha cos div }
+     {
+       % else if alpha <= 180 - theta, return (b*cot(alpha), b)
+       alpha 180 theta sub le
+       { b alpha cos mul alpha sin div  b }
+       {
+         % else if alpha <= 180 + theta, return (-a, -a*tan(alpha))
+         alpha 180 theta add le
+         { a neg  a neg alpha sin mul alpha cos div }
+         {
+ 	  % else if alpha <= 360 - theta, return (-b*cot(alpha), -b)
+ 	  alpha 360 theta sub le
+           { b neg alpha cos mul alpha sin div  b neg }
+ 	  {
+ 	    % else 360 - theta <= alpha, return (a, a*tan(alpha))
+ 	    a  a alpha sin mul alpha cos div
+ 	  } ifelse
+         } ifelse
+       } ifelse
+     } ifelse
+   end
+   % (Leaving lfigboxcircum) lfigdebugprint
+ } def
+ 
+ % find quadratic roots (assume a != 0): a b c lfigqroots x1 x2 2
+ %                                                     or    x2 1
+ %                                                     or       0
+ /lfigqroots
+ {
+   4 dict begin
+     /c exch def
+     /b exch def
+     /a exch def
+     /disc b b mul 4 a c mul mul sub def
+     disc 0 lt
+     { 0
+     }
+     { disc 0 eq
+       { b neg 2 a mul div
+ 	1
+       }
+       { b neg disc sqrt add 2 a mul div
+         b neg disc sqrt sub 2 a mul div
+ 	2
+       }
+       ifelse
+     }
+     ifelse
+   end
+ } def
+ 
+ % work our which quadrant: <angle> lfigquadrant <0-3>
+ /lfigquadrant
+ { dup 90 lt
+   { pop 0
+   }
+   { dup 180 lt
+     { pop 1
+     }
+     { 270 lt
+       { 2
+       }
+       { 3
+       } ifelse
+     } ifelse
+   } ifelse
+ } def
+ 
+ % find curvebox circum, assuming upper right quadrant: alpha a b xmk lfigcb x y
+ /lfigcb
+ {
+   6 dict begin
+     /xmk exch def
+     /b exch def
+     /a exch def
+     /alpha exch def
+     /theta1 0 0 a b xmk sub lfigangle def
+     /theta2 0 0 a xmk sub b lfigangle def
+     alpha theta1 le
+     { % if alpha <= theta1, return (a, a*tan(alpha))
+       a  a alpha sin mul alpha cos div
+     }
+     { alpha theta2 ge
+       { % else if alpha > theta2, return (b*cot(alpha), b)
+ 	b alpha cos mul alpha sin div  b
+       }
+       {
+ 	% else, return the intersection of line and circle
+ 	a xmk sub b xmk sub xmk  0 0 alpha lfigcircleintersect
+ 	dup 0 eq
+ 	{ % should never happen, just return any reasonable point
+ 	  pop
+ 	  a b 0.5 lfigpmul
+ 	}
+ 	{ 1 eq
+ 	  { % should never happen, just return the point on top of stack
+ 	  }
+ 	  { % the usual case, two points on stack, return the larger
+ 	    lfigpmax
+ 	  } ifelse
+ 	} ifelse
+       } ifelse
+     } ifelse
+   end
+ } def
+ 
+ % find point on circumference of curvebox: alpha a b xmk lfigcurveboxcircum x y
+ /lfigcurveboxcircum
+ {
+   % (Entering lfigcurveboxcircum) lfigdebugprint
+   5 dict begin
+     /xmk exch def
+     /b exch def
+     /a exch def
+     lfigfixangle /alpha exch def
+ 
+     % work out which quadrant we are in, and reflect accordingly
+     /quad alpha lfigquadrant def
+     quad 0 eq
+     { alpha a b xmk lfigcb
+     }
+     { quad 1 eq
+       { 180 alpha sub a b xmk lfigcb exch neg exch
+       }
+       { quad 2 eq
+ 	{ alpha 180 sub a b xmk lfigcb neg exch neg exch
+ 	}
+ 	{ 360 alpha sub a b xmk lfigcb neg
+ 	} ifelse
+       } ifelse
+     } ifelse
+   end
+   % (Leaving lfigcurveboxcircum) lfigdebugprint
+ } def
+ 
+ % find point on circumference of diamond:  alpha a b lfigdiamondcircum x y
+ /lfigdiamondcircum
+ {
+   % (Entering lfigdiamondcircum) lfigdebugprint
+   4 dict begin
+     /b exch def
+     /a exch def
+     lfigfixangle /alpha exch def
+     b alpha cos abs mul  a alpha sin abs mul  add  /denom exch def
+     a b mul alpha cos mul denom div
+     a b mul alpha sin mul denom div
+   end
+   % (Leaving lfigdiamondcircum) lfigdebugprint
+ } def
+ 
+ % find point on circumference of ellipse:  alpha a b lfigellipsecircum x y
+ /lfigellipsecircum
+ {
+   % (Entering lfigellipsecircum) lfigdebugprint
+   4 dict begin
+     /b exch def
+     /a exch def
+     lfigfixangle /alpha exch def
+     b alpha cos mul dup mul  a alpha sin mul dup mul  add sqrt /denom exch def
+     a b mul alpha cos mul denom div
+     a b mul alpha sin mul denom div
+   end
+   % (Leaving lfigellipsecircum) lfigdebugprint
+ } def
+ 
+ % find point of intersection of two lines each defined by two points
+ % x1 y1 x2 y2  x3 y3 x4 y4  lfiglineintersect x y
+ /lfiglineintersect
+ {
+   % (Entering lfiglineintersect) lfigdebugprint
+   13 dict begin
+     /y4 exch def
+     /x4 exch def
+     /y3 exch def
+     /x3 exch def
+     /y2 exch def
+     /x2 exch def
+     /y1 exch def
+     /x1 exch def
+     x2 x1 sub /x21 exch def
+     x4 x3 sub /x43 exch def
+     y2 y1 sub /y21 exch def
+     y4 y3 sub /y43 exch def
+     y21 x43 mul y43 x21 mul sub /det exch def
+   
+     % calculate x 
+     y21 x43 mul x1 mul
+     y43 x21 mul x3 mul sub
+     y3 y1 sub x21 mul x43 mul add
+     det div
+ 
+     % calculate y
+     x21 y43 mul y1 mul
+     x43 y21 mul y3 mul sub
+     x3 x1 sub y21 mul y43 mul add
+     det neg div
+ 
+   end
+   % (Leaving lfiglineintersect) lfigdebugprint
+ } def
+ 
+ % find point on circumference of polygon
+ % alpha radius num theta lfigpolycircum x y
+ /lfigpolycircum
+ {
+   % (Entering lfigpolycircum) lfigdebugprint
+   13 dict begin
+     /theta exch def
+     /num exch def
+     /radius exch def
+     /alpha exch def
+ 
+     % calculate delta, the angle from theta to alpha
+     alpha theta sub lfigfixangle
+ 
+     % calculate the angle which is the multiple of 360/num closest to delta
+     360 num div div truncate 360 num div mul theta add /anglea exch def
+ 
+     % calculate the next multiple of 360/num after anglea
+     anglea 360 num div add /angleb exch def
+ 
+     % intersect the line through these two points with the alpha line
+     anglea cos anglea sin  angleb cos angleb sin
+     0 0  alpha cos 2 mul alpha sin 2 mul
+     lfiglineintersect radius lfigpmul
+ 
+   end
+   % (Leaving lfigpolycircum) lfigdebugprint
+ } def
+ 
+ % find point of intersection of a point and a circle
+ % x0 y0 r  x1 y1 theta  lfigcircleintersect xa ya xb yb 2
+ %                                        or       xb yb 1
+ %                                        or             0
+ /lfigcircleintersect
+ {
+   % (Entering lfigcircleintersect) lfigdebugprint
+   15 dict begin
+     /theta exch def
+     /y1    exch def
+     /x1    exch def
+     /r     exch def
+     /y0    exch def
+     /x0    exch def
+ 
+     % if sin(theta) = 0 then line is horizontal and y must be y1
+     theta sin abs 0.00001 lt
+     { 
+       /a 1 def
+       /b -2 x0 mul def
+       /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def
+       a b c lfigqroots dup
+       0 eq
+       { pop
+ 	0
+       }
+       { 1 eq
+ 	{ y1 1
+ 	}
+ 	{ y1 exch y1 2
+ 	} ifelse
+       } ifelse
+     }
+     {
+       /ct theta cos theta sin div def
+       /a ct ct mul 1 add def
+       /b ct x1 x0 sub mul y1 add y0 sub 2 mul def
+       /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def
+       a b c lfigqroots dup
+       0 eq
+       { pop
+ 	0
+       }
+       { 1 eq
+ 	{ y1 add /yb exch def
+ 	  yb y1 sub ct mul x1 add /xb exch def
+ 	  xb yb 1
+ 	}
+ 	{ y1 add /ya exch def
+ 	  ya y1 sub ct mul x1 add /xa exch def
+ 	  y1 add /yb exch def
+ 	  yb y1 sub ct mul x1 add /xb exch def
+ 	  xa ya xb yb 2
+ 	} ifelse
+       } ifelse
+     } ifelse
+   end
+   % (Leaving lfigcircleintersect) lfigdebugprint
+ } def
+ 
+ % add CIRCUM operator with this body:  <array> lfigcircumdef -
+ /lfigcircumdef
+ {   % (Entering lfigcircumdef) lfigdebugprint
+     /CIRCUM exch cvx
+     currentdict end
+     3 1 roll
+     % currentdict length currentdict maxlength lt
+     % { def }
+     % { exec moveto (too many labels) show stop }
+     % ifelse
+     def
+     begin
+     % (Leaving lfigcircumdef) lfigdebugprint
+ } def
+ 
+ end
+ %%EndResource


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graph
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graph:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graph	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,27 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for graph drawing                                         #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @SysInclude { graphf } line                                            #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for graphs, and should       #
+ #  not be touched.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { graphf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  This package does not offer default options that can be changed.           #
+ #                                                                             #
+ ###############################################################################


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graphf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graphf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graphf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,1084 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @Graph package for drawing graphs (Version 1.0)                       #
+ #                                                                             #
+ #  Version 1.0 by Jeffrey H. Kingston, December 1993.                         #
+ #                                                                             #
+ #  This package draws graphs, the statistical kind not the graph-theoretical  #
+ #  kind.  See the User's Guide (Advanced Graphics) for user info.             #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysPrependGraphic { graphf.lpg }
+ @SysInclude { graphf.etc }
+ 
+ def @GraphObj
+     left p
+     named margin { 0c }
+     named adj { 0 0 }
+     right x
+ {
+   @BackEnd @Case {
+     PostScript @Yield {
+ 	@Null &  # kills previous white space
+ 	@HContract @VContract {
+ 	  //0io ||0io @HContract @VContract 
+ 	  { p "trpoint translate" adj "translate gsave" // "grestore" }
+ 	  @Graphic { //margin ||margin x ||margin //margin }
+ 	  ||0io //0io
+ 	}
+     }
+ # VT: PDF does nothing
+     PDF @Yield {
+ 	@Null &  # kills previous white space
+ 	@HContract @VContract {
+ 	  //0io ||0io @HContract @VContract 
+ 	  { "% @GraphObj UNIMPLEMENTED" }
+ 	  @Graphic { //margin ||margin x ||margin //margin }
+ 	  ||0io //0io
+ 	}
+     }
+   }
+ }
+ 
+ def @GraphCross
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+ 
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath 0 0 moveto xsize ysize lineto 0 ysize moveto"
+ 	  "xsize 0 lineto [] 0 setdash stroke"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ 	{"n [] 0 d 0 0 m __xsize __ysize l 0 __ysize m __xsize 0 l S"}	# uses S because PostScript version does NOT use closepath
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphPlus
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+ 
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath xmark 0 moveto xmark ysize lineto 0 ymark moveto"
+ 	  "xsize ymark lineto [] 0 setdash stroke"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ 	{"n [] 0 d __xmark 0 m __xmark __ysize l 0 __ymark m __xsize __ymark l S"}	# uses S because PostScript version does NOT use closepath
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphSquare
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+ 
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto"
+ 	  "0 ysize lineto closepath [] 0 setdash stroke"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ 	{"n [] 0 d 0 0 __xsize __ysize re s"}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphFilledSquare
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+ 
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto"
+ 	  "0 ysize lineto closepath gsave [] 0 setdash stroke grestore fill"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ 	{"n [] 0 d 0 0 __xsize __ysize re b"}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphDiamond
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+ 
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath 0 ymark moveto xmark 0 lineto xsize ymark lineto"
+ 	  "xmark ysize lineto closepath [] 0 setdash stroke"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ 	{"n [] 0 d 0 __ymark m __xmark 0 l __xsize __ymark l __xmark __ysize l s"}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphFilledDiamond
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+ 
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath 0 ymark moveto xmark 0 lineto xsize ymark lineto"
+ 	  "xmark ysize lineto closepath gsave [] 0 setdash stroke grestore fill"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ 	{"n [] 0 d 0 __ymark m __xmark 0 l __xsize __ymark l __xmark __ysize l b"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphCircle
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+ 
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath xmark ymark xmark 0 360 arc"
+ 	  "[] 0 setdash stroke"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ #
+ # draw a circle whose centre is at (xmark, ymark) and whose radius is xmark units;
+ #
+ # for curveto to work, we need to calculate the control points of the Bezier curve
+ # as well as move the pen to the correct initial point. The circle is drawn as two
+ # arcs of 180 degrees
+ #
+ #   pt0 = (xmark + xmark, ymark)
+ #   pt1 = (xmark + xmark, ymark + 4/3 * xmark)
+ #   pt2 = (0, ymark + 4/3 * xmark)
+ #   pt3 = (0, ymark)
+ #
+ #   pt0 = (0, ymark)
+ #   pt1 = (0, ymark - 4/3 * xmark)
+ #   pt2 = (xmark + xmark, ymark - 4/3 * xmark)
+ #   pt3 = (xmark + xmark, ymark)
+ #
+ 	{"n [] 0 d"
+ 	 "__mul(2, __xmark) __ymark m"
+ 	 "__mul(2, __xmark) __add(__ymark, __div(__mul(4, __xmark), 3))"	# pt1
+ 	 "0 __add(__ymark, __div(__mul(4, __xmark), 3))"			# pt2
+ 	 "0 __ymark c"									# pt3
+ 
+ 	 "0 __sub(__ymark, __div(__mul(4, __xmark), 3))"			# pt1
+ 	 "__mul(2, __xmark) __sub(__ymark, __div(__mul(4, __xmark), 3))"	# pt2
+ 	 "__mul(2, __xmark) __ymark c S"						# pt3
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphFilledCircle
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath xmark ymark xmark 0 360 arc"
+ 	  "gsave [] 0 setdash stroke grestore fill"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ #
+ # draw a filled circle whose centre is at (xmark, ymark) and whose radius is xmark units;
+ #
+ # for curveto to work, we need to calculate the control points of the Bezier curve
+ # as well as move the pen to the correct initial point. The circle is drawn as two
+ # arcs of 180 degrees
+ #
+ #   pt0 = (xmark + xmark, ymark)
+ #   pt1 = (xmark + xmark, ymark + 4/3 * xmark)
+ #   pt2 = (0, ymark + 4/3 * xmark)
+ #   pt3 = (0, ymark)
+ #
+ #   pt0 = (0, ymark)
+ #   pt1 = (0, ymark - 4/3 * xmark)
+ #   pt2 = (xmark + xmark, ymark - 4/3 * xmark)
+ #   pt3 = (xmark + xmark, ymark)
+ #
+ # Note: this is not a strict translation because there is a setdash bracketed by
+ #   gsave/grestore in the above PostScript but there is no closepath before it;
+ #   but in PDF, it is not possible to execute a setdash within a path definition.
+ #
+ 	{"n [] 0 d"
+ 	 "__mul(2, __xmark) __ymark m"
+ 	 "__mul(2, __xmark) __add(__ymark, __div(__mul(4, __xmark), 3))"	# pt1
+ 	 "0 __add(__ymark, __div(__mul(4, __xmark), 3))"			# pt2
+ 	 "0 __ymark c"									# pt3
+ 
+ 	 "0 __sub(__ymark, __div(__mul(4, __xmark), 3))"			# pt1
+ 	 "__mul(2, __xmark) __sub(__ymark, __div(__mul(4, __xmark), 3))"	# pt2
+ 	 "__mul(2, __xmark) __ymark c b"						# pt3
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphTriangle
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+ 
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath 0 0 moveto xsize 0 lineto xmark ysize 1.25 mul lineto"
+ 	  "closepath [] 0 setdash stroke"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ 	{"n [] 0 d 0 0 m __xsize 0 l __xmark __mul(__ysize, 1.25) l s"}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphFilledTriangle
+     named symbolsize
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 0.15 ft }
+ {
+   @BackEnd @Case {
+ 
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "newpath 0 0 moveto xsize 0 lineto xmark ysize 1.25 mul lineto"
+ 	  "closepath gsave [] 0 setdash stroke grestore fill"
+ 	}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+     PDF @Yield {
+ 	@HContract @VContract
+ 	{"n [] 0 d 0 0 m __xsize 0 l __xmark __mul(__ysize, 1.25) l h b"}
+ 	@Graphic
+ 	{symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+     }
+ 
+   }
+ }
+ 
+ def @GraphNoLine
+     named dashlength { 0.2 ft }
+     named linewidth  { "currentlinewidth" }
+     named length
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 1.0 ft }
+ {
+     length @Wide {}
+ }
+ 
+ def @GraphSolid
+     named dashlength { 0.2 ft }
+     named linewidth  { "currentlinewidth" }
+     named length
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 1.0 ft }
+ {
+   @BackEnd @Case {
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "xsize 0 lgraphdict begin newpath 0 0 moveto lineto"
+ 	   "/linewidth" linewidth "def xsize" dashlength "solid end"
+ 	} @Graphic { length @Wide }
+     }
+ # VT: PDF does nothing
+     PDF @Yield {
+ 	@HContract @VContract
+       { "% @GraphSolid UNIMPLEMENTED" } @Graphic { length @Wide }
+     }
+   }
+ }
+ 
+ def @GraphDashed
+     named dashlength { 0.2 ft }
+     named linewidth  { "currentlinewidth" }
+     named length
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 1.0 ft }
+ {
+   @BackEnd @Case {
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "xsize 0 lgraphdict begin newpath 0 0 moveto lineto"
+ 	   "/linewidth" linewidth "def xsize" dashlength "dashed end"
+ 	} @Graphic { length @Wide }
+     }
+ # VT: PDF does nothing
+     PDF @Yield {
+ 	@HContract @VContract
+       { "% @GraphDashed UNIMPLEMENTED" } @Graphic { length @Wide }
+     }
+   }
+ }
+ 
+ def @GraphDotted
+     named dashlength { 0.2 ft }
+     named linewidth  { "currentlinewidth" }
+     named length
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+     { 1.0 ft }
+ {
+   @BackEnd @Case {
+     PostScript @Yield {
+ 	@HContract @VContract
+ 	{ "xsize 0 lgraphdict begin newpath 0 0 moveto lineto"
+ 	   "/linewidth" linewidth "def xsize" dashlength "dotted end"
+ 	} @Graphic { length @Wide }
+     }
+ # VT: PDF does nothing
+     PDF @Yield {
+ 	@HContract @VContract
+       { "% @GraphDotted UNIMPLEMENTED" } @Graphic { length @Wide }
+     }
+   }
+ }
+ 
+ 
+ export @Data
+ def @Graph
+     named save         { no       }
+     named style        { frame    }
+     named width
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+ 		       { 6.0 cm   }
+     named height
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+ 		       { 4.0 cm   }
+     named xextra       { "none"   }
+     named yextra       { "none"   }
+     named xdecreasing  { no       }
+     named ydecreasing  { no       }
+     named leftcaption  {          }
+     named rightcaption {          }
+     named abovecaption {          }
+     named belowcaption {          }
+     named leftgap
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+ 		       { 1.5 cm   }
+     named rightgap
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+ 		       { 0.5 cm   }
+     named abovegap
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+ 		       { 0.5 cm   }
+     named belowgap
+ 	named cm left x { x"c" }
+ 	named in left x { x"i" }
+ 	named em left x { x"m" }
+ 	named pt left x { x"p" }
+ 	named ft left x { x"f" }
+ 	named sp left x { x"s" }
+ 	named vs left x { x"v" }
+ 		       { 0.5 cm   }
+     named hidecaptions { yes       }
+     named objects
+ 	named @NW
+ 	    import @GraphMath named at { 0 0 }
+ 	    named margin
+ 		named cm left x { x"c" }
+ 		named in left x { x"i" }
+ 		named em left x { x"m" }
+ 		named pt left x { x"p" }
+ 		named ft left x { x"f" }
+ 		named sp left x { x"s" }
+ 		named vs left x { x"v" }
+ 	    { 0.3 ft }
+ 	    right x
+ 	{ at @GraphObj adj { "xsize neg ysize" } margin { margin } x }
+ 	named @SW
+ 	    import @GraphMath named at { 0 0 }
+ 	    named margin
+ 		named cm left x { x"c" }
+ 		named in left x { x"i" }
+ 		named em left x { x"m" }
+ 		named pt left x { x"p" }
+ 		named ft left x { x"f" }
+ 		named sp left x { x"s" }
+ 		named vs left x { x"v" }
+ 	    { 0.3 ft }
+ 	    right x
+ 	{ at @GraphObj adj { "xsize neg 0" } margin { margin } x }
+ 	named @SE
+ 	    import @GraphMath named at { 0 0 }
+ 	    named margin
+ 		named cm left x { x"c" }
+ 		named in left x { x"i" }
+ 		named em left x { x"m" }
+ 		named pt left x { x"p" }
+ 		named ft left x { x"f" }
+ 		named sp left x { x"s" }
+ 		named vs left x { x"v" }
+ 	    { 0.3 ft }
+ 	    right x
+ 	{ at @GraphObj adj { "0 0" } margin { margin } x }
+ 	named @NE
+ 	    import @GraphMath named at { 0 0 }
+ 	    named margin
+ 		named cm left x { x"c" }
+ 		named in left x { x"i" }
+ 		named em left x { x"m" }
+ 		named pt left x { x"p" }
+ 		named ft left x { x"f" }
+ 		named sp left x { x"s" }
+ 		named vs left x { x"v" }
+ 	    { 0.3 ft }
+ 	    right x
+ 	{ at @GraphObj adj { "0 ysize" } margin { margin } x }
+ 	named @W
+ 	    import @GraphMath named at { 0 0 }
+ 	    named margin
+ 		named cm left x { x"c" }
+ 		named in left x { x"i" }
+ 		named em left x { x"m" }
+ 		named pt left x { x"p" }
+ 		named ft left x { x"f" }
+ 		named sp left x { x"s" }
+ 		named vs left x { x"v" }
+ 	    { 0.3 ft }
+ 	    right x
+ 	{ at @GraphObj adj { "xsize neg ysize 2 div" } margin { margin } x }
+ 	named @S
+ 	    import @GraphMath named at { 0 0 }
+ 	    named margin
+ 		named cm left x { x"c" }
+ 		named in left x { x"i" }
+ 		named em left x { x"m" }
+ 		named pt left x { x"p" }
+ 		named ft left x { x"f" }
+ 		named sp left x { x"s" }
+ 		named vs left x { x"v" }
+ 	    { 0.3 ft }
+ 	    right x
+ 	{ at @GraphObj adj { "xsize neg 2 div 0" } margin { margin } x }
+ 	named @E
+ 	    import @GraphMath named at { 0 0 }
+ 	    named margin
+ 		named cm left x { x"c" }
+ 		named in left x { x"i" }
+ 		named em left x { x"m" }
+ 		named pt left x { x"p" }
+ 		named ft left x { x"f" }
+ 		named sp left x { x"s" }
+ 		named vs left x { x"v" }
+ 	    { 0.3 ft }
+ 	    right x
+ 	{ at @GraphObj adj { "0 ysize 2 div" } margin { margin } x }
+ 	named @N
+ 	    import @GraphMath named at { 0 0 }
+ 	    named margin
+ 		named cm left x { x"c" }
+ 		named in left x { x"i" }
+ 		named em left x { x"m" }
+ 		named pt left x { x"p" }
+ 		named ft left x { x"f" }
+ 		named sp left x { x"s" }
+ 		named vs left x { x"v" }
+ 	    { 0.3 ft }
+ 	    right x
+ 	{ at @GraphObj adj { "xsize neg 2 div ysize" } margin { margin } x }
+ 	named @CTR
+ 	    import @GraphMath named at { 0 0 }
+ 	    named margin
+ 		named cm left x { x"c" }
+ 		named in left x { x"i" }
+ 		named em left x { x"m" }
+ 		named pt left x { x"p" }
+ 		named ft left x { x"f" }
+ 		named sp left x { x"s" }
+ 		named vs left x { x"v" }
+ 	    { 0.3 ft }
+ 	    right x
+ 	{ at @GraphObj adj { "xsize neg 2 div ysize 2 div" } margin {margin} x }
+ 		       {}
+     named xorigin  named none { "false" }           { none           }
+     named yorigin  named none { "false" }           { none           }
+     named xlog     named none { "0" }               { none           }
+     named ylog     named none { "0" }               { none           }
+     named points   named none { "none" }            { none           }
+     named pairs    named none { "none" }            { none           }
+     named colour   named none { "none" }            { none           }
+     named color    named none { "none" }            { none           }
+     named paint    named none { "none"  }           { none           }
+     named xmin     named none { "false" }           { none           }
+     named xmax     named none { "false" }           { none           }
+     named ymin     named none { "false" }           { none           }
+     named ymax     named none { "false" }           { none           }
+     named xticksep named none { "0" }               { none           }
+     named yticksep named none { "0" }               { none           }
+     named rticksep named none { "0" }               { none           }
+     import @GraphMath named xticks
+ 	named none                                  { "false"        }
+ 	named auto                                  { "false"        }
+ 	named "@"                                   { " lgen"        }
+ 	named "^"                                   { "^"            }
+ 		       { false    }
+     import @GraphMath named yticks
+ 	named none                                  { "false"        }
+ 	named auto                                  { "false"        }
+ 	named "@"                                   { " lgen"        }
+ 	named "^"                                   { "^"            }
+ 		       { false    }
+     import @GraphMath named rticks
+ 	named none                                  { "false"        }
+ 	named auto                                  { "false"        }
+ 	named "@"                                   { " lgen"        }
+ 	named "^"                                   { "^"            }
+ 		       { }
+     named xticklength                               { 0.5 ft   }
+     named yticklength                               { 0.5 ft   }
+     named rticklength                               { 0.5 ft   }
+     named dataformat                                { xandy    }
+     named dashlength                                { 0.2 ft   }
+     named linewidth				    { "currentlinewidth"   }
+     named symbolsize                                { 0.15 ft  }
+     body @Body
+ @Begin
+ 
+     def @Above
+     {
+ 	abovecaption @Case {
+ 	    ""   @Yield {}
+ 	    else @Yield @OneCol { ||0.5rt clines @Break abovecaption || //abovegap }
+ 	}
+     }
+ 
+     def @Below
+     {
+ 	belowcaption @Case {
+ 	    ""   @Yield {}
+ 	    else @Yield @OneCol { //belowgap ||0.5rt clines @Break belowcaption || }
+ 	}
+     }
+ 
+     def @Left
+     {
+ 	leftcaption @Case {
+ 	    ""   @Yield {}
+ 	    else @Yield @OneCol @OneRow {
+ 		 { //0.5rt @OneRow clines @Break leftcaption // } ^||leftgap }
+ 	}
+     }
+ 
+     def @Right
+     {
+ 	rightcaption @Case {
+ 	    ""   @Yield {}
+ 	    else @Yield @OneCol @OneRow {
+ 		 ||rightgap { //0.5rt @OneRow lines @Break rightcaption // } }
+ 	}
+     }
+ 
+     def @ZeroWidth
+ 	right x
+     {
+ 	hidecaptions @Case {
+ 	    { No  no  } @Yield x
+ 	    { Yes yes } @Yield @OneCol { ||0io x ||0io }
+ 	}
+     }
+ 
+     def @AddCaptions right x
+     {
+ 	def belowextra
+ 	{
+ 	    xticks @Case {
+ 		""   @Yield { 0i }
+ 		else @Yield { 1.7f }
+ 	    }
+ 	}
+ 
+ 	@HContract @VContract
+ 	{
+ 	                       | @Above    |
+ 	    / @ZeroWidth @Left | &0.5rt x  | @ZeroWidth @Right
+ 	    /belowextra        | @Below    |
+ 	}
+     }
+ 
+     export pi e sqrt abs ceiling floor truncate round cos sin atan exp log rand
+ 	   "*" "/" idiv mod "-" "-0" "-1" "-2" "-3" "-4" "-5" "-6" "-7" "-8"
+ 	   "-9" "-." "+" "=" "!=" "<" "<=" ">" ">=" not and xor or
+ 	   if xloop yloop zloop
+ 
+     def @Data
+ 	named points   named none { "none" }            { points     }
+ 	named pairs    named none { "none" }            { pairs      }
+ 	named colour   named none { "none" }            { colour     }
+ 	named color    named none { "none" }            { color      }
+ 	named paint    named none { "none" }            { paint      }
+ 	named dashlength                                { dashlength }
+ 	named linewidth                                 { linewidth  }
+ 	named symbolsize                                { symbolsize }
+ 	named dataformat                                { dataformat }
+ 	body data
+     {
+ 	def pi                                    {     "3.14159"  }
+ 	def e                                     {     "2.71828"  }
+ 	def sqrt     precedence 40        right y {   y "sqrt"     }
+ 	def abs      precedence 40        right y {   y "abs"      }
+ 	def ceiling  precedence 40        right y {   y "ceiling"  }
+ 	def floor    precedence 40        right y {   y "floor"    }
+ 	def truncate precedence 40        right y {   y "truncate" }
+ 	def round    precedence 40        right y {   y "round"    }
+ 	def cos      precedence 40        right y {   y "cos"      }
+ 	def sin      precedence 40        right y {   y "sin"      }
+ 	def atan     precedence 39 left x right y { x y "atan"     }
+ 	def exp      precedence 38 left x right y { x y "exp"      }
+ 	def log      precedence 37 left x right y { x y "dolog"    }
+ 	def rand     precedence 36 left x right y { x y "dorand"   }
+ 	def "*"      precedence 35 left x right y { x y "mul"      }
+ 	def "/"      precedence 34 left x right y { x y "div"      }
+ 	def idiv     precedence 34 left x right y { x y "idiv"     }
+ 	def mod      precedence 34 left x right y { x y "mod"      }
+ 	def "-"      precedence 33 left x right y
+ 	{ x @Case { "" @Yield {y "neg"} else @Yield { x y "sub" } }  }
+ 	def "-0"				    {     "-0"       }
+ 	def "-1"				    {     "-1"       }
+ 	def "-2"				    {     "-2"       }
+ 	def "-3"				    {     "-3"       }
+ 	def "-4"				    {     "-4"       }
+ 	def "-5"				    {     "-5"       }
+ 	def "-6"				    {     "-6"       }
+ 	def "-7"				    {     "-7"       }
+ 	def "-8"				    {     "-8"       }
+ 	def "-9"				    {     "-9"       }
+ 	def "-."				    {     "-."       }
+ 	def "+"      precedence 32 left x right y
+ 	{ x @Case { "" @Yield { y }     else @Yield { x y "add" } }  }
+ 	def "="      precedence 30 left x right y { x y "eq"       }
+ 	def "!="     precedence 30 left x right y { x y "ne"       }
+ 	def "<"      precedence 30 left x right y { x y "lt"       }
+ 	def "<="     precedence 30 left x right y { x y "le"       }
+ 	def ">"      precedence 30 left x right y { x y "gt"       }
+ 	def ">="     precedence 30 left x right y { x y "ge"       }
+ 	def not      precedence 25        right y {   y "not"      }
+ 	def and      precedence 24 left x right y { x y "and"      }
+ 	def xor      precedence 23 left x right y { x y "xor"      }
+ 	def or       precedence 22 left x right y { x y "or"       }
+ 	def if
+ 	    named cond { true }
+ 	    named then {}
+ 	    named else {}
+ 	{ cond "{" then "} {" else "} ifelse" }
+ 	def xloop
+ 	    named from { 0 }
+ 	    named to { 0 }
+ 	    named by { 1 }
+ 	    named do named x { "xval" } {}
+ 	{ from by to "{ /xval exch def" do "} for" }
+ 	def yloop
+ 	    named from { 0 }
+ 	    named to { 0 }
+ 	    named by { 1 }
+ 	    named do named y { "yval" } {}
+ 	{ from by to "{ /yval exch def" do "} for" }
+ 	def zloop
+ 	    named from { 0 }
+ 	    named to { 0 }
+ 	    named by { 1 }
+ 	    named do named z { "zval" } {}
+ 	{ from by to "{ /zval exch def" do "} for" }
+ 
+ 	def @IfPt
+ 	   left no
+ 	   right yes
+ 	{
+ 	    points @Case {
+ 		none @Yield no
+ 		else @Yield yes
+ 	    }
+ 	}
+ 
+ 	def @Points
+ 	{
+ 	    points @Case {
+ 		none            @Yield ""
+ 		plus            @Yield "plus"
+ 		cross           @Yield "cross"
+ 		square          @Yield "square"
+ 		filledsquare    @Yield "filledsquare"
+ 		diamond         @Yield "diamond"
+ 		filleddiamond   @Yield "filleddiamond"
+ 		circle          @Yield "circle"
+ 		filledcircle    @Yield "filledcircle"
+ 		triangle        @Yield "triangle"
+ 		filledtriangle  @Yield "filledtriangle"
+ 	    }
+ 	}
+ 
+ 	def @Pairs
+ 	{
+ 	  pairs @Case {
+ 	    none       @Yield {}
+ 	    solid      @Yield { "linesetup solid"   @IfPt "ilinesetup solid"  }
+ 	    dashed     @Yield { "linesetup cdashed" @IfPt "ilinesetup dashed" }
+ 	    dotted     @Yield { "linesetup dotted"  @IfPt "ilinesetup dotted" }
+ 	    surfacexhisto @Yield { "surfacexhisto" }
+ 	    surfaceyhisto @Yield { "surfaceyhisto" }
+ 	    xhisto        @Yield { "xhisto" }
+ 	    yhisto        @Yield { "yhisto" }
+ 	    filledxhisto  @Yield { "filledxhisto" }
+ 	    filledyhisto  @Yield { "filledyhisto" }
+ 	  }
+ 	}
+ 
+         def @DataFormat
+         {
+ 	    dataformat @Case {
+ 	        xandy     @Yield xandy
+ 	        yonly     @Yield yonly
+ 	        xonly     @Yield xonly
+ 	    }
+         }
+ 
+ 	def @Col
+ 	{
+ 	    { colour @Case { "none" @Yield color else @Yield colour } } @Case {
+ 		none		@Yield	{                         }
+ 		nochange	@Yield	{                         }
+ 		darkblue	@Yield	{ 0.0 0.0 0.5 setrgbcolor }
+ 		blue		@Yield	{ 0.0 0.0 1.0 setrgbcolor }
+ 		lightblue	@Yield	{ 0.5 0.5 1.0 setrgbcolor }
+ 		darkgreen	@Yield	{ 0.0 0.5 0.0 setrgbcolor }
+ 		green		@Yield	{ 0.0 1.0 0.0 setrgbcolor }
+ 		lightgreen	@Yield	{ 0.5 1.0 0.5 setrgbcolor }
+ 		darkred		@Yield	{ 0.5 0.0 0.0 setrgbcolor }
+ 		red		@Yield	{ 1.0 0.0 0.0 setrgbcolor }
+ 		lightred	@Yield	{ 1.0 0.5 0.5 setrgbcolor }
+ 		darkcyan	@Yield	{ 0.0 0.5 0.5 setrgbcolor }
+ 		cyan		@Yield	{ 0.0 1.0 1.0 setrgbcolor }
+ 		lightcyan	@Yield	{ 0.5 1.0 1.0 setrgbcolor }
+ 		darkmagenta	@Yield	{ 0.5 0.0 0.5 setrgbcolor }
+ 		magenta		@Yield	{ 1.0 0.0 1.0 setrgbcolor }
+ 		lightmagenta	@Yield	{ 1.0 0.5 1.0 setrgbcolor }
+ 		darkyellow	@Yield	{ 0.5 0.5 0.0 setrgbcolor }
+ 		yellow		@Yield	{ 1.0 1.0 0.0 setrgbcolor }
+ 		lightyellow	@Yield	{ 1.0 1.0 0.5 setrgbcolor }
+ 		darkgray	@Yield	{ 0.2 0.2 0.2 setrgbcolor }
+ 		gray		@Yield	{ 0.5 0.5 0.5 setrgbcolor }
+ 		lightgray	@Yield	{ 0.7 0.7 0.7 setrgbcolor }
+ 		darkgrey	@Yield	{ 0.2 0.2 0.2 setrgbcolor }
+ 		grey		@Yield	{ 0.5 0.5 0.5 setrgbcolor }
+ 		lightgrey	@Yield	{ 0.7 0.7 0.7 setrgbcolor }
+ 		black		@Yield	{ 0.0 0.0 0.0 setrgbcolor }
+ 		white		@Yield	{ 1.0 1.0 1.0 setrgbcolor }
+ 	    }
+ 	}
+ 
+ 	def @Paint
+ 	{
+ 	    paint @Case {
+ 	       { none no No } @Yield "false"
+ 	       { yes Yes } @Yield "true"
+ 	    }
+ 	}
+ 
+        "[ [" data "]" dataformat
+ 	  "{" @Points "}"
+ 	  "{" @Pairs "}"
+ 	  "{ /dashlength" dashlength "def"
+ 	  "  /linewidth"  linewidth  "def" @Col
+ 	  "  /symbolsize" symbolsize "def }"
+ 	  "{" @Paint "}"
+        "]"
+     }
+ 
+     def @Style
+     {
+ 	style @Case {
+ 	    frame    @Yield { "framestyle" }
+ 	    none     @Yield { "nonestyle"  }
+ 	    axes     @Yield { "axesstyle"  }
+ 	}
+     }
+ 
+     def @XExtra
+     {
+ 	xextra @Case {
+ 	    "none" @Yield {
+ 		style @Case {
+ 	            frame    @Yield { "0.5 cm" }
+ 	            none     @Yield { "0"  }
+ 	            axes     @Yield { "0"  }
+ 		}
+ 	    }
+ 	    else @Yield xextra
+ 	}
+     }
+ 
+     def @YExtra
+     {
+ 	yextra @Case {
+ 	    "none" @Yield {
+ 		style @Case {
+ 	            frame @Yield { "0.5 cm" }
+ 	            none  @Yield { "0"  }
+ 	            axes  @Yield { "0"  }
+ 		}
+ 	    }
+ 	    else @Yield yextra
+ 	}
+     }
+ 
+     def @XDecreasing
+     {
+ 	xdecreasing @Case {
+ 	    { No no } @Yield "false"
+ 	    { Yes yes } @Yield "true"
+ 	}
+     }
+ 
+     def @YDecreasing
+     {
+ 	ydecreasing @Case {
+ 	    { No no } @Yield "false"
+ 	    { Yes yes } @Yield "true"
+ 	}
+     }
+ 
+     @AddCaptions width @Wide height @High
+     @BackEnd @Case {
+ 	PostScript @Yield {
+ 	    {
+ 		"grestore"
+ 		save @Case { { Yes yes } @Yield "save" else @Yield {} }
+ 		"gsave xsize ysize lgraphdict begin /ysize exch def /xsize exch def"
+ 		"/alldata [" @Body "] def"
+ 		xticksep "[" xticks "] 0 alldata" xmin xmax xlog
+ 		  @XExtra @XDecreasing xorigin xticklength "xset"
+ 		yticksep "[" yticks "] 1 alldata" ymin ymax ylog
+ 		  @YExtra @YDecreasing yorigin yticklength "yset"
+ 
+ 		rticks @Case {
+ 
+ 		  ""   @Yield "norset"
+ 
+ 		  else @Yield {
+ 		    rticksep "[" rticks "] 1 alldata" ymin ymax ylog
+ 		    @YExtra @YDecreasing yorigin rticklength "rset"
+ 		  }
+ 		}
+ 
+ 		"rundata" @Style // "end"
+ 		save @Case { { Yes yes } @Yield "restore" else @Yield {} }
+ 	    } @Graphic { //1rt objects }
+ 	}
+ 	PDF @Yield { {"% @Graph UNIMPLEMENTED"} @Graphic { //1rt objects } }
+     }
+ 
+ @End @Graph                  


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graphf.etc
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graphf.etc:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graphf.etc	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,295 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @GraphMath package for @Graph (Version 1.1)                           #
+ #                                                                             #
+ #  Version 1.0 by Jeffrey H. Kingston, December 1993.                         #
+ #  Version 1.1 by Jeffrey H. Kingston, October 1996.                          #
+ #                                                                             #
+ #  This package provides mathematics for the @Graph graph drawing package.    #
+ #                                                                             #
+ ###############################################################################
+ 
+ export
+ 
+     "-0" "-1" "-2" "-3" "-4" "-5" "-6" "-7" "-8" "-9" "-."
+     pi e sqrt abs ceiling floor truncate round cos sin atan
+     exp log rand "*" "/" idiv mod "+" "-"
+     "=" "!=" "<" "<=" ">" ">=" not and xor or
+     if xloop yloop zloop
+ 
+ def @GraphMath
+ {
+     def "-0" { "-0" }
+     def "-1" { "-1" }
+     def "-2" { "-2" }
+     def "-3" { "-3" }
+     def "-4" { "-4" }
+     def "-5" { "-5" }
+     def "-6" { "-6" }
+     def "-7" { "-7" }
+     def "-8" { "-8" }
+     def "-9" { "-9" }
+     def "-." { "-." }
+ 
+     def pi { "3.14159" }
+ 
+     def e  { "2.71828" }
+ 
+     def sqrt
+ 	precedence 40
+ 	right y
+     {
+ 	y "sqrt"
+     }
+ 
+     def abs
+ 	precedence 40
+ 	right y
+     {
+ 	y "abs"
+     }
+ 
+     def ceiling
+ 	precedence 40
+ 	right y
+     {
+ 	y "ceiling"
+     }
+ 
+     def floor
+ 	precedence 40
+ 	right y
+     {
+ 	y "floor"
+     }
+ 
+     def truncate
+ 	precedence 40
+ 	right y
+     {
+ 	y "truncate"
+     }
+ 
+     def round
+ 	precedence 40
+ 	right y
+     {
+ 	y "round"
+     }
+ 
+     def cos
+ 	precedence 40
+ 	right y
+     {
+ 	y "cos"
+     }
+ 
+     def sin
+ 	precedence 40
+ 	right y
+     {
+ 	y "sin"
+     }
+ 
+     def atan
+ 	precedence 39
+ 	left x
+ 	right y
+     {
+ 	x y "atan"
+     }
+ 
+     def exp
+ 	precedence 38
+ 	left x
+ 	right y
+     {
+ 	x y "exp"
+     }
+ 
+     def log
+ 	precedence 37
+ 	left x
+ 	right y
+     {
+ 	x y "dolog"
+     }
+ 
+     def rand
+ 	precedence 36
+ 	left x
+ 	right y
+     {
+ 	x y "dorand"
+     }
+ 
+     def "*"
+ 	precedence 35
+ 	left x
+ 	right y
+     {
+ 	x y "mul"
+     }
+ 
+     def "/"
+ 	precedence 35
+ 	left x
+ 	right y
+     {
+ 	x y "div"
+     }
+ 
+     def "idiv"
+ 	precedence 34
+ 	left x
+ 	right y
+     {
+ 	x y "idiv"
+     }
+ 
+     def "mod"
+ 	precedence 34
+ 	left x
+ 	right y
+     {
+ 	x y "mod"
+     }
+ 
+     def "-"
+ 	precedence 33
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    ""   @Yield { y "neg" }
+ 	    else @Yield { x y "sub" }
+ 	}
+     }
+ 
+     def "+"
+ 	precedence 32
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    ""   @Yield { y }
+ 	    else @Yield { x y "add" }
+ 	}
+     }
+ 
+     def "="
+ 	precedence 30
+ 	left x
+ 	right y
+     {
+ 	x y "eq"
+     }
+ 
+     def "!="
+ 	precedence 30
+ 	left x
+ 	right y
+     {
+ 	x y "ne"
+     }
+ 
+     def "<"
+ 	precedence 30
+ 	left x
+ 	right y
+     {
+ 	x y "lt"
+     }
+ 
+     def "<="
+ 	precedence 30
+ 	left x
+ 	right y
+     {
+ 	x y "le"
+     }
+ 
+     def ">"
+ 	precedence 30
+ 	left x
+ 	right y
+     {
+ 	x y "gt"
+     }
+ 
+     def ">="
+ 	precedence 30
+ 	left x
+ 	right y
+     {
+ 	x y "ge"
+     }
+ 
+     def "not"
+ 	precedence 25
+ 	right y
+     {
+ 	y "not"
+     }
+ 
+     def "and"
+ 	precedence 24
+ 	left x
+ 	right y
+     {
+ 	x y "and"
+     }
+ 
+     def "xor"
+ 	precedence 23
+ 	left x
+ 	right y
+     {
+ 	x y "xor"
+     }
+ 
+     def "or"
+ 	precedence 22
+ 	left x
+ 	right y
+     {
+ 	x y "or"
+     }
+ 
+     def if
+ 	named cond { true }
+ 	named then {}
+ 	named else {}
+     {
+ 	cond "{" then "} {" else "} ifelse"
+     }
+ 
+     def xloop
+ 	named from { 0 }
+ 	named to { 0 }
+ 	named by { 1 }
+ 	named do named x { "xval" } {}
+     {
+ 	from by to "{ /xval exch def" do "} for"
+     }
+ 
+     def yloop
+ 	named from { 0 }
+ 	named to { 0 }
+ 	named by { 1 }
+ 	named do named y { "yval" } {}
+     {
+ 	from by to "{ /yval exch def" do "} for"
+     }
+ 
+     def zloop
+ 	named from { 0 }
+ 	named to { 0 }
+ 	named by { 1 }
+ 	named do named z { "zval" } {}
+     {
+ 	from by to "{ /zval exch def" do "} for"
+     }
+ 
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graphf.lpg
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graphf.lpg:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/graphf.lpg	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,768 ----
+ %%BeginResource: procset LoutGraphPrependGraphic
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %                                                                    %
+ %  PostScript @SysPrependGraphic file for @Graph (Version 1.0)       %
+ %                                                                    %
+ %  Version 1.0 by Jeffrey H. Kingston, December 1993.                %
+ %                                                                    %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 
+ errordict begin
+    /handleerror
+    {
+       {  /Times-Roman findfont 8 pt scalefont setfont
+ 	 0 setgray 4 pt 4 pt moveto
+ 	 $error /errorname get
+ 	 dup lgraphdict exch known
+ 	 { lgraphdict exch get }
+ 	 { 30 string cvs } ifelse
+ 	 show
+ 	 (  Command: ) show
+ 	 $error /command get 30 string cvs show
+       } stopped {} if
+       showpage stop
+    } def
+ end
+ 
+ /lgraphdict 200 dict def
+ lgraphdict begin
+ 
+ % error messages
+ /dictfull (dictfull error) def
+ /dictstackoverflow (dictstackoverflow error) def
+ /execstackoverflow (execstackoverflow error:  expression too complex?) def
+ /limitcheck (limitcheck error:  graph too complex or too large?) def
+ /syntaxerror (syntaxerror error:  syntax error in text of graph?) def
+ /typecheck (typecheck error:  syntax error in text of graph?) def
+ /undefined (undefined error:  unknown or misspelt symbol?) def
+ /rangecheck (rangecheck error:  undefined expression (e.g. divide by zero)?) def
+ /VMError (VMError error:  run out of memory?) def
+ 
+ % random number between x and y inclusive: x y dorand num
+ /dorand { 1 index sub 1 add rand exch mod add } def
+ 
+ % log to given base: base num dolog num
+ /dolog { ln exch ln div } def
+ 
+ % maximum of two numbers:  <num> <num> max <num>
+ /max { 2 copy gt { pop } { exch pop } ifelse } def
+ 
+ % add two points:  <point> <point> padd <point>
+ /padd { exch 3 1 roll add 3 1 roll add exch } def
+ 
+ % subtract first point from second:  <point> <point> psub <point>
+ /psub { 3 2 roll sub 3 1 roll exch sub exch } def
+ 
+ % distance between two points:  <point> <point> distance <length>
+ /distance { psub dup mul exch dup mul add sqrt } def
+ 
+ % point at angle and distance:  <point> <length> <angle> atangle <point>
+ /atangle { 2 copy cos mul 3 1 roll sin mul padd } def
+ 
+ % angle from one point to another:  <point> <point> angle <angle>
+ /angle { psub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+ 
+ 
+ % set up for line
+ % - linesetup <length> <dashlength>
+ /linesetup
+ { newpath
+   xcurr ycurr trpoint xprev yprev trpoint
+   4 copy moveto lineto distance dashlength
+ } def
+ 
+ % set up for icon-avoiding line
+ % - ilinesetup <length> <dashlength>
+ /ilinesetup
+ { newpath
+   xprev yprev trpoint xcurr ycurr trpoint 4 copy
+   4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle
+   6 2 roll 4 2 roll
+   4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle 
+   4 copy moveto lineto distance dashlength
+ } def
+ 
+ 
+ % stroke a solid line:  <length> <dashlength> solid -
+ /solid
+ { pop pop [] 0 setdash linewidth setlinewidth stroke
+ } def
+   
+ % stroke a dashed line:   <length> <dashlength> dashed -
+ /dashed
+ {  2 copy 2 mul le 1 index 0 le or
+    {  exch pop 1 pt max [ exch dup ] 0 setdash }
+    {  dup [ exch 4 2 roll 2 copy div
+       1 sub 2 div ceiling dup 4 1 roll
+       1 add mul sub exch div ] 0 setdash
+    } ifelse linewidth setlinewidth stroke
+ } def
+ 
+ % stroke a cdashed line:  <length> <dashlength> cdashed -
+ /cdashed
+ {  2 copy le 1 index 0 le or
+    { exch pop 1 pt max [ exch dup ] dup 0 get 2 div setdash }
+    { dup [ 4 2 roll exch 2 copy exch div
+      2 div ceiling div 1 index sub
+      ] exch 2 div setdash
+    } ifelse linewidth setlinewidth stroke
+ } def
+ 
+ % stroke a dotted line:  <length> <dashlength> dotted -
+ /dotted
+ {  2 copy le 1 index 0 le or
+    { exch pop 1 pt max [ exch 0 exch ] 0 setdash }
+    { 1 index exch div ceiling div 0.99999 mul
+      [ 0 3 2 roll ] 0 setdash
+    } ifelse gsave 1 setlinecap linewidth setlinewidth stroke grestore newpath
+ } def
+ 
+ % stroke a noline line:  <length> <dashlength> noline -
+ /noline
+ { pop pop
+ } def
+ 
+ % stroke a y histogram: - yhisto -
+ /yhisto
+ { xprev yleft trpoint yextra sub moveto
+   xprev yprev trpoint lineto
+   xcurr yprev trpoint lineto
+   xcurr yleft trpoint yextra sub lineto 
+   linewidth setlinewidth stroke
+ } def
+ 
+ % stroke an x histogram: - xhisto -
+ /xhisto
+ { xleft yprev trpoint exch xextra sub exch moveto
+   xcurr yprev trpoint lineto
+   xcurr ycurr trpoint lineto
+   xleft ycurr trpoint exch xextra sub exch lineto 
+   linewidth setlinewidth stroke
+ } def
+ 
+ % stroke a surface y histogram: - surfaceyhisto -
+ /surfaceyhisto
+ { firstpair
+   { xprev yleft trpoint yextra sub moveto
+     xprev yprev trpoint lineto
+   }
+   { xprev yprev trpoint moveto
+   } ifelse
+   xcurr yprev trpoint lineto
+   lastpair
+   { xcurr yleft trpoint yextra sub lineto 
+   }
+   { xcurr ycurr trpoint lineto
+   } ifelse
+   linewidth setlinewidth stroke
+ } def
+ 
+ % stroke a surface x histogram: - surfacexhisto -
+ /surfacexhisto
+ { firstpair
+   { xleft yprev trpoint exch xextra sub exch moveto
+   }
+   { xprev yprev trpoint moveto
+   } ifelse
+   xcurr yprev trpoint lineto
+   xcurr ycurr trpoint lineto
+   lastpair
+   { xleft ycurr trpoint exch xextra sub exch lineto 
+   } if
+   linewidth setlinewidth stroke
+ } def
+ 
+ % stroke a filled y histogram: - filledyhisto -
+ /filledyhisto
+ {
+   linewidth setlinewidth
+   xprev yleft trpoint exch currentlinewidth 2 div add exch yextra sub moveto
+   xprev yprev trpoint exch currentlinewidth 2 div add exch lineto
+   xcurr yprev trpoint exch currentlinewidth 2 div sub exch lineto
+   xcurr yleft trpoint exch currentlinewidth 2 div sub exch yextra sub lineto 
+   closepath fill
+ } def
+ 
+ % stroke a filled x histogram: - filledxhisto -
+ /filledxhisto
+ {
+   linewidth setlinewidth
+   xleft yprev trpoint currentlinewidth 2 div add exch xextra sub exch moveto
+   xcurr yprev trpoint currentlinewidth 2 div add lineto
+   xcurr ycurr trpoint currentlinewidth 2 div sub lineto
+   xleft ycurr trpoint currentlinewidth 2 div sub exch xextra sub exch lineto 
+   closepath fill
+ } def
+ 
+ 
+ % cross: show a small cross
+ /cross
+ { newpath
+   xcurr ycurr trpoint moveto
+   symbolsize neg symbolsize neg rmoveto
+   symbolsize 2 mul symbolsize 2 mul rlineto
+   0 symbolsize -2 mul rmoveto
+   symbolsize -2 mul symbolsize 2 mul rlineto
+   [] 0 setdash stroke
+ } def
+ 
+ % plus: show a small plus
+ /plus
+ { newpath
+   xcurr ycurr trpoint moveto
+   symbolsize neg 0 rmoveto
+   symbolsize 2 mul 0 rlineto
+   symbolsize neg symbolsize neg rmoveto
+   0 symbolsize 2 mul rlineto
+   [] 0 setdash stroke
+ } def
+ 
+ % square: show a small square
+ /square
+ { newpath
+   xcurr ycurr trpoint moveto
+   symbolsize neg symbolsize neg rmoveto
+   symbolsize 2 mul 0 rlineto
+   0 symbolsize 2 mul rlineto
+   symbolsize -2 mul 0 rlineto
+   closepath [] 0 setdash stroke
+ } def
+ 
+ % filledsquare: show a small filled square
+ /filledsquare
+ { newpath
+   xcurr ycurr trpoint moveto
+   symbolsize neg symbolsize neg rmoveto
+   symbolsize 2 mul 0 rlineto
+   0 symbolsize 2 mul rlineto
+   symbolsize -2 mul 0 rlineto
+   closepath gsave [] 0 setdash stroke grestore fill
+ } def
+ 
+ % diamond: show a small diamond
+ /diamond
+ { newpath
+   xcurr ycurr trpoint moveto
+   symbolsize neg 0 rmoveto
+   symbolsize symbolsize neg rlineto
+   symbolsize symbolsize rlineto
+   symbolsize neg symbolsize rlineto
+   closepath [] 0 setdash stroke
+ } def
+ 
+ % filleddiamond: show a small filled diamond
+ /filleddiamond
+ { newpath
+   xcurr ycurr trpoint moveto
+   symbolsize neg 0 rmoveto
+   symbolsize symbolsize neg rlineto
+   symbolsize symbolsize rlineto
+   symbolsize neg symbolsize rlineto
+   closepath gsave [] 0 setdash stroke grestore fill
+ } def
+ 
+ % circle: show a small circle
+ /circle
+ { newpath
+   xcurr ycurr trpoint symbolsize 0 360 arc [] 0 setdash stroke
+ } def
+ 
+ % filledcircle: show a small filled circle
+ /filledcircle
+ { newpath
+   xcurr ycurr trpoint symbolsize 0 360 arc gsave [] 0 setdash stroke grestore fill
+ } def
+ 
+ % triangle: show a small triangle
+ /triangle
+ { newpath
+   xcurr ycurr trpoint moveto
+   0 symbolsize 1.5 mul rmoveto
+   symbolsize neg symbolsize -2.5 mul rlineto
+   symbolsize 2 mul 0 rlineto
+   closepath [] 0 setdash stroke
+ } def
+ 
+ % filledtriangle: show a small filled triangle
+ /filledtriangle
+ { newpath
+   xcurr ycurr trpoint moveto
+   0 symbolsize 1.5 mul rmoveto
+   symbolsize neg symbolsize -2.5 mul rlineto
+   symbolsize 2 mul 0 rlineto
+   closepath gsave [] 0 setdash stroke grestore fill
+ } def
+ 
+ 
+ %plog: like log only with a base, and protected from failing if <= 0
+ % base x plog res
+ /plog { dup 0 le { pop pop 0 } { ln exch ln div } ifelse } def
+ 
+ % xtr: transform one x value logarithmically if xlog > 1
+ % <num> xtr <num>
+ /xtr
+ { xlog 1 gt
+   { xlog exch plog
+   } if
+ } def
+ 
+ % ytr: transform one y value logarithmically if ylog > 1
+ % <num> ytr <num>
+ /ytr
+ { ylog 1 gt
+   { ylog exch plog
+   } if
+ } def
+ 
+ % % trpoint: transform (x, y) in graph space into (x', y') in print space
+ % % x y trpoint x' y'
+ % /trpoint
+ % { exch xtr trxmin sub trxmax trxmin sub div xwidth mul xextra add
+ %   exch ytr trymin sub trymax trymin sub div ywidth mul yextra add
+ % } def
+ 
+ 
+ % trpoint: transform (x, y) in graph space into (x', y') in print space
+ % x y trpoint x' y'
+ /trpoint
+ { exch xtr xdecr { trxmax exch sub } { trxmin sub } ifelse
+   trxmax trxmin sub div xwidth mul xextra add
+ 
+   exch ytr ydecr { trymax exch sub } { trymin sub } ifelse
+   trymax trymin sub div ywidth mul yextra add
+ } def
+ 
+ 
+ % yonly: interpolate x values 1, 2, ... into data
+ % [ data ] yonly [ newdata ]
+ /yonly
+ { dup /tmp exch def
+   length [ exch 1 exch 1 exch
+   { dup tmp exch 1 sub get
+   } for
+   ]
+ } def
+ 
+ % xonly: interpolate y values 1, 2, ... into data
+ % [ data ] yonly [ newdata ]
+ /xonly
+ { dup /tmp exch def
+   length [ exch 1 exch 1 exch
+   { dup tmp exch 1 sub get exch
+   } for
+   ]
+ } def
+ 
+ % xandy: no interpolation of x or y values
+ % [ data ] xandy [ data ]
+ /xandy {} def
+ 
+ 
+ % expstringwidth: calculate width of string containing optional exponent
+ % <string> expstringwidth <width>
+ /expstringwidth
+ { (^) search
+   { exch pop stringwidth pop exch stringwidth pop 0.7 mul add }
+   { stringwidth pop }
+   ifelse
+ } def
+ 
+ % expstringshow: show string containing optional exponent
+ % <string> expstringshow -
+ /expstringshow
+ { (^) search
+   { exch pop show 0 0.5 ft rmoveto
+     gsave currentfont 0.7 scalefont setfont show grestore
+   }
+   { show
+   }
+   ifelse
+ } def
+ 
+ % concatenate two strings: <string> <string> strconcat <string>
+ /strconcat
+ { 2 copy length exch length add string
+   dup 0 4 index putinterval
+   dup 3 index length 3 index putinterval
+   3 1 roll pop pop
+ } def
+ 
+ % lgen: generate one label automatically
+ % num lgen num string
+ /lgen { dup 20 string cvs } def
+ 
+ % loglgen: generate one logarithmic label (with exponent)
+ % <base> <exponent> loglgen <string>
+ /loglgen
+ { 20 string cvs exch 20 string cvs
+   (^) strconcat exch strconcat
+ } def
+ 
+ 
+ % printxtick: print one x tick
+ % xpos printxtick -
+ /printxtick
+ { newpath
+   yleft trpoint moveto 0 yextra neg rmoveto
+   0 xticklength neg rlineto [] 0 setdash stroke
+ } def
+ 
+ % printxlabel: print one x label
+ % (xlabel) xpos printxlabel -
+ /printxlabel
+ { yleft trpoint moveto 0 yextra neg rmoveto
+   0 xticklength neg rmoveto 0 0.9 ft neg rmoveto
+   xlog 1 gt { 0 0.3 ft neg rmoveto } if
+   dup expstringwidth -2 div 0 rmoveto expstringshow
+ } def
+ 
+ % printytick: print one y tick
+ % ypos printytick -
+ /printytick
+ { newpath
+   xleft exch trpoint moveto xextra neg 0 rmoveto
+   yticklength neg 0 rlineto [] 0 setdash stroke
+ } def
+ 
+ % printylabel: print one y label
+ % (ylabel) ypos printylabel -
+ /printylabel
+ { xleft exch trpoint moveto xextra neg 0 rmoveto
+   yticklength neg 0 rmoveto -0.3 ft -0.3 ft rmoveto
+   dup expstringwidth neg 0 rmoveto expstringshow
+ } def
+ 
+ % printrtick: print one r tick
+ % ypos printrtick -
+ /printrtick
+ { newpath
+   xright exch trpoint moveto xextra 0 rmoveto
+   rticklength 0 rlineto [] 0 setdash stroke
+ } def
+ 
+ % printrlabel: print one r label
+ % (rlabel) ypos printrlabel -
+ /printrlabel
+ { xright exch trpoint moveto xextra 0 rmoveto
+   rticklength 0 rmoveto  0.3 ft -0.3 ft rmoveto
+   expstringshow
+ } def
+ 
+ % printticks: print ticks and labels
+ % /tickproc /labelproc [ tickandlabeldata ] min printticks -
+ /printticks
+ { /prev exch def
+   { dup type dup dup /integertype eq exch /realtype eq or
+     { pop dup /prev exch def 2 index cvx exec
+     }
+     { /stringtype eq
+       { prev 2 index cvx exec
+       }
+       { pop
+       } ifelse
+     } ifelse
+   } forall
+   pop pop
+ } def
+ 
+ 
+ % printxaxistick: print one x axis tick
+ % xpos printxaxistick -
+ /printxaxistick
+ { newpath
+   yaxis trpoint moveto 0 xticklength -2 div rmoveto
+   0 xticklength rlineto [] 0 setdash stroke
+ } def
+ 
+ % printxaxislabel: print one x axis label
+ % (xlabel) xpos printxaxislabel -
+ /printxaxislabel
+ { yaxis trpoint moveto
+   0 xticklength -2 div rmoveto 0 0.9 ft neg rmoveto
+   xlog 1 gt { 0 0.3 ft neg rmoveto } if
+   dup expstringwidth -2 div 0 rmoveto expstringshow
+ } def
+ 
+ % printyaxistick: print one y axis tick
+ % ypos printyaxistick -
+ /printyaxistick
+ { newpath
+   xaxis exch trpoint moveto
+   yticklength -2 div 0 rmoveto
+   yticklength 0 rlineto [] 0 setdash stroke
+ } def
+ 
+ % printyaxislabel: print one y axis label
+ % (ylabel) ypos printyaxislabel -
+ /printyaxislabel
+ { xaxis exch trpoint moveto
+   yticklength -2 div 0 rmoveto -0.3 ft -0.3 ft rmoveto
+   dup expstringwidth neg 0 rmoveto expstringshow
+ } def
+ 
+ 
+ % <val> minmax -
+ % perform minv := min(minv, val); maxv := max(maxv, val)
+ % allowing for the possibility of minv, maxv, val being false (undefined)
+ /minmax
+ { dup false eq
+   { pop }
+   { minv false eq
+     { dup /minv exch def /maxv exch def }
+     { dup minv lt
+       { /minv exch def }
+       { dup maxv gt
+ 	{ /maxv exch def }
+ 	{ pop }
+ 	ifelse
+       } ifelse
+     } ifelse
+   } ifelse
+ } def
+ 
+ % <ticks> ticksundef <ticks> <bool>
+ % returns true iff the ticks array is undefined (one false entry)
+ /ticksundef
+ { dup length 1 eq
+   { dup 0 get false eq
+   }
+   { false }
+   ifelse
+ } def
+ 
+ % <number> integral <boolean>
+ % true if the number has an integral value
+ /integral { dup round eq } def
+ 
+ % ticksep ticks xory alldata minval maxval axis base ticksandlimits ticks min max base
+ % ticksandlimits: sort out value of x or y ticks and limits and log base
+ /ticksandlimits
+ { /base exch def
+   /minv false def
+   /maxv false def
+ 
+   % min and max of user-supplied minval, maxval, and axis
+   minmax minmax minmax
+ 
+   % min and max of data points
+   { 0 get dup dup length 1 sub 3 index exch 2 exch
+     { get minmax dup
+     } for pop pop
+   } forall
+   pop dup
+ 
+   % min and max of tick values
+   { dup type /stringtype eq
+     { pop } { minmax } ifelse
+   } forall
+ 
+   % fix minv and maxv if undefined (false) or equal
+   minv false eq
+   { /minv -1 def /maxv 1 def }
+   { minv maxv eq
+     { minv 0 lt
+       { /minv 2 minv mul def /maxv 0 def
+       }
+       { minv 0 eq
+ 	{ /minv -1 def /maxv 1 def
+ 	}
+ 	{ /minv 0 def /maxv 2 maxv mul def
+ 	} ifelse
+       } ifelse
+     } if
+   } ifelse
+ 
+   % invent ticks if undefined
+   ticksundef
+   { pop /ticksep exch def
+ 
+     % if base is reasonable and minv is positive, logarithmic ticks
+     base 1 gt minv 0 gt and
+     {
+       % get integral log of minv and maxv
+       /logminv base minv plog floor   cvi def
+       /logmaxv base maxv plog ceiling cvi def
+ 
+       % if minv close to base, make it 1; reset minv and maxv
+       logminv 1 eq logmaxv 4 ge and { /logminv 0 def } if
+       /minv base logminv exp def
+       /maxv base logmaxv exp def
+ 
+       % ticks := [ base**logminv, ... , base**logmaxv ]
+       [ logminv 1 logmaxv
+ 	{ dup base exch exp
+ 	  exch base exch loglgen
+ 	} for
+       ]
+     }
+     { % non-logarithmic ticks
+       {
+         % fix tick separation if undefined (0) or too small
+ 	/base 0 def
+         /delta maxv minv sub def
+         ticksep delta 30 div le
+         { /ticksep 10 delta log 1 sub ceiling exp def
+ 	  ticksep delta 2 div ge
+ 	  { /ticksep ticksep 2 div def }
+ 	  { ticksep delta 5 div lt
+ 	    { /ticksep 2 ticksep mul def
+ 	    } if
+ 	  } ifelse
+         } if
+ 
+         % adjust minv and maxv to be multiples of ticksep
+         /minv minv ticksep div floor   ticksep mul def
+         /maxv maxv ticksep div ceiling ticksep mul def
+         /delta maxv minv sub def
+ 
+         % if minv or maxv near zero, move to zero and redo
+         minv ticksep eq
+         { /minv 0 def }
+         { maxv ticksep neg eq { /maxv 0 def } { exit } ifelse
+         } ifelse
+       } loop
+ 
+       % if minv, maxv, and ticksep are all integral, set "makeint" to true
+       /makeint minv integral maxv integral ticksep integral and and def
+ 
+       % ticks := [ minv, minv+ticksep, ... , maxv ]
+       [ 0 1 delta ticksep div round
+ 	{ ticksep mul minv add makeint { cvi } if lgen }
+ 	for
+       ]
+     } ifelse
+   }
+   { exch pop
+   } ifelse
+   minv maxv base
+ } def
+ 
+ % xset: set up all data for x axis, including limits and ticks
+ % xticksep xticks 0 alldata xmin xmax xlog xextra xdecr xaxis xticklength xset -
+ /xset
+ { /xticklength exch def
+   /xaxis exch def
+   /xdecr exch def
+   /xextra exch def
+   xaxis exch ticksandlimits
+   /xlog exch def /xmax exch def /xmin exch def /xticks exch def
+   /xleft xdecr { xmax } { xmin } ifelse def
+   /xright xdecr { xmin } { xmax } ifelse def
+   /xwidth xsize xextra 2 mul sub def
+   /trxmin xmin xtr def /trxmax xmax xtr def
+ } def
+ 
+ % yset: set up all data for y axis, including limits and yticks
+ % yticksep yticks 0 alldata ymin ymax ylog yextra ydecr yaxis yticklength yset -
+ /yset
+ { /yticklength exch def
+   /yaxis exch def
+   /ydecr exch def
+   /yextra exch def
+   yaxis exch ticksandlimits
+   /ylog exch def /ymax exch def /ymin exch def /yticks exch def
+   /yleft ydecr { ymax } { ymin } ifelse def
+   /yright ydecr { ymin } { ymax } ifelse def
+   /ywidth ysize yextra 2 mul sub def
+   /trymin ymin ytr def /trymax ymax ytr def
+ } def
+ 
+ % rset: set up all data for y axis (again), but including limits and rticks
+ % rticksep rticks 0 alldata ymin ymax ylog yextra ydecr yaxis rticklength rset -
+ /rset
+ { /rticklength exch def
+   /yaxis exch def
+   /ydecr exch def
+   /yextra exch def
+   yaxis exch ticksandlimits
+   /ylog exch def /ymax exch def /ymin exch def /rticks exch def
+   /yleft ydecr { ymax } { ymin } ifelse def
+   /yright ydecr { ymin } { ymax } ifelse def
+   /ywidth ysize yextra 2 mul sub def
+   /trymin ymin ytr def /trymax ymax ytr def
+ } def
+ 
+ % norset: set up data for no rticks
+ % - norset -
+ /norset
+ { /rticklength 0 def
+   /rticks [] def
+ } def
+ 
+ % framestyle: print a frame around the graph
+ /framestyle
+ { 0 0 moveto xsize 0 lineto xsize ysize lineto
+   0 ysize lineto closepath stroke
+   /printxtick /printxlabel xticks xleft printticks
+   /printytick /printylabel yticks ymin printticks
+   /printrtick /printrlabel rticks ymin printticks
+ } def
+ 
+ % nonestyle: print nothing around the graph
+ /nonestyle
+ {
+ } def
+ 
+ % axesstyle: print axes for the graph (unless axis values missing)
+ /axesstyle
+ {
+   xaxis false eq yaxis false eq or
+   { framestyle }
+   { xaxis yaxis trpoint dup 0 exch moveto xsize exch lineto
+     dup 0 moveto ysize lineto stroke
+     /printxaxistick /printxaxislabel xticks xleft printticks
+     /printyaxistick /printyaxislabel yticks ymin printticks
+   } ifelse
+ } def
+ 
+ % rundata: run all data sets
+ /rundata
+ { alldata
+   { gsave
+     dup dup dup dup
+     4 get /dopaint exch def
+     3 get /initrun exch def
+     2 get /pairs exch def
+     1 get /points exch def
+     0 get /data exch def
+     dopaint
+     { data length 4 ge
+       { initrun
+ 	newpath
+ 	data 0 get ymin trpoint yextra sub moveto
+ 	0 2 data length 2 sub
+ 	{ dup 1 add
+ 	  data exch get /ycurr exch def
+ 	  data exch get /xcurr exch def
+ 	  xcurr ycurr trpoint lineto
+ 	} for
+ 	data dup length 2 sub get ymin trpoint yextra sub lineto
+ 	closepath fill
+       } if
+     } if
+     initrun
+     data length 2 ge
+     {
+       /xcurr data 0 get def
+       /ycurr data 1 get def
+       points
+       data length 4 ge
+       { 2 2 data length 2 sub
+ 	{ /xprev xcurr def
+           /yprev ycurr def
+ 	  dup dup 2 eq /firstpair exch def
+ 	  data length 2 sub eq /lastpair exch def
+ 	  dup 1 add
+           data exch get /ycurr exch def
+           data exch get /xcurr exch def
+ 	  pairs
+ 	  points
+ 	} for
+       } if
+     } if
+     grestore
+   } forall
+ } def
+ 
+ end
+ %%EndResource


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/init
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/init:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/init	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,35 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  init                                                                       #
+ #                                                                             #
+ #  Lout file for initializing run.                                            #
+ #                                                                             #
+ #  Jeffrey H. Kingston                                                        #
+ #  21 September 1994                                                          #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ @SysInclude { langdefs }			  # language definitions
+ @SysInclude { bsf }				  # BasicSetup package
+ @SysInclude { dsf }				  # DocumentSetup package
+ 						  #   including standard.ld
+ def @TeX
+ {
+     @OneCol { T &0.4fo {-0.2f @VShift E} &0.45fo X }
+ }
+ 
+ def @LaTeX
+ {
+     @OneCol { L &0.3fo { +0.1f @VShift 0.8f @Font A } &0.4fo @TeX }
+ }
+ 
+ @Use { @BasicSetup }
+ @Use { @DocumentSetup }
+ 
+ @SysDatabase @Reference { loutrefs }		  # references about Lout
+ @SysDatabase @Reference { oldrefs }		  # old references about Lout
+ @SysDatabase @RefStyle { refstyle }		  # reference printing styles
+ @SysDatabase @FontDef  { fontdefs }		  # font definitions
+ @SysDatabase @FontDef  { latin2 }		  # more font definitions


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/langdefs
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/langdefs:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/langdefs	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,17 ----
+ langdef Czech Cesky Cestina			{ czech		. : ! ? .) ?) !) .' !' ?' }
+ langdef Danish Dansk				{ danish	. : ! ? .) ?) !) .' !' ?' }
+ langdef Dutch Nederlands			{ dutch		. : ! ? .) ?) !) .' !' ?' }
+ langdef English					{ english	. : ! ? .) ?) !) .' !' ?' }
+ langdef EnglishUK				{ engluk	. : ! ? .) ?) !) .' !' ?' }
+ langdef Finnish Suomi				{ finnish	. : ! ? .) ?) !) .' !' ?' }
+ langdef French Francais "Fran\347ais"		{ french				  }
+ langdef German Deutsch				{ german	. : ! ? .) ?) !) .' !' ?' }
+ langdef Hungarian Magyar			{ -		. : ! ? .) ?) !) .' !' ?' }
+ langdef	Italian Italiano			{ italian	. : ! ? .) ?) !) .' !' ?' }
+ langdef Norwegian Norsk				{ norweg	. : ! ? .) ?) !) .' !' ?' }
+ langdef Polish Polski				{ polish	. : ! ? .) ?) !) .' !' ?' }
+ langdef Portuguese "Português"			{ portugal	. : ! ? .) ?) !) .' !' ?' }
+ langdef Russian "\362\325\323\323\313\311\312"  { russian	. : ! ? .) ?) !) .' !' ?' }
+ langdef Slovenian Slovenia Slovenija		{ slovenia	. : ! ? .) ?) !) .' !' ?' }
+ langdef Spanish	"Espa\361ol"			{ spanish	. : ! ? .) ?) !) .' !' ?' }
+ langdef Swedish	Svenska				{ swedish	. : ! ? .) ?) !) .' !' ?' }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/latin2
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/latin2:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/latin2	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,9 ----
+ #################################################################
+ #                                                               #
+ #  latin2                                                       #
+ #                                                               #
+ #  This file includes everything you need for Latin2.           #
+ #                                                               #
+ #################################################################
+ 
+ @SysDatabase @FontDef { latin2 }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/modula
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/modula:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/modula	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,27 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for Modula-2 program printing                             #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @SysInclude { modulaf } line                                           #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for Modula-2, and should     #
+ #  not be touched.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { modulaf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  This package does not offer the ability to change default options.         #
+ #                                                                             #
+ ###############################################################################


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/modulaf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/modulaf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/modulaf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,137 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @Modula package for formatting Modula-2 programs (Version 1.0)        #
+ #                                                                             #
+ #  Version 1.0 by Jeffrey H. Kingston, September 1993.                        #
+ #                                                                             #
+ #  This package implements the complete Modula-2 language (in a style which   #
+ #  claims only to reflect its author's taste) with the following caveats:     #
+ #                                                                             #
+ #  * The symbol { must be given as lbrace                                     #
+ #                                                                             #
+ #  * The symbol } must be given as rbrace                                     #
+ #                                                                             #
+ #  * The symbol # must be given as numbersign                                 #
+ #                                                                             #
+ #  * Double quotes are used by Lout to delimit literal strings, so they       #
+ #    need to be quoted (Modula-2 allows single quoted strings wherever        #
+ #    double quoted strings can go; we recommend these be used)                #
+ #                                                                             #
+ #  * Literal strings should be enclosed in double quotes                      #
+ #                                                                             #
+ #  * The symbols B, H, C, and E as used in numeric literals will appear       #
+ #    in italic font                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ export	"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
+ 
+ 	"*" "/" "~" "+" "-" "=" "<>" ">" ">=" "<" "<=" "("
+ 	")" "[" "]" "," ";" "." ":" "..." ".." "|" "^" ":=" "'" "`"
+ 	"&"
+ 
+ 	lbrace rbrace numbersign
+ 
+ 	AND ARRAY BEGIN BY CASE CONST DEFINITION DIV DO ELSE ELSIF
+ 	END EXPORT EXIT FOR FROM IF IMPLEMENTATION IMPORT IN LOOP
+ 	MOD MODULE NOT OF OR POINTER PROCEDURE QUALIFIED RECORD
+ 	REPEAT RETURN SET TO THEN TYPE UNTIL VAR WHILE WITH @Com
+ 
+ def @Modula
+    body @Body
+ @Begin
+ 
+     def @R right x { Base @Font x }
+     def @B right x { Bold @Font x }
+     def @S right x { { Symbol Base } @Font x }
+ 
+     def "0"	{ @R "0"			}
+     def "1"	{ @R "1"			}
+     def "2"	{ @R "2"			}
+     def "3"	{ @R "3"			}
+     def "4"	{ @R "4"			}
+     def "5"	{ @R "5"			}
+     def "6"	{ @R "6"			}
+     def "7"	{ @R "7"			}
+     def "8"	{ @R "8"			}
+     def "9"	{ @R "9"			}
+ 
+     def "*"	{ @S @Char "asteriskmath"	}
+     def "/"	{ @R @Char "fraction"		}
+     def "~"	{ @R "~"			}
+     def "+"	{ @S "+"			}
+     def "-"	{ @S "-"			}
+     def "="	{ @S @Char "equal"		}
+     def "<>"	{ @S @Char "notequal"		}
+     def ">"	{ @S @Char "greater"		}
+     def ">="	{ @S @Char "greaterequal"	}
+     def "<"	{ @S @Char "less"		}
+     def "<="	{ @S @Char "lessequal"		}
+     def "("	{ @R "("			}
+     def ")"	{ @R ")"			}
+     def "["	{ @R "["			}
+     def "]"	{ @R "]"			}
+     def ","	{ @R ","			}
+     def ";"	{ @R ";"			}
+     def "."	{ @R "."			}
+     def ":"	{ @R ":"			}
+     def ".."	{ @R ".." &0.1f			}
+     def "..."	{ @R "..." 			}
+     def "|"	{ @R "|"			}
+     def "^"	{ @S 0.8f @Font @Char "arrowup"	}
+     def ":="	{ :{//0.03fo =}			}
+     def "'"	{ @R "'"			}
+     def "`"	{ @R "`"			}
+     def "&"	{ @R "&"			}
+ 
+     def lbrace		{ @R "{"		}
+     def rbrace		{ @R "}"		}
+     def numbersign	{ @R "#"		}
+ 
+     def AND		{ @B "and"		}
+     def ARRAY		{ @B "array"		}
+     def BEGIN		{ @B "begin"		}
+     def BY		{ @B "by"		}
+     def CASE		{ @B "case"		}
+     def CONST		{ @B "const"		}
+     def DEFINITION	{ @B "definition"	}
+     def DIV		{ @B "div"		}
+     def DO		{ @B "do"		}
+     def ELSE		{ @B "else"		}
+     def ELSIF		{ @B "elsif"		}
+     def END		{ @B "end"		}
+     def EXPORT		{ @B "export"		}
+     def EXIT		{ @B "exit"		}
+     def FOR		{ @B "for"		}
+     def FROM		{ @B "from"		}
+     def IF		{ @B "if"		}
+     def IMPLEMENTATION	{ @B "implementation"	}
+     def IMPORT		{ @B "import"		}
+     def IN		{ @B "in"		}
+     def LOOP		{ @B "loop"		}
+     def MOD		{ @B "mod"		}
+     def MODULE		{ @B "module"		}
+     def NOT		{ @B "not"		}
+     def OF		{ @B "of"		}
+     def OR		{ @B "or"		}
+     def POINTER		{ @B "pointer"		}
+     def PROCEDURE	{ @B "procedure"	}
+     def QUALIFIED	{ @B "qualified"	}
+     def RECORD		{ @B "record"		}
+     def REPEAT		{ @B "repeat"		}
+     def RETURN		{ @B "return"		}
+     def SET		{ @B "set"		}
+     def TO		{ @B "to"		}
+     def THEN		{ @B "then"		}
+     def TYPE		{ @B "type"		}
+     def UNTIL		{ @B "until"		}
+     def VAR		{ @B "var"		}
+     def WHILE		{ @B "while"		}
+     def WITH		{ @B "with"		}
+ 
+     def @Com right x	{ @R "{" x @R "}"	}
+ 
+    Slope @Font lines @Break @Body
+ 
+ @End @Modula


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/mydefs
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/mydefs:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/mydefs	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,9 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  mydefs                                                                     #
+ #                                                                             #
+ #  This empty Lout file is a placeholder which is read by the standard setup  #
+ #  files when there is no mydefs file in the user's current directory.        #
+ #                                                                             #
+ ###############################################################################


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pas
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pas:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pas	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,27 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for Pascal program printing                               #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @SysInclude { pasf } line                                              #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for Pascal, and should       #
+ #  not be touched.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { pasf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  This package does not offer default options that can be changed.           #
+ #                                                                             #
+ ###############################################################################


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pasf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pasf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pasf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,110 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @Pas package for formatting Pascal programs (Version 2.0)             #
+ #                                                                             #
+ #  Version 1.0 by Jeffrey H. Kingston, June 1991.                             #
+ #  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
+ #                                                                             #
+ #  See "Eq - a Lout package for typesetting mathematics" for user             #
+ #  information.                                                               #
+ #                                                                             #
+ #  Reference:   Jensen, K. and Wirth, N.  Pascal User Manual and Report.      #
+ #               Second Edition, Springer-Verlag, 1975.                        #
+ #                                                                             #
+ ###############################################################################
+ 
+ export	"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
+ 	"." "," ":" ";" "'" "`" "+" "-" "*" "/" "(" ")"
+ 	"[" "]" "^" ".." "=" "<" ">" "<>" "<=" ">=" ":="
+ 
+ 	and array begin case const div do downto else end
+ 	file for forward function goto if in label mod nil not
+ 	of or otherwise packed procedure program record repeat
+ 	set then to type until var while with @Com
+ 
+ def @Pas
+    body @Body
+ @Begin
+ 
+     def @R right x { Base @Font x }
+     def @B right x { Bold @Font x }
+     def @S right x { { Symbol Base } @Font x }
+ 
+     def "0"	{ @R "0"			}
+     def "1"	{ @R "1"			}
+     def "2"	{ @R "2"			}
+     def "3"	{ @R "3"			}
+     def "4"	{ @R "4"			}
+     def "5"	{ @R "5"			}
+     def "6"	{ @R "6"			}
+     def "7"	{ @R "7"			}
+     def "8"	{ @R "8"			}
+     def "9"	{ @R "9"			}
+     def "."	{ @R "."			}
+     def ","	{ @R ","			}
+     def ":"	{ @R ":"			}
+     def ";"	{ @R ";"			}
+     def "'"	{ @R "'"			}
+     def "`"	{ @R "`"			}
+     def "+"	{ @S "+"			}
+     def "-"	{ @S "-"			}
+     def "*"	{ @S @Char "asteriskmath"	}
+     def "/"	{ @R @Char "fraction"		}
+     def "("	{ @R "("			}
+     def ")"	{ @R ")"			}
+     def "["	{ @R "["			}
+     def "]"	{ @R "]"			}
+     def "^"	{ @S 0.8f @Font @Char "arrowup"	}
+     def ".."	{ @R ".." &0.1f			}
+     def "="	{ @S @Char "equal"		}
+     def "<"	{ @S @Char "less"		}
+     def ">"	{ @S @Char "greater"		}
+     def "<>"	{ @S @Char "notequal"		}
+     def "<="	{ @S @Char "lessequal"		}
+     def ">="	{ @S @Char "greaterequal"	}
+     def ":="	{ :{//0.03fo &0.1f =}		}
+ 
+     def and		{ @B "and"		}
+     def array		{ @B "array"		}
+     def begin		{ @B "begin"		}
+     def case		{ @B "case"		}
+     def const		{ @B "const"		}
+     def div		{ @B "div"		}
+     def do		{ @B "do"		}
+     def downto		{ @B "downto"		}
+     def else		{ @B "else"		}
+     def end		{ @B "end"		}
+     def file		{ @B "file"		}
+     def for		{ @B "for"		}
+     def forward		{ @B "forward"		}
+     def function	{ @B "function"		}
+     def goto		{ @B "goto"		}
+     def if		{ @B "if"		}
+     def in		{ @B "in"		}
+     def label		{ @B "label"		}
+     def mod		{ @B "mod"		}
+     def nil		{ @B "nil"		}
+     def not		{ @B "not"		}
+     def of		{ @B "of"		}
+     def or		{ @B "or"		}
+     def otherwise	{ @B "otherwise"	}
+     def packed		{ @B "packed"		}
+     def procedure	{ @B "procedure"	}
+     def program		{ @B "program"		}
+     def record		{ @B "record"		}
+     def repeat		{ @B "repeat"		}
+     def set		{ @B "set"		}
+     def then		{ @B "then"		}
+     def to		{ @B "to"		}
+     def type		{ @B "type"		}
+     def until		{ @B "until"		}
+     def var		{ @B "var"		}
+     def while		{ @B "while"		}
+     def with		{ @B "with"		}
+ 
+     def @Com right x	{ @R "{" x @R "}"	}
+ 
+    Slope @Font lines @Break @Body
+ 
+ @End @Pas


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/perl
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/perl:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/perl	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,127 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for Perl program printing                                 #
+ #                                                                             #
+ #   Version 3.0                                                               #
+ #   Jeffrey H. Kingston                                                       #
+ #   10 April 2000                                                             #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude { pod }                                                        #
+ #                                                                             #
+ #  This line causes Lout to read the default setup file for the Pod           #
+ #  documentation language that goes with Perl.  If you want your own          #
+ #  Pod setup file, it is probably best to delete this line and place          #
+ #                                                                             #
+ #     @Include { mypod }                                                      #
+ #     @Include { myperl }                                                     #
+ #                                                                             #
+ #  at the start of your document in the usual way.                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { pod }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude line                                                           #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for this programming         #
+ #  language, and should not be touched.                                       #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { perlf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Use clause                                                                #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @PerlSetup
+   # pipe			{		} # pipe source through this
+   # numbered			{ No		} # No, Yes, or a line number
+   # style	     		{ fixed		} # fixed, varying, or symbol
+ 
+   # the following options apply when style is "fixed"
+ 
+   # fixedfont			{ Courier	} # font family
+   # fixedsize			{ -1.0p		} # font size
+   # fixedline			{ 1.0vx		} # line-space
+   # fixedtabin			{ 8		} # tab interval
+   # fixedtabout			{ 8s		} # tab width
+ 
+   # fixedidentifiers		{ Base		} # identifier face
+   # fixedkeywords		{ Base		} # keyword face
+   # fixedoperators		{ Base		} # operator face
+   # fixednumbers		{ Base		} # number face
+   # fixedstrings		{ Base		} # string face
+   # fixedcomments		{ Base		} # comment face
+   # fixedlinenumbers		{ Base		} # line numbers face
+ 
+   # fixedidentifiersformat	{ @Body		} # identifiers format
+   # fixedkeywordsformat		{ @Body		} # keywords format
+   # fixedoperatorsformat	{ @Body		} # operators format
+   # fixednumbersformat		{ @Body		} # numbers format
+   # fixedstringsformat		{ @Body		} # strings format
+   # fixedcommentsformat		{ @Body		} # comments format
+   # fixedlinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "varying"
+ 
+   # varyingfont			{		} # font family
+   # varyingsize			{ 1.0f		} # font size
+   # varyingline			{ 1.0vx		} # line-space
+   # varyingtabin		{ 8		} # tab interval
+   # varyingtabout		{ 3f		} # tab width
+ 
+   # varyingidentifiers		{ Slope		} # identifier face
+   # varyingkeywords		{ Bold		} # keyword face
+   # varyingoperators		{ Base		} # operator face
+   # varyingnumbers		{ Base		} # number face
+   # varyingstrings		{ Slope		} # string face
+   # varyingcomments		{ Base		} # comment face
+   # varyinglinenumbers		{ Base		} # line numbers face
+ 
+   # varyingidentifiersformat	{ @Body		} # identifiers format
+   # varyingkeywordsformat	{ @Body		} # keywords format
+   # varyingoperatorsformat	{ @Body		} # operators format
+   # varyingnumbersformat	{ @Body		} # numbers format
+   # varyingstringsformat	{ @Body		} # strings format
+   # varyingcommentsformat	{ @Body		} # comments format
+   # varyinglinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "symbol"
+ 
+   # symbolfont			{		} # font family
+   # symbolsize			{ 1.0f		} # font size
+   # symbolline			{ 1.0vx		} # line-space
+   # symboltabin			{ 8		} # tab interval
+   # symboltabout		{ 3f		} # tab width
+ 
+   # symbolidentifiers		{ Slope		} # identifier face
+   # symbolkeywords		{ Bold		} # keyword face
+   # symboloperators		{ Base		} # operator face
+   # symbolnumbers		{ Base		} # number face
+   # symbolstrings		{ Slope		} # string face
+   # symbolcomments		{ Base		} # comment face
+   # symbollinenumbers		{ Base		} # line numbers face
+ 
+   # symbolidentifiersformat	{ @Body		} # identifiers format
+   # symbolkeywordsformat	{ @Body		} # keywords format
+   # symboloperatorsformat	{ @Body		} # operators format
+   # symbolnumbersformat		{ @Body		} # numbers format
+   # symbolstringsformat		{ @Body		} # strings format
+   # symbolcommentsformat	{ @Body		} # comments format
+   # symbollinenumbersformat	{ @Body		} # line numbers format
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/perlf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/perlf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/perlf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,390 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @PerlSetup package for formatting Perl programs                       #
+ #                                                                             #
+ #  Version 3.0                                                                #
+ #  Jeffrey H. Kingston                                                        #
+ #  10 April 2000                                                              #
+ #                                                                             #
+ #  This package uses a filtered body parameter to convert program source      #
+ #  code into Lout source.  The filter program is prg2lout, which is           #
+ #  distributed with Lout and should be compiled and installed wherever        #
+ #  Lout itself is.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ export @Perl
+ def @PerlSetup
+     named pipe					{	}  # pipe through this
+     named numbered				{ No	}  # numbered lines?
+     named style
+ 	named @OrIfPlain left x right y
+ 	{ @BackEnd @Case { PlainText @Yield y else @Yield x } }
+ 						{ fixed }  # print style
+ 
+     # the following options apply when style is "fixed"
+     named fixedfont				{ Courier }# font family
+     named fixedsize				{ -1.0p	}  # font size
+     named fixedline				{ 1.0vx	}  # line-space
+     named fixedtabin				{ 8	}  # tab interval
+     named fixedtabout				{ 8s	}  # tab width
+ 
+     named fixedidentifiers			{ Base	}  # identifier face
+     named fixedkeywords				{ Base	}  # keyword face
+     named fixedoperators			{ Base	}  # operator face
+     named fixednumbers				{ Base	}  # number face
+     named fixedstrings				{ Base	}  # string face
+     named fixedcomments				{ Base	}  # comment face
+     named fixedlinenumbers			{ Base	}  # line numbers face
+ 
+     named fixedidentifiersformat right @Body	{ @Body	}  # identifier format
+     named fixedkeywordsformat right @Body	{ @Body	}  # keyword format
+     named fixedoperatorsformat right @Body	{ @Body	}  # operators format
+     named fixednumbersformat right @Body	{ @Body	}  # number format
+     named fixedstringsformat right @Body	{ @Body	}  # string format
+     named fixedcommentsformat right @Body	{ @Body	}  # comment format
+     named fixedlinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "varying"
+     named varyingfont				{	}  # font family
+     named varyingsize				{ 1.0f	}  # font size
+     named varyingline				{ 1.0vx	}  # line-space
+     named varyingtabin				{ 8	}  # tab interval
+     named varyingtabout				{ 3f	}  # tab width
+ 
+     named varyingidentifiers			{ Slope	}  # identifier face
+     named varyingkeywords			{ Bold	}  # keyword face
+     named varyingoperators			{ Base	}  # operator face
+     named varyingnumbers			{ Base	}  # number face
+     named varyingstrings			{ Slope	}  # string face
+     named varyingcomments			{ Base	}  # comment face
+     named varyinglinenumbers			{ Base	}  # line numbers face
+ 
+     named varyingidentifiersformat right @Body	{ @Body	}  # identifier format
+     named varyingkeywordsformat right @Body	{ @Body	}  # keyword format
+     named varyingoperatorsformat right @Body	{ @Body	}  # operators format
+     named varyingnumbersformat right @Body	{ @Body	}  # number format
+     named varyingstringsformat right @Body	{ @Body	}  # string format
+     named varyingcommentsformat right @Body	{ @Body	}  # comment format
+     named varyinglinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "symbol"
+     named symbolfont				{	}  # font family
+     named symbolsize				{ 1.0f	}  # font size
+     named symbolline				{ 1.0vx	}  # line-space
+     named symboltabin				{ 8	}  # tab interval
+     named symboltabout				{ 3f	}  # tab width
+ 
+     named symbolidentifiers			{ Slope	}  # identifier face
+     named symbolkeywords			{ Bold	}  # keyword face
+     named symboloperators			{ Base	}  # operator face
+     named symbolnumbers				{ Base	}  # number face
+     named symbolstrings				{ Slope	}  # string face
+     named symbolcomments			{ Base	}  # comment face
+     named symbollinenumbers			{ Base	}  # line numbers face
+ 
+     named symbolidentifiersformat right @Body	{ @Body	}  # identifier format
+     named symbolkeywordsformat right @Body	{ @Body	}  # keyword format
+     named symboloperatorsformat right @Body	{ @Body	}  # operators format
+     named symbolnumbersformat right @Body	{ @Body	}  # number format
+     named symbolstringsformat right @Body	{ @Body	}  # string format
+     named symbolcommentsformat right @Body	{ @Body	}  # comment format
+     named symbollinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+ @Begin
+ 
+     export
+     
+ 	@PI @PK @PO @PN @PS @PC @PL @PA @PM @PD
+ 	@A "$>"
+ 
+     def @Perl
+ 	named style        { style         }  # style
+ 	named numbered	   { numbered	   }  # want numbered lines?
+ 	named pipe         { pipe          }  # pipe through this first
+ 	named font         { dft           }  # font family
+ 	named size         { dft           }  # font size
+ 	named line         { dft           }  # line-space
+ 	named tabin        { dft           }  # tab interval
+ 	named tabout       { dft           }  # tab width
+ 	named identifiers  { dft           }  # ident. font
+ 	named keywords     { dft           }  # keyword font
+ 	named operators    { dft           }  # operator font
+ 	named numbers      { dft           }  # number font
+ 	named strings      { dft           }  # string font
+ 	named comments     { dft           }  # comment font
+ 	named linenumbers  { dft           }  # line numbers font
+ 	body @Body			      # filtered, see below
+     @Begin
+ 
+ 	def @Test	# returns x unless x is dft
+ 	    left x
+ 	    named iffixed {}
+ 	    named ifvarying {}
+ 	    named ifsymbol {}
+ 	{
+ 	    x @Case {
+ 		dft @Yield {
+ 		    style @Case {
+ 			fixed   @Yield { iffixed   }
+ 			varying @Yield { ifvarying }
+ 			symbol  @Yield { ifsymbol  }
+ 		    }
+ 		}
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @Else	# returns x, or y if x is dft
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		dft  @Yield y
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitTab
+ 	{
+ 	  tabin @Test
+ 	      iffixed   { fixedtabin   }
+ 	      ifvarying { varyingtabin }
+ 	      ifsymbol  { symboltabin  }
+ 	}
+ 
+ 
+ 	def @InitTabWidth
+ 	{
+ 	  tabout @Test
+ 	      iffixed   { fixedtabout   }
+ 	      ifvarying { varyingtabout }
+ 	      ifsymbol  { symboltabout  }
+ 	}
+ 
+ 
+ 	def @Filter
+ 	{
+ 	    def wantnumbered
+ 	    {
+ 		numbered @Case {
+ 		  { No no }	@Yield ""
+ 		  { Yes yes }	@Yield "-L"
+ 		  else          @Yield { "-L"numbered }
+ 		}
+ 	    }
+ 
+ 	    pipe @Case {
+ 		"" @Yield {
+ 	    	    "prg2lout -r -lPerl" wantnumbered -i{@FilterIn}
+ 		    -o{@FilterOut} -e{@FilterErr}
+ 		    -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 		else @Yield {
+ 	    	    "cat" @FilterIn "|" pipe "|"
+ 		    "prg2lout -r -lPerl" wantnumbered -o{@FilterOut}
+ 		    -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitFontFamily
+ 	{
+ 	  font @Test
+ 	      iffixed   { fixedfont   }
+ 	      ifvarying { varyingfont }
+ 	      ifsymbol  { symbolfont  }
+ 	}
+ 
+ 
+ 	def @InitSize
+ 	{
+ 	  size @Test
+ 	      iffixed   { fixedsize   }
+ 	      ifvarying { varyingsize }
+ 	      ifsymbol  { symbolsize  }
+ 	}
+ 
+ 
+ 	def @InitLine
+ 	{
+ 	  line @Test
+ 	      iffixed   { fixedline   }
+ 	      ifvarying { varyingline }
+ 	      ifsymbol  { symbolline  }
+ 	}
+ 
+ 
+ 	def @PI		# for formatting identifiers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedidentifiersformat {
+ 		    { identifiers @Else fixedidentifiers } @Font x
+ 		}
+ 		varying @Yield varyingidentifiersformat {
+ 		    { identifiers @Else varyingidentifiers } @Font x
+ 		}
+ 		symbol @Yield symbolidentifiersformat {
+ 		    { identifiers @Else symbolidentifiers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PK		# for formatting keywords
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedkeywordsformat {
+ 		    { keywords @Else fixedkeywords } @Font x
+ 		}
+ 		varying @Yield varyingkeywordsformat {
+ 		    { keywords @Else varyingkeywords } @Font x
+ 		}
+ 		symbol @Yield symbolkeywordsformat {
+ 		    { keywords @Else symbolkeywords } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PO		# for formatting operators
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedoperatorsformat {
+ 		    { operators @Else fixedoperators } @Font x
+ 		}
+ 		varying @Yield varyingoperatorsformat {
+ 		    { operators @Else varyingoperators } @Font x
+ 		}
+ 		symbol @Yield symboloperatorsformat {
+ 		    { operators @Else symboloperators } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PN		# for formatting numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixednumbersformat {
+ 		    { numbers @Else fixednumbers } @Font x
+ 		}
+ 		varying @Yield varyingnumbersformat {
+ 		    { numbers @Else varyingnumbers } @Font x
+ 		}
+ 		symbol @Yield symbolnumbersformat {
+ 		    { numbers @Else symbolnumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PS		# for formatting strings
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedstringsformat {
+ 		    { strings @Else fixedstrings } @Font x
+ 		}
+ 		varying @Yield varyingstringsformat {
+ 		    { strings @Else varyingstrings } @Font x
+ 		}
+ 		symbol @Yield symbolstringsformat {
+ 		    { strings @Else symbolstrings } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PC		# for formatting comments
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedcommentsformat {
+ 		    { comments @Else fixedcomments } @Font x
+ 		}
+ 		varying @Yield varyingcommentsformat {
+ 		    { comments @Else varyingcomments } @Font x
+ 		}
+ 		symbol @Yield symbolcommentsformat {
+ 		    { comments @Else symbolcomments } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PL		# for formatting line numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedlinenumbersformat {
+ 		    { linenumbers @Else fixedlinenumbers } @Font x
+ 		}
+ 		varying @Yield varyinglinenumbersformat {
+ 		    { linenumbers @Else varyinglinenumbers } @Font x
+ 		}
+ 		symbol @Yield symbollinenumbersformat {
+ 		    { linenumbers @Else symbollinenumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PA		# for formatting asterisks
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "*"
+ 		else @Yield { "0.5w" @VShift "*" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PM		# for formatting minus signs
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "-"
+ 		else @Yield style @Case {
+ 		    fixed   @Yield "-"
+ 		    else    @Yield { { Symbol Base } @Font @Char "minus" }
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PD		# for formatting dots, if wanted larger
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "."
+ 		else @Yield { "1.4f" @Font "+0.04f" @VShift "." &"0.05f" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @A		# get characters from the Adobe Symbol font
+ 	    left sym
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		symbol	@Yield { { Symbol Base } @Font @Char sym }
+ 		else	@Yield { x			}
+ 	    }
+ 	}
+ 
+ 
+ 	macro "$>" { {} & }
+ 
+ 
+ 	{ @InitFontFamily Base @InitSize } @Font
+ 	{ @InitLine lines nohyphen } @Break @Body
+ 
+     @End @Perl
+ 
+ @End @PerlSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/picture
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/picture:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/picture	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,272 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for stand-alone illustrations                             #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude commands for standard packages.                                #
+ #                                                                             #
+ ###############################################################################
+ 
+   @SysInclude { langdefs	} # language definitions
+   @SysInclude { bsf		} # BasicSetup package
+   @SysInclude { dsf		} # DocumentSetup package
+   @SysInclude { picturef	} # IllustrationSetup extension
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Include command for reading personal definitions from current directory.  #
+ #                                                                             #
+ ###############################################################################
+ 
+   @Include { mydefs }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @BasicSetup @Use clause - basics, lists, paragraphs, displays.         #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+  
+ @Use { @BasicSetup
+   # @InitialFont	{ Times Base 12p	} # initial font
+   # @InitialBreak	{{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}}
+   # @InitialSpace	{ lout			} # initial space style
+   # @InitialLanguage	{ English		} # initial language
+   # @InitialColour	{ black			} # initial colour
+   # @OptimizePages	{ No			} # optimize page breaks?
+   # @HeadingFont	{ Bold			} # font for @Heading
+   # @ParaGap		{ 1.3vx @OrIfPlain 1f	} # gap between paragraphs
+   # @ParaIndent		{ 2.00f	@OrIfPlain 5s	} # first-line indent for @PP
+   # @DisplayGap		{ 1.00v	@OrIfPlain 1f	} # gap above, below displays
+   # @DisplayIndent	{ 2.00f	@OrIfPlain 5s	} # @IndentedDisplay indent
+   # @DefaultIndent	{ 0.5rt			} # @Display indent
+   # @DisplayNumStyle	{ (num)			} # style of display numbers
+   # @WideIndent		{ 4.00f	@OrIfPlain 10s	} # @WideTaggedList indent
+   # @VeryWideIndent	{ 8.00f	@OrIfPlain 20s	} # @VeryWideTaggedList indent
+   # @ListOuterGap	{ 1.00v	@OrIfPlain 1f	} # gap before, after lists
+   # @ListGap		{ 1.00v	@OrIfPlain 1f	} # gap between list items
+   # @ListIndent		{ 0s			} # indent of list items
+   # @ListRightIndent	{ 0s			} # right indent of list items
+   # @ListLabelWidth	{ 2.00f	@OrIfPlain 5s	} # width allowed for list tags
+   # @NumberSeparator	{ .			} # separates nums like 2.3.7
+   # @CrossLinkFormat	{ @Body			} # format of cross links
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @DocumentSetup @Use clause - page layout plus figures, tables, etc.    #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @DocumentSetup
+   # @PageType		{ A4	@OrIfPlain Other} # page type (width, height)
+   # @PageWidth		{ 80s			} # page width if type Other
+   # @PageHeight		{ 66f			} # page height if type Other
+   # @PageOrientation	{ Portrait		} # Portrait, Landscape, etc.
+   # @PageBackground	{  			} # background of each page
+   # @TopMargin		{ 2.5c	@OrIfPlain 6f	} # top margin of all pages
+   # @FootMargin		{ 2.5c	@OrIfPlain 6f	} # bottom margin of all pages
+   # @OddLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of odd pages
+   # @OddRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of odd pages
+   # @EvenLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of even pages
+   # @EvenRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of even pages
+   # @OddLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @OddRightBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenRightBodyMargin{ 0c			} # extra margin for page body
+   # @PageBoxType	{ None			} # None Box CurveBox ShadowBox
+   # @PageBoxMargin	{ 1.00c			} # page box margin
+   # @PageBoxLineWidth	{			} # page box line thickness
+   # @PageBoxPaint	{ none			} # page box paint
+   # @PageBoxShadow	{ 0.60c			} # shadow margin if ShadowBox
+   # @PageEnclose	{ @Body			} # enclose every page in this
+   # @ColumnNumber	{ 1			} # number of columns (1 to 10)
+   # @ColumnGap		{ 1.00c	@OrIfPlain 6s	} # column gap
+   # @FigureLocation	{ PageTop		} # default figure location
+   # @TableLocation	{ PageTop		} # default table location
+   # @FigureFormat	{ @CC @Body		} # default figure format
+   # @TableFormat	{ @CC @Body		} # default table format
+   # @FigureWord		{ figure		} # "Figure" word else anything
+   # @TableWord		{ table			} # "Table" word else anything
+   # @FigureNumbers	{ Arabic		} # method of numbering figures
+   # @TableNumbers	{ Arabic		} # method of numbering tables
+   # @FigureCaptionPos	{ Below 		} # Above or Below
+   # @TableCaptionPos	{ Below			} # Above or Below
+   # @FigureCaptionFont  { -2p                   } # figure caption font
+   # @FigureCaptionBreak { adjust hyphen 1.2fx   } # figure caption break
+   # @FigureCaptionFormat{ {@B { word @NumSep number. &2s }} @Insert caption }
+   # @TableCaptionFont   { -2p                   } # table caption font
+   # @TableCaptionBreak  { adjust hyphen 1.2fx   } # table caption break
+   # @TableCaptionFormat { {@B { word @NumSep number. &2s }} @Insert caption }
+   # @MakeFigureContents { No                    } # list of figures at start
+   # @MakeTableContents  { No                    } # list of tables at start
+   # @MakeContents	{ No			} # make contents? Yes or No
+   # @ContentsGap	{ 0.20v	@OrIfPlain 0f	} # extra gap above minor entry
+   # @ContentsGapAbove	{ 0.80v	@OrIfPlain 1f	} # extra gap above major entry
+   # @ContentsGapBelow	{ 0.00v	@OrIfPlain 0f	} # extra gap below major entry
+   # @ContentsFont       { Bold                  } # font for major entry
+   # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f	} # extra gap above `part' entry
+   # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f	} # extra gap below `part' entry
+   # @ContentsFormat	{ number @DotSep title	} # contents entry format
+   # @ContentsLeader	{ ..			} # leader symbol in contents
+   # @ContentsLeaderGap	{ 4s	@OrIfPlain 2s	} # gap between leaders
+   # @ContentsRightWidth	{ 3f	@OrIfPlain 6s	} # page numbers column width
+   # @MakeReferences	{ Yes			} # make references? Yes or No
+   # @RefCiteStyle	{ [cite]		} # citation style
+   # @RefCiteLabels	{ @RefNum		} # citation items
+   # @RefNumbers		{ Arabic		} # reference numbers
+   # @RefListFormat	{ Labels		} # NoLabels, Labels, etc.
+   # @RefListLabels	{ [@RefNum]		} # ref list label format
+   # @RefListTitle	{ references		} # title of reference list
+   # @ChapRefListTitle	{ references		} # title of chapter ref list
+   # @RefListIndent	{ 0s			} # indent to left of labels
+   # @RefListRightIndent	{ 0s			} # indent to right of items
+   # @RefListGap		{ @ListGap		} # gap between ref list items
+   # @RefListFont	{        		} # font used in reference list
+   # @RefListBreak	{        		} # break style of ref list
+   # @RefListLabelWidth 	{ @ListLabelWidth	} # Labels column width
+   # @RefListSortKey	{ @Tag			} # sorting key
+   # @MakeIndex		{ No			} # make index? Yes or No
+   # @IndexFont		{			} # index entries font
+   # @IndexBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexColumnNumber	{ 2			} # index columns (1 to 10)
+   # @IndexColumnGap	{ 1.00c	@OrIfPlain 6s	} # index column gap
+   # @IndexCtd		{ Yes			} # include (ctd.) lines
+   # @IndexCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexA		{ No 			} # make index A? Yes or No
+   # @IndexAFont		{			} # index A entries font
+   # @IndexABreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexAColumnNumber	{ 2			} # index A columns (1 to 10)
+   # @IndexAColumnGap	{ 1.00c	@OrIfPlain 6s	} # index A column gap
+   # @IndexACtd		{ Yes			} # include (ctd.) lines
+   # @IndexACtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexACtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexB		{ No 			} # make index B? Yes or No
+   # @IndexBFont		{			} # index B entries font
+   # @IndexBBreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexBColumnNumber	{ 2			} # index B columns (1 to 10)
+   # @IndexBColumnGap	{ 1.00c	@OrIfPlain 6s	} # index B column gap
+   # @IndexBCtd		{ Yes			} # include (ctd.) lines
+   # @IndexBCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexBCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @TopGap		{ 0.75c	@OrIfPlain 2f	} # gap between figures
+   # @MidGap		{ 0.75c	@OrIfPlain 2f	} # gap above/below body text
+   # @FootNoteNumbers	{ Arabic		} # footnote numbers
+   # @FootNoteThrough	{ No			} # numbered through chapter?
+   # @FootNoteLocation	{ ColFoot		} # where the footnote appears
+   # @FootNoteFont	{ 0.80f			} # font for footnotes
+   # @FootNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for footnotes
+   # @FootNoteFormat     { { number &0.05f } @Insert body } # footnote format
+   # @FootLen		{ 2.00c	@OrIfPlain 10s	} # length of footnote line
+   # @FootAboveGap	{ @DisplayGap		} # gap above footnote line
+   # @FootGap		{ 0.20c	@OrIfPlain 1fx	} # gap between footnotes
+   # @MarginNoteFont	{ 0.80f			} # font of margin notes
+   # @MarginNoteBreak	{ ragged 1.10fx		} # break style of margin notes
+   # @MarginNoteHGap	{ 0.5c   		} # horizontal gap to notes
+   # @MarginNoteVGap	{ @DisplayGap		} # min vertical gap between
+   # @MarginNoteWidth	{ 1.50c  		} # width of margin notes
+   # @EndNoteNumbers	{ Arabic		} # endnote numbers
+   # @EndNoteFont	{ 0.80f			} # font of endnotes
+   # @EndNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for endnotes
+   # @EndNoteFormat	{ { number &0.05f } @Insert body } # endnote format
+   # @EndNoteGap		{ 0.20c	@OrIfPlain 1f	} # gap between endnotes
+   # @TheoremWord	{ theorem		} # "Theorem" word, etc.
+   # @TheoremTitleFormat	{ (title)		} # only if title present
+   # @TheoremFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @DefinitionWord	{ definition		} # "Definition" word, etc.
+   # @DefinitionTitleFormat { (title)		} # only if title present
+   # @DefinitionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ClaimWord		{ claim			} # "Claim" word, etc.
+   # @ClaimTitleFormat	{ (title)		} # only if title present
+   # @ClaimFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @PropositionWord	{ proposition		} # "Proposition" word, etc.
+   # @PropositionTitleFormat { (title)		} # only if title present
+   # @PropositionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @LemmaWord		{ lemma			} # "Lemma" word, etc.
+   # @LemmaTitleFormat	{ (title)		} # only if title present
+   # @LemmaFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @CorollaryWord	{ corollary		} # "Corollary" word, etc.
+   # @CorollaryTitleFormat { (title)		} # only if title present
+   # @CorollaryFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ExampleWord	{ example		} # "Example" word, etc.
+   # @ExampleTitleFormat	{ (title)		} # only if title present
+   # @ExampleFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ProofWord		{ proof			} # "Proof" word, etc.
+   # @PageHeaders	{ Simple		} # None Simple Titles NoTitles
+   # @PageNumbers	{ Arabic		} # page numbers
+   # @FirstPageNumber	{ 1			} # number of first page 
+   # @IntroPageNumbers	{ Roman			} # intro page numbers
+   # @IntroFirstPageNumber{ 1			} # number of first intro page 
+   # @StructPageNums	{ No			} # make structured page numbers
+ 
+   # @OddTop		{ @Centre{- @PageNum -}	} # Simple page headers
+   # @OddFoot		{ @Null			}
+   # @EvenTop		{ @Centre{- @PageNum -}	}
+   # @EvenFoot		{ @Null			}
+   # @StartOddTop	{ @Null			}
+   # @StartOddFoot	{ @Null			}
+   # @StartEvenTop	{ @Null			}
+   # @StartEvenFoot	{ @Null			}
+   # @IntroOddTop	{ @Null			}
+   # @IntroOddFoot	{ @Centre @PageNum	}
+   # @IntroEvenTop	{ @Null			}
+   # @IntroEvenFoot	{ @Centre @PageNum	}
+   # @IntroStartOddTop	{ @Null			}
+   # @IntroStartOddFoot	{ @Null			}
+   # @IntroStartEvenTop	{ @Null			}
+   # @IntroStartEvenFoot	{ @Null			}
+ 
+ 						  # Titles, NoTitles headers
+   # @RunningOddTop  { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum }
+   # @RunningOddFoot		{ @Null					}
+   # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} }
+   # @RunningEvenFoot		{ @Null					}
+   # @RunningStartOddTop 	{ @Null					}
+   # @RunningStartOddFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+   # @RunningStartEvenTop	{ @Null					}
+   # @RunningStartEvenFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+   # @RunningIntroOddTop		{ @Null					}
+   # @RunningIntroOddFoot	{ @Right @PageNum			}
+   # @RunningIntroEvenTop	{ @Null					}
+   # @RunningIntroEvenFoot	{ @PageNum				}
+   # @RunningIntroStartOddTop	{ @Null					}
+   # @RunningIntroStartOddFoot	{ @Null					}
+   # @RunningIntroStartEvenTop	{ @Null					}
+   # @RunningIntroStartEvenFoot	{ @Null					}
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @IllustrationSetup @Use clause - there are no options for this.        #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @IllustrationSetup
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Database (and @SysDatabase) clauses go here.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysDatabase @FontDef  { fontdefs }		  # font definitions
+ @SysDatabase @RefStyle { refstyle }		  # reference printing styles


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/picturef
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/picturef:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/picturef	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,37 ----
+ 
+ ###########################################################################
+ #                                                                         #
+ #  @IllustrationSetup extension to @DocumentSetup.                        #
+ #                                                                         #
+ #  Jeffrey H. Kingston                                                    #
+ #  August 1994                                                            #
+ #                                                                         #
+ #  This package extends DocumentSetup for illustrations.                  #
+ #                                                                         #
+ ###########################################################################
+ 
+ extend @BasicSetup @DocumentSetup
+ export @Illustration
+ def @IllustrationSetup
+ @Begin
+ 
+     #######################################################################
+     #                                                                     #
+     #  @Illustration                                                      #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Illustration
+ 	named @InitialFont { @InitialFont }
+ 	named @InitialBreak { @InitialBreak }
+ 	named @InitialSpace { @InitialSpace }
+ 	named @InitialLanguage { @InitialLanguage }
+ 	named @InitialColour { @InitialColour }
+ 	right x
+     {
+         @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language
+ 	@InitialSpace @Space { @ColourCommand @InitialColour } @SetColour
+ 	@OneCol @OneRow x
+     }
+ 
+ @End @IllustrationSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pod
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pod:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pod	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,176 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for Pod documentation printing                            #
+ #                                                                             #
+ #   Note: although Pod is treated like a programming language in some         #
+ #   respects, the setup file options below are largely unrelated to           #
+ #   the setup file options for other languages.                               #
+ #                                                                             #
+ #   Version 3.0                                                               #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 April 2000                                                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude line                                                           #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for this programming         #
+ #  language, and should not be touched.                                       #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { podf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Use clause                                                                #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ #  Pod has two quite different kinds of paragraphs: verbatim and non-         #
+ #  verbatim.  When we say "verbatim" and "text" below we refer to these.      #
+ #  There is no paragraph breaking option for verbatim since line breaks       #
+ #  are honoured.                                                              #
+ #                                                                             #
+ #  As you can see below, we have been obliged to give "Times Base" as         #
+ #  the default text font for varying style, rather than the usual empty,      #
+ #  to get a varying-width font when Pod is embedded in fixed-width Perl.  If  #
+ #  you are using a different text font family in your document you will have  #
+ #  to change this option if you want your varying-width Pod in that family.   #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @PodSetup
+   # pipe			{		} # pipe source through this
+   # style	     { varying @OrIfPlain fixed	} # fixed, varying, or symbol
+ 
+   # the following options apply when style is "fixed"
+ 
+   # fixedtextfont		{ Courier Base -1p	} # text font
+   # fixedtextbreak		{ adjust 1.0vx hyphen	} # text para breaking
+   # fixedverbatimfont		{ Courier Base		} # verbatim font
+   # fixedtabin			{ 8			} # tab interval
+   # fixedtabout			{ 8s			} # tab width
+   # fixedlinenumbersfont	{ 			} # line numbers font
+   # fixedlinenumbersformat	{ @Body			} # line numbers format
+ 
+   # fixedparagap		{ 1.0v			} # gap between paras
+   # fixedlistgap		{ 1.0v			} # gap within lists
+   # fixedlistindent		{ 0s			} # list label indent
+   # fixedlistrightindent	{ 0s			} # list right indent
+   # fixedlistlabelwidth		{ 2.0f			} # default label space
+   # fixedlistlabelfont 		{ 			} # list label font
+   # fixedlistlabelformat	{ @Body			} # list label format
+ 
+   # fixedaheadfont		{ Bold +4p		} # =head1 font
+   # fixedaheadbreak		{ lines 1.1vx		} # =head1 para break
+   # fixedaheadformat		{ @DP @Body		} # =head1 format
+   # fixedbheadfont		{ Bold +2p		} # =head2 font
+   # fixedbheadbreak		{ lines 1.1vx		} # =head2 para break
+   # fixedbheadformat		{ @Body			} # =head2 format
+   # fixedcheadfont		{ Bold			} # =head3 font
+   # fixedcheadbreak		{ lines 1.1vx		} # =head3 para break
+   # fixedcheadformat		{ @Body			} # =head3 format
+ 
+   # fixeditalicfont		{ Slope			} # font of I<>
+   # fixeditalicformat		{ @Body			} # format of I<>
+   # fixedboldfont		{ Bold			} # font of B<>
+   # fixedboldformat		{ @Body			} # format of B<>
+   # fixedcodefont		{ Base			} # font of C<>
+   # fixedcodeformat		{ @Body			} # format of C<>
+   # fixedfilefont		{ Slope			} # font of F<>
+   # fixedfileformat		{ @Body			} # format of F<>
+   # fixedlinkfont		{ Slope			} # font of L<>
+   # fixedlinkformat		{ @Underline @Body	} # format of L<>
+   # fixedindexfont		{ Slope			} # font of X<>
+   # fixedindexformat		{ @Body			} # format of X<>
+ 
+ 
+   # the following options apply when style is "varying"
+ 
+   # varyingtextfont		{ Times Base		} # text font
+   # varyingtextbreak		{ adjust 1.0vx hyphen	} # text para breaking
+   # varyingverbatimfont		{ Courier Base -1p	} # verbatim font
+   # varyingtabin		{ 8			} # tab interval
+   # varyingtabout		{ 8s			} # tab width
+   # varyinglinenumbersfont	{ 			} # line numbers font
+   # varyinglinenumbersformat	{ @Body			} # line numbers format
+ 
+   # varyingparagap		{ 1.0v			} # gap between paras
+   # varyinglistgap		{ 1.0v			} # gap within lists
+   # varyinglistindent		{ 0s			} # list label indent
+   # varyinglistrightindent	{ 0s			} # list right indent
+   # varyinglistlabelwidth	{ 2.0f			} # default label space
+   # varyinglistlabelfont 	{ 			} # list label font
+   # varyinglistlabelformat	{ @Body			} # list label format
+ 
+   # varyingaheadfont		{ Bold +4p		} # =head1 font
+   # varyingaheadbreak		{ lines 1.1vx		} # =head1 para break
+   # varyingaheadformat		{ @DP @Body		} # =head1 format
+   # varyingbheadfont		{ Bold +2p		} # =head2 font
+   # varyingbheadbreak		{ lines 1.1vx		} # =head2 para break
+   # varyingbheadformat		{ @Body			} # =head2 format
+   # varyingcheadfont		{ Bold			} # =head3 font
+   # varyingcheadbreak		{ lines 1.1vx		} # =head3 para break
+   # varyingcheadformat		{ @Body			} # =head3 format
+ 
+   # varyingitalicfont		{ Slope			} # font of I<>
+   # varyingitalicformat		{ @Body			} # format of I<>
+   # varyingboldfont		{ Bold			} # font of B<>
+   # varyingboldformat		{ @Body			} # format of B<>
+   # varyingcodefont		{ Courier Base -1p	} # font of C<>
+   # varyingcodeformat		{ @Body			} # format of C<>
+   # varyingfilefont		{ Slope			} # font of F<>
+   # varyingfileformat		{ @Body			} # format of F<>
+   # varyinglinkfont		{ Slope			} # font of L<>
+   # varyinglinkformat		{ @Underline @Body	} # format of L<>
+   # varyingindexfont		{ Slope			} # font of X<>
+   # varyingindexformat		{ @Body			} # format of X<>
+ 
+   # the following options apply when style is "symbol"
+ 
+   # symboltextfont		{ Times Base		} # text font
+   # symboltextbreak		{ adjust 1.0vx hyphen	} # text para breaking
+   # symbolverbatimfont		{ Courier Base -1p	} # verbatim font
+   # symboltabin			{ 8			} # tab interval
+   # symboltabout		{ 8s			} # tab width
+   # symbollinenumbersfont	{ 			} # line numbers font
+   # symbollinenumbersformat	{ @Body			} # line numbers format
+ 
+   # symbolparagap		{ 1.0v			} # gap between paras
+   # symbollistgap		{ 1.0v			} # gap within lists
+   # symbollistindent		{ 0s			} # list label indent
+   # symbollistrightindent	{ 0s			} # list right indent
+   # symbollistlabelwidth	{ 2.0f			} # default label space
+   # symbollistlabelfont 	{ 			} # list label font
+   # symbollistlabelformat	{ @Body			} # list label format
+ 
+   # symbolaheadfont		{ Bold +4p		} # =head1 font
+   # symbolaheadbreak		{ lines 1.1vx		} # =head1 para break
+   # symbolaheadformat		{ @DP @Body		} # =head1 format
+   # symbolbheadfont		{ Bold +2p		} # =head2 font
+   # symbolbheadbreak		{ lines 1.1vx		} # =head2 para break
+   # symbolbheadformat		{ @Body			} # =head2 format
+   # symbolcheadfont		{ Bold			} # =head3 font
+   # symbolcheadbreak		{ lines 1.1vx		} # =head3 para break
+   # symbolcheadformat		{ @Body			} # =head3 format
+ 
+   # symbolitalicfont		{ Slope			} # font of I<>
+   # symbolitalicformat		{ @Body			} # format of I<>
+   # symbolboldfont		{ Bold			} # font of B<>
+   # symbolboldformat		{ @Body			} # format of B<>
+   # symbolcodefont		{ Courier Base -1p	} # font of C<>
+   # symbolcodeformat		{ @Body			} # format of C<>
+   # symbolfilefont		{ Slope			} # font of F<>
+   # symbolfileformat		{ @Body			} # format of F<>
+   # symbollinkfont		{ Slope			} # font of L<>
+   # symbollinkformat		{ @Underline @Body	} # format of L<>
+   # symbolindexfont		{ Slope			} # font of X<>
+   # symbolindexformat		{ @Body			} # format of X<>
+ 
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/podf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/podf:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/podf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,550 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @PodSetup package for formatting Pod programs                         #
+ #                                                                             #
+ #  Jeffrey H. Kingston                                                        #
+ #  25 March 2000                                                              #
+ #                                                                             #
+ #  This package uses a filtered body parameter to convert Pod source          #
+ #  code into Lout source.  The filter program is prg2lout, which is           #
+ #  distributed with Lout and should be compiled and installed wherever        #
+ #  Lout itself is.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ export @Pod
+ def @PodSetup
+     named pipe               {           }  # pipe through this first
+     named style
+ 	named @OrIfPlain left x right y
+ 	{ @BackEnd @Case { PlainText @Yield y else @Yield x } }
+ 			     { varying @OrIfPlain fixed }  # print style
+ 
+ 
+     # the following options apply when style is "fixed"
+ 
+     named fixedtextfont			{ Courier Base -1p	} # text font
+     named fixedtextbreak		{ adjust 1.0vx hyphen	} # text para breaking
+     named fixedverbatimfont		{ Courier Base		} # verbatim font
+     named fixedtabin			{ 8			} # tab interval
+     named fixedtabout			{ 8s			} # tab width
+     named fixedlinenumbersfont		{			} # line numbers font
+     named fixedlinenumbersformat right @Body{ @Body		} # line numbers format
+ 
+     named fixedparagap			{ 1.0v			} # gap between paras
+     named fixedlistgap			{ 1.0v			} # gap within lists
+     named fixedlistindent		{ 0s			} # list label indent
+     named fixedlistrightindent		{ 0s			} # list right indent
+     named fixedlistlabelwidth		{ 2.0f			} # default label space
+     named fixedlistlabelfont 		{ 			} # list label font
+     named fixedlistlabelformat right @Body { @Body		} # list label format
+ 
+     named fixedaheadfont		{ Bold +4p		} # =head1 font
+     named fixedaheadbreak		{ lines 1.1vx		} # =head1 para break
+     named fixedaheadformat right @Body	{ //1v @Body		} # =head1 format
+     named fixedbheadfont		{ Bold +2p		} # =head2 font
+     named fixedbheadbreak		{ lines 1.1vx		} # =head2 para break
+     named fixedbheadformat right @Body	{ @Body			} # =head2 format
+     named fixedcheadfont		{ Bold			} # =head3 font
+     named fixedcheadbreak		{ lines 1.1vx		} # =head3 para break
+     named fixedcheadformat right @Body	{ @Body			} # =head3 format
+ 
+     named fixeditalicfont		{ Slope			} # font of I<>
+     named fixeditalicformat right @Body	{ @Body			} # format of I<>
+     named fixedboldfont			{ Bold			} # font of B<>
+     named fixedboldformat right @Body	{ @Body			} # format of B<>
+     named fixedcodefont			{ Base			} # font of C<>
+     named fixedcodeformat right @Body	{ @Body			} # format of C<>
+     named fixedfilefont			{ Slope			} # font of F<>
+     named fixedfileformat right @Body	{ @Body			} # format of F<>
+     named fixedlinkfont			{ Slope			} # font of L<>
+     named fixedlinkformat right @Body	{ @Underline @Body	} # format of L<>
+     named fixedindexfont		{ Slope			} # font of X<>
+     named fixedindexformat right @Body	{ @Body			} # format of X<>
+ 
+ 
+     # the following options apply when style is "varying"
+ 
+     named varyingtextfont		{ Times Base		} # text font
+     named varyingtextbreak		{ adjust 1.0vx hyphen	} # text para breaking
+     named varyingverbatimfont		{ Courier Base -1p	} # verbatim font
+     named varyingtabin			{ 8			} # tab interval
+     named varyingtabout			{ 8s			} # tab width
+     named varyinglinenumbersfont	{			} # line numbers font
+     named varyinglinenumbersformat right @Body{ @Body		} # line numbers format
+ 
+     named varyingparagap		{ 1.0v			} # gap between paras
+     named varyinglistgap		{ 1.0v			} # gap within lists
+     named varyinglistindent		{ 0s			} # list label indent
+     named varyinglistrightindent	{ 0s			} # list right indent
+     named varyinglistlabelwidth		{ 2.0f			} # default label space
+     named varyinglistlabelfont 		{ 			} # list label font
+     named varyinglistlabelformat right @Body { @Body		} # list label format
+ 
+     named varyingaheadfont		{ Bold +4p		} # =head1 font
+     named varyingaheadbreak		{ lines 1.1vx		} # =head1 para break
+     named varyingaheadformat right @Body{ //1v @Body		} # =head1 format
+     named varyingbheadfont		{ Bold +2p		} # =head2 font
+     named varyingbheadbreak		{ lines 1.1vx		} # =head2 para break
+     named varyingbheadformat right @Body{ @Body			} # =head2 format
+     named varyingcheadfont		{ Bold			} # =head3 font
+     named varyingcheadbreak		{ lines 1.1vx		} # =head3 para break
+     named varyingcheadformat right @Body{ @Body			} # =head3 format
+ 
+     named varyingitalicfont		{ Slope			} # font of I<>
+     named varyingitalicformat right @Body	{ @Body			} # format of I<>
+     named varyingboldfont		{ Bold			} # font of B<>
+     named varyingboldformat right @Body	{ @Body			} # format of B<>
+     named varyingcodefont		{ Courier Base -1p	} # font of C<>
+     named varyingcodeformat right @Body	{ @Body			} # format of C<>
+     named varyingfilefont		{ Slope			} # font of F<>
+     named varyingfileformat right @Body	{ @Body			} # format of F<>
+     named varyinglinkfont		{ Slope			} # font of L<>
+     named varyinglinkformat right @Body	{ @Underline @Body	} # format of L<>
+     named varyingindexfont		{ Slope			} # font of X<>
+     named varyingindexformat right @Body{ @Body			} # format of X<>
+ 
+     # the following options apply when style is "symbol"
+ 
+     named symboltextfont		{ Times Base		} # text font
+     named symboltextbreak		{ adjust 1.0vx hyphen	} # text para breaking
+     named symbolverbatimfont		{ Courier Base -1p	} # verbatim font
+     named symboltabin			{ 8			} # tab interval
+     named symboltabout			{ 8s			} # tab width
+     named symbollinenumbersfont		{			} # line numbers font
+     named symbollinenumbersformat right @Body	{ @Body		} # line numbers format
+ 
+     named symbolparagap			{ 1.0v			} # gap between paras
+     named symbollistgap			{ 1.0v			} # gap within lists
+     named symbollistindent		{ 0s			} # list label indent
+     named symbollistrightindent		{ 0s			} # list right indent
+     named symbollistlabelwidth		{ 2.0f			} # default label space
+     named symbollistlabelfont 		{ 			} # list label font
+     named symbollistlabelformat right @Body { @Body		} # list label format
+ 
+     named symbolaheadfont		{ Bold +4p		} # =head1 font
+     named symbolaheadbreak		{ lines 1.1vx		} # =head1 para break
+     named symbolaheadformat right @Body	{ //1v @Body		} # =head1 format
+     named symbolbheadfont		{ Bold +2p		} # =head2 font
+     named symbolbheadbreak		{ lines 1.1vx		} # =head2 para break
+     named symbolbheadformat right @Body	{ @Body			} # =head2 format
+     named symbolcheadfont		{ Bold			} # =head3 font
+     named symbolcheadbreak		{ lines 1.1vx		} # =head3 para break
+     named symbolcheadformat right @Body	{ @Body			} # =head3 format
+ 
+     named symbolitalicfont		{ Slope			} # font of I<>
+     named symbolitalicformat right @Body{ @Body			} # format of I<>
+     named symbolboldfont		{ Bold			} # font of B<>
+     named symbolboldformat right @Body	{ @Body			} # format of B<>
+     named symbolcodefont		{ Courier Base -1p	} # font of C<>
+     named symbolcodeformat right @Body	{ @Body			} # format of C<>
+     named symbolfilefont		{ Slope			} # font of F<>
+     named symbolfileformat right @Body	{ @Body			} # format of F<>
+     named symbollinkfont		{ Slope			} # font of L<>
+     named symbollinkformat right @Body	{ @Underline @Body	} # format of L<>
+     named symbolindexfont		{ Slope			} # font of X<>
+     named symbolindexformat right @Body	{ @Body			} # format of X<>
+ 
+ @Begin
+ 
+ 
+     export
+     
+ 	@PV @PPG @PLG @PLI @PLRI @PLLW @PLL @PHA @PHB @PHC
+ 	@PFI @PFB @PFC @PFF @PFL @PFX @A "$>" @PL
+ 
+     def @Pod
+ 	named style		{ style			} # style
+ 	named pipe		{ pipe			} # pipe through this
+ 	named textfont		{ dft			} # text font
+ 	named textbreak		{ dft			} # text para breaking
+ 	named verbatimfont	{ dft			} # verbatim font
+ 	named tabin		{ dft			} # tab interval
+ 	named tabout		{ dft			} # tab width
+ 	named linenumbersfont	{ dft			} # line numbers font
+ 	named paragap		{ dft			} # gap between paras
+ 	named listgap		{ dft			} # gap within lists
+ 	named listindent	{ dft			} # list label indent
+ 	named listrightindent	{ dft			} # list right indent
+ 	named listlabelwidth	{ dft			} # default label space
+ 	named listlabelfont 	{ dft			} # list label font
+ 	named aheadfont		{ dft			} # =head1 font
+ 	named aheadbreak	{ dft			} # =head1 para break
+ 	named bheadfont		{ dft			} # =head2 font
+ 	named bheadbreak	{ dft			} # =head2 para break
+ 	named cheadfont		{ dft			} # =head3 font
+ 	named cheadbreak	{ dft			} # =head3 para break
+ 	named italicfont	{ dft			} # font of I<>
+ 	named boldfont		{ dft			} # font of B<>
+ 	named codefont		{ dft			} # font of C<>
+ 	named filefont		{ dft			} # font of F<>
+ 	named linkfont		{ dft			} # font of L<>
+ 	named indexfont		{ dft			} # font of X<>
+ 	body @Body			      		  # filtered, see below
+     @Begin
+ 
+ 	def @Test	# returns x unless x is dft
+ 	    left x
+ 	    named iffixed {}
+ 	    named ifvarying {}
+ 	    named ifsymbol {}
+ 	{
+ 	    x @Case {
+ 		dft @Yield {
+ 		    style @Case {
+ 			fixed   @Yield { iffixed   }
+ 			varying @Yield { ifvarying }
+ 			symbol  @Yield { ifsymbol  }
+ 		    }
+ 		}
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @Else	# returns x, or y if x is dft
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		dft  @Yield y
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitTab
+ 	{
+ 	  tabin @Test
+ 	      iffixed   { fixedtabin   }
+ 	      ifvarying { varyingtabin }
+ 	      ifsymbol  { symboltabin  }
+ 	}
+ 
+ 
+ 	def @InitTabWidth
+ 	{
+ 	  tabout @Test
+ 	      iffixed   { fixedtabout   }
+ 	      ifvarying { varyingtabout }
+ 	      ifsymbol  { symboltabout  }
+ 	}
+ 
+ 
+ 	def @Filter
+ 	{
+ 	    pipe @Case {
+ 		"" @Yield {
+ 	    	    "prg2lout -r -lPod" -i{@FilterIn} -o{@FilterOut} -e{@FilterErr}
+ 			-t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 		else @Yield {
+ 	    	    "cat" @FilterIn "|" pipe "|"
+ 		    "prg2lout -r -lPod" -o{@FilterOut}
+ 		    -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitFont
+ 	{
+ 	  textfont @Test
+ 	      iffixed   { fixedtextfont   }
+ 	      ifvarying { varyingtextfont }
+ 	      ifsymbol  { symboltextfont  }
+ 	}
+ 
+ 
+ 
+ 	def @InitBreak
+ 	{
+ 	  textbreak @Test
+ 	      iffixed   { fixedtextbreak   }
+ 	      ifvarying { varyingtextbreak }
+ 	      ifsymbol  { symboltextbreak  }
+ 	}
+ 
+ 
+ 	def printverbatim
+ 		right x
+ 	{
+ 	    def verbfont
+ 	    {
+ 		verbatimfont @Test
+ 		    iffixed   { fixedverbatimfont   }
+ 		    ifvarying { varyingverbatimfont }
+ 		    ifsymbol  { symbolverbatimfont  }
+ 	    }
+ 
+ 	    def verbatimstrut { @VContract { 0.5v @High ^/ / 0.5v @High } }
+ 
+ 	    @OneCol verbfont @Font x |0io verbatimstrut
+ 	}
+ 
+ 
+ 	macro @PV { // printverbatim }
+ 
+ 
+ 	def paragraphgap
+ 	{
+ 	    paragap @Test
+ 		iffixed   { fixedparagap   }
+ 		ifvarying { varyingparagap }
+ 		ifsymbol  { symbolparagap  }
+ 	}
+ 
+ 
+ 	macro @PPG { //paragraphgap }
+ 
+ 
+ 	def @PLG
+ 	{
+ 	    listgap @Test
+ 		iffixed   { fixedlistgap   }
+ 		ifvarying { varyinglistgap }
+ 		ifsymbol  { symbollistgap  }
+ 	}
+ 
+ 
+ 	def @PLI
+ 	{
+ 	    listindent @Test
+ 		iffixed   { fixedlistindent   }
+ 		ifvarying { varyinglistindent }
+ 		ifsymbol  { symbollistindent  }
+ 	}
+ 
+ 
+ 	def @PLRI
+ 	{
+ 	    listrightindent @Test
+ 		iffixed   { fixedlistrightindent   }
+ 		ifvarying { varyinglistrightindent }
+ 		ifsymbol  { symbollistrightindent  }
+ 	}
+ 
+ 
+ 	def @PLLW right x
+ 	{
+ 	    def defaultwidth
+ 	    {
+ 	    	listlabelwidth @Test
+ 		    iffixed   { fixedlistlabelwidth   }
+ 		    ifvarying { varyinglistlabelwidth }
+ 		    ifsymbol  { symbollistlabelwidth  }
+ 	    }
+ 
+ 	    def givenwidth
+ 	    {
+ 		style @Case {
+ 		    fixed   @Yield { x"s" }
+ 		    varying @Yield { x"f" }
+ 		    symbol  @Yield { x"f" }
+ 		}
+ 	    }
+ 
+ 	    x @Case {
+ 		"" @Yield defaultwidth
+ 		else @Yield givenwidth
+ 	    }
+ 	}
+ 
+ 
+ 	def @PLL right x
+ 	{
+ 	    def bullet
+ 	    {
+ 		@BackEnd @Case {
+ 		    PlainText @Yield "*"
+ 		    else      @Yield @Char "bullet"
+ 		}
+ 	    }
+ 
+ 	    def value
+ 	    {
+ 		x @Case {
+ 		    "*" @Yield bullet
+ 		    else @Yield x
+ 		}
+ 	    }
+ 
+ 	    style @Case {
+ 		fixed @Yield fixedlistlabelformat {
+ 		    { listlabelfont @Else fixedlistlabelfont } @Font value }
+ 		varying @Yield varyinglistlabelformat {
+ 		    { listlabelfont @Else varyinglistlabelfont } @Font value }
+ 		symbol @Yield symbollistlabelformat {
+ 		    { listlabelfont @Else symbollistlabelfont } @Font value }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PHA right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedaheadformat {
+ 		    { aheadfont @Else fixedaheadfont } @Font
+ 		    { aheadbreak @Else fixedaheadbreak } @Break x }
+ 		varying @Yield varyingaheadformat {
+ 		    { aheadfont @Else varyingaheadfont } @Font
+ 		    { aheadbreak @Else varyingaheadbreak } @Break x }
+ 		symbol @Yield symbolaheadformat {
+ 		    { aheadfont @Else symbolaheadfont } @Font
+ 		    { aheadbreak @Else varyingaheadbreak } @Break x }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PHB right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedbheadformat {
+ 		    { bheadfont @Else fixedbheadfont } @Font
+ 		    { bheadbreak @Else fixedbheadbreak } @Break x }
+ 		varying @Yield varyingbheadformat {
+ 		    { bheadfont @Else varyingbheadfont } @Font
+ 		    { bheadbreak @Else varyingbheadbreak } @Break x }
+ 		symbol @Yield symbolbheadformat {
+ 		    { bheadfont @Else symbolbheadfont } @Font
+ 		    { bheadbreak @Else varyingbheadbreak } @Break x }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PHC right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedcheadformat {
+ 		    { cheadfont @Else fixedcheadfont } @Font
+ 		    { cheadbreak @Else fixedcheadbreak } @Break x }
+ 		varying @Yield varyingcheadformat {
+ 		    { cheadfont @Else varyingcheadfont } @Font
+ 		    { cheadbreak @Else varyingcheadbreak } @Break x }
+ 		symbol @Yield symbolcheadformat {
+ 		    { cheadfont @Else symbolcheadfont } @Font
+ 		    { cheadbreak @Else varyingcheadbreak } @Break x }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PFI right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixeditalicformat {
+ 		    { italicfont @Else fixeditalicfont } @Font x }
+ 		varying @Yield varyingitalicformat {
+ 		    { italicfont @Else varyingitalicfont } @Font x }
+ 		symbol @Yield symbolitalicformat {
+ 		    { italicfont @Else symbolitalicfont } @Font x }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PFB right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedboldformat {
+ 		    { boldfont @Else fixedboldfont } @Font x }
+ 		varying @Yield varyingboldformat {
+ 		    { boldfont @Else varyingboldfont } @Font x }
+ 		symbol @Yield symbolboldformat {
+ 		    { boldfont @Else symbolboldfont } @Font x }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PFC right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedcodeformat {
+ 		    { codefont @Else fixedcodefont } @Font x }
+ 		varying @Yield varyingcodeformat {
+ 		    { codefont @Else varyingcodefont } @Font x }
+ 		symbol @Yield symbolcodeformat {
+ 		    { codefont @Else symbolcodefont } @Font x }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PFF right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedfileformat {
+ 		    { filefont @Else fixedfilefont } @Font x }
+ 		varying @Yield varyingfileformat {
+ 		    { filefont @Else varyingfilefont } @Font x }
+ 		symbol @Yield symbolfileformat {
+ 		    { filefont @Else symbolfilefont } @Font x }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PFL right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedlinkformat {
+ 		    { linkfont @Else fixedlinkfont } @Font x }
+ 		varying @Yield varyinglinkformat {
+ 		    { linkfont @Else varyinglinkfont } @Font x }
+ 		symbol @Yield symbollinkformat {
+ 		    { linkfont @Else symbollinkfont } @Font x }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PFX right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedindexformat {
+ 		    { indexfont @Else fixedindexfont } @Font x }
+ 		varying @Yield varyingindexformat {
+ 		    { indexfont @Else varyingindexfont } @Font x }
+ 		symbol @Yield symbolindexformat {
+ 		    { indexfont @Else symbolindexfont } @Font x }
+ 	    }
+ 	}
+ 
+ 
+ 	def @A		# get characters from the Adobe Symbol font
+ 	    left sym
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		symbol	@Yield { { Symbol Base } @Font @Char sym }
+ 		else	@Yield { x			}
+ 	    }
+ 	}
+ 
+ 
+ 	macro "$>" { {} & }
+ 
+ 
+ 	def pl		# for formatting line numbers
+ 	    right x
+ 	{
+ 	    def strut { @VContract { 0.5v @High ^/ / 0.5v @High } }
+ 
+ 	    strut & style @Case {
+ 		fixed @Yield fixedlinenumbersformat {
+ 		    { linenumbersfont @Else fixedlinenumbersfont } @Font x
+ 		}
+ 		varying @Yield varyinglinenumbersformat {
+ 		    { linenumbersfont @Else varyinglinenumbersfont } @Font x
+ 		}
+ 		symbol @Yield symbollinenumbersformat {
+ 		    { linenumbersfont @Else symbollinenumbersfont } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	macro @PL { // pl }
+ 
+ 
+ 	@InitFont @Font @InitBreak @Break @Body
+ 
+     @End @Pod
+ 
+ @End @PodSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/python
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/python:1.1
*** /dev/null	Tue Jan  9 18:08:34 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/python	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,109 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for Python program printing                               #
+ #                                                                             #
+ #   Version 3.0                                                               #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 April 2000                                                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude line                                                           #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for this programming         #
+ #  language, and should not be touched.                                       #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { pythonf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Use clause                                                                #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @PythonSetup
+   # pipe			{		} # pipe source through this
+   # numbered			{ No		} # No, Yes, or a line number
+   # style	     { varying @OrIfPlain fixed	} # fixed, varying, or symbol
+ 
+   # the following options apply when style is "fixed"
+ 
+   # fixedfont			{ Courier	} # font family
+   # fixedsize			{ -1.0p		} # font size
+   # fixedline			{ 1.0vx		} # line-space
+   # fixedtabin			{ 8		} # tab interval
+   # fixedtabout			{ 8s		} # tab width
+ 
+   # fixedidentifiers		{ Base		} # identifier face
+   # fixedkeywords		{ Base		} # keyword face
+   # fixedoperators		{ Base		} # operator face
+   # fixednumbers		{ Base		} # number face
+   # fixedstrings		{ Base		} # string face
+   # fixedcomments		{ Base		} # comment face
+   # fixedlinenumbers		{ Base		} # line numbers face
+ 
+   # fixedidentifiersformat	{ @Body		} # identifiers format
+   # fixedkeywordsformat		{ @Body		} # keywords format
+   # fixedoperatorsformat	{ @Body		} # operators format
+   # fixednumbersformat		{ @Body		} # numbers format
+   # fixedstringsformat		{ @Body		} # strings format
+   # fixedcommentsformat		{ @Body		} # comments format
+   # fixedlinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "varying"
+ 
+   # varyingfont			{		} # font family
+   # varyingsize			{ 1.0f		} # font size
+   # varyingline			{ 1.0vx		} # line-space
+   # varyingtabin		{ 8		} # tab interval
+   # varyingtabout		{ 3f		} # tab width
+ 
+   # varyingidentifiers		{ Slope		} # identifier face
+   # varyingkeywords		{ Bold		} # keyword face
+   # varyingoperators		{ Base		} # operator face
+   # varyingnumbers		{ Base		} # number face
+   # varyingstrings		{ Slope		} # string face
+   # varyingcomments		{ Base		} # comment face
+   # varyinglinenumbers		{ Base		} # line numbers face
+ 
+   # varyingidentifiersformat	{ @Body		} # identifiers format
+   # varyingkeywordsformat	{ @Body		} # keywords format
+   # varyingoperatorsformat	{ @Body		} # operators format
+   # varyingnumbersformat	{ @Body		} # numbers format
+   # varyingstringsformat	{ @Body		} # strings format
+   # varyingcommentsformat	{ @Body		} # comments format
+   # varyinglinenumbersformat	{ @Body		} # line numbers format
+ 
+   # the following options apply when style is "symbol"
+ 
+   # symbolfont			{		} # font family
+   # symbolsize			{ 1.0f		} # font size
+   # symbolline			{ 1.0vx		} # line-space
+   # symboltabin			{ 8		} # tab interval
+   # symboltabout		{ 3f		} # tab width
+ 
+   # symbolidentifiers		{ Slope		} # identifier face
+   # symbolkeywords		{ Bold		} # keyword face
+   # symboloperators		{ Base		} # operator face
+   # symbolnumbers		{ Base		} # number face
+   # symbolstrings		{ Slope		} # string face
+   # symbolcomments		{ Base		} # comment face
+   # symbollinenumbers		{ Base		} # line numbers face
+ 
+   # symbolidentifiersformat	{ @Body		} # identifiers format
+   # symbolkeywordsformat	{ @Body		} # keywords format
+   # symboloperatorsformat	{ @Body		} # operators format
+   # symbolnumbersformat		{ @Body		} # numbers format
+   # symbolstringsformat		{ @Body		} # strings format
+   # symbolcommentsformat	{ @Body		} # comments format
+   # symbollinenumbersformat	{ @Body		} # line numbers format
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pythonf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pythonf:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/pythonf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,390 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @PythonSetup package for formatting Python programs                   #
+ #                                                                             #
+ #  Version 3.0                                                                #
+ #  Jeffrey H. Kingston                                                        #
+ #  5 April 2000                                                               #
+ #                                                                             #
+ #  This package uses a filtered body parameter to convert program source      #
+ #  code into Lout source.  The filter program is prg2lout, which is           #
+ #  distributed with Lout and should be compiled and installed wherever        #
+ #  Lout itself is.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ export @Python
+ def @PythonSetup
+     named pipe			{	}  # pipe through this first
+     named numbered		{ No	}  # want lines numbered?
+     named style
+ 	named @OrIfPlain left x right y
+ 	{ @BackEnd @Case { PlainText @Yield y else @Yield x } }
+ 				{ varying @OrIfPlain fixed }  # print style
+ 
+     # the following options apply when style is "fixed"
+     named fixedfont				{ Courier }# font family
+     named fixedsize				{ -1.0p	}  # font size
+     named fixedline				{ 1.0vx	}  # line-space
+     named fixedtabin				{ 8	}  # tab interval
+     named fixedtabout				{ 8s	}  # tab width
+ 
+     named fixedidentifiers			{ Base	}  # identifier face
+     named fixedkeywords				{ Base	}  # keyword face
+     named fixedoperators			{ Base	}  # operator face
+     named fixednumbers				{ Base	}  # number face
+     named fixedstrings				{ Base	}  # string face
+     named fixedcomments				{ Base	}  # comment face
+     named fixedlinenumbers			{ Base	}  # line numbers face
+ 
+     named fixedidentifiersformat right @Body	{ @Body	}  # identifier format
+     named fixedkeywordsformat right @Body	{ @Body	}  # keyword format
+     named fixedoperatorsformat right @Body	{ @Body	}  # operators format
+     named fixednumbersformat right @Body	{ @Body	}  # number format
+     named fixedstringsformat right @Body	{ @Body	}  # string format
+     named fixedcommentsformat right @Body	{ @Body	}  # comment format
+     named fixedlinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "varying"
+     named varyingfont				{	}  # font family
+     named varyingsize				{ 1.0f	}  # font size
+     named varyingline				{ 1.0vx	}  # line-space
+     named varyingtabin				{ 8	}  # tab interval
+     named varyingtabout				{ 3f	}  # tab width
+ 
+     named varyingidentifiers			{ Slope	}  # identifier face
+     named varyingkeywords			{ Bold	}  # keyword face
+     named varyingoperators			{ Base	}  # operator face
+     named varyingnumbers			{ Base	}  # number face
+     named varyingstrings			{ Slope	}  # string face
+     named varyingcomments			{ Base	}  # comment face
+     named varyinglinenumbers			{ Base	}  # line numbers face
+ 
+     named varyingidentifiersformat right @Body	{ @Body	}  # identifier format
+     named varyingkeywordsformat right @Body	{ @Body	}  # keyword format
+     named varyingoperatorsformat right @Body	{ @Body	}  # operators format
+     named varyingnumbersformat right @Body	{ @Body	}  # number format
+     named varyingstringsformat right @Body	{ @Body	}  # string format
+     named varyingcommentsformat right @Body	{ @Body	}  # comment format
+     named varyinglinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+     # the following options apply when style is "symbol"
+     named symbolfont				{	}  # font family
+     named symbolsize				{ 1.0f	}  # font size
+     named symbolline				{ 1.0vx	}  # line-space
+     named symboltabin				{ 8	}  # tab interval
+     named symboltabout				{ 3f	}  # tab width
+ 
+     named symbolidentifiers			{ Slope	}  # identifier face
+     named symbolkeywords			{ Bold	}  # keyword face
+     named symboloperators			{ Base	}  # operator face
+     named symbolnumbers				{ Base	}  # number face
+     named symbolstrings				{ Slope	}  # string face
+     named symbolcomments			{ Base	}  # comment face
+     named symbollinenumbers			{ Base	}  # line numbers face
+ 
+     named symbolidentifiersformat right @Body	{ @Body	}  # identifier format
+     named symbolkeywordsformat right @Body	{ @Body	}  # keyword format
+     named symboloperatorsformat right @Body	{ @Body	}  # operators format
+     named symbolnumbersformat right @Body	{ @Body	}  # number format
+     named symbolstringsformat right @Body	{ @Body	}  # string format
+     named symbolcommentsformat right @Body	{ @Body	}  # comment format
+     named symbollinenumbersformat right @Body	{ @Body	}  # line nums format
+ 
+ @Begin
+ 
+     export
+     
+ 	@PI @PK @PO @PN @PS @PC @PL @PA @PM @PD
+ 	@A "$>"
+ 
+     def @Python
+ 	named style        { style         }  # style
+ 	named numbered	   { numbered	   }  # want numbered lines?
+ 	named pipe         { pipe          }  # pipe through this first
+ 	named font         { dft           }  # font family
+ 	named size         { dft           }  # font size
+ 	named line         { dft           }  # line-space
+ 	named tabin        { dft           }  # tab interval
+ 	named tabout       { dft           }  # tab width
+ 	named identifiers  { dft           }  # ident. font
+ 	named keywords     { dft           }  # keyword font
+ 	named operators    { dft           }  # operator font
+ 	named numbers      { dft           }  # number font
+ 	named strings      { dft           }  # string font
+ 	named comments     { dft           }  # comment font
+ 	named linenumbers  { dft           }  # line numbers font
+ 	body @Body			      # filtered, see below
+     @Begin
+ 
+ 	def @Test	# returns x unless x is dft
+ 	    left x
+ 	    named iffixed {}
+ 	    named ifvarying {}
+ 	    named ifsymbol {}
+ 	{
+ 	    x @Case {
+ 		dft @Yield {
+ 		    style @Case {
+ 			fixed   @Yield { iffixed   }
+ 			varying @Yield { ifvarying }
+ 			symbol  @Yield { ifsymbol  }
+ 		    }
+ 		}
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @Else	# returns x, or y if x is dft
+ 	    left x
+ 	    right y
+ 	{
+ 	    x @Case {
+ 		dft  @Yield y
+ 		else @Yield x
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitTab
+ 	{
+ 	  tabin @Test
+ 	      iffixed   { fixedtabin   }
+ 	      ifvarying { varyingtabin }
+ 	      ifsymbol  { symboltabin  }
+ 	}
+ 
+ 
+ 	def @InitTabWidth
+ 	{
+ 	  tabout @Test
+ 	      iffixed   { fixedtabout   }
+ 	      ifvarying { varyingtabout }
+ 	      ifsymbol  { symboltabout  }
+ 	}
+ 
+ 
+ 	def @Filter
+ 	{
+ 	    def wantnumbered
+ 	    {
+ 		numbered @Case {
+ 		  { No no }	@Yield ""
+ 		  { Yes yes }	@Yield "-L"
+ 		  else          @Yield { "-L"numbered }
+ 		}
+ 	    }
+ 
+ 	    pipe @Case {
+ 		"" @Yield {
+ 	    	    "prg2lout -r -lPython" wantnumbered -i{@FilterIn}
+ 		    -o{@FilterOut} -e{@FilterErr}
+ 		    -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 		else @Yield {
+ 	    	    "cat" @FilterIn "|" pipe "|"
+ 		    "prg2lout -r -lPython" wantnumbered -o{@FilterOut}
+ 		    -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth}
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @InitFontFamily
+ 	{
+ 	  font @Test
+ 	      iffixed   { fixedfont   }
+ 	      ifvarying { varyingfont }
+ 	      ifsymbol  { symbolfont  }
+ 	}
+ 
+ 
+ 	def @InitSize
+ 	{
+ 	  size @Test
+ 	      iffixed   { fixedsize   }
+ 	      ifvarying { varyingsize }
+ 	      ifsymbol  { symbolsize  }
+ 	}
+ 
+ 
+ 	def @InitLine
+ 	{
+ 	  line @Test
+ 	      iffixed   { fixedline   }
+ 	      ifvarying { varyingline }
+ 	      ifsymbol  { symbolline  }
+ 	}
+ 
+ 
+ 	def @PI		# for formatting identifiers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedidentifiersformat {
+ 		    { identifiers @Else fixedidentifiers } @Font x
+ 		}
+ 		varying @Yield varyingidentifiersformat {
+ 		    { identifiers @Else varyingidentifiers } @Font x
+ 		}
+ 		symbol @Yield symbolidentifiersformat {
+ 		    { identifiers @Else symbolidentifiers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PK		# for formatting keywords
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedkeywordsformat {
+ 		    { keywords @Else fixedkeywords } @Font x
+ 		}
+ 		varying @Yield varyingkeywordsformat {
+ 		    { keywords @Else varyingkeywords } @Font x
+ 		}
+ 		symbol @Yield symbolkeywordsformat {
+ 		    { keywords @Else symbolkeywords } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PO		# for formatting operators
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedoperatorsformat {
+ 		    { operators @Else fixedoperators } @Font x
+ 		}
+ 		varying @Yield varyingoperatorsformat {
+ 		    { operators @Else varyingoperators } @Font x
+ 		}
+ 		symbol @Yield symboloperatorsformat {
+ 		    { operators @Else symboloperators } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PN		# for formatting numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixednumbersformat {
+ 		    { numbers @Else fixednumbers } @Font x
+ 		}
+ 		varying @Yield varyingnumbersformat {
+ 		    { numbers @Else varyingnumbers } @Font x
+ 		}
+ 		symbol @Yield symbolnumbersformat {
+ 		    { numbers @Else symbolnumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PS		# for formatting strings
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedstringsformat {
+ 		    { strings @Else fixedstrings } @Font x
+ 		}
+ 		varying @Yield varyingstringsformat {
+ 		    { strings @Else varyingstrings } @Font x
+ 		}
+ 		symbol @Yield symbolstringsformat {
+ 		    { strings @Else symbolstrings } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PC		# for formatting comments
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedcommentsformat {
+ 		    { comments @Else fixedcomments } @Font x
+ 		}
+ 		varying @Yield varyingcommentsformat {
+ 		    { comments @Else varyingcomments } @Font x
+ 		}
+ 		symbol @Yield symbolcommentsformat {
+ 		    { comments @Else symbolcomments } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PL		# for formatting line numbers
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		fixed @Yield fixedlinenumbersformat {
+ 		    { linenumbers @Else fixedlinenumbers } @Font x
+ 		}
+ 		varying @Yield varyinglinenumbersformat {
+ 		    { linenumbers @Else varyinglinenumbers } @Font x
+ 		}
+ 		symbol @Yield symbollinenumbersformat {
+ 		    { linenumbers @Else symbollinenumbers } @Font x
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PA		# for formatting asterisks
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "*"
+ 		else @Yield { "0.5w" @VShift "*" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @PM		# for formatting minus signs
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "-"
+ 		else @Yield style @Case {
+ 		    fixed   @Yield "-"
+ 		    else    @Yield { { Symbol Base } @Font @Char "minus" }
+ 		}
+ 	    }
+ 	}
+ 
+ 
+ 	def @PD		# for formatting dots, if wanted larger
+ 	{
+ 	    @PO @BackEnd @Case {
+ 		PlainText @Yield "."
+ 		else @Yield { "1.4f" @Font "+0.04f" @VShift "." &"0.05f" }
+ 	    }
+ 	}
+ 
+ 
+ 	def @A		# get characters from the Adobe Symbol font
+ 	    left sym
+ 	    right x
+ 	{
+ 	    style @Case {
+ 		symbol	@Yield { { Symbol Base } @Font @Char sym }
+ 		else	@Yield { x			}
+ 	    }
+ 	}
+ 
+ 
+ 	macro "$>" { {} & }
+ 
+ 
+ 	{ @InitFontFamily Base @InitSize } @Font
+ 	{ @InitLine lines nohyphen } @Break @Body
+ 
+     @End @Python
+ 
+ @End @PythonSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/report
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/report:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/report	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,403 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for technical reports                                     #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #   17 September 1999                                                         #
+ #                                                                             #
+ #   Note: this version, released with Lout Version 3.13, is not upwardly      #
+ #   compatible with previous versions:  the @Abstract symbol must now         #
+ #   be placed before the //, not after.                                       #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude commands for standard packages.                                #
+ #                                                                             #
+ ###############################################################################
+ 
+   @SysInclude { langdefs	} # language definitions
+   @SysInclude { bsf		} # BasicSetup package
+   @SysInclude { dsf		} # DocumentSetup package
+   @SysInclude { reportf		} # ReportSetup extension
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Include command for reading personal definitions from current directory.  #
+ #                                                                             #
+ ###############################################################################
+ 
+   @Include { mydefs }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @BasicSetup @Use clause - basics, lists, paragraphs, displays.         #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+  
+ @Use { @BasicSetup
+   # @InitialFont	{ Times Base 12p	} # initial font
+   # @InitialBreak	{{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}}
+   # @InitialSpace	{ lout			} # initial space style
+   # @InitialLanguage	{ English		} # initial language
+   # @InitialColour	{ black			} # initial colour
+   # @OptimizePages	{ No			} # optimize page breaks?
+   # @HeadingFont	{ Bold			} # font for @Heading
+   # @ParaGap		{ 1.3vx @OrIfPlain 1f	} # gap between paragraphs
+   # @ParaIndent		{ 2.00f	@OrIfPlain 5s	} # first-line indent for @PP
+   # @DisplayGap		{ 1.00v	@OrIfPlain 1f	} # gap above, below displays
+   # @DisplayIndent	{ 2.00f	@OrIfPlain 5s	} # @IndentedDisplay indent
+   # @DefaultIndent	{ 0.5rt			} # @Display indent
+   # @DisplayNumStyle	{ (num)			} # style of display numbers
+   # @WideIndent		{ 4.00f	@OrIfPlain 10s	} # @WideTaggedList indent
+   # @VeryWideIndent	{ 8.00f	@OrIfPlain 20s	} # @VeryWideTaggedList indent
+   # @ListOuterGap	{ 1.00v	@OrIfPlain 1f	} # gap before, after lists
+   # @ListGap		{ 1.00v	@OrIfPlain 1f	} # gap between list items
+   # @ListIndent		{ 0s			} # indent of list items
+   # @ListRightIndent	{ 0s			} # right indent of list items
+   # @ListLabelWidth	{ 2.00f	@OrIfPlain 5s	} # width allowed for list tags
+   # @NumberSeparator	{ .			} # separates nums like 2.3.7
+   # @CrossLinkFormat	{ @Body			} # format of cross links
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @DocumentSetup @Use clause - page layout plus figures, tables, etc.    #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @DocumentSetup
+   # @PageType		{ A4	@OrIfPlain Other} # page type (width, height)
+   # @PageWidth		{ 80s			} # page width if type Other
+   # @PageHeight		{ 66f			} # page height if type Other
+   # @PageOrientation	{ Portrait		} # Portrait, Landscape, etc.
+   # @PageBackground	{  			} # background of each page
+   # @TopMargin		{ 2.5c	@OrIfPlain 6f	} # top margin of all pages
+   # @FootMargin		{ 2.5c	@OrIfPlain 6f	} # bottom margin of all pages
+   # @OddLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of odd pages
+   # @OddRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of odd pages
+   # @EvenLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of even pages
+   # @EvenRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of even pages
+   # @OddLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @OddRightBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenRightBodyMargin{ 0c			} # extra margin for page body
+   # @PageBoxType	{ None			} # None Box CurveBox ShadowBox
+   # @PageBoxMargin	{ 1.00c			} # page box margin
+   # @PageBoxLineWidth	{			} # page box line thickness
+   # @PageBoxPaint	{ none			} # page box paint
+   # @PageBoxShadow	{ 0.60c			} # shadow margin if ShadowBox
+   # @PageEnclose	{ @Body			} # enclose every page in this
+   # @ColumnNumber	{ 1			} # number of columns (1 to 10)
+   # @ColumnGap		{ 1.00c	@OrIfPlain 6s	} # column gap
+   # @FigureLocation	{ PageTop		} # default figure location
+   # @TableLocation	{ PageTop		} # default table location
+   # @FigureFormat	{ @CC @Body		} # default figure format
+   # @TableFormat	{ @CC @Body		} # default table format
+   # @FigureWord		{ figure		} # "Figure" word else anything
+   # @TableWord		{ table			} # "Table" word else anything
+   # @FigureNumbers	{ Arabic		} # method of numbering figures
+   # @TableNumbers	{ Arabic		} # method of numbering tables
+   # @FigureCaptionPos	{ Below 		} # Above or Below
+   # @TableCaptionPos	{ Below			} # Above or Below
+   # @FigureCaptionFont  { -2p                   } # figure caption font
+   # @FigureCaptionBreak { adjust hyphen 1.2fx   } # figure caption break
+   # @FigureCaptionFormat{ {@B { word @NumSep number. &2s }} @Insert caption }
+   # @TableCaptionFont   { -2p                   } # table caption font
+   # @TableCaptionBreak  { adjust hyphen 1.2fx   } # table caption break
+   # @TableCaptionFormat { {@B { word @NumSep number. &2s }} @Insert caption }
+   # @MakeFigureContents { No                    } # list of figures at start
+   # @MakeTableContents  { No                    } # list of tables at start
+   # @MakeContents	{ No			} # make contents? Yes or No
+   # @ContentsGap	{ 0.20v	@OrIfPlain 0f	} # extra gap above minor entry
+   # @ContentsGapAbove	{ 0.80v	@OrIfPlain 1f	} # extra gap above major entry
+   # @ContentsGapBelow	{ 0.00v	@OrIfPlain 0f	} # extra gap below major entry
+   # @ContentsFont       { Bold                  } # font for major entry
+   # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f	} # extra gap above `part' entry
+   # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f	} # extra gap below `part' entry
+   # @ContentsFormat	{ number @DotSep title	} # contents entry format
+   # @ContentsLeader	{ ..			} # leader symbol in contents
+   # @ContentsLeaderGap	{ 4s	@OrIfPlain 2s	} # gap between leaders
+   # @ContentsRightWidth	{ 3f	@OrIfPlain 6s	} # page numbers column width
+   # @MakeReferences	{ Yes			} # make references? Yes or No
+   # @RefCiteStyle	{ [cite]		} # citation style
+   # @RefCiteLabels	{ @RefNum		} # citation items
+   # @RefNumbers		{ Arabic		} # reference numbers
+   # @RefListFormat	{ Labels		} # NoLabels, Labels, etc.
+   # @RefListLabels	{ [@RefNum]		} # ref list label format
+   # @RefListTitle	{ references		} # title of reference list
+   # @ChapRefListTitle	{ references		} # title of chapter ref list
+   # @RefListIndent	{ 0s			} # indent to left of labels
+   # @RefListRightIndent	{ 0s			} # indent to right of items
+   # @RefListGap		{ @ListGap		} # gap between ref list items
+   # @RefListFont	{        		} # font used in reference list
+   # @RefListBreak	{        		} # break style of ref list
+   # @RefListLabelWidth 	{ @ListLabelWidth	} # Labels column width
+   # @RefListSortKey	{ @Tag			} # sorting key
+   # @MakeIndex		{ No			} # make index? Yes or No
+   # @IndexFont		{			} # index entries font
+   # @IndexBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexColumnNumber	{ 2			} # index columns (1 to 10)
+   # @IndexColumnGap	{ 1.00c	@OrIfPlain 6s	} # index column gap
+   # @IndexCtd		{ Yes			} # include (ctd.) lines
+   # @IndexCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexA		{ No 			} # make index A? Yes or No
+   # @IndexAFont		{			} # index A entries font
+   # @IndexABreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexAColumnNumber	{ 2			} # index A columns (1 to 10)
+   # @IndexAColumnGap	{ 1.00c	@OrIfPlain 6s	} # index A column gap
+   # @IndexACtd		{ Yes			} # include (ctd.) lines
+   # @IndexACtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexACtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexB		{ No 			} # make index B? Yes or No
+   # @IndexBFont		{			} # index B entries font
+   # @IndexBBreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexBColumnNumber	{ 2			} # index B columns (1 to 10)
+   # @IndexBColumnGap	{ 1.00c	@OrIfPlain 6s	} # index B column gap
+   # @IndexBCtd		{ Yes			} # include (ctd.) lines
+   # @IndexBCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexBCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @TopGap		{ 0.75c	@OrIfPlain 2f	} # gap between figures
+   # @MidGap		{ 0.75c	@OrIfPlain 2f	} # gap above/below body text
+   # @FootNoteNumbers	{ Arabic		} # footnote numbers
+   # @FootNoteThrough	{ No			} # numbered through chapter?
+   # @FootNoteLocation	{ ColFoot		} # where the footnote appears
+   # @FootNoteFont	{ 0.80f			} # font for footnotes
+   # @FootNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for footnotes
+   # @FootNoteFormat     { { number &0.05f } @Insert body } # footnote format
+   # @FootLen		{ 2.00c	@OrIfPlain 10s	} # length of footnote line
+   # @FootAboveGap	{ @DisplayGap		} # gap above footnote line
+   # @FootGap		{ 0.20c	@OrIfPlain 1fx	} # gap between footnotes
+   # @MarginNoteFont	{ 0.80f			} # font of margin notes
+   # @MarginNoteBreak	{ ragged 1.10fx		} # break style of margin notes
+   # @MarginNoteHGap	{ 0.5c   		} # horizontal gap to notes
+   # @MarginNoteVGap	{ @DisplayGap  		} # min vertical gap between
+   # @MarginNoteWidth	{ 1.50c  		} # width of margin notes
+   # @EndNoteNumbers	{ Arabic		} # endnote numbers
+   # @EndNoteFont	{ 0.80f			} # font of endnotes
+   # @EndNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for endnotes
+   # @EndNoteFormat	{ { number &0.05f } @Insert body } # endnote format
+   # @EndNoteGap		{ 0.20c	@OrIfPlain 1f	} # gap between endnotes
+   # @TheoremWord	{ theorem		} # "Theorem" word, etc.
+   # @TheoremTitleFormat	{ (title)		} # only if title present
+   # @TheoremFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @DefinitionWord	{ definition		} # "Definition" word, etc.
+   # @DefinitionTitleFormat { (title)		} # only if title present
+   # @DefinitionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ClaimWord		{ claim			} # "Claim" word, etc.
+   # @ClaimTitleFormat	{ (title)		} # only if title present
+   # @ClaimFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @PropositionWord	{ proposition		} # "Proposition" word, etc.
+   # @PropositionTitleFormat { (title)		} # only if title present
+   # @PropositionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @LemmaWord		{ lemma			} # "Lemma" word, etc.
+   # @LemmaTitleFormat	{ (title)		} # only if title present
+   # @LemmaFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @CorollaryWord	{ corollary		} # "Corollary" word, etc.
+   # @CorollaryTitleFormat { (title)		} # only if title present
+   # @CorollaryFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ExampleWord	{ example		} # "Example" word, etc.
+   # @ExampleTitleFormat	{ (title)		} # only if title present
+   # @ExampleFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ProofWord		{ proof			} # "Proof" word, etc.
+   # @PageHeaders	{ Simple		} # None Simple Titles NoTitles
+   # @PageNumbers	{ Arabic		} # page numbers
+   # @FirstPageNumber	{ 1			} # number of first page 
+   # @IntroPageNumbers	{ Roman			} # intro page numbers
+   # @IntroFirstPageNumber{ 1			} # number of first intro page 
+   # @StructPageNums	{ No			} # make structured page numbers
+ 
+   # @OddTop		{ @Centre{- @PageNum -}	} # Simple page headers
+   # @OddFoot		{ @Null			}
+   # @EvenTop		{ @Centre{- @PageNum -}	}
+   # @EvenFoot		{ @Null			}
+   # @StartOddTop	{ @Null			}
+   # @StartOddFoot	{ @Null			}
+   # @StartEvenTop	{ @Null			}
+   # @StartEvenFoot	{ @Null			}
+   # @IntroOddTop	{ @Null			}
+   # @IntroOddFoot	{ @Centre @PageNum	}
+   # @IntroEvenTop	{ @Null			}
+   # @IntroEvenFoot	{ @Centre @PageNum	}
+   # @IntroStartOddTop	{ @Null			}
+   # @IntroStartOddFoot	{ @Null			}
+   # @IntroStartEvenTop	{ @Null			}
+   # @IntroStartEvenFoot	{ @Null			}
+ 
+ 						  # Titles, NoTitles headers
+   # @RunningOddTop  { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum }
+   # @RunningOddFoot		{ @Null					}
+   # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} }
+   # @RunningEvenFoot		{ @Null					}
+   # @RunningStartOddTop 	{ @Null					}
+   # @RunningStartOddFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+   # @RunningStartEvenTop	{ @Null					}
+   # @RunningStartEvenFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+   # @RunningIntroOddTop		{ @Null					}
+   # @RunningIntroOddFoot	{ @Right @PageNum			}
+   # @RunningIntroEvenTop	{ @Null					}
+   # @RunningIntroEvenFoot	{ @PageNum				}
+   # @RunningIntroStartOddTop	{ @Null					}
+   # @RunningIntroStartOddFoot	{ @Null					}
+   # @RunningIntroStartEvenTop	{ @Null					}
+   # @RunningIntroStartEvenFoot	{ @Null					}
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @ReportSetup @Use clause - options specific to technical reports.      #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @ReportSetup
+   # @CoverSheet			{ Yes		} # make cover sheet
+   # @ContentsSeparate		{ No		} # contents on separate pages
+   # @DateLine			{ No		} # Yes, No, or a date
+   # @AboveTitleGap		{ 1i		} # space above title
+   # @TitleFont			{ Bold		} # title font
+   # @TitleBreak			{ clines 1.4vx	} # title break
+   # @AuthorFont			{ Italic	} # author font
+   # @AuthorBreak		{ clines	} # author break
+   # @InstitutionFont		{		} # institution font
+   # @InstitutionBreak		{ clines	} # institution break
+   # @DateLineFont		{		} # dateline font
+   # @DateLineBreak		{		} # dateline break
+   # @AbstractDisplay		{ No		} # abstract full width display
+   # @AbstractFont		{ 		} # font of abstract
+   # @AbstractBreak		{ 		} # break style of abstract
+   # @AbstractFormat		{ @Centre @Title @DP @Body } # abstract format
+   # @AbstractTitle		{ dft		} # abstract title (dft is @AbstractWord)
+   # @ReferencesBeforeAppendices	{ No		} # references before appendices
+   # @AbstractWord		{ abstract	} # word for "Abstract"
+   # @ContentsWord		{ contents	} # word for "Contents"
+   # @AppendixWord		{ appendix	} # word for "Appendix"
+   # @IndexWord			{ index		} # word for "Index"
+   # @IndexAWord			{ index		} # word for "Index" (A)
+   # @IndexBWord			{ index		} # word for "Index" (B)
+   # @SectionNumbers		{ Arabic	} # kind of section numbers
+   # @FirstSectionNumber		{ 1		} # first section num (Arabic)
+   # @SubSectionNumbers		{ Arabic	} # kind of subsection numbers
+   # @FirstSubSectionNumber	{ 1		} # first subsect num (Arabic)
+   # @SubSubSectionNumbers	{ Arabic	} # kind of sub-subsect numbers
+   # @FirstSubSubSectionNumber	{ 1		} # first subsub. num (Arabic)
+   # @AppendixNumbers		{ UCAlpha	} # kind of appendix numbers
+   # @FirstAppendixNumber	{ 1		} # first appendix num (Arabic)
+   # @SubAppendixNumbers		{ Arabic	} # kind of subappendix numbers
+   # @FirstSubAppendixNumber	{ 1		} # first sub-app. num (Arabic)
+   # @SubSubAppendixNumbers	{ Arabic	} # kind of sub-subapp. numbers
+   # @FirstSubSubAppendixNumber	{ 1		} # first sub-sub. num (Arabic)
+   # @AbstractHeadingFont	{ Bold			} # abstract head font
+   # @AbstractHeadingBreak	{ ragged 1.2fx nohyphen	} # abstract head break
+   # @AbstractHeadingFormat	{ @Centre title		} # abstract head fmt
+   # @ContentsHeadingFont	{ Bold			} # contents head font
+   # @ContentsHeadingBreak	{ ragged 1.2fx nohyphen	} # contents head break
+   # @ContentsHeadingFormat	{ title			} # contents head fmt
+   # @SectionHeadingFont		{ Bold			} # section head font
+   # @SectionHeadingBreak	{ ragged 1.2fx nohyphen	} # section head break
+   # @SectionHeadingFormat	{ number @DotSep title	} # section head fmt
+   # @SubSectionHeadingFont	{ Bold			} # subsection head font
+   # @SubSectionHeadingBreak	{ ragged 1.2fx nohyphen	} # subsection head break
+   # @SubSectionHeadingFormat	{ number @DotSep title	} # subsection head fmt
+   # @SubSubSectionHeadingFont	{ Slope			} # sub-subs. head font
+   # @SubSubSectionHeadingBreak	{ ragged 1.2fx nohyphen	} # sub-subs. head break
+   # @SubSubSectionHeadingFormat	{ number @DotSep title	} # sub-subs. head fmt
+   # @AppendixHeadingFont	{ Bold			} # appendix head font
+   # @AppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # appendix head break
+   # @AppendixHeadingFormat	{ number @DotSep title	} # appendix head fmt
+   # @SubAppendixHeadingFont	{ Bold			} # subapp. head font
+   # @SubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # subapp. head break
+   # @SubAppendixHeadingFormat	{ number @DotSep title	} # subapp. head fmt
+   # @SubSubAppendixHeadingFont	{ Slope			} # sub-subapp. head font
+   # @SubSubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	} # sub-subapp head break
+   # @SubSubAppendixHeadingFormat{ number @DotSep title	} # sub-subapp. head fmt
+   # @ReferencesHeadingFont	{ Bold			} # references head font
+   # @ReferencesHeadingBreak	{ ragged 1.2fx nohyphen	} # references head break
+   # @ReferencesHeadingFormat	{ title			} # references head fmt
+   # @IndexHeadingFont		{ Bold			} # index head font
+   # @IndexHeadingBreak		{ ragged 1.2fx nohyphen	} # index head break
+   # @IndexHeadingFormat		{ title			} # index head fmt
+   # @IndexAHeadingFont		{ Bold			} # index A head font
+   # @IndexAHeadingBreak		{ ragged 1.2fx nohyphen	} # index A head break
+   # @IndexAHeadingFormat	{ title			} # index A head fmt
+   # @IndexBHeadingFont		{ Bold			} # index B head font
+   # @IndexBHeadingBreak		{ ragged 1.2fx nohyphen	} # index B head break
+   # @IndexBHeadingFormat	{ title			} # index B head fmt
+   # @SectionGap			{ 2.0v	@OrIfPlain 3f	} # between sections
+   # @SubSectionGap		{ 1.5v	@OrIfPlain 2f	} # between subsects
+   # @SubSubSectionGap		{ 1.5v	@OrIfPlain 2f	} # between sub-subs.
+   # @AppendixGap		{ 2.0v	@OrIfPlain 3f	} # between appendices
+   # @SubAppendixGap		{ 1.5v	@OrIfPlain 2f	} # between subappendices
+   # @SubSubAppendixGap		{ 1.5v	@OrIfPlain 2f	} # between sub-subapps
+   # @SectionInContents		{ Yes		} # add sections to contents
+   # @SubSectionInContents	{ Yes		} # add subsections to contents
+   # @SubSubSectionInContents	{ No		} # add sub-subsects to contents
+   # @AppendixInContents		{ Yes		} # add appendices to contents
+   # @SubAppendixInContents	{ Yes		} # add subappendices to contents
+   # @SubSubAppendixInContents	{ No		} # add sub-subapps to contents
+   # @ReferencesInContents	{ Yes		} # add references to contents
+   # @IndexInContents		{ Yes		} # add index to contents
+   # @IndexAInContents		{ Yes		} # add index A to contents
+   # @IndexBInContents		{ Yes		} # add index B to contents
+   # @SectionNumInTheorems	{ No		} # theorem num has section num
+   # @SubSectionNumInTheorems	{ No		} # theorem num has subsect num
+   # @SubSubSectionNumInTheorems	{ No		} # theorem num has sub-ss. num
+   # @AppendixNumInTheorems	{ No		} # theorem num has appendix num
+   # @SubAppendixNumInTheorems	{ No		} # theorem num has sub-app num
+   # @SubSubAppendixNumInTheorems{ No		} # theorem num has sub-sa. num
+   # @SectionNumInDisplays	{ Yes		} # display num has section num
+   # @SubSectionNumInDisplays	{ No		} # display num has subsect num
+   # @SubSubSectionNumInDisplays	{ No		} # display num has sub-ss. num
+   # @AppendixNumInDisplays	{ Yes		} # display num has appendix num
+   # @SubAppendixNumInDisplays	{ No		} # display num has sub-app num
+   # @SubSubAppendixNumInDisplays{ No		} # display num has sub-sa. num
+   # @SectionNumInFigures	{ No		} # figure num has section num
+   # @SubSectionNumInFigures	{ No		} # figure num has subsect num
+   # @SubSubSectionNumInFigures	{ No		} # figure num has sub-ss. num
+   # @AppendixNumInFigures	{ No		} # figure num has appendix num
+   # @SubAppendixNumInFigures	{ No		} # figure num has sub-app num
+   # @SubSubAppendixNumInFigures	{ No		} # figure num has sub-sa. num
+   # @SectionNumInTables		{ No		} # table num has section num
+   # @SubSectionNumInTables	{ No		} # table num has subsect num
+   # @SubSubSectionNumInTables	{ No		} # table num has sub-ss. num
+   # @AppendixNumInTables	{ No		} # table num has appendix num
+   # @SubAppendixNumInTables	{ No		} # table num has sub-app num
+   # @SubSubAppendixNumInTables	{ No		} # table num has sub-sa. num
+   # @SectionNumInRunners 	{ Yes		} # runners have section num
+   # @SubSectionNumInRunners 	{ No		} # runners have subsect num
+   # @SubSubSectionNumInRunners 	{ No		} # runners have sub-ss. num
+   # @AppendixNumInRunners 	{ Yes		} # runners have appendix num
+   # @SubAppendixNumInRunners 	{ No		} # runners have sub-app num
+   # @SubSubAppendixNumInRunners { No		} # runners have sub-sa. num
+   # @FigureContentsPrefix	{		} # for structured page nums
+   # @TableContentsPrefix	{		} # for structured page nums
+   # @SectionPrefix		{		} # for structured page nums
+   # @AppendixPrefix		{		} # for structured page nums
+   # @ReferencesPrefix		{		} # for structured page nums
+   # @IndexPrefix		{		} # for structured page nums
+   # @IndexAPrefix		{		} # for structured page nums
+   # @IndexBPrefix		{		} # for structured page nums
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Database (and @SysDatabase) clauses go here.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysDatabase @FontDef  { fontdefs }		  # font definitions
+ @SysDatabase @RefStyle { refstyle }		  # reference printing styles


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/reportf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/reportf:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/reportf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,912 ----
+ 
+ ###########################################################################
+ #                                                                         #
+ #  @ReportSetup extension to @DocumentSetup.                              #
+ #                                                                         #
+ #  Jeffrey H. Kingston                                                    #
+ #  August 1994                                                            #
+ #                                                                         #
+ #  This package extends DocumentSetup with definitions for reports.       #
+ #                                                                         #
+ ###########################################################################
+ 
+ extend @BasicSetup @DocumentSetup
+ export @Report @Section @Appendix
+ def @ReportSetup
+     named @CoverSheet			{ Yes			}
+     named @ContentsSeparate		{ No			}
+     named @DateLine			{ No			}
+     named @AboveTitleGap		{ 1i			}
+     named @TitleFont			{ Bold			}
+     named @TitleBreak			{ clines 1.4vx		}
+     named @AuthorFont			{ Italic		}
+     named @AuthorBreak			{ clines 		}
+     named @InstitutionFont		{ 			}
+     named @InstitutionBreak		{ clines 		}
+     named @DateLineFont			{ 			}
+     named @DateLineBreak		{ 			}
+     named @AbstractDisplay		{ No			}
+     named @AbstractFont			{			}
+     named @AbstractBreak		{			}
+     named @AbstractFormat
+ 		left @Title
+ 		right @Body		{ @Centre @Title @DP @Body }
+     named @AbstractTitle		{ dft			}
+     named @ReferencesBeforeAppendices	{ No			}
+ 
+     named @AbstractWord			{ abstract		}
+     named @ContentsWord			{ contents		}
+     named @AppendixWord			{ appendix		}
+     named @IndexWord			{ index			}
+     named @IndexAWord			{ index			}
+     named @IndexBWord			{ index			}
+ 
+     named @SectionNumbers		{ Arabic		}
+     named @FirstSectionNumber		{ 1			}
+     named @SubSectionNumbers		{ Arabic		}
+     named @FirstSubSectionNumber	{ 1			}
+     named @SubSubSectionNumbers		{ Arabic		}
+     named @FirstSubSubSectionNumber	{ 1			}
+     named @AppendixNumbers		{ UCAlpha		}
+     named @FirstAppendixNumber		{ 1			}
+     named @SubAppendixNumbers		{ Arabic		}
+     named @FirstSubAppendixNumber	{ 1			}
+     named @SubSubAppendixNumbers	{ Arabic		}
+     named @FirstSubSubAppendixNumber	{ 1			}
+ 
+     named @AbstractHeadingFont		{ Bold			}
+     named @AbstractHeadingBreak		{ ragged 1.2fx nohyphen }
+     named @AbstractHeadingFormat
+ 	    right title			{ @Centre title		}
+ 
+     named @ContentsHeadingFont		{ Bold			}
+     named @ContentsHeadingBreak		{ ragged 1.2fx nohyphen }
+     named @ContentsHeadingFormat
+ 	    right title			{ title			}
+ 
+     named @SectionHeadingFont		{ Bold			}
+     named @SectionHeadingBreak		{ ragged 1.2fx nohyphen }
+     named @SectionHeadingFormat
+ 	    left number right title	{ number @DotSep title	}
+ 
+     named @SubSectionHeadingFont	{ Bold			}
+     named @SubSectionHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @SubSectionHeadingFormat
+ 	    left number right title	{ number @DotSep title	}
+ 
+     named @SubSubSectionHeadingFont	{ Slope			}
+     named @SubSubSectionHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @SubSubSectionHeadingFormat
+ 	    left number right title	{ number @DotSep title	}
+ 
+     named @AppendixHeadingFont		{ Bold			}
+     named @AppendixHeadingBreak		{ ragged 1.2fx nohyphen	}
+     named @AppendixHeadingFormat
+ 	    left number right title	{ number @DotSep title	}
+ 
+     named @SubAppendixHeadingFont	{ Bold			}
+     named @SubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @SubAppendixHeadingFormat
+ 	    left number right title	{ number @DotSep title	}
+ 
+     named @SubSubAppendixHeadingFont	{ Slope			}
+     named @SubSubAppendixHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @SubSubAppendixHeadingFormat
+ 	    left number right title	{ number @DotSep title	}
+ 
+     named @ReferencesHeadingFont	{ Bold			}
+     named @ReferencesHeadingBreak	{ ragged 1.2fx nohyphen	}
+     named @ReferencesHeadingFormat
+ 	    right title			{ title			}
+ 
+     named @IndexHeadingFont		{ Bold			}
+     named @IndexHeadingBreak		{ ragged 1.2fx nohyphen	}
+     named @IndexHeadingFormat
+ 	    right title			{ title			}
+ 
+     named @IndexAHeadingFont		{ Bold			}
+     named @IndexAHeadingBreak		{ ragged 1.2fx nohyphen	}
+     named @IndexAHeadingFormat
+ 	    right title			{ title			}
+ 
+     named @IndexBHeadingFont		{ Bold			}
+     named @IndexBHeadingBreak		{ ragged 1.2fx nohyphen	}
+     named @IndexBHeadingFormat
+ 	    right title			{ title			}
+ 
+     named @SectionGap			{ 2.0v  @OrIfPlain 3f	}
+     named @SubSectionGap		{ 1.5v  @OrIfPlain 2f	}
+     named @SubSubSectionGap		{ 1.5v  @OrIfPlain 2f	}
+     named @AppendixGap			{ 2.0v  @OrIfPlain 3f	}
+     named @SubAppendixGap		{ 1.5v  @OrIfPlain 2f	}
+     named @SubSubAppendixGap		{ 1.5v  @OrIfPlain 2f	}
+ 
+     named @SectionInContents		{ Yes			}
+     named @SubSectionInContents		{ Yes			}
+     named @SubSubSectionInContents	{ No			}
+     named @AppendixInContents		{ Yes			}
+     named @SubAppendixInContents	{ Yes			}
+     named @SubSubAppendixInContents	{ No			}
+     named @ReferencesInContents		{ Yes			}
+     named @IndexInContents		{ Yes			}
+     named @IndexAInContents		{ Yes			}
+     named @IndexBInContents		{ Yes			}
+ 
+     named @SectionNumInTheorems		{ No			}
+     named @SubSectionNumInTheorems	{ No			}
+     named @SubSubSectionNumInTheorems	{ No			}
+     named @AppendixNumInTheorems	{ No			}
+     named @SubAppendixNumInTheorems	{ No			}
+     named @SubSubAppendixNumInTheorems	{ No			}
+ 
+     named @SectionNumInDisplays		{ Yes			}
+     named @SubSectionNumInDisplays	{ No			}
+     named @SubSubSectionNumInDisplays	{ No			}
+     named @AppendixNumInDisplays	{ Yes			}
+     named @SubAppendixNumInDisplays	{ No			}
+     named @SubSubAppendixNumInDisplays	{ No			}
+ 
+     named @SectionNumInFigures		{ No			}
+     named @SubSectionNumInFigures	{ No			}
+     named @SubSubSectionNumInFigures	{ No			}
+     named @AppendixNumInFigures		{ No			}
+     named @SubAppendixNumInFigures	{ No			}
+     named @SubSubAppendixNumInFigures	{ No			}
+ 
+     named @SectionNumInTables		{ No			}
+     named @SubSectionNumInTables	{ No			}
+     named @SubSubSectionNumInTables	{ No			}
+     named @AppendixNumInTables		{ No			}
+     named @SubAppendixNumInTables	{ No			}
+     named @SubSubAppendixNumInTables	{ No			}
+ 
+     named @SectionNumInRunners		{ Yes			}
+     named @SubSectionNumInRunners	{ No			}
+     named @SubSubSectionNumInRunners	{ No			}
+     named @AppendixNumInRunners		{ Yes			}
+     named @SubAppendixNumInRunners	{ No			}
+     named @SubSubAppendixNumInRunners	{ No			}
+ 
+     named @FigureContentsPrefix		{			}
+     named @TableContentsPrefix		{			}
+     named @SectionPrefix		{			}
+     named @AppendixPrefix		{			}
+     named @ReferencesPrefix		{			}
+     named @IndexPrefix			{			}
+     named @IndexAPrefix			{			}
+     named @IndexBPrefix			{			}
+ @Begin
+ 
+     #######################################################################
+     #                                                                     #
+     #  Lists of sections, subsections, etc.                               #
+     #                                                                     #
+     #######################################################################
+ 
+     export num
+     def @SectionList named @Tag {} right num
+     {
+ 	@Galley
+         //@SectionGap	@SectionList @Next num
+     }
+ 
+     export num
+     def @SubSectionList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubSectionGap    @SubSectionList @Next num
+     }
+ 
+     export num
+     def @SubSubSectionList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubSubSectionGap @SubSubSectionList @Next num
+     }
+ 
+     export num
+     def @AppendixList named @Tag {} right num
+     {
+ 	@Galley
+         //@AppendixGap	@AppendixList @Next num
+     }
+ 
+     export num
+     def @SubAppendixList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubAppendixGap   @SubAppendixList @Next num
+     }
+ 
+     export num
+     def @SubSubAppendixList named @Tag {} right num
+     {
+ 	@Galley
+         //@SubSubAppendixGap   @SubSubAppendixList @Next num
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @Full - this sends text to a full-width place.                     #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Full force into { @FullPlace&&following } right x
+     {
+         x
+     }
+ 
+     def @NoForceFull into { @FullPlace&&following } right x
+     {
+         x
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @Report                                                            #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Report
+         named @Title {}
+         named @Author {}
+         named @Institution {}
+         named @DateLine { @DateLine }
+         named @CoverSheet { @CoverSheet }
+         named @ContentsSeparate { @ContentsSeparate }
+         named @AtEnd { dft }
+         named @InitialFont { @InitialFont }
+         named @InitialBreak { @InitialBreak }
+         named @InitialSpace { @InitialSpace }
+         named @InitialLanguage { @InitialLanguage }
+ 	named @PageOrientation { @PageOrientation }
+         named @PageHeaders { @PageHeaders }
+         named @ColumnNumber { @ColumnNumber }
+         named @FirstPageNumber { @FirstPageNumber }
+ 	named @OptimizePages { @OptimizePages }
+ 	named @AbstractDisplay { @AbstractDisplay }
+ 	named @AbstractTitle { @AbstractTitle }
+ 	named @Abstract {}
+     {
+ 
+ 	def @Cntr right x
+ 	{
+ 	    x @Case {
+ 		""	@Yield @Null
+ 		else	@Yield { |0.5rt x | }
+ 	    }
+ 	}
+ 
+ 	def @DateValue right indent
+ 	{
+ 	    @DateLine @Case {
+ 		No	@Yield @Null
+ 		Yes	@Yield @Date
+ 		else	@Yield @DateLine
+ 	    }
+ 	}
+ 
+ 	def @TitleMaterial
+ 	{
+ 	    //@AboveTitleGap
+ 		    @TitleFont @Font @TitleBreak @Break @Cntr @Title
+ 	    //1.00v @AuthorFont @Font @AuthorBreak @Break @Cntr @Author
+ 	    //1.00v @InstitutionFont @Font @InstitutionBreak @Break @Cntr @Institution
+ 	    //1.00v @DateLineFont @Font @DateLineBreak @Break @Cntr @DateValue
+ 	}
+ 
+ 	def @AbstractPart
+ 	{
+ 	    def @Title
+ 	    {
+ 		@AbstractHeadingFont @Font @AbstractHeadingBreak @Break
+ 		@AbstractHeadingFormat {
+ 		    @AbstractTitle @Dft { abstract @WordVal @AbstractWord }
+ 		}
+ 	    }
+ 
+ 	    @Abstract @Case {
+ 
+ 		"" @Yield @Null
+ 
+ 		else @Yield
+ 		{
+ 		    @AbstractFont @Font @AbstractBreak @Break
+ 		    @AbstractDisplay @Case {
+ 		    
+ 			No @Yield { @Title @AbstractFormat @Abstract }
+ 
+ 			Yes @Yield { |@DisplayIndent
+ 			    @Title @AbstractFormat @Abstract |@DisplayIndent }
+ 		    }
+ 		}
+ 	    }
+ 	}
+ 
+ 	def @ContentsPart
+ 	{
+ 	    //	|0.5rt @ContentsHeadingFont @Font @ContentsHeadingBreak @Break
+ 		       @ContentsHeadingFormat { contents @WordVal @ContentsWord } |
+ 	    //@DisplayGap  @ContentsSection
+ 	    //  NonStart @Runner @MajorTitle {contents @WordVal @ContentsWord}
+ 	}
+ 
+ 	def @ReferencesPart
+ 	    named @Tag {}
+ 	{
+ 
+            @LargeScaleStructure
+                 tag { @Tag }
+                 type { Major }
+                 initiallanguage { @InitialLanguage }
+                 title { @RefHeading @RefListTitle }
+ 		sendheader { @Body }
+                 headingfont { @ReferencesHeadingFont }
+                 headingbreak { @ReferencesHeadingBreak }
+                 headingformat { @ReferencesHeadingFormat @Body }
+                 incontents { @ReferencesInContents }
+ 		majornum {}
+ 		majortitle {}
+ 		minornum {}
+ 		minortitle { @RefHeading @RefListTitle }
+                 prefix { @ReferencesPrefix }
+                 inrunners { Yes }
+                 { //@RefListGap @ReferencesSection }
+ 	}
+ 
+         def @IndexPart
+ 	    named @Tag {}
+         {
+ 
+             def @Run
+             {
+                 NonStart @Runner
+                     @MajorNum {}
+                     @MajorTitle { index @WordVal @IndexWord }
+                     @MinorNum {}
+                     @MinorTitle {}
+                     @Owner { @Tag }
+                     @Prefix { @IndexPrefix }
+             }
+ 
+             @LargeScaleStructure
+                 tag { @Tag }
+                 type { Major }
+                 initiallanguage { @InitialLanguage }
+                 title { index @WordVal @IndexWord }
+                 headingfont { @IndexHeadingFont }
+                 headingbreak { @IndexHeadingBreak }
+                 headingformat { @IndexHeadingFormat @Body }
+                 incontents { @IndexInContents }
+                 prefix { @IndexPrefix }
+                 inrunners { Yes }
+ 		majornum {}
+ 		majortitle {}
+ 		minornum {}
+ 		minortitle { index @WordVal @IndexWord }
+                 sendheader { @Full @Body }
+                 innergap { @SectionGap }
+ 		wantindefinite { Yes }
+                 @IndexSection @Run
+ 
+         }
+ 
+         def @IndexAPart
+ 	    named @Tag {}
+         {
+             def @Run
+             {
+                 NonStart @Runner
+                     @MajorNum {}
+                     @MajorTitle { index @WordVal @IndexAWord }
+                     @MinorNum {}
+                     @MinorTitle {}
+                     @Owner { @Tag }
+                     @Prefix { @IndexAPrefix }
+             }
+ 
+             @LargeScaleStructure
+                 tag { @Tag }
+                 type { Major }
+                 initiallanguage { @InitialLanguage }
+                 title { index @WordVal @IndexAWord }
+                 headingfont { @IndexAHeadingFont }
+                 headingbreak { @IndexAHeadingBreak }
+                 headingformat { @IndexAHeadingFormat @Body }
+                 incontents { @IndexAInContents }
+                 prefix { @IndexAPrefix }
+                 inrunners { Yes }
+ 		majornum {}
+ 		majortitle {}
+ 		minornum {}
+ 		minortitle { index @WordVal @IndexAWord }
+                 sendheader { @Full @Body }
+                 innergap { @SectionGap }
+ 		wantindefinite { Yes }
+                 @IndexASection @Run
+ 
+         }
+ 
+         def @IndexBPart
+ 	    named @Tag {}
+         {
+             def @Run
+             {
+                 NonStart @Runner
+                     @MajorNum {}
+                     @MajorTitle { index @WordVal @IndexBWord }
+                     @MinorNum {}
+                     @MinorTitle {}
+                     @Owner { @Tag }
+                     @Prefix { @IndexBPrefix }
+             }
+ 
+             @LargeScaleStructure
+                 tag { @Tag }
+                 type { Major }
+                 initiallanguage { @InitialLanguage }
+                 title { index @WordVal @IndexBWord }
+                 headingfont { @IndexBHeadingFont }
+                 headingbreak { @IndexBHeadingBreak }
+                 headingformat { @IndexBHeadingFormat @Body }
+                 incontents { @IndexBInContents }
+                 prefix { @IndexBPrefix }
+                 inrunners { Yes }
+ 		majornum {}
+ 		majortitle {}
+ 		minornum {}
+ 		minortitle { index @WordVal @IndexBWord }
+                 sendheader { @Full @Body }
+                 innergap { @SectionGap }
+ 		wantindefinite { Yes }
+                 @IndexBSection @Run
+ 
+         }
+ 
+ 	def @ContentsGap
+ 	{
+ 	    @ContentsSeparate @Case {
+ 		No  @Yield @SectionGap
+ 		Yes @Yield 2b
+ 	    }
+ 	}
+ 
+         def @ReportBodyWithoutCoverSheet force into { @ColPlace&&following }
+ 	    named @Optimize { @OptimizePages }
+         {
+ 
+ 	      			Start @Runner
+ 	    //			@AbstractDisplay @NoDo @AbstractPart
+ 	    //@ContentsGap	@ContentsPart
+ 	    //@ContentsGap	@SectionList @FirstSectionNumber
+ 	    //@SectionGap	@ReferencesBeforeAppendices @Do {
+ 				    @MakeReferences @Do @ReferencesPart
+ 				}
+             //@AppendixGap	@AppendixList @FirstAppendixNumber
+ 	    //@SectionGap	@EndFigureList
+ 	    //@SectionGap	@EndNoteList 1
+ 	    //@SectionGap	@ReferencesBeforeAppendices @NoDo {
+ 				    @MakeReferences @Do @ReferencesPart
+ 				}
+ 	    //			@MakeIndexA @Do @IndexAPart
+ 	    //			@MakeIndexB @Do @IndexBPart
+ 	    //			@MakeIndex  @Do @IndexPart
+         }
+ 
+         def @ReportCoverSheet into { @IntroColPlace&&preceding }
+ 	    named @Optimize { @OptimizePages }
+         {
+ 	    //                  Start @Runner
+ 	    //			@TitleMaterial
+ 	    //@DisplayGap	@DP @AbstractPart
+ 	}
+ 
+         def @ReportBodyWithCoverSheet force into { @ColPlace&&preceding }
+ 	    named @Optimize { @OptimizePages }
+         {
+ 
+ 	      	 		Start @Runner
+ 	    //@ContentsGap	@ContentsPart
+ 	    //@ContentsGap	@SectionList @FirstSectionNumber
+ 	    //@SectionGap	@ReferencesBeforeAppendices @Do {
+ 				    @MakeReferences @Do @ReferencesPart
+ 				}
+             //@AppendixGap	@AppendixList @FirstAppendixNumber
+ 	    //@SectionGap	@ReferencesBeforeAppendices @NoDo {
+ 				    @MakeReferences @Do @ReferencesPart
+ 				}
+ 	    //@SectionGap	@EndFigureList
+ 	    //@SectionGap	@EndNoteList 1
+ 	    //			@MakeIndexA @Do @IndexAPart
+ 	    //			@MakeIndexB @Do @IndexBPart
+ 	    //			@MakeIndex  @Do @IndexPart
+         }
+ 
+         @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language
+ 	@InitialSpace @Space { @ColourCommand @InitialColour } @SetColour
+         {
+ 	    @CoverSheet @Case {
+ 
+ 		No @Yield {
+ 		        @FootNoteThrough @Do @BeginFootNoteCounter
+ 		    //	Yes @BeginAllCounters {}
+ 		    //	Yes @BeginDisplayCounter {}
+ 		    //	Yes @BeginFigureCounter {}
+ 		    //	Yes @BeginTableCounter {}
+ 		    //  @AbstractDisplay @Do { @NoForceFull @AbstractPart }
+ 		    //  @ReportBodyWithoutCoverSheet
+ 		    //  @PageList
+ 			    @ColumnNumber { @ColumnNumber }
+ 			    @PageHeaders { @PageHeaders }
+ 			    @Orient { @PageOrientation }
+ 			    # extra { Yes }
+ 			    @AtTop { @TitleMaterial }
+ 			    @FirstPageNumber
+ 		    //	NonStart @Runner
+ 		    //  @AtEnd @Case {
+ 			    dft @Yield @Null
+ 			    else @Yield
+ 				 @EvenPage @Orient { @PageOrientation } @AtEnd
+ 			}
+ 		}
+ 
+ 		Yes @Yield {
+ 		        @FootNoteThrough @Do @BeginFootNoteCounter
+ 		    //	Yes @BeginAllCounters {}
+ 		    //	Yes @BeginDisplayCounter {}
+ 		    //	Yes @BeginFigureCounter {}
+ 		    //	Yes @BeginTableCounter {}
+ 		    //  @SimpleOddOrEvenIntroPageList
+ 			    @ColumnNumber { 1 }
+ 			    @PageHeaders { Simple }
+ 			    @Orient { @PageOrientation }
+ 			    1
+ 		    //	@ReportCoverSheet
+ 		    //	@PageList
+ 			    @ColumnNumber { @ColumnNumber }
+ 			    @PageHeaders { @PageHeaders }
+ 			    @Orient { @PageOrientation }
+ 			    # extra { Yes }
+ 			    @AtTop { @TitleMaterial }
+ 			    @FirstPageNumber
+ 		    //	@ReportBodyWithCoverSheet
+ 		    //	NonStart @Runner
+ 		    //  @AtEnd @Case {
+ 			    dft @Yield @Null
+ 			    else @Yield
+ 				 @EvenPage @Orient { @PageOrientation } @AtEnd
+ 			}
+ 		}
+ 	    }
+         }
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Sections.                                                          #
+     #                                                                     #
+     #######################################################################
+ 
+     export @BeginSubSections @EndSubSections @SubSection
+     def @Section force into { @SectionList&&preceding }
+ 	named @Tag {}
+ 	named @Title {}
+ 	named @RunningTitle { dft }
+ 	named @InitialLanguage {}
+ 	named @BypassNumber { dft }
+ 	body @Body
+     {
+ 
+         def @EndSubSectionsPlace { @Galley }
+ 
+         def @EndSubSections force into { @EndSubSectionsPlace&&preceding }
+ 	{}
+ 
+         macro @BeginSubSections
+         {
+ 	    //@SubSectionGap @SubSectionList @FirstSubSectionNumber
+ 	    // @EndSubSectionsPlace //
+ 	}
+ 
+         def @SectionShortNum
+ 	{
+ 	    @SectionNumbers @Then {
+ 		@BypassNumber @Dft {
+ 		    @SectionNumbers @Num @SectionList&&@Tag @Open { num }
+ 		}
+ 	    }
+ 	}
+ 
+ 	export @BeginSubSubSections @EndSubSubSections @SubSubSection
+         def @SubSection force into { @SubSectionList&&preceding }
+ 	    named @Tag {}
+ 	    named @Title {}
+ 	    named @RunningTitle { dft }
+ 	    named @InitialLanguage { @InitialLanguage }
+ 	    named @BypassNumber { dft }
+ 	    body @Body
+         {
+ 
+ 	    def @EndSubSubSectionsPlace { @Galley }
+ 
+             def @EndSubSubSections force into
+ 		{ @EndSubSubSectionsPlace&&preceding }
+ 	    {}
+ 
+             macro @BeginSubSubSections
+             {
+ 		//@SubSubSectionGap @SubSubSectionList @FirstSubSubSectionNumber
+ 		// @EndSubSubSectionsPlace //
+ 	    }
+ 
+ 	    def @SubSectionShortNum
+ 	    {
+ 		@SubSectionNumbers @Then {
+ 		    @BypassNumber @Dft {
+ 			@SectionShortNum @Join @SubSectionNumbers @Num
+ 			{ @SubSectionList&&@Tag @Open { num } }
+ 		    }
+ 		}
+ 	    }
+ 
+ 	    def @SubSubSection force into { @SubSubSectionList&&preceding }
+ 		named @Tag {}
+ 		named @Title {}
+ 		named @RunningTitle { dft }
+ 		named @InitialLanguage { @InitialLanguage }
+ 		named @BypassNumber { dft }
+ 		body @Body
+ 	    {
+ 
+ 		@LargeScaleStructure
+ 		    tag { @Tag }
+ 		    type { Minor }
+ 		    initiallanguage { @InitialLanguage }
+ 		    title { @Title }
+ 		    runningtitle { @RunningTitle }
+ 		    headingfont { @SubSubSectionHeadingFont }
+ 		    headingbreak { @SubSubSectionHeadingBreak }
+ 		    headingformat { @Num @SubSubSectionHeadingFormat @Body }
+ 		    incontents { @SubSubSectionInContents }
+ 		    contentsindent { 6f }
+ 		    numbers { @SubSubSectionNumbers }
+ 		    attachnum { @SubSubSectionList&&preceding @Tagged @Tag }
+ 		    retrievenum { @SubSubSectionList&&@Tag @Open { num } }
+ 		    bypassnumber { @BypassNumber }
+ 		    prefix { @SubSectionShortNum }
+ 		    majornum {}
+ 		    majortitle {}
+ 		    intheorems { @SubSubSectionNumInTheorems }
+ 		    indisplays { @SubSubSectionNumInDisplays }
+ 		    infigures { @SubSubSectionNumInFigures }
+ 		    intables { @SubSubSectionNumInTables }
+ 		    inrunners { @SubSubSectionNumInRunners }
+ 		    @Body
+ 
+ 	    }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Minor }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @Title }
+ 		runningtitle { @RunningTitle }
+ 		headingfont { @SubSectionHeadingFont }
+ 		headingbreak { @SubSectionHeadingBreak }
+ 		headingformat { @Num @SubSectionHeadingFormat @Body }
+ 		incontents { @SubSectionInContents }
+ 		contentsindent { 3f }
+ 		numbers { @SubSectionNumbers }
+ 		attachnum { @SubSectionList&&preceding @Tagged @Tag }
+ 		retrievenum { @SubSectionList&&@Tag @Open { num } }
+ 		bypassnumber { @BypassNumber }
+ 		prefix { @SectionShortNum }
+ 		majornum {}
+ 		majortitle {}
+ 		intheorems { @SubSectionNumInTheorems }
+ 		indisplays { @SubSectionNumInDisplays }
+ 		infigures { @SubSectionNumInFigures }
+ 		intables { @SubSectionNumInTables }
+ 		inrunners { @SubSectionNumInRunners }
+ 		@Body
+         }
+ 
+ 	@LargeScaleStructure
+ 	    tag { @Tag }
+ 	    type { Minor }
+ 	    initiallanguage { @InitialLanguage }
+ 	    title { @Title }
+ 	    runningtitle { @RunningTitle }
+ 	    headingfont { @SectionHeadingFont }
+ 	    headingbreak { @SectionHeadingBreak }
+ 	    headingformat { @Num @SectionHeadingFormat @Body }
+ 	    incontents { @SectionInContents }
+ 	    contentsindent { 0f }
+ 	    numbers { @SectionNumbers }
+ 	    attachnum { @SectionList&&preceding @Tagged @Tag }
+ 	    retrievenum { @SectionList&&@Tag @Open { num } }
+ 	    bypassnumber { @BypassNumber }
+ 	    prefix { @SectionPrefix }
+ 	    majornum {}
+ 	    majortitle {}
+ 	    intheorems { @SectionNumInTheorems }
+ 	    indisplays { @SectionNumInDisplays }
+ 	    infigures { @SectionNumInFigures }
+ 	    intables { @SectionNumInTables }
+ 	    inrunners { @SectionNumInRunners }
+ 	    @Body
+ 
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Appendices.                                                        #
+     #                                                                     #
+     #######################################################################
+ 
+     export @BeginSubAppendices @EndSubAppendices @SubAppendix
+     def @Appendix force into { @AppendixList&&preceding }
+         named @Tag {}
+         named @Title {}
+         named @RunningTitle { dft }
+ 	named @InitialLanguage {}
+ 	named @BypassNumber { dft }
+         body @Body
+     {
+         def @EndSubAppendicesPlace { @Galley }
+ 
+         def @EndSubAppendices force into { @EndSubAppendicesPlace&&preceding }
+ 	{}
+ 
+         macro @BeginSubAppendices
+         {
+ 	    //@SubAppendixGap @SubAppendixList @FirstSubAppendixNumber
+ 	    // @EndSubAppendicesPlace //
+ 	}
+ 
+         def @AppendixShortNum
+ 	{
+ 	    @AppendixNumbers @Then {
+ 		@BypassNumber @Dft {
+ 		    @AppendixNumbers @Num @AppendixList&&@Tag @Open { num }
+ 		}
+ 	    }
+ 	}
+ 
+         def @AppendixLongNum
+         {
+             @AppendixNumbers @Then {
+ 		@InitialLanguage @Language {
+ 		    appendix @WordVal @AppendixWord  @AppendixShortNum
+ 		}
+ 	    }
+         }
+ 
+         export @BeginSubSubAppendices @EndSubSubAppendices @SubSubAppendix
+         def @SubAppendix force into { @SubAppendixList&&preceding }
+             named @Tag {}
+             named @Title {}
+             named @RunningTitle { dft }
+ 	    named @InitialLanguage { @InitialLanguage }
+ 	    named @BypassNumber { dft }
+             body @Body
+         {
+ 
+             def @EndSubSubAppendicesPlace { @Galley }
+ 
+             def @EndSubSubAppendices force into
+ 		{ @EndSubSubAppendicesPlace&&preceding }
+ 	    {}
+ 
+             macro @BeginSubSubAppendices
+             {
+ 		//@SubSubAppendixGap
+ 		    @SubSubAppendixList @FirstSubSubAppendixNumber
+ 		// @EndSubSubAppendicesPlace //
+ 	    }
+ 
+             def @SubAppendixShortNum
+ 	    {
+ 		@SubAppendixNumbers @Then {
+ 		    @BypassNumber @Dft {
+ 			@AppendixShortNum @Join @SubAppendixNumbers @Num
+ 			{ @SubAppendixList&&@Tag @Open { num } }
+ 		    }
+ 		}
+ 	    }
+ 
+             def @SubSubAppendix force into { @SubSubAppendixList&&preceding }
+ 		named @Tag {}
+ 		named @Title {}
+ 		named @RunningTitle { dft }
+ 		named @InitialLanguage { @InitialLanguage }
+ 		named @BypassNumber { dft }
+ 		body @Body
+             {
+ 
+ 		@LargeScaleStructure
+ 		    tag { @Tag }
+ 		    type { Minor }
+ 		    initiallanguage { @InitialLanguage }
+ 		    title { @Title }
+ 		    runningtitle { @RunningTitle }
+ 		    headingfont { @SubSubAppendixHeadingFont }
+ 		    headingbreak { @SubSubAppendixHeadingBreak }
+ 		    headingformat { @Num @SubSubAppendixHeadingFormat @Body }
+ 		    incontents { @SubSubAppendixInContents }
+ 		    contentsindent { 6f }
+ 		    numbers { @SubSubAppendixNumbers }
+ 		    attachnum { @SubSubAppendixList&&preceding @Tagged @Tag }
+ 		    retrievenum { @SubSubAppendixList&&@Tag @Open { num } }
+ 		    bypassnumber { @BypassNumber }
+ 		    prefix { @SubAppendixShortNum }
+ 		    majornum {}
+ 		    majortitle {}
+ 		    intheorems { @SubSubAppendixNumInTheorems }
+ 		    indisplays { @SubSubAppendixNumInDisplays }
+ 		    infigures { @SubSubAppendixNumInFigures }
+ 		    intables { @SubSubAppendixNumInTables }
+ 		    inrunners { @SubSubAppendixNumInRunners }
+ 		    @Body
+ 
+             }
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Minor }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @Title }
+ 		runningtitle { @RunningTitle }
+ 		headingfont { @SubAppendixHeadingFont }
+ 		headingbreak { @SubAppendixHeadingBreak }
+ 		headingformat { @Num @SubAppendixHeadingFormat @Body }
+ 		incontents { @SubAppendixInContents }
+ 		contentsindent { 3f }
+ 		numbers { @SubAppendixNumbers }
+ 		attachnum { @SubAppendixList&&preceding @Tagged @Tag }
+ 		retrievenum { @SubAppendixList&&@Tag @Open { num } }
+ 		bypassnumber { @BypassNumber }
+ 		prefix { @AppendixShortNum }
+ 		majornum {}
+ 		majortitle {}
+ 		intheorems { @SubAppendixNumInTheorems }
+ 		indisplays { @SubAppendixNumInDisplays }
+ 		infigures { @SubAppendixNumInFigures }
+ 		intables { @SubAppendixNumInTables }
+ 		inrunners { @SubAppendixNumInRunners }
+ 		@Body
+ 
+         }
+ 
+ 	@LargeScaleStructure
+ 	    tag { @Tag }
+ 	    type { Minor }
+ 	    initiallanguage { @InitialLanguage }
+ 	    title { @Title }
+ 	    runningtitle { @RunningTitle }
+ 	    headingfont { @AppendixHeadingFont }
+ 	    headingbreak { @AppendixHeadingBreak }
+ 	    headingformat { @Num @AppendixHeadingFormat @Body }
+ 	    incontents { @AppendixInContents }
+ 	    contentsindent { 0f }
+ 	    word { appendix @WordVal @AppendixWord }
+ 	    numbers { @AppendixNumbers }
+ 	    attachnum { @AppendixList&&preceding @Tagged @Tag }
+ 	    retrievenum { @AppendixList&&@Tag @Open { num } }
+ 	    bypassnumber { @BypassNumber }
+ 	    prefix { @AppendixPrefix }
+ 	    majornum {}
+ 	    majortitle {}
+ 	    intheorems { @AppendixNumInTheorems }
+ 	    indisplays { @AppendixNumInDisplays }
+ 	    infigures { @AppendixNumInFigures }
+ 	    intables { @AppendixNumInTables }
+ 	    inrunners { Yes }
+ 	    @Body
+     }
+ 
+ @End @ReportSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/russian
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/russian:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/russian	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,10 ----
+ #################################################################
+ #                                                               #
+ #  russian                                                      #
+ #                                                               #
+ #  This file includes everything you need for Russian.          #
+ #                                                               #
+ #################################################################
+ 
+ # Commented out because these fonts are not distributed with Lout.
+ # @SysInclude { russian.fd }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/russian.fd
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/russian.fd:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/russian.fd	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,38 ----
+ ##################################################################################################################
+ #                                                                                                                #
+ #  Russian font definitions.  Use a very wide window to see them clearly.                                        #
+ #                                                                                                                #
+ #       Lout font       Lout font         PostScript         PostScript font metrics    Lout character  Recode/  #
+ #       family name     face name         font name          (formerly .AFM) file name  mapping file   NoRecode  #
+ #                                                                                                                #
+ ##################################################################################################################
+ 
+ fontdef Academy		Base		{ Academy			Aca		koi8r.LCM	Recode	 }
+ fontdef Academy		Slope		{ Academy-Italic		Aca-It		koi8r.LCM	Recode	 }
+ fontdef Academy		Bold		{ Academy-Bold			Aca-Bd		koi8r.LCM	Recode	 }
+ fontdef Academy		BoldSlope	{ Academy-Italic		Aca-It		koi8r.LCM	Recode	 }
+ fontdef Academy		Italic		{ Academy-Italic		Aca-It		koi8r.LCM	Recode	 }
+ 														 
+ fontdef Antiqua		Base		{ Antiqua			Ant		koi8r.LCM	Recode	 }
+ fontdef Antiqua		Slope		{ Antiqua-Italic		Ant-It		koi8r.LCM	Recode	 }
+ fontdef Antiqua		Bold		{ Antiqua-Bold			Ant-Bd		koi8r.LCM	Recode	 }
+ fontdef Antiqua		BoldSlope	{ Antiqua-Italic		Ant-It		koi8r.LCM	Recode	 }
+ fontdef Antiqua		Italic		{ Antiqua-Italic		Ant-It		koi8r.LCM	Recode	 }
+ 														 
+ fontdef College		Base		{ College			Col		koi8r.LCM	Recode	 }
+ fontdef College		Slope		{ College-Italic		Col-It		koi8r.LCM	Recode	 }
+ fontdef College		Bold		{ College-Bold			Col-Bd		koi8r.LCM	Recode	 }
+ fontdef College		BoldSlope	{ College-Italic		Col-It		koi8r.LCM	Recode	 }
+ fontdef College		Italic		{ College-Italic		Col-It		koi8r.LCM	Recode	 }
+ 														 
+ fontdef Magazine	Base		{ Magazine			Mag		koi8r.LCM	Recode	 }
+ fontdef Magazine	Slope		{ Magazine-Italic		Mag-It		koi8r.LCM	Recode	 }
+ fontdef Magazine	Bold		{ Magazine-Bold			Mag-Bd		koi8r.LCM	Recode	 }
+ fontdef Magazine	BoldSlope	{ Magazine-Italic		Mag-It		koi8r.LCM	Recode	 }
+ fontdef Magazine	Italic		{ Magazine-Italic		Mag-It		koi8r.LCM	Recode	 }
+ 														 
+ fontdef Textbook	Base		{ Textbook			Txt		koi8r.LCM	Recode	 }
+ fontdef Textbook	Slope		{ Textbook-Italic		Txt-It		koi8r.LCM	Recode	 }
+ fontdef Textbook	Bold		{ Textbook-Bold			Txt-Bd		koi8r.LCM	Recode	 }
+ fontdef Textbook	BoldSlope	{ Textbook-Italic		Txt-It		koi8r.LCM	Recode	 }
+ fontdef Textbook	Italic		{ Textbook-Italic		Txt-It		koi8r.LCM	Recode	 }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/slides
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/slides:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/slides	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,317 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for overhead transparencies                               #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @SysInclude commands for standard packages.                                #
+ #                                                                             #
+ ###############################################################################
+ 
+   @SysInclude { langdefs	} # language definitions
+   @SysInclude { bsf		} # BasicSetup package
+   @SysInclude { dsf		} # DocumentSetup package
+   @SysInclude { slidesf		} # OverheadSetup extension
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Include command for reading personal definitions from current directory.  #
+ #                                                                             #
+ ###############################################################################
+ 
+   @Include { mydefs }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @BasicSetup @Use clause - basics, lists, paragraphs, displays.         #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+  
+ @Use { @BasicSetup
+   # @InitialFont	{ Times Base 12p	} # initial font
+     @InitialFont	{ Times Base 20p	} # initial font
+   # @InitialBreak	{{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}}
+     @InitialBreak	{ ragged 1.20fx nohyphen} # initial break
+   # @InitialSpace	{ lout			} # initial space style
+   # @InitialLanguage	{ English		} # initial language
+   # @InitialColour	{ black			} # initial colour
+   # @OptimizePages	{ No			} # optimize page breaks?
+   # @HeadingFont	{ Bold			} # font for @Heading
+   # @ParaGap		{ 1.3vx @OrIfPlain 1f	} # gap between paragraphs
+   # @ParaIndent		{ 2.00f	@OrIfPlain 5s	} # first-line indent for @PP
+   # @DisplayGap		{ 1.00v	@OrIfPlain 1f	} # gap above, below displays
+   # @DisplayIndent	{ 2.00f	@OrIfPlain 5s	} # @IndentedDisplay indent
+   # @DefaultIndent	{ 0.5rt			} # @Display indent
+   # @DisplayNumStyle	{ (num)			} # style of display numbers
+   # @WideIndent		{ 4.00f	@OrIfPlain 10s	} # @WideTaggedList indent
+   # @VeryWideIndent	{ 8.00f	@OrIfPlain 20s	} # @VeryWideTaggedList indent
+   # @ListOuterGap	{ 1.00v	@OrIfPlain 1f	} # gap before, after lists
+   # @ListGap		{ 1.00v	@OrIfPlain 1f	} # gap between list items
+   # @ListIndent		{ 0s			} # indent of list items
+   # @ListRightIndent	{ 0s			} # right indent of list items
+   # @ListLabelWidth	{ 2.00f	@OrIfPlain 5s	} # width allowed for list tags
+   # @NumberSeparator	{ .			} # separates nums like 2.3.7
+   # @CrossLinkFormat	{ @Body			} # format of cross links
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @DocumentSetup @Use clause - page layout plus figures, tables, etc.    #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+  
+ @Use { @DocumentSetup
+   # @PageType		{ A4	@OrIfPlain Other} # page type (width, height)
+   # @PageWidth		{ 80s			} # page width if type Other
+   # @PageHeight		{ 66f			} # page height if type Other
+   # @PageOrientation	{ Portrait		} # Portrait, Landscape, etc.
+   # @PageBackground	{  			} # background of each page
+   # @TopMargin		{ 2.5c	@OrIfPlain 6f	} # top margin of all pages
+   # @FootMargin		{ 2.5c	@OrIfPlain 6f	} # bottom margin of all pages
+     @FootMargin		{ 5.00c			} # bottom margin of all pages
+   # @OddLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of odd pages
+   # @OddRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of odd pages
+   # @EvenLeftMargin	{ 2.5c	@OrIfPlain 10s	} # left margin of even pages
+   # @EvenRightMargin	{ 2.5c	@OrIfPlain 10s	} # right margin of even pages
+   # @OddLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @OddRightBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenLeftBodyMargin	{ 0c			} # extra margin for page body
+   # @EvenRightBodyMargin{ 0c			} # extra margin for page body
+   # @PageBoxType	{ None			} # None Box CurveBox ShadowBox
+   # @PageBoxMargin	{ 1.00c			} # page box margin
+   # @PageBoxLineWidth	{			} # page box line thickness
+   # @PageBoxPaint	{ none			} # page box paint
+   # @PageBoxShadow	{ 0.60c			} # shadow margin if ShadowBox
+   # @PageEnclose	{ @Body			} # enclose every page in this
+   # @ColumnNumber	{ 1			} # number of columns (1 to 10)
+   # @ColumnGap		{ 1.00c	@OrIfPlain 6s	} # column gap
+   # @FigureLocation	{ PageTop		} # default figure location
+   # @TableLocation	{ PageTop		} # default table location
+   # @FigureFormat	{ @CC @Body		} # default figure format
+   # @TableFormat	{ @CC @Body		} # default table format
+   # @FigureWord		{ figure		} # "Figure" word else anything
+   # @TableWord		{ table			} # "Table" word else anything
+   # @FigureNumbers	{ Arabic		} # method of numbering figures
+   # @TableNumbers	{ Arabic		} # method of numbering tables
+   # @FigureCaptionPos	{ Below 		} # Above or Below
+   # @TableCaptionPos	{ Below			} # Above or Below
+   # @FigureCaptionFont  { -2p                   } # figure caption font
+   # @FigureCaptionBreak { adjust hyphen 1.2fx   } # figure caption break
+   # @FigureCaptionFormat{ {@B { word @NumSep number. &2s }} @Insert caption }
+   # @TableCaptionFont   { -2p                   } # table caption font
+   # @TableCaptionBreak  { adjust hyphen 1.2fx   } # table caption break
+   # @TableCaptionFormat { {@B { word @NumSep number. &2s }} @Insert caption }
+   # @MakeFigureContents { No                    } # list of figures at start
+   # @MakeTableContents  { No                    } # list of tables at start
+   # @MakeContents	{ No			} # make contents? Yes or No
+   # @ContentsGap	{ 0.20v	@OrIfPlain 0f	} # extra gap above minor entry
+     @ContentsGapAbove	{ 0.00v	@OrIfPlain 1f	} # extra gap above major entry
+   # @ContentsGapBelow	{ 0.00v	@OrIfPlain 0f	} # extra gap below major entry
+     @ContentsFont       { Base                  } # font for major entry
+   # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f	} # extra gap above `part' entry
+   # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f	} # extra gap below `part' entry
+   # @ContentsFormat	{ number @DotSep title	} # contents entry format
+   # @ContentsLeader	{ ..			} # leader symbol in contents
+   # @ContentsLeaderGap	{ 4s	@OrIfPlain 2s	} # gap between leaders
+   # @ContentsRightWidth	{ 3f	@OrIfPlain 6s	} # page numbers column width
+   # @MakeReferences	{ Yes			} # make references? Yes or No
+   # @RefCiteStyle	{ [cite]		} # citation style
+   # @RefCiteLabels	{ @RefNum		} # citation items
+   # @RefNumbers		{ Arabic		} # reference numbers
+   # @RefListFormat	{ Labels		} # NoLabels, Labels, etc.
+   # @RefListLabels	{ [@RefNum]		} # ref list label format
+   # @RefListTitle	{ references		} # title of reference list
+   # @ChapRefListTitle	{ references		} # title of chapter ref list
+   # @RefListIndent	{ 0s			} # indent to left of labels
+   # @RefListRightIndent	{ 0s			} # indent to right of items
+   # @RefListGap		{ @ListGap		} # gap between ref list items
+   # @RefListFont	{        		} # font used in reference list
+   # @RefListBreak	{        		} # break style of ref list
+   # @RefListLabelWidth 	{ @ListLabelWidth	} # Labels column width
+   # @RefListSortKey	{ @Tag			} # sorting key
+   # @MakeIndex		{ No			} # make index? Yes or No
+   # @IndexFont		{			} # index entries font
+   # @IndexBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexColumnNumber	{ 2			} # index columns (1 to 10)
+   # @IndexColumnGap	{ 1.00c	@OrIfPlain 6s	} # index column gap
+   # @IndexCtd		{ Yes			} # include (ctd.) lines
+   # @IndexCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexA		{ No 			} # make index A? Yes or No
+   # @IndexAFont		{			} # index A entries font
+   # @IndexABreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexAColumnNumber	{ 2			} # index A columns (1 to 10)
+   # @IndexAColumnGap	{ 1.00c	@OrIfPlain 6s	} # index A column gap
+   # @IndexACtd		{ Yes			} # include (ctd.) lines
+   # @IndexACtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexACtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @MakeIndexB		{ No 			} # make index B? Yes or No
+   # @IndexBFont		{			} # index B entries font
+   # @IndexBBreak	{ {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break
+   # @IndexBColumnNumber	{ 2			} # index B columns (1 to 10)
+   # @IndexBColumnGap	{ 1.00c	@OrIfPlain 6s	} # index B column gap
+   # @IndexBCtd		{ Yes			} # include (ctd.) lines
+   # @IndexBCtdWord	{ continued		} # "ctd." in current lang.
+   # @IndexBCtdFormat	{ @Body @I (@CtdWord)	} # format of ctd.
+   # @TopGap		{ 0.75c	@OrIfPlain 2f	} # gap between figures
+   # @MidGap		{ 0.75c	@OrIfPlain 2f	} # gap above/below body text
+   # @FootNoteNumbers	{ Arabic		} # footnote numbers
+   # @FootNoteThrough	{ No			} # numbered through chapter?
+   # @FootNoteLocation	{ ColFoot		} # where the footnote appears
+   # @FootNoteFont	{ 0.80f			} # font for footnotes
+   # @FootNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for footnotes
+   # @FootNoteFormat     { { number &0.05f } @Insert body } # footnote format
+   # @FootLen		{ 2.00c	@OrIfPlain 10s	} # length of footnote line
+   # @FootAboveGap	{ @DisplayGap		} # gap above footnote line
+   # @FootGap		{ 0.20c	@OrIfPlain 1fx	} # gap between footnotes
+   # @MarginNoteFont	{ 0.80f			} # font of margin notes
+   # @MarginNoteBreak	{ ragged 1.10fx		} # break style of margin notes
+   # @MarginNoteHGap	{ 0.5c   		} # horizontal gap to notes
+   # @MarginNoteVGap	{ @DisplayGap		} # min vertical gap between
+   # @MarginNoteWidth	{ 1.50c  		} # width of margin notes
+   # @EndNoteNumbers	{ Arabic		} # endnote numbers
+   # @EndNoteFont	{ 0.80f			} # font of endnotes
+   # @EndNoteBreak	{ 1.2fx	@OrIfPlain 1fx	} # break for endnotes
+   # @EndNoteFormat	{ { number &0.05f } @Insert body } # endnote format
+   # @EndNoteGap		{ 0.20c	@OrIfPlain 1f	} # gap between endnotes
+   # @TheoremWord	{ theorem		} # "Theorem" word, etc.
+   # @TheoremTitleFormat	{ (title)		} # only if title present
+   # @TheoremFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @DefinitionWord	{ definition		} # "Definition" word, etc.
+   # @DefinitionTitleFormat { (title)		} # only if title present
+   # @DefinitionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ClaimWord		{ claim			} # "Claim" word, etc.
+   # @ClaimTitleFormat	{ (title)		} # only if title present
+   # @ClaimFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @PropositionWord	{ proposition		} # "Proposition" word, etc.
+   # @PropositionTitleFormat { (title)		} # only if title present
+   # @PropositionFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @LemmaWord		{ lemma			} # "Lemma" word, etc.
+   # @LemmaTitleFormat	{ (title)		} # only if title present
+   # @LemmaFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @CorollaryWord	{ corollary		} # "Corollary" word, etc.
+   # @CorollaryTitleFormat { (title)		} # only if title present
+   # @CorollaryFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ExampleWord	{ example		} # "Example" word, etc.
+   # @ExampleTitleFormat	{ (title)		} # only if title present
+   # @ExampleFormat	{ {@B { word @NumSep number title: } &2s} @Insert body }
+   # @ProofWord		{ proof			} # "Proof" word, etc.
+   # @PageHeaders	{ Simple		} # None Simple Titles NoTitles
+     @PageHeaders	{ Titles		} # None Simple Titles NoTitles
+   # @PageNumbers	{ Arabic		} # page numbers
+   # @FirstPageNumber	{ 1			} # number of first page 
+   # @IntroPageNumbers	{ Roman			} # intro page numbers
+   # @IntroFirstPageNumber{ 1			} # number of first intro page 
+   # @StructPageNums	{ No			} # make structured page numbers
+ 
+   # @OddTop		{ @Centre{- @PageNum -}	} # Simple page headers
+   # @OddFoot		{ @Null			}
+   # @EvenTop		{ @Centre{- @PageNum -}	}
+   # @EvenFoot		{ @Null			}
+   # @StartOddTop	{ @Null			}
+   # @StartOddFoot	{ @Null			}
+   # @StartEvenTop	{ @Null			}
+   # @StartEvenFoot	{ @Null			}
+   # @IntroOddTop	{ @Null			}
+   # @IntroOddFoot	{ @Centre @PageNum	}
+   # @IntroEvenTop	{ @Null			}
+   # @IntroEvenFoot	{ @Centre @PageNum	}
+   # @IntroStartOddTop	{ @Null			}
+   # @IntroStartOddFoot	{ @Null			}
+   # @IntroStartEvenTop	{ @Null			}
+   # @IntroStartEvenFoot	{ @Null			}
+ 
+ 						  # Titles, NoTitles headers
+   # @RunningOddTop  { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum }
+     @RunningOddTop  { 8p @Font {@MajorTitle @MinorNum @Right @PageNum} }
+   # @RunningOddFoot		{ @Null					}
+     @RunningOddFoot		{ @Null					}
+   # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} }
+     @RunningEvenTop { 8p @Font {@MajorTitle @MinorNum @Right @PageNum} }
+   # @RunningEvenFoot		{ @Null					}
+     @RunningEvenFoot		{ @Null					}
+   # @RunningStartOddTop 	{ @Null					}
+     @RunningStartOddTop 	{ 8p @Font { @MajorTitle @MinorNum @Right @PageNum } }
+   # @RunningStartOddFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+     @RunningStartOddFoot	{ @Null					}
+   # @RunningStartEvenTop	{ @Null					}
+     @RunningStartEvenTop	{ 8p @Font { @MajorTitle @MinorNum @Right @PageNum } }
+   # @RunningStartEvenFoot	{ @Centre { Bold 0.8f } @Font @PageNum	}
+     @RunningStartEvenFoot	{ @Null					}
+   # @RunningIntroOddTop		{ @Null					}
+   # @RunningIntroOddFoot	{ @Right @PageNum			}
+   # @RunningIntroEvenTop	{ @Null					}
+   # @RunningIntroEvenFoot	{ @PageNum				}
+   # @RunningIntroStartOddTop	{ @Null					}
+   # @RunningIntroStartOddFoot	{ @Null					}
+   # @RunningIntroStartEvenTop	{ @Null					}
+   # @RunningIntroStartEvenFoot	{ @Null					}
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @OverheadSetup @Use clause - options specific to overheads.            #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @OverheadSetup
+   # @DateLine			{ No		} # No, Yes, or a date
+   # @ContentsWord		{ contents	} # word for "Contents"
+   # @LectureWord		{ lecture       } # word for "Lecture"
+   # @OverheadWord               {               } # word for "Overhead"
+   # @LectureNumbers		{ Arabic	} # kind of lecture numbers
+   # @FirstLectureNumber		{ 1		} # first lecture num
+   # @OverheadNumbers		{ Arabic	} # kind of overhead numbers
+   # @FirstOverheadNumber	{ 1		} # first overhead num
+   # @TitlePageFont		{ Helvetica Base 1.5f 	} # title page font
+   # @LectureHeadingFont		{ Bold 1.20f		} # lecture head font
+   # @LectureHeadingBreak	{ clines 1.2fx nohyphen	} # lecture head break
+   # @LectureHeadingFormat	{ @Centre number @DP @Centre title @DP }
+   # @AboveLectureGap		{ 3.0f			} # gap above lec head
+   # @OverheadHeadingFont	{ Bold			} # overhead head font
+   # @OverheadHeadingBreak	{ 1.2fx nohyphen	} # overhead head break
+   # @OverheadHeadingFormat	{ @Centre title @DP	} # overhead head format
+   # @OverheadFormat		{ @Body			} # overhead body format
+   # @AboveOverheadGap		{ 1.0f			} # gap above over head
+   # @LectureInContents		{ Yes		} # add lectures to contents
+   # @OverheadInContents		{ No		} # add overheads to contents
+   # @ReferencesInContents	{ Yes		} # add references to contents
+   # @LectureNumInTheorems	{ Yes		} # theorem num has lecture num
+   # @OverheadNumInTheorems	{ No		} # theorem num has overhead num
+   # @LectureNumInDisplays	{ Yes		} # display num has lecture num
+   # @OverheadNumInDisplays	{ No		} # display num has overhead num
+   # @LectureNumInFigures	{ Yes		} # figure num has lecture num
+   # @OverheadNumInFigures	{ No		} # figure num has overhead num
+   # @LectureNumInTables		{ Yes		} # table num has lecture num
+   # @OverheadNumInTables	{ No		} # table num has overhead num
+   # @LectureNumInRunners	{ Yes		} # running head has lecture num
+   # @OverheadNumInRunners	{ Yes		} # running head has overhd num
+   # @LecturePrefix		{		} # for structured page nums
+   # @OverheadPrefix		{		} # for structured page nums
+ }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  @Database (and @SysDatabase) clauses go here.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysDatabase @FontDef  { fontdefs }		  # font definitions
+ @SysDatabase @RefStyle { refstyle }		  # reference printing styles


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/slidesf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/slidesf:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/slidesf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,371 ----
+ 
+ ###########################################################################
+ #                                                                         #
+ #  @OverheadSetup extension to @DocumentSetup.                            #
+ #                                                                         #
+ #  Jeffrey H. Kingston                                                    #
+ #  August 1994                                                            #
+ #                                                                         #
+ #  This package extends DocumentSetup with definitions for overheads.     #
+ #                                                                         #
+ ###########################################################################
+ 
+ extend @BasicSetup @DocumentSetup
+ export @OverheadTransparencies @Lecture @Overhead
+ def @OverheadSetup
+     named @DateLine			{ No			}
+     named @ContentsWord			{ contents		}
+     named @LectureWord			{ lecture		}
+     named @OverheadWord			{ 			}
+     named @LectureNumbers		{ Arabic		}
+     named @FirstLectureNumber		{ 1			}
+     named @OverheadNumbers		{ Arabic		}
+     named @FirstOverheadNumber		{ 1			}
+     named @TitlePageFont		{ Helvetica Base      	}
+     named @LectureHeadingFont		{ Bold 1.20f		}
+     named @LectureHeadingBreak		{ 1.2fx nohyphen	}
+     named @LectureHeadingFormat
+ 	    left number right title	{ @Centre number @DP @Centre title @DP }
+     named @AboveLectureGap              { 3.0f                  }
+     named @OverheadHeadingFont		{ Bold			}
+     named @OverheadHeadingBreak		{ 1.2fx nohyphen	}
+     named @OverheadHeadingFormat
+ 	    left number right title	{ @Centre title @DP }
+     named @OverheadFormat
+ 	named @II right x { |@DisplayIndent x |               }
+ 	named @QQ right x { |@DisplayIndent x |@DisplayIndent }
+ 	named @CC right x { |0.5rt x          |               }
+ 	named @RR right x { |1.0rt x          |               }
+ 	right @Body
+ 					{ @Body }
+     named @AboveOverheadGap             { 1.0f                  }
+     named @LectureInContents		{ Yes			}
+     named @OverheadInContents		{ No			}
+     named @ReferencesInContents		{ Yes			}
+     named @LectureNumInTheorems		{ Yes			}
+     named @OverheadNumInTheorems	{ No			}
+     named @LectureNumInDisplays		{ Yes			}
+     named @OverheadNumInDisplays	{ No			}
+     named @LectureNumInFigures		{ Yes			}
+     named @OverheadNumInFigures		{ No			}
+     named @LectureNumInTables		{ Yes			}
+     named @OverheadNumInTables		{ No			}
+     named @LectureNumInRunners		{ Yes			}
+     named @OverheadNumInRunners		{ Yes			}
+     named @LecturePrefix		{			}
+     named @OverheadPrefix		{			}
+ @Begin
+ 
+     #######################################################################
+     #                                                                     #
+     #  Symbols for passing full title to running headers.                 #
+     #                                                                     #
+     #######################################################################
+ 
+     export @Val
+     def @StoreTitle left @Tag named @Val {} { @Null }
+ 
+     def @SaveTitle right x { save @StoreTitle @Val { x } }
+ 
+     def @GetTitle { @StoreTitle&&save @Open { @Val } }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Lists of lectures and overheads.                                   #
+     #                                                                     #
+     #######################################################################
+ 
+     export num
+     def @LectureList named @Tag {} right num
+     {
+ 		@Galley
+         //1.1b  @LectureList @Next num
+     }
+ 
+     export num
+     def @OverheadsList named @Tag {} right num
+     {
+ 		@Galley
+         //1.1b	@OverheadsList @Next num
+     }
+ 
+     export num
+     def @LecOverheadsList named @Tag {} right num
+     {
+ 		@Galley
+         //1.1b	@LecOverheadsList @Next num
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @Full - this sends text to a full-width place.                     #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Full force into { @FullPlace&&following } right x { x }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  @OverheadTransparencies.                                           #
+     #                                                                     #
+     #######################################################################
+ 
+     def @OverheadTransparencies
+         named @Title {}
+         named @RunningTitle { dft }
+         named @Author {}
+         named @Institution {}
+         named @DateLine { @DateLine }
+         named @InitialFont { @InitialFont }
+         named @InitialBreak { @InitialBreak }
+         named @InitialSpace { @InitialSpace }
+         named @InitialLanguage { @InitialLanguage }
+ 	named @PageOrientation { @PageOrientation }
+         named @PageHeaders { @PageHeaders }
+         named @FirstPageNumber { @FirstPageNumber }
+         named @FirstOverheadNumber { @FirstOverheadNumber }
+         named @FirstLectureNumber { @FirstLectureNumber }
+ 	named @OptimizePages { @OptimizePages }
+     {
+ 
+ 	def @DatePart
+ 	{
+ 	    @DateLine @Case {
+ 		No	@Yield { @Null		    }
+ 		Yes	@Yield { |0.5rt @Date     | }
+ 		else	@Yield { |0.5rt @DateLine | }
+ 	    }
+ 	}
+ 
+ 	def @TitlePart
+ 	{
+ 	    @TitlePageFont @Font @InitialBreak @Break
+ 	    @InitialSpace @Space clines @Break {
+ 		//0.5i	|0.5rt 1.5f @Font @InitialBreak @Break
+ 			       @InitialSpace @Space clines @Break @Title |
+ 		//1i    |0.5rt clines @Break @Author |
+ 		//0.5i  |0.5rt clines @Break @I @Institution |
+ 		//0.5i  @DatePart
+ 	    }
+ 	}
+ 
+ 	def @ContentsPart
+ 	{
+ 	    @DP	|0.5rt @LectureHeadingFont @Font @LectureHeadingBreak @Break
+ 		       @LectureHeadingFormat { contents @WordVal @ContentsWord } |
+ 	    @DP	@ContentsSection
+ 	}
+ 
+ 	def @ReferencesPart
+ 	    named @Tag {}
+ 	{
+ 	    @DP	|0.5rt @LectureHeadingFont @Font @LectureHeadingBreak @Break
+ 		       @LectureHeadingFormat { @RefHeading @RefListTitle } |
+ 	    //  @PageMark @Tag
+ 	    //  @ReferencesInContents @ContentsEntry
+ 		    title { @RefHeading @RefListTitle }
+ 		    pagenum { @PageOf @Tag }
+ 	    //  Start @Runner @MajorTitle { @GetTitle }
+             @DP @ReferencesSection
+ 	    //  NonStart @Runner @MajorTitle { @GetTitle }
+ 	}
+ 
+ 	def @OverheadsBody force into { @ColPlace&&preceding }
+ 	    named @Optimize { @OptimizePages }
+ 	{
+ 		    @Title @Case {
+ 			""	@Yield @Null
+ 			else	@Yield @TitlePart
+ 		    }
+ 	    //1.1b  @MakeContents @Case {
+ 			{ Yes Bypass }	@Yield @ContentsPart
+ 			else		@Yield @Null
+ 		    }
+ 	    //      Start @Runner @MajorTitle { @GetTitle }
+ 	    //1.1b  @OverheadsList @FirstOverheadNumber
+ 	    //1.1b  @LectureList @FirstLectureNumber
+ 	    //1.1b  @ReferencesPart
+ 	}
+ 
+         @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language
+ 	@InitialSpace @Space { @ColourCommand @InitialColour } @SetColour
+         {
+ 		@SaveTitle {
+ 		    @InitialLanguage @Language { @RunningTitle @Dft @Title }
+ 		}
+ 
+ 	    //  Yes @BeginAllCounters {}
+ 	    //  Yes @BeginDisplayCounter {}
+ 	    //  Yes @BeginFigureCounter {}
+ 	    //  Yes @BeginFigureCounter {}
+             //	@PageList
+ 		    @ColumnNumber { 1 }
+ 		    @PageHeaders { @PageHeaders }
+ 		    @Orient { @PageOrientation }
+ 		    extra { Yes }
+ 		    @FirstPageNumber
+             //	@OverheadsBody
+             //	Start @Runner
+         }
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Overheads.                                                         #
+     #                                                                     #
+     #######################################################################
+ 
+     def @Overhead force into { @OverheadsList&&preceding }
+ 	named @Tag {}
+ 	named @Title {}
+ 	named @RunningTitle { dft }
+ 	named @Format
+             named @II right x { |@DisplayIndent x |               }
+             named @QQ right x { |@DisplayIndent x |@DisplayIndent }
+             named @CC right x { |0.5rt x          |               }
+             named @RR right x { |1.0rt x          |               }
+                 right @Body { @OverheadFormat @Body }
+ 	named @InitialLanguage {}
+ 	named @BypassNumber { dft }
+ 	body @Body
+     {
+ 
+ 	@LargeScaleStructure
+ 	    tag { @Tag }
+ 	    type { Major }
+ 	    initiallanguage { @InitialLanguage }
+ 	    title { @Title }
+ 	    majortitle { @GetTitle }
+ 	    runningtitle { @RunningTitle }
+ 	    aboveheadinggap { @AboveOverheadGap }
+ 	    headingfont { @OverheadHeadingFont }
+ 	    headingbreak { @OverheadHeadingBreak }
+ 	    headingformat { @Num @OverheadHeadingFormat @Body }
+ 	    incontents { @OverheadInContents }
+ 	    contentsindent { 0f }
+ 	    numbers { @OverheadNumbers }
+ 	    attachnum { @OverheadsList&&preceding @Tagged @Tag }
+ 	    retrievenum { @OverheadsList&&@Tag @Open { num } }
+ 	    bypassnumber { @BypassNumber }
+ 	    pnprefix { @OverheadPrefix }
+ 	    intheorems { @OverheadNumInTheorems }
+             indisplays { @OverheadNumInDisplays }
+             infigures { @OverheadNumInFigures }
+             intables { @OverheadNumInTables }
+ 	    sendheader { @Full @Body }
+ 	    innergap { @DisplayGap }
+             inrunners { @OverheadNumInRunners }
+ 	    @Format @Body
+     }
+ 
+ 
+     #######################################################################
+     #                                                                     #
+     #  Lectures containing overheads.                                     #
+     #                                                                     #
+     #######################################################################
+ 
+     export @BeginOverheads @EndOverheads @Overhead
+     def @Lecture force into { @LectureList&&preceding }
+         named @Tag {}
+         named @Title {}
+         named @RunningTitle { dft }
+ 	named @InitialLanguage {}
+ 	named @BypassNumber { dft }
+         body @Body
+     {
+         def @EndOverheadsPlace { @Galley }
+ 
+         def @EndOverheads force into { @EndOverheadsPlace&&preceding }
+ 	{}
+ 
+         macro @BeginOverheads
+ 	{   //1.1b @LecOverheadsList 1
+ 	    // @EndOverheadsPlace //
+ 	}
+ 
+         def @LectureNum
+         {
+ 	    @LectureNumbers @Then {
+ 		@BypassNumber @Dft {
+ 		    @LectureNumbers @Num @LectureList&&@Tag @Open { num }
+ 		}
+ 	    }
+         }
+ 
+         def @Overhead force into { @LecOverheadsList&&preceding }
+             named @Tag {}
+             named @Title {}
+             named @RunningTitle { dft }
+ 	    named @Format
+                 named @II right x { |@DisplayIndent x |               }
+                 named @QQ right x { |@DisplayIndent x |@DisplayIndent }
+                 named @CC right x { |0.5rt x          |               }
+                 named @RR right x { |1.0rt x          |               }
+ 		    right @Body { @OverheadFormat @Body }
+ 	    named @InitialLanguage { @InitialLanguage }
+ 	    named @BypassNumber { dft }
+             body @Body
+         {
+ 
+ 	    @LargeScaleStructure
+ 		tag { @Tag }
+ 		type { Minor }
+ 		initiallanguage { @InitialLanguage }
+ 		title { @Title }
+ 		runningtitle { @RunningTitle }
+ 		headingfont { @OverheadHeadingFont }
+ 		headingbreak { @OverheadHeadingBreak }
+ 		headingformat { @Num @OverheadHeadingFormat @Body }
+ 		incontents { @OverheadInContents }
+ 		contentsindent { 2f }
+ 		numbers { @OverheadNumbers }
+ 		attachnum { @LecOverheadsList&&preceding @Tagged @Tag }
+ 		retrievenum { @LecOverheadsList&&@Tag @Open { num } }
+ 		bypassnumber { @BypassNumber }
+ 		prefix { @LectureNum }
+ 		majornum { @LectureNum }
+ 		majortitle { @GetTitle }
+ 		intheorems { @OverheadNumInTheorems }
+ 		indisplays { OverheadNumInDisplays }
+ 		infigures { @OverheadNumInFigures }
+ 		inrunners { @OverheadNumInRunners }
+ 		@Format @Body
+ 
+         }
+ 
+ 	@LargeScaleStructure
+ 	    tag { @Tag }
+ 	    type { Major }
+ 	    initiallanguage { @InitialLanguage }
+ 	    title { @Title }
+ 	    runningtitle { @RunningTitle }
+ 	    aboveheadinggap { @AboveLectureGap }
+ 	    headingfont { @LectureHeadingFont }
+ 	    headingbreak { @LectureHeadingBreak }
+ 	    headingformat { @Num @LectureHeadingFormat @Body }
+ 	    incontents { @LectureInContents }
+ 	    contentsindent { 0f }
+ 	    word { lecture @WordVal @LectureWord }
+ 	    numbers {  @LectureNumbers }
+ 	    attachnum { @LectureList&&preceding @Tagged @Tag }
+ 	    retrievenum { @LectureList&&@Tag @Open { num } }
+ 	    bypassnumber { @BypassNumber }
+ 	    pnprefix { @LecturePrefix }
+ 	    majortitle { @GetTitle }
+ 	    intheorems { @LectureNumInTheorems }
+ 	    indisplays { @LectureNumInDisplays }
+ 	    infigures { @LectureNumInFigures }
+ 	    intables { @LectureNumInTables }
+ 	    sendheader { @Full @Body }
+ 	    innergap { @DisplayGap }
+ 	    inrunners { @LectureNumInRunners }
+ 	    @Body
+ 	    
+     }
+ 
+ @End @OverheadSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tab
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tab:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tab	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,29 ----
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for table printing                                        #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ #   This package is OBSOLETE; use tbl instead.                                #
+ #                                                                             #
+ ###############################################################################
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @SysInclude { tabf } line                                              #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for tables, and should       #
+ #  not be touched.                                                            #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { tabf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  This package does not offer default options that can be changed.           #
+ #                                                                             #
+ ###############################################################################


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tabf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tabf:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tabf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,936 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @Tab package for formatting tables (Version 2.0)                      #
+ #                                                                             #
+ #  Version 1.0 by Jeffrey H. Kingston, September 1991.                        #
+ #  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
+ #  Version 3.0 by Jeffrey H. Kingston, 13 September 1993.                     #
+ #                                                                             #
+ #  The only change between Versions 2 and 3 is to make the linewidth          #
+ #  option accept a Lout length rather than a Fig length.  See the User's      #
+ #  Guide for user information.                                                #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysPrependGraphic { "tabf.lpg" }
+ 
+ export	@CC @RR @Rule @DoubleRule @Line @DoubleLine @NP
+ 	@Rowa @Rowb @Rowc @Rowd @Rowe @Rowf @Rowg @Rowh @Rowi @Rowj
+ 	@MarkRowa @MarkRowb @MarkRowc @MarkRowd @MarkRowe @MarkRowf 
+ 	@MarkRowg @MarkRowh @MarkRowi @MarkRowj 
+ 	@FirstRowa @FirstRowb @FirstRowc @FirstRowd @FirstRowe @FirstRowf 
+ 	@FirstRowg @FirstRowh @FirstRowi @FirstRowj 
+ 
+ def @Tab                 
+ 
+     named above     { no      }
+     named below     { no      }
+     named between   { no      }
+     named side      { no      }
+     named hmargin   { 0.3c    }
+     named vmargin	{
+     	@BackEnd @Case {
+     		PostScript @Yield 0.2v
+     		PDF @Yield 0.2v		# VT: PDF case added
+     		PlainText @Yield 0.5v
+     	}
+     }
+ 
+     named linewidth
+ 		named c left x {
+ 		    @BackEnd @Case {
+ 		    	PostScript @Yield { x" cm" }
+ 		    	PDF        @Yield { "__mul(__cm, "x")" }
+ 		    }
+ 		}
+ 		named i left x {
+ 		    @BackEnd @Case {
+ 		    	PostScript @Yield { x" in" }
+ 		    	PDF        @Yield { "__mul(__in, "x")" }
+ 		    }
+ 		}
+ 		named e left x {
+ 		    @BackEnd @Case {
+ 		    	PostScript @Yield { x" em" }
+ 		    	PDF        @Yield { "__mul(__em, "x")" }
+ 		    }
+ 		}
+ 		named p left x {
+ 		    @BackEnd @Case {
+ 		    	PostScript @Yield { x" pt" }
+ 		    	PDF        @Yield { "__mul(__pt, "x")" }
+ 		    }
+ 		}
+ 		named f left x {
+ 		    @BackEnd @Case {
+ 		    	PostScript @Yield { x" ft" }
+ 		    	PDF        @Yield { "__mul(__loutf, "x")" }
+ 		    }
+ 		}
+ 		named s left x {
+ 		    @BackEnd @Case {
+ 		    	PostScript @Yield { x" sp" }
+ 		    	PDF        @Yield { "__mul(__louts, "x")" }
+ 		    }
+ 		}
+ 		named v left x {
+ 		    @BackEnd @Case {
+ 		    	PostScript @Yield { x" vs" }
+ 		    	PDF        @Yield { "__mul(__loutv, "x")" }
+ 		    }
+ 		}
+ 		    { 0.5p    }
+ 
+     named @Fmta
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     named @Fmtb
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     named @Fmtc
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     named @Fmtd
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     named @Fmte
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     named @Fmtf
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     named @Fmtg
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     named @Fmth
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     named @Fmti
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     named @Fmtj
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named "!"     precedence 10 left x named between { dft } right y {}
+ 	named "!!"    precedence 10 left x right y {}
+ 	named "!!!"   precedence 10 left x right y {}
+ 	named "@Over" precedence 11 left x right y { x // y }
+ 	named ","     precedence 12 left x right y {}
+ 	named @Col    precedence 12        right x {}
+ 	named @CC     right x { clines @Break { & x & } }
+ 	named @RR     right x { rlines @Break { & x & } }
+     {}
+ 
+     body @Body
+ 
+ @Begin
+ 
+     macro @NP { /1.1b }
+ 
+     def @CC right x { clines @Break { & x & } }
+     def @RR right x { rlines @Break { & x & } }
+ #
+ #	VT: these definitions have been modified for PDF support
+ #
+     def @HSingle	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabhs   }
+ 	  PDF        @Yield { "0 0 m __xsize 0 l" linewidth "w 0 J S" }
+     	}
+     }
+ 
+     def @HSingleProject	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabhsp  }
+ 	  PDF        @Yield { "0 0 m __xsize 0 l" linewidth "w 2 J S" }
+     	}
+     }
+ 
+     def @HDouble	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabhd   }
+ 	  PDF        @Yield {		#   dup dup
+ 	  	"0 0 m __xsize 0 l"	#   0 0 moveto xsize 0 lineto
+ 	  	"0 __mul(3, " linewidth ") m __xsize __mul(3, " linewidth ") l"	#  0 exch 3 mul moveto xsize exch 3 mul lineto
+ 	  	linewidth "w 0 J S"	#   setlinewidth 0 setlinecap stroke
+ 	  }
+     	}
+     }
+ 
+     def @HDoubleBelow	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabhdb  }
+ 	  PDF        @Yield {		#   dup dup
+ 		"0 0 m __xsize 0 l"	#   0 0 moveto xsize 0 lineto
+ 		"0 __mul(-3, "linewidth") m __xsize __mul(-3, "linewidth") l"	#  0 exch -3 mul moveto xsize exch -3 mul lineto
+ 		linewidth "w 0 J S"	#   setlinewidth 0 setlinecap stroke
+ 	  }
+     	}
+     }
+ 
+     def @HDoubleNW	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabhdnw  }
+ 	  PDF        @Yield {		#   dup dup dup dup
+ 		"0 0 m __xsize 0 l"	#   0 0 moveto xsize 0 lineto
+ 		"__xsize __mul(3, "linewidth") m"	#	xsize exch 3 mul moveto
+ 		"__mul(-3, "linewidth") __mul(3, "linewidth") l"	#	-3 mul exch 3 mul lineto
+ 		"__mul(-3, "linewidth") 0 l"	#	-3 mul 0 lineto
+ 		linewidth "w 0 j 2 J S"	#   setlinewidth 0 setlinejoin 2 setlinecap stroke
+ 	  }
+     	}
+     }
+ 
+     def @HDoubleNE	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabhdne  }
+ 	  PDF        @Yield {		#   dup dup dup dup
+ 		"0 0 m __xsize 0 l"	#   0 0 moveto xsize 0 lineto
+ 		"0 __mul(3, "linewidth") m"	#	0 exch 3 mul moveto
+ 		"__add(__xsize, __mul(3, "linewidth")) __mul(3, "linewidth") l"	#	3 mul xsize add exch 3 mul lineto
+ 		"__add(__xsize, __mul(3, "linewidth")) 0 l"	#	3 mul xsize add 0 lineto
+ 		linewidth "w 0 j 2 J S"	#   setlinewidth 0 setlinejoin 2 setlinecap stroke
+ 	  }
+     	}
+     }
+ 
+     def @HDoubleSW	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabhdsw  }
+ 	  PDF        @Yield {		#   dup dup dup dup
+ 		"0 0 m __xsize 0 l"	#	0 0 moveto xsize 0 lineto
+ 		"__xsize __mul(-3, "linewidth") m"	#	xsize exch -3 mul moveto
+ 		"__mul(-3, "linewidth") __mul(-3, "linewidth") l"	#	-3 mul exch -3 mul lineto
+ 		"__mul(-3, "linewidth") 0 l"	#	-3 mul 0 lineto
+ 		linewidth "w 0 j 2 J S"	#   setlinewidth 0 setlinejoin 2 setlinecap stroke
+ 	  }
+     	}
+     }
+ 
+     def @HDoubleSE	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabhdse  }
+ 	  PDF        @Yield {		#   dup dup dup dup
+ 		"0 0 m __xsize 0 l"	#	0 0 moveto xsize 0 lineto
+ 		"0 __mul(-3, "linewidth") m"	#	0 exch -3 mul moveto
+ 		"__add(__xsize, __mul(-3, "linewidth")) __mul(-3, "linewidth") l"	#	3 mul xsize add exch -3 mul lineto
+ 		"__add(__xsize, __mul( 3, "linewidth")) 0 l"	#	3 mul xsize add 0 lineto
+ 		linewidth "w 0 j 2 J S"	#   setlinewidth 0 setlinejoin 2 setlinecap stroke
+ 	  }
+     	}
+     }
+ 
+     def @VSingle	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabvs  }
+ 	  PDF        @Yield {
+ 		"0 0 m 0 __ysize l"	#	0 0 moveto 0 ysize lineto
+ 		linewidth "w 0 J S"	#	setlinewidth 0 setlinecap stroke
+ 	  }
+     	}
+     }
+ 
+     def @VDouble	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabvd  }
+ 	  PDF        @Yield {	#	dup dup
+ 		"0 0 m 0 __ysize l"	#	0 0 moveto 0 ysize lineto
+ 		"__mul(-3, "linewidth") 0 m __mul(-3, "linewidth") __ysize l"	#	-3 mul 0 moveto -3 mul ysize lineto
+ 		linewidth "w 0 J S"	#	setlinewidth 0 setlinecap stroke
+ 	  }
+     	}
+     }
+ 
+     def @VDoubleRight	{
+ 	@BackEnd @Case {
+ 	  PostScript @Yield { linewidth ltabvdr  }
+ 	  PDF        @Yield {	#	dup dup
+ 		"0 0 m 0 __ysize l"	#	0 0 moveto 0 ysize lineto
+ 		"__mul(3, "linewidth") 0 m __mul(3, "linewidth") __ysize l"		#	3 mul 0 moveto 3 mul ysize lineto
+ 		linewidth "w 0 J S"	#	setlinewidth 0 setlinecap stroke
+ 	  }
+     	}
+     }
+ 
+     def @MidHRule
+ 	left rule
+ 	right x
+     {
+ 	rule @Case
+ 	{
+ 	    no				@Yield { @OneCol x }
+ 	    { yes single }		@Yield { @HSingle @Graphic x }
+ 	    { double doubleboxabove }	@Yield { @HDouble @Graphic x }
+ 	    doubleboxbelow		@Yield { @HDoubleBelow @Graphic x }
+ 	}
+     }
+ 
+     def @LeftHRule
+ 	left rule
+ 	right x
+     {
+ 	rule @Case
+ 	{
+ 	    no			@Yield { @OneCol x }
+ 	    { yes single }	@Yield { @HSingleProject @Graphic x }
+ 	    double		@Yield { @HDouble @Graphic x }
+ 	    doubleboxabove	@Yield { @HDoubleNW @Graphic x }
+ 	    doubleboxbelow	@Yield { @HDoubleSW @Graphic x }
+ 	}
+     }
+ 
+     def @RightHRule
+ 	left rule
+ 	right x
+     {
+ 	rule @Case
+ 	{
+ 	    no			@Yield { @OneCol x }
+ 	    { yes single }	@Yield { @HSingleProject @Graphic x }
+ 	    double		@Yield { @HDouble @Graphic x }
+ 	    doubleboxabove	@Yield { @HDoubleNE @Graphic x }
+ 	    doubleboxbelow	@Yield { @HDoubleSE @Graphic x }
+ 	}
+     }
+ 
+     def @HSRule
+ 	left rule
+     {
+ 	rule @Case
+ 	{
+ 	    no		   @Yield {}
+ 	    { yes single } @Yield { @HSingle @Graphic {} }
+ 	    double	   @Yield { @HDouble @Graphic {} }
+ 	    doubleboxabove @Yield { @HDouble @Graphic {} }
+ 	    doubleboxbelow @Yield { @HDoubleBelow @Graphic {} }
+ 	}
+     }
+ 
+     def @ZeroWidth
+ 	right x
+     { @OneCol { |0io x |0io }
+     }
+ 
+     def @Line
+     { single @HSRule
+     }
+ 
+     def @DoubleLine
+     { double @HSRule
+     }
+ 
+     def @Rule
+     {
+ 	@OneRow
+ 	{
+ 	    @ZeroWidth @HSingle @Graphic { ^|hmargin }
+ 	    / @Line /
+ 	    &1rt @ZeroWidth @HSingle @Graphic { |hmargin }
+ 	}
+     }
+ 
+     def @DoubleRule
+     {
+ 	@OneRow
+ 	{
+ 	    @ZeroWidth @HDouble @Graphic { ^|hmargin }
+ 	    / @DoubleLine /
+ 	    &1rt @ZeroWidth @HDouble @Graphic { |hmargin }
+ 	}
+     }
+ 
+     def @VRule
+ 	left rule
+ 	right x
+     {
+ 	rule @Case
+ 	{
+ 	    no		   @Yield {}
+ 	    { yes single } @Yield @OneRow { /0io @VSingle @Graphic x /0io }
+ 	    double	   @Yield @OneRow { /0io @VDouble @Graphic x /0io }
+ 	}
+     }
+ 
+     def @VRuleRight
+ 	left rule
+ 	right x
+     {
+ 	rule @Case
+ 	{
+ 	    no		 @Yield {}
+ 	    {yes single} @Yield @OneRow { /0io @VSingle @Graphic x /0io }
+ 	    double	 @Yield @OneRow { /0io @VDoubleRight @Graphic x /0io }
+ 	}
+     }
+ 
+     def @VSRule
+ 	left rule
+     {
+ 	rule @Case
+ 	{
+ 	    no		   @Yield {}
+ 	    { yes single } @Yield { @VSingle @Graphic {} }
+ 	    double	   @Yield { @VDouble @Graphic {} }
+ 	}
+     }
+ 
+     def @VSRuleRight
+ 	left rule
+     {
+ 	rule @Case
+ 	{
+ 	    no		 @Yield {}
+ 	    {yes single} @Yield { @VSingle @Graphic {} }
+ 	    double	 @Yield { @VDoubleRight @Graphic {} }
+ 	}
+     }
+ 
+     def @Wrap
+ 	named ur { no }			# Rule up above entry
+ 	named dr { no }			# Rule down below entry
+ 	named vm { vmargin }		# Vertical margin
+ 	right x				# The object to be wrapped
+     {
+ 	      ur @HSRule
+ 	^/vm  @OneCol @OneRow x
+ 	 /vm  dr @HSRule
+     }
+ 
+     def @Sep
+ 	left x
+ 	named ur { no }			# Rule up above entry
+ 	named dr { no }			# Rule down below entry
+ 	named sr { no }			# Rule separating x from y
+ 	named hm { hmargin }		# Horizontal margin
+ 	named vm { vmargin }		# Vertical margin
+ 	right y
+     {
+ 	def vr
+ 	{
+ 	    sr @Case
+ 	    {	dft	@Yield between 
+ 		else	@Yield sr
+ 	    }
+ 	}
+ 
+ 	x | @OneCol
+ 	{      ur @MidHRule {|hm}
+ 	  /vm
+ 	  /vm  dr @MidHRule {|hm}
+ 	}
+ 	| @OneCol
+ 	{      vr @VRule { /vm }  |  ur @MidHRule {|hm}
+ 	  /vm  vr @VSRule         |
+ 	  /vm  vr @VRule {^/vm }  |  dr @MidHRule {|hm}
+ 	}
+ 	| y
+     }
+ 
+     def @NSep
+ 	left x
+ 	named hm { hmargin }
+ 	right y
+     {
+ 	x | @OneCol { |hm } | @OneCol { |hm } | y
+     }
+ 
+     def @LeftEdge
+ 	named ur { no }			# Rule up above entry
+ 	named dr { no }			# Rule down below entry
+ 	named sr { no }			# Rule separating x from y
+ 	named hm { hmargin }		# Horizontal margin
+ 	named vm { vmargin }		# Vertical margin
+ 	right x
+     {
+ 	sr @Case
+ 	{
+ 	    no @Yield { x }
+ 	    else @Yield
+ 	    { @OneCol
+ 	      {
+ 		      sr @VRule { /vm }	 |  ur @LeftHRule { |hm }
+ 	         ^/vm sr @VSRule	 |
+ 		  /vm sr @VRule { ^/vm } |  dr @LeftHRule { |hm }
+ 	      }
+ 	      | x
+ 	    }
+ 	}
+     }
+ 
+     def @RightEdge
+ 	left x
+ 	named ur { no }			# Rule up above entry
+ 	named dr { no }			# Rule down below entry
+ 	named sr { no }			# Rule separating x from y
+ 	named hm { hmargin }		# Horizontal margin
+ 	named vm { vmargin }		# Vertical margin
+     {
+ 	sr @Case
+ 	{
+ 	    no @Yield { x }
+ 	    else @Yield
+ 	    {
+ 	      x | @OneCol
+ 	      {
+ 		    ur @RightHRule { |hm }
+ 		/vm
+ 		/vm dr @RightHRule { |hm }
+ 	      }
+ 	      | @OneCol
+ 	      {
+ 		     sr @VRuleRight { /vm }
+ 		/vm  sr @VSRuleRight
+ 		/vm  sr @VRuleRight { ^/vm }
+ 	      }
+ 	    }
+ 	}
+     }
+ 
+     def @DoRowa
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmta
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     def @DoRowb
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmtb
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     def @DoRowc
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmtc
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     def @DoRowd
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmtd
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     def @DoRowe
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmte
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     def @DoRowf
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmtf
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     def @DoRowg
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmtg
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     def @DoRowh
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmth
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     def @DoRowi
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmti
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     def @DoRowj
+ 	named A {} named B {} named C {} named D {} named E {}
+ 	named F {} named G {} named H {} named I {} named J {}
+ 	named K {} named L {} named M {} named N {} named O {}
+ 	named P {} named Q {} named R {} named S {} named T {}
+ 	named U {} named V {} named W {} named X {} named Y {}
+ 	named Z {}
+ 	named above	{ above   }
+ 	named below	{ below   }
+ 	named side 	{ side    }
+ 	named vmargin   { vmargin }
+     {
+ 	@LeftEdge ur { above } dr { below } sr { side } vm { vmargin }
+ 	@Fmtj
+ 	  A { A }  B { B }  C { C }  D { D }  E { E }
+ 	  F { F }  G { G }  H { H }  I { I }  J { J }
+ 	  K { K }  L { L }  M { M }  N { N }  O { O }
+ 	  P { P }  Q { Q }  R { R }  S { S }  T { T }
+ 	  U { U }  V { V }  W { W }  X { X }  Y { Y }
+ 	  Z { Z }
+ 	  @Col { @Wrap ur {above} dr {below} vm {vmargin} x}
+ 	  !    { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y}
+ 	  !!   { x @Sep ur {above} dr {below} sr { single  } vm {vmargin} y}
+ 	  !!!  { x @Sep ur {above} dr {below} sr { double  } vm {vmargin} y}
+ 	  ,    { x @NSep y }
+ 	@RightEdge ur { above } dr { below } sr { side } vm { vmargin }
+     }
+ 
+     macro @Rowa { / @DoRowa }
+     macro @Rowb { / @DoRowb }
+     macro @Rowc { / @DoRowc }
+     macro @Rowd { / @DoRowd }
+     macro @Rowe { / @DoRowe }
+     macro @Rowf { / @DoRowf }
+     macro @Rowg { / @DoRowg }
+     macro @Rowh { / @DoRowh }
+     macro @Rowi { / @DoRowi }
+     macro @Rowj { / @DoRowj }
+ 
+     macro @FirstRowa { @DoRowa }
+     macro @FirstRowb { @DoRowb }
+     macro @FirstRowc { @DoRowc }
+     macro @FirstRowd { @DoRowd }
+     macro @FirstRowe { @DoRowe }
+     macro @FirstRowf { @DoRowf }
+     macro @FirstRowg { @DoRowg }
+     macro @FirstRowh { @DoRowh }
+     macro @FirstRowi { @DoRowi }
+     macro @FirstRowj { @DoRowj }
+ 
+     macro @MarkRowa { ^/ @DoRowa }
+     macro @MarkRowb { ^/ @DoRowb }
+     macro @MarkRowc { ^/ @DoRowc }
+     macro @MarkRowd { ^/ @DoRowd }
+     macro @MarkRowe { ^/ @DoRowe }
+     macro @MarkRowf { ^/ @DoRowf }
+     macro @MarkRowg { ^/ @DoRowg }
+     macro @MarkRowh { ^/ @DoRowh }
+     macro @MarkRowi { ^/ @DoRowi }
+     macro @MarkRowj { ^/ @DoRowj }
+ 
+ 
+     @Body
+ 
+ @End @Tab


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tabf.lpg
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tabf.lpg:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tabf.lpg	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,115 ----
+ %%BeginResource: procset LoutTabPrependGraphic
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %                                                  %
+ %  PostScript @SysPrependGraphic file for @Tab     %
+ %                                                  %
+ %  To assist in avoiding name clashes, the names   %
+ %  of all these symbols begin with "ltab".         %
+ %                                                  %
+ %  Jeffrey H. Kingston                             %
+ %  24 September 1991                               %
+ %  22 December 1992                                %
+ %                                                  %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 
+ % linewidth ltabhs -
+ % horizontal single line
+ /ltabhs
+ {  0 0 moveto xsize 0 lineto
+    setlinewidth 0 setlinecap stroke
+ } def
+ 
+ % linewidth ltabhsp -
+ % horizontal single line with projecting ends
+ /ltabhsp
+ {  0 0 moveto xsize 0 lineto
+    setlinewidth 2 setlinecap stroke
+ } def
+ 
+ % linewidth ltabhd -
+ % horizontal double line
+ /ltabhd
+ {  dup dup
+    0 0 moveto xsize 0 lineto
+    0 exch 3 mul moveto xsize exch 3 mul lineto
+    setlinewidth 0 setlinecap stroke
+ } def
+ 
+ % linewidth ltabhdb -
+ % horizontal double line below mark
+ /ltabhdb
+ {  dup dup
+    0 0 moveto xsize 0 lineto
+    0 exch -3 mul moveto xsize exch -3 mul lineto
+    setlinewidth 0 setlinecap stroke
+ } def
+ 
+ % linewidth ltabhdnw -
+ % horizontal double line with northwest corner
+ /ltabhdnw
+ {  dup dup dup dup
+    0 0 moveto xsize 0 lineto
+    xsize exch 3 mul moveto
+    -3 mul exch 3 mul lineto
+    -3 mul 0 lineto
+    setlinewidth 0 setlinejoin 2 setlinecap stroke
+ } def
+ 
+ % linewidth ltabhdne -
+ % horizontal double line with northeast corner
+ /ltabhdne
+ {  dup dup dup dup
+    0 0 moveto xsize 0 lineto
+    0 exch 3 mul moveto
+    3 mul xsize add exch 3 mul lineto
+    3 mul xsize add 0 lineto
+    setlinewidth 0 setlinejoin 2 setlinecap stroke
+ } def
+ 
+ % linewidth ltabhdsw -
+ % horizontal double line with southwest corner
+ /ltabhdsw
+ {  dup dup dup dup
+    0 0 moveto xsize 0 lineto
+    xsize exch -3 mul moveto
+    -3 mul exch -3 mul lineto
+    -3 mul 0 lineto
+    setlinewidth 0 setlinejoin 2 setlinecap stroke
+ } def
+ 
+ % linewidth ltabhdse -
+ % horizontal double line with southeast corner
+ /ltabhdse
+ {  dup dup dup dup
+    0 0 moveto xsize 0 lineto
+    0 exch -3 mul moveto
+    3 mul xsize add exch -3 mul lineto
+    3 mul xsize add 0 lineto
+    setlinewidth 0 setlinejoin 2 setlinecap stroke
+ } def
+ 
+ % linewidth ltabvs -
+ % vertical single line
+ /ltabvs
+ {  0 0 moveto 0 ysize lineto
+    setlinewidth 0 setlinecap stroke
+ } def
+ 
+ % linewidth ltabvd -
+ % vertical double line
+ /ltabvd
+ {  dup dup
+    0 0 moveto 0 ysize lineto
+    -3 mul 0 moveto -3 mul ysize lineto
+    setlinewidth 0 setlinecap stroke
+ } def
+ 
+ % linewidth ltabvdr -
+ % vertical double line to right of mark
+ /ltabvdr
+ {  dup dup
+    0 0 moveto 0 ysize lineto
+    3 mul 0 moveto 3 mul ysize lineto
+    setlinewidth 0 setlinecap stroke
+ } def
+ %%EndResource


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tbl
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tbl:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tbl	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,79 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #   Lout setup file for table printing                                        #
+ #                                                                             #
+ #   Jeffrey H. Kingston                                                       #
+ #   5 February 1999                                                           #
+ #                                                                             #
+ ###############################################################################
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @SysInclude { tblf } line                                              #
+ #                                                                             #
+ #  This line causes Lout to read the definitions for diagrams, and should     #
+ #  not be touched.                                                            #
+ #                                                                             #
+ ###############################################################################
+  
+ @SysInclude { tblf }
+ 
+ 
+ ###############################################################################
+ #                                                                             #
+ #  The @TbleSetup @Use clause                                                 #
+ #                                                                             #
+ #  To change the default value of any option, delete the # at the start of    #
+ #  its line and change the value between braces.                              #
+ #                                                                             #
+ ###############################################################################
+ 
+ @Use { @TblSetup
+     # paint                { nopaint            } # colour of background
+     # background           {                    } # object in background
+     # font                 {                    } # font
+     # break                {                    } # paragraph breaking style
+     # width                {                    } # fixed width or "expand"
+     # height               {                    } # fixed height
+     # indent               {                    } # horizontal indent
+     # indentvertical       {                    } # vertical indent
+     # strut                { yes                } # vertical strut
+     # struthorizontal      { no                 } # horizontal strut
+     # margin               {                    } # margin all round
+     # marginhorizontal     { 0.6f @OrIfPlain 2s } # margin left, right of entry
+     # marginleft           {                    } # margin left of entry
+     # marginright          {                    } # margin right of entry
+     # marginvertical       { 0.3f @OrIfPlain 2f } # margin above, below entry
+     # marginabove          {                    } # margin above entry
+     # marginbelow          {                    } # margin below entry
+     # rule                 { no                 } # rule all round cell
+     # rulehorizontal       {                    } # rule above and below cell
+     # ruleabove            {                    } # rule above cell
+     # rulebelow            {                    } # rule below cell
+     # rulevertical         {                    } # rule left and right of cell
+     # ruleleft             {                    } # rule left of cell
+     # ruleright            {                    } # rule right of cell
+     # rulewidth            { 0.05f              } # width (thickness) of rule
+     # rulehorizontalwidth  { {} @OrIfPlain 1f   } # width of above, below rules
+     # ruleabovewidth       {                    } # width of above rule
+     # rulebelowwidth       {                    } # width of below rule
+     # ruleverticalwidth    { {} @OrIfPlain 1s   } # width of left, right rules
+     # ruleleftwidth        {                    } # width of left rule
+     # rulerightwidth       {                    } # width of right rule
+     # rulegap              { 0.15f              } # gap between double rules
+     # rulehorizontalgap    { {} @OrIfPlain 0f   } # gap between dbl a&b rules
+     # ruleabovegap         {                    } # gap between dbl above rules
+     # rulebelowgap         {                    } # gap between dbl below rules
+     # ruleverticalgap      { {} @OrIfPlain 0s   } # gap between dbl l&r rules
+     # ruleleftgap          {                    } # gap between dbl left rules
+     # rulerightgap         {                    } # gap between dbl right rules
+     # rulecolour           { black              } # color of rules
+     # rulehorizontalcolour {                    } # color of above, below rules
+     # ruleabovecolour      {                    } # color of above rules
+     # rulebelowcolour      {                    } # color of below rules
+     # ruleverticalcolour   {                    } # color of left, right rules
+     # ruleleftcolour       {                    } # color of left rules
+     # rulerightcolour      {                    } # color of right rules
+     # ruleplainchar        { .                  } # plain text rule characters
+ }


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tblf
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tblf:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tblf	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,3175 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @Tbl package for tables                                               #
+ #                                                                             #
+ #  Version 1.0 (22 November 1998)                                             #
+ #  Jeffrey H. Kingston                                                        #
+ #                                                                             #
+ #  Based on the @Tab package (Jeffrey H. Kingston, September 1991).           #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysPrependGraphic { tblf.lpg }
+ 
+ export @OrIfPlain
+ def @TOIP {
+ 
+     def @OrIfPlain
+ 	left ps
+ 	right plain
+     {
+ 	@BackEnd @Case {
+ 	    PlainText @Yield plain
+ 	    else      @Yield ps
+ 	}
+     }
+ }
+ 
+ export @Tbl
+ def @TblSetup
+     import @TOIP named paint		p	{ nopaint }
+     import @TOIP named background	bg	{}
+     import @TOIP named font		f	{}
+     import @TOIP named break		b	{}
+     import @TOIP named width		w	{}
+     import @TOIP named height		h	{}
+     import @TOIP named indent		i	{}
+     import @TOIP named indentvertical	iv	{}
+     import @TOIP named strut		s	{ yes }
+     import @TOIP named struthorizontal	sh	{ no }
+     import @TOIP named margin		m	{}
+     import @TOIP named marginhorizontal	mh	{ 0.6f @OrIfPlain 2s }
+     import @TOIP named marginleft	ml	{}
+     import @TOIP named marginright	mr	{}
+     import @TOIP named marginvertical	mv	{ 0.3f @OrIfPlain 2f }
+     import @TOIP named marginabove	ma	{}
+     import @TOIP named marginbelow	mb	{}
+     import @TOIP named rule		r	{ no }
+     import @TOIP named rulehorizontal	rh	{}
+     import @TOIP named ruleabove	ra	{}
+     import @TOIP named rulebelow	rb	{}
+     import @TOIP named rulevertical	rv	{}
+     import @TOIP named ruleleft		rl	{}
+     import @TOIP named ruleright	rr	{}
+     import @TOIP named rulewidth	rw	{ 0.05f }
+     import @TOIP named rulehorizontalwidth rhw	{ {} @OrIfPlain 1f }
+     import @TOIP named ruleabovewidth	raw	{}
+     import @TOIP named rulebelowwidth	rbw	{}
+     import @TOIP named ruleverticalwidth rvw	{ {} @OrIfPlain 1s }
+     import @TOIP named ruleleftwidth	rlw	{}
+     import @TOIP named rulerightwidth	rrw	{}
+     import @TOIP named rulegap		rg	{ 0.15f }
+     import @TOIP named rulehorizontalgap rhg	{ {} @OrIfPlain 0f }
+     import @TOIP named ruleabovegap	rag	{}
+     import @TOIP named rulebelowgap	rbg	{}
+     import @TOIP named ruleverticalgap	rvg	{ {} @OrIfPlain 0s }
+     import @TOIP named ruleleftgap	rlg	{}
+     import @TOIP named rulerightgap	rrg	{}
+     import @TOIP named rulecolour rulecolor	rc	{ black }
+     import @TOIP named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+     import @TOIP named ruleabovecolour ruleabovecolor		rac	{}
+     import @TOIP named rulebelowcolour rulebelowcolor		rbc	{}
+     import @TOIP named ruleverticalcolour ruleverticalcolor	rvc	{}
+     import @TOIP named ruleleftcolour ruleleftcolor		rlc	{}
+     import @TOIP named rulerightcolour rulerightcolor		rrc	{}
+     import @TOIP named ruleplainchar	rpc	{ . }
+ 
+ @Begin
+ 
+     def @Else
+ 	precedence 20
+ 	associativity right
+ 	left x
+ 	right y
+     {
+ 	x @Case {
+ 	    ""   @Yield y
+ 	    else @Yield x
+ 	}
+     }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Specific option values as the setup file knows them (i.e. Level 1)     #
+     #                                                                         #
+     ###########################################################################
+ 
+     def setupp    { p   }
+     def setupbg   { bg  }
+     def setupf    { f   }
+     def setupb    { b   }
+     def setupw    { w   }
+     def setuph    { h   }
+     def setupi    { i   }
+     def setupiv   { iv  }
+     def setups    { s   }
+     def setupsh   { sh  }
+     def setupml   { ml  @Else mh  @Else m  }
+     def setupmr   { mr  @Else mh  @Else m  }
+     def setupma   { ma  @Else mv  @Else m  }
+     def setupmb   { mb  @Else mv  @Else m  }
+     def setupra   { ra  @Else rh  @Else r  }
+     def setuprb   { rb  @Else rh  @Else r  }
+     def setuprl   { rl  @Else rv  @Else r  }
+     def setuprr   { rr  @Else rv  @Else r  }
+     def setupraw  { raw @Else rhw @Else rw }
+     def setuprbw  { rbw @Else rhw @Else rw }
+     def setuprlw  { rlw @Else rvw @Else rw }
+     def setuprrw  { rrw @Else rvw @Else rw }
+     def setuprag  { rag @Else rhg @Else rg }
+     def setuprbg  { rbg @Else rhg @Else rg }
+     def setuprlg  { rlg @Else rvg @Else rg }
+     def setuprrg  { rrg @Else rvg @Else rg }
+     def setuprac  { rac @Else rhc @Else rc }
+     def setuprbc  { rbc @Else rhc @Else rc }
+     def setuprlc  { rlc @Else rvc @Else rc }
+     def setuprrc  { rrc @Else rvc @Else rc }
+     def setuprpc  { rpc }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  @Tbl symbol                                                            #
+     #                                                                         #
+     ###########################################################################
+ 
+     export
+ 
+ 	@Row
+ 	@Rowa
+ 	@Rowb
+ 	@Rowc
+ 	@Rowd
+ 	@Rowe
+ 	@Rowf
+ 	@Rowg
+ 	@Rowh
+ 
+ 	@FirstRow
+ 	@FirstRowa
+ 	@FirstRowb
+ 	@FirstRowc
+ 	@FirstRowd
+ 	@FirstRowe
+ 	@FirstRowf
+ 	@FirstRowg
+ 	@FirstRowh
+ 
+ 	@MarkRow
+ 	@MarkRowa
+ 	@MarkRowb
+ 	@MarkRowc
+ 	@MarkRowd
+ 	@MarkRowe
+ 	@MarkRowf
+ 	@MarkRowg
+ 	@MarkRowh
+ 
+ 	@NoBreakRow
+ 	@NoBreakRowa
+ 	@NoBreakRowb
+ 	@NoBreakRowc
+ 	@NoBreakRowd
+ 	@NoBreakRowe
+ 	@NoBreakRowf
+ 	@NoBreakRowg
+ 	@NoBreakRowh
+ 
+ 	@HeaderRow
+ 	@HeaderRowa
+ 	@HeaderRowb
+ 	@HeaderRowc
+ 	@HeaderRowd
+ 	@HeaderRowe
+ 	@HeaderRowf
+ 	@HeaderRowg
+ 	@HeaderRowh
+ 
+ 	@HeaderFirstRow
+ 	@HeaderFirstRowa
+ 	@HeaderFirstRowb
+ 	@HeaderFirstRowc
+ 	@HeaderFirstRowd
+ 	@HeaderFirstRowe
+ 	@HeaderFirstRowf
+ 	@HeaderFirstRowg
+ 	@HeaderFirstRowh
+ 
+ 	@EndHeaderRow
+ 
+ 	@NP
+ 
+     def @Tbl
+ 
+ 	# parameters for formatting the entire table
+ 	named paint			p	{}
+ 	named background		bg	{}
+ 	named font			f	{}
+ 	named break			b	{}
+ 	named width			w	{}
+ 	named height			h	{}
+ 	named indent			i	{}
+ 	named indentvertical		iv	{}
+ 	named strut			s	{}
+ 	named struthorizontal		sh	{}
+ 	named margin			m	{}
+ 	named marginhorizontal		mh	{}
+ 	named marginleft		ml	{}
+ 	named marginright		mr	{}
+ 	named marginvertical		mv	{}
+ 	named marginabove		ma	{}
+ 	named marginbelow		mb	{}
+ 	named rule			r	{}
+ 	named rulehorizontal		rh	{}
+ 	named ruleabove			ra	{}
+ 	named rulebelow			rb	{}
+ 	named rulevertical		rv	{}
+ 	named ruleleft			rl	{}
+ 	named ruleright			rr	{}
+ 	named rulewidth			rw	{}
+ 	named rulehorizontalwidth	rhw	{}
+ 	named ruleabovewidth		raw	{}
+ 	named rulebelowwidth		rbw	{}
+ 	named ruleverticalwidth		rvw	{}
+ 	named ruleleftwidth		rlw	{}
+ 	named rulerightwidth		rrw	{}
+ 	named rulegap			rg	{}
+ 	named rulehorizontalgap		rhg	{}
+ 	named ruleabovegap		rag	{}
+ 	named rulebelowgap		rbg	{}
+ 	named ruleverticalgap		rvg	{}
+ 	named ruleleftgap		rlg	{}
+ 	named rulerightgap		rrg	{}
+ 	named rulecolour rulecolor			rc	{}
+ 	named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	named ruleabovecolour ruleabovecolor		rac	{}
+ 	named rulebelowcolour rulebelowcolor		rbc	{}
+ 	named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 	named ruleleftcolour ruleleftcolor		rlc	{}
+ 	named rulerightcolour rulerightcolor		rrc	{}
+ 	named ruleplainchar		rpc	{}
+ 
+ 	# parameters for formatting @Rowa rows
+ 	named apaint			ap	{}
+ 	named abackground		abg	{}
+ 	named afont			af	{}
+ 	named abreak			ab	{}
+ 	named awidth			aw	{}
+ 	named aheight			ah	{}
+ 	named aindent			ai	{}
+ 	named aindentvertical		aiv	{}
+ 	named astrut			as	{}
+ 	named astruthorizontal		ash	{}
+ 	named amargin			am	{}
+ 	named amarginhorizontal		amh	{}
+ 	named amarginleft		aml	{}
+ 	named amarginright		amr	{}
+ 	named amarginvertical		amv	{}
+ 	named amarginabove		ama	{}
+ 	named amarginbelow		amb	{}
+ 	named arule			ar	{}
+ 	named arulehorizontal		arh	{}
+ 	named aruleabove		ara	{}
+ 	named arulebelow		arb	{}
+ 	named arulevertical		arv	{}
+ 	named aruleleft			arl	{}
+ 	named aruleright		arr	{}
+ 	named arulewidth		arw	{}
+ 	named arulehorizontalwidth	arhw	{}
+ 	named aruleabovewidth		araw	{}
+ 	named arulebelowwidth		arbw	{}
+ 	named aruleverticalwidth	arvw	{}
+ 	named aruleleftwidth		arlw	{}
+ 	named arulerightwidth		arrw	{} 
+ 	named arulegap			arg	{}
+ 	named arulehorizontalgap	arhg	{}
+ 	named aruleabovegap		arag	{}
+ 	named arulebelowgap		arbg	{}
+ 	named aruleverticalgap		arvg	{}
+ 	named aruleleftgap		arlg	{}
+ 	named arulerightgap		arrg	{}
+ 	named arulecolour arulecolor			arc	{}
+ 	named arulehorizontalcolour arulehorizontalcolor arhc	{}
+ 	named aruleabovecolour aruleabovecolor		arac	{}
+ 	named arulebelowcolour arulebelowcolor		arbc	{}
+ 	named aruleverticalcolour aruleverticalcolor	arvc	{}
+ 	named aruleleftcolour aruleleftcolor		arlc	{}
+ 	named arulerightcolour arulerightcolor		arrc	{}
+ 	named aruleplainchar		arpc	{}
+ 	named aformat
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	    named @Cell
+ 		named paint			p	{}
+ 		named background		bg	{}
+ 		named font			f	{}
+ 		named break			b	{}
+ 		named width			w	{}
+ 		named height			h	{}
+ 		named indent			i	{}
+ 		named indentvertical		iv	{}
+ 		named strut			s	{}
+ 		named struthorizontal		sh	{}
+ 		named margin			m	{}
+ 		named marginhorizontal		mh	{}
+ 		named marginleft		ml	{}
+ 		named marginright		mr	{}
+ 		named marginvertical		mv	{}
+ 		named marginabove		ma	{}
+ 		named marginbelow		mb	{}
+ 		named rule			r	{}
+ 		named rulehorizontal		rh	{}
+ 		named ruleabove			ra	{}
+ 		named rulebelow			rb	{}
+ 		named rulevertical		rv	{}
+ 		named ruleleft			rl	{}
+ 		named ruleright			rr	{}
+ 		named rulewidth			rw	{}
+ 		named rulehorizontalwidth	rhw	{}
+ 		named ruleabovewidth		raw	{}
+ 		named rulebelowwidth		rbw	{}
+ 		named ruleverticalwidth		rvw	{}
+ 		named ruleleftwidth		rlw	{}
+ 		named rulerightwidth		rrw	{}
+ 		named rulegap			rg	{}
+ 		named rulehorizontalgap		rhg	{}
+ 		named ruleabovegap		rag	{}
+ 		named rulebelowgap		rbg	{}
+ 		named ruleverticalgap		rvg	{}
+ 		named ruleleftgap		rlg	{}
+ 		named rulerightgap		rrg	{}
+ 		named rulecolour rulecolor			rc	{}
+ 		named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 		named ruleabovecolour ruleabovecolor		rac	{}
+ 		named rulebelowcolour rulebelowcolor		rbc	{}
+ 		named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 		named ruleleftcolour ruleleftcolor		rlc	{}
+ 		named rulerightcolour rulerightcolor		rrc	{}
+ 		named ruleplainchar		rpc	{}
+ 		right x
+ 	    {}
+ 	{}
+ 
+ 	# parameters for formatting @Rowb rows
+ 	named bpaint			bp	{}
+ 	named bbackground		bbg	{}
+ 	named bfont			bf	{}
+ 	named bbreak			bb	{}
+ 	named bwidth			bw	{}
+ 	named bheight			bh	{}
+ 	named bindent			bi	{}
+ 	named bindentvertical		biv	{}
+ 	named bstrut			bs	{}
+ 	named bstruthorizontal		bsh	{}
+ 	named bmargin			bm	{}
+ 	named bmarginhorizontal		bmh	{}
+ 	named bmarginleft		bml	{}
+ 	named bmarginright		bmr	{}
+ 	named bmarginvertical		bmv	{}
+ 	named bmarginabove		bma	{}
+ 	named bmarginbelow		bmb	{}
+ 	named brule			br	{}
+ 	named brulehorizontal		brh	{}
+ 	named bruleabove		bra	{}
+ 	named brulebelow		brb	{}
+ 	named brulevertical		brv	{}
+ 	named bruleleft			brl	{}
+ 	named bruleright		brr	{}
+ 	named brulewidth		brw	{}
+ 	named brulehorizontalwidth	brhw	{}
+ 	named bruleabovewidth		braw	{}
+ 	named brulebelowwidth		brbw	{}
+ 	named bruleverticalwidth	brvw	{}
+ 	named bruleleftwidth		brlw	{}
+ 	named brulerightwidth		brrw	{} 
+ 	named brulegap			brg	{}
+ 	named brulehorizontalgap	brhg	{}
+ 	named bruleabovegap		brag	{}
+ 	named brulebelowgap		brbg	{}
+ 	named bruleverticalgap		brvg	{}
+ 	named bruleleftgap		brlg	{}
+ 	named brulerightgap		brrg	{}
+ 	named brulecolour brulecolor			brc	{}
+ 	named brulehorizontalcolour brulehorizontalcolor brhc	{}
+ 	named bruleabovecolour bruleabovecolor		brac	{}
+ 	named brulebelowcolour brulebelowcolor		brbc	{}
+ 	named bruleverticalcolour bruleverticalcolor	brvc	{}
+ 	named bruleleftcolour bruleleftcolor		brlc	{}
+ 	named brulerightcolour brulerightcolor		brrc	{}
+ 	named bruleplainchar		brpc	{}
+ 	named bformat
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	    named @Cell
+ 		named paint			p	{}
+ 		named background		bg	{}
+ 		named font			f	{}
+ 		named break			b	{}
+ 		named width			w	{}
+ 		named height			h	{}
+ 		named indent			i	{}
+ 		named indentvertical		iv	{}
+ 		named strut			s	{}
+ 		named struthorizontal		sh	{}
+ 		named margin			m	{}
+ 		named marginhorizontal		mh	{}
+ 		named marginleft		ml	{}
+ 		named marginright		mr	{}
+ 		named marginvertical		mv	{}
+ 		named marginabove		ma	{}
+ 		named marginbelow		mb	{}
+ 		named rule			r	{}
+ 		named rulehorizontal		rh	{}
+ 		named ruleabove			ra	{}
+ 		named rulebelow			rb	{}
+ 		named rulevertical		rv	{}
+ 		named ruleleft			rl	{}
+ 		named ruleright			rr	{}
+ 		named rulewidth			rw	{}
+ 		named rulehorizontalwidth	rhw	{}
+ 		named ruleabovewidth		raw	{}
+ 		named rulebelowwidth		rbw	{}
+ 		named ruleverticalwidth		rvw	{}
+ 		named ruleleftwidth		rlw	{}
+ 		named rulerightwidth		rrw	{}
+ 		named rulegap			rg	{}
+ 		named rulehorizontalgap		rhg	{}
+ 		named ruleabovegap		rag	{}
+ 		named rulebelowgap		rbg	{}
+ 		named ruleverticalgap		rvg	{}
+ 		named ruleleftgap		rlg	{}
+ 		named rulerightgap		rrg	{}
+ 		named rulecolour rulecolor			rc	{}
+ 		named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 		named ruleabovecolour ruleabovecolor		rac	{}
+ 		named rulebelowcolour rulebelowcolor		rbc	{}
+ 		named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 		named ruleleftcolour ruleleftcolor		rlc	{}
+ 		named rulerightcolour rulerightcolor		rrc	{}
+ 		named ruleplainchar		rpc	{}
+ 		right x
+ 	    {}
+ 	{}
+ 
+ 	# parameters for formatting @Rowc rows
+ 	named cpaint			cp	{}
+ 	named cbackground		cbg	{}
+ 	named cfont			cf	{}
+ 	named cbreak			cb	{}
+ 	named cwidth			cw	{}
+ 	named cheight			ch	{}
+ 	named cindent			ci	{}
+ 	named cindentvertical		civ	{}
+ 	named cstrut			cs	{}
+ 	named cstruthorizontal		csh	{}
+ 	named cmargin			cm	{}
+ 	named cmarginhorizontal		cmh	{}
+ 	named cmarginleft		cml	{}
+ 	named cmarginright		cmr	{}
+ 	named cmarginvertical		cmv	{}
+ 	named cmarginabove		cma	{}
+ 	named cmarginbelow		cmb	{}
+ 	named crule			cr	{}
+ 	named crulehorizontal		crh	{}
+ 	named cruleabove		cra	{}
+ 	named crulebelow		crb	{}
+ 	named crulevertical		crv	{}
+ 	named cruleleft			crl	{}
+ 	named cruleright		crr	{}
+ 	named crulewidth		crw	{}
+ 	named crulehorizontalwidth	crhw	{}
+ 	named cruleabovewidth		craw	{}
+ 	named crulebelowwidth		crbw	{}
+ 	named cruleverticalwidth	crvw	{}
+ 	named cruleleftwidth		crlw	{}
+ 	named crulerightwidth		crrw	{} 
+ 	named crulegap			crg	{}
+ 	named crulehorizontalgap	crhg	{}
+ 	named cruleabovegap		crag	{}
+ 	named crulebelowgap		crbg	{}
+ 	named cruleverticalgap		crvg	{}
+ 	named cruleleftgap		crlg	{}
+ 	named crulerightgap		crrg	{}
+ 	named crulecolour crulecolor			crc	{}
+ 	named crulehorizontalcolour crulehorizontalcolor crhc	{}
+ 	named cruleabovecolour cruleabovecolor		crac	{}
+ 	named crulebelowcolour crulebelowcolor		crbc	{}
+ 	named cruleverticalcolour cruleverticalcolor	crvc	{}
+ 	named cruleleftcolour cruleleftcolor		crlc	{}
+ 	named crulerightcolour crulerightcolor		crrc	{}
+ 	named cruleplainchar		crpc	{}
+ 	named cformat
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	    named @Cell
+ 		named paint			p	{}
+ 		named background		bg	{}
+ 		named font			f	{}
+ 		named break			b	{}
+ 		named width			w	{}
+ 		named height			h	{}
+ 		named indent			i	{}
+ 		named indentvertical		iv	{}
+ 		named strut			s	{}
+ 		named struthorizontal		sh	{}
+ 		named margin			m	{}
+ 		named marginhorizontal		mh	{}
+ 		named marginleft		ml	{}
+ 		named marginright		mr	{}
+ 		named marginvertical		mv	{}
+ 		named marginabove		ma	{}
+ 		named marginbelow		mb	{}
+ 		named rule			r	{}
+ 		named rulehorizontal		rh	{}
+ 		named ruleabove			ra	{}
+ 		named rulebelow			rb	{}
+ 		named rulevertical		rv	{}
+ 		named ruleleft			rl	{}
+ 		named ruleright			rr	{}
+ 		named rulewidth			rw	{}
+ 		named rulehorizontalwidth	rhw	{}
+ 		named ruleabovewidth		raw	{}
+ 		named rulebelowwidth		rbw	{}
+ 		named ruleverticalwidth		rvw	{}
+ 		named ruleleftwidth		rlw	{}
+ 		named rulerightwidth		rrw	{}
+ 		named rulegap			rg	{}
+ 		named rulehorizontalgap		rhg	{}
+ 		named ruleabovegap		rag	{}
+ 		named rulebelowgap		rbg	{}
+ 		named ruleverticalgap		rvg	{}
+ 		named ruleleftgap		rlg	{}
+ 		named rulerightgap		rrg	{}
+ 		named rulecolour rulecolor			rc	{}
+ 		named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 		named ruleabovecolour ruleabovecolor		rac	{}
+ 		named rulebelowcolour rulebelowcolor		rbc	{}
+ 		named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 		named ruleleftcolour ruleleftcolor		rlc	{}
+ 		named rulerightcolour rulerightcolor		rrc	{}
+ 		named ruleplainchar		rpc	{}
+ 		right x
+ 	    {}
+ 	{}
+ 
+ 	# parameters for formatting @Rowd rows
+ 	named dpaint			dp	{}
+ 	named dbackground		dbg	{}
+ 	named dfont			df	{}
+ 	named dbreak			db	{}
+ 	named dwidth			dw	{}
+ 	named dheight			dh	{}
+ 	named dindent			di	{}
+ 	named dindentvertical		div	{}
+ 	named dstrut			ds	{}
+ 	named dstruthorizontal		dsh	{}
+ 	named dmargin			dm	{}
+ 	named dmarginhorizontal		dmh	{}
+ 	named dmarginleft		dml	{}
+ 	named dmarginright		dmr	{}
+ 	named dmarginvertical		dmv	{}
+ 	named dmarginabove		dma	{}
+ 	named dmarginbelow		dmb	{}
+ 	named drule			dr	{}
+ 	named drulehorizontal		drh	{}
+ 	named druleabove		dra	{}
+ 	named drulebelow		drb	{}
+ 	named drulevertical		drv	{}
+ 	named druleleft			drl	{}
+ 	named druleright		drr	{}
+ 	named drulewidth		drw	{}
+ 	named drulehorizontalwidth	drhw	{}
+ 	named druleabovewidth		draw	{}
+ 	named drulebelowwidth		drbw	{}
+ 	named druleverticalwidth	drvw	{}
+ 	named druleleftwidth		drlw	{}
+ 	named drulerightwidth		drrw	{} 
+ 	named drulegap			drg	{}
+ 	named drulehorizontalgap	drhg	{}
+ 	named druleabovegap		drag	{}
+ 	named drulebelowgap		drbg	{}
+ 	named druleverticalgap		drvg	{}
+ 	named druleleftgap		drlg	{}
+ 	named drulerightgap		drrg	{}
+ 	named drulecolour drulecolor			drc	{}
+ 	named drulehorizontalcolour drulehorizontalcolor drhc	{}
+ 	named druleabovecolour druleabovecolor		drac	{}
+ 	named drulebelowcolour drulebelowcolor		drbc	{}
+ 	named druleverticalcolour druleverticalcolor	drvc	{}
+ 	named druleleftcolour druleleftcolor		drlc	{}
+ 	named drulerightcolour drulerightcolor		drrc	{}
+ 	named druleplainchar		drpc	{}
+ 	named dformat
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	    named @Cell
+ 		named paint			p	{}
+ 		named background		bg	{}
+ 		named font			f	{}
+ 		named break			b	{}
+ 		named width			w	{}
+ 		named height			h	{}
+ 		named indent			i	{}
+ 		named indentvertical		iv	{}
+ 		named strut			s	{}
+ 		named struthorizontal		sh	{}
+ 		named margin			m	{}
+ 		named marginhorizontal		mh	{}
+ 		named marginleft		ml	{}
+ 		named marginright		mr	{}
+ 		named marginvertical		mv	{}
+ 		named marginabove		ma	{}
+ 		named marginbelow		mb	{}
+ 		named rule			r	{}
+ 		named rulehorizontal		rh	{}
+ 		named ruleabove			ra	{}
+ 		named rulebelow			rb	{}
+ 		named rulevertical		rv	{}
+ 		named ruleleft			rl	{}
+ 		named ruleright			rr	{}
+ 		named rulewidth			rw	{}
+ 		named rulehorizontalwidth	rhw	{}
+ 		named ruleabovewidth		raw	{}
+ 		named rulebelowwidth		rbw	{}
+ 		named ruleverticalwidth		rvw	{}
+ 		named ruleleftwidth		rlw	{}
+ 		named rulerightwidth		rrw	{}
+ 		named rulegap			rg	{}
+ 		named rulehorizontalgap		rhg	{}
+ 		named ruleabovegap		rag	{}
+ 		named rulebelowgap		rbg	{}
+ 		named ruleverticalgap		rvg	{}
+ 		named ruleleftgap		rlg	{}
+ 		named rulerightgap		rrg	{}
+ 		named rulecolour rulecolor			rc	{}
+ 		named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 		named ruleabovecolour ruleabovecolor		rac	{}
+ 		named rulebelowcolour rulebelowcolor		rbc	{}
+ 		named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 		named ruleleftcolour ruleleftcolor		rlc	{}
+ 		named rulerightcolour rulerightcolor		rrc	{}
+ 		named ruleplainchar		rpc	{}
+ 		right x
+ 	    {}
+ 	{}
+ 
+ 	# parameters for formatting @Rowe rows
+ 	named epaint			ep	{}
+ 	named ebackground		ebg	{}
+ 	named efont			ef	{}
+ 	named ebreak			eb	{}
+ 	named ewidth			ew	{}
+ 	named eheight			eh	{}
+ 	named eindent			ei	{}
+ 	named eindentvertical		eiv	{}
+ 	named estrut			es	{}
+ 	named estruthorizontal		esh	{}
+ 	named emargin			em	{}
+ 	named emarginhorizontal		emh	{}
+ 	named emarginleft		eml	{}
+ 	named emarginright		emr	{}
+ 	named emarginvertical		emv	{}
+ 	named emarginabove		ema	{}
+ 	named emarginbelow		emb	{}
+ 	named erule			er	{}
+ 	named erulehorizontal		erh	{}
+ 	named eruleabove		era	{}
+ 	named erulebelow		erb	{}
+ 	named erulevertical		erv	{}
+ 	named eruleleft			erl	{}
+ 	named eruleright		err	{}
+ 	named erulewidth		erw	{}
+ 	named erulehorizontalwidth	erhw	{}
+ 	named eruleabovewidth		eraw	{}
+ 	named erulebelowwidth		erbw	{}
+ 	named eruleverticalwidth	ervw	{}
+ 	named eruleleftwidth		erlw	{}
+ 	named erulerightwidth		errw	{} 
+ 	named erulegap			erg	{}
+ 	named erulehorizontalgap	erhg	{}
+ 	named eruleabovegap		erag	{}
+ 	named erulebelowgap		erbg	{}
+ 	named eruleverticalgap		ervg	{}
+ 	named eruleleftgap		erlg	{}
+ 	named erulerightgap		errg	{}
+ 	named erulecolour erulecolor			erc	{}
+ 	named erulehorizontalcolour erulehorizontalcolor erhc	{}
+ 	named eruleabovecolour eruleabovecolor		erac	{}
+ 	named erulebelowcolour erulebelowcolor		erbc	{}
+ 	named eruleverticalcolour eruleverticalcolor	ervc	{}
+ 	named eruleleftcolour eruleleftcolor		erlc	{}
+ 	named erulerightcolour erulerightcolor		errc	{}
+ 	named eruleplainchar		erpc	{}
+ 	named eformat
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	    named @Cell
+ 		named paint			p	{}
+ 		named background		bg	{}
+ 		named font			f	{}
+ 		named break			b	{}
+ 		named width			w	{}
+ 		named height			h	{}
+ 		named indent			i	{}
+ 		named indentvertical		iv	{}
+ 		named strut			s	{}
+ 		named struthorizontal		sh	{}
+ 		named margin			m	{}
+ 		named marginhorizontal		mh	{}
+ 		named marginleft		ml	{}
+ 		named marginright		mr	{}
+ 		named marginvertical		mv	{}
+ 		named marginabove		ma	{}
+ 		named marginbelow		mb	{}
+ 		named rule			r	{}
+ 		named rulehorizontal		rh	{}
+ 		named ruleabove			ra	{}
+ 		named rulebelow			rb	{}
+ 		named rulevertical		rv	{}
+ 		named ruleleft			rl	{}
+ 		named ruleright			rr	{}
+ 		named rulewidth			rw	{}
+ 		named rulehorizontalwidth	rhw	{}
+ 		named ruleabovewidth		raw	{}
+ 		named rulebelowwidth		rbw	{}
+ 		named ruleverticalwidth		rvw	{}
+ 		named ruleleftwidth		rlw	{}
+ 		named rulerightwidth		rrw	{}
+ 		named rulegap			rg	{}
+ 		named rulehorizontalgap		rhg	{}
+ 		named ruleabovegap		rag	{}
+ 		named rulebelowgap		rbg	{}
+ 		named ruleverticalgap		rvg	{}
+ 		named ruleleftgap		rlg	{}
+ 		named rulerightgap		rrg	{}
+ 		named rulecolour rulecolor			rc	{}
+ 		named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 		named ruleabovecolour ruleabovecolor		rac	{}
+ 		named rulebelowcolour rulebelowcolor		rbc	{}
+ 		named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 		named ruleleftcolour ruleleftcolor		rlc	{}
+ 		named rulerightcolour rulerightcolor		rrc	{}
+ 		named ruleplainchar		rpc	{}
+ 		right x
+ 	    {}
+ 	{}
+ 
+ 	# parameters for formatting @Rowf rows
+ 	named fpaint			fp	{}
+ 	named fbackground		fbg	{}
+ 	named ffont			ff	{}
+ 	named fbreak			fb	{}
+ 	named fwidth			fw	{}
+ 	named fheight			fh	{}
+ 	named findent			fi	{}
+ 	named findentvertical		fiv	{}
+ 	named fstrut			fs	{}
+ 	named fstruthorizontal		fsh	{}
+ 	named fmargin			fm	{}
+ 	named fmarginhorizontal		fmh	{}
+ 	named fmarginleft		fml	{}
+ 	named fmarginright		fmr	{}
+ 	named fmarginvertical		fmv	{}
+ 	named fmarginabove		fma	{}
+ 	named fmarginbelow		fmb	{}
+ 	named frule			fr	{}
+ 	named frulehorizontal		frh	{}
+ 	named fruleabove		fra	{}
+ 	named frulebelow		frb	{}
+ 	named frulevertical		frv	{}
+ 	named fruleleft			frl	{}
+ 	named fruleright		frr	{}
+ 	named frulewidth		frw	{}
+ 	named frulehorizontalwidth	frhw	{}
+ 	named fruleabovewidth		fraw	{}
+ 	named frulebelowwidth		frbw	{}
+ 	named fruleverticalwidth	frvw	{}
+ 	named fruleleftwidth		frlw	{}
+ 	named frulerightwidth		frrw	{} 
+ 	named frulegap			frg	{}
+ 	named frulehorizontalgap	frhg	{}
+ 	named fruleabovegap		frag	{}
+ 	named frulebelowgap		frbg	{}
+ 	named fruleverticalgap		frvg	{}
+ 	named fruleleftgap		frlg	{}
+ 	named frulerightgap		frrg	{}
+ 	named frulecolour frulecolor			frc	{}
+ 	named frulehorizontalcolour frulehorizontalcolor frhc	{}
+ 	named fruleabovecolour fruleabovecolor		frac	{}
+ 	named frulebelowcolour frulebelowcolor		frbc	{}
+ 	named fruleverticalcolour fruleverticalcolor	frvc	{}
+ 	named fruleleftcolour fruleleftcolor		frlc	{}
+ 	named frulerightcolour frulerightcolor		frrc	{}
+ 	named fruleplainchar		frpc	{}
+ 	named fformat
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	    named @Cell
+ 		named paint			p	{}
+ 		named background		bg	{}
+ 		named font			f	{}
+ 		named break			b	{}
+ 		named width			w	{}
+ 		named height			h	{}
+ 		named indent			i	{}
+ 		named indentvertical		iv	{}
+ 		named strut			s	{}
+ 		named struthorizontal		sh	{}
+ 		named margin			m	{}
+ 		named marginhorizontal		mh	{}
+ 		named marginleft		ml	{}
+ 		named marginright		mr	{}
+ 		named marginvertical		mv	{}
+ 		named marginabove		ma	{}
+ 		named marginbelow		mb	{}
+ 		named rule			r	{}
+ 		named rulehorizontal		rh	{}
+ 		named ruleabove			ra	{}
+ 		named rulebelow			rb	{}
+ 		named rulevertical		rv	{}
+ 		named ruleleft			rl	{}
+ 		named ruleright			rr	{}
+ 		named rulewidth			rw	{}
+ 		named rulehorizontalwidth	rhw	{}
+ 		named ruleabovewidth		raw	{}
+ 		named rulebelowwidth		rbw	{}
+ 		named ruleverticalwidth		rvw	{}
+ 		named ruleleftwidth		rlw	{}
+ 		named rulerightwidth		rrw	{}
+ 		named rulegap			rg	{}
+ 		named rulehorizontalgap		rhg	{}
+ 		named ruleabovegap		rag	{}
+ 		named rulebelowgap		rbg	{}
+ 		named ruleverticalgap		rvg	{}
+ 		named ruleleftgap		rlg	{}
+ 		named rulerightgap		rrg	{}
+ 		named rulecolour rulecolor			rc	{}
+ 		named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 		named ruleabovecolour ruleabovecolor		rac	{}
+ 		named rulebelowcolour rulebelowcolor		rbc	{}
+ 		named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 		named ruleleftcolour ruleleftcolor		rlc	{}
+ 		named rulerightcolour rulerightcolor		rrc	{}
+ 		named ruleplainchar		rpc	{}
+ 		right x
+ 	    {}
+ 	{}
+ 
+ 	# parameters for formatting @Rowg rows
+ 	named gpaint			gp	{}
+ 	named gbackground		gbg	{}
+ 	named gfont			gf	{}
+ 	named gbreak			gb	{}
+ 	named gwidth			gw	{}
+ 	named gheight			gh	{}
+ 	named gindent			gi	{}
+ 	named gindentvertical		giv	{}
+ 	named gstrut			gs	{}
+ 	named gstruthorizontal		gsh	{}
+ 	named gmargin			gm	{}
+ 	named gmarginhorizontal		gmh	{}
+ 	named gmarginleft		gml	{}
+ 	named gmarginright		gmr	{}
+ 	named gmarginvertical		gmv	{}
+ 	named gmarginabove		gma	{}
+ 	named gmarginbelow		gmb	{}
+ 	named grule			gr	{}
+ 	named grulehorizontal		grh	{}
+ 	named gruleabove		gra	{}
+ 	named grulebelow		grb	{}
+ 	named grulevertical		grv	{}
+ 	named gruleleft			grl	{}
+ 	named gruleright		grr	{}
+ 	named grulewidth		grw	{}
+ 	named grulehorizontalwidth	grhw	{}
+ 	named gruleabovewidth		graw	{}
+ 	named grulebelowwidth		grbw	{}
+ 	named gruleverticalwidth	grvw	{}
+ 	named gruleleftwidth		grlw	{}
+ 	named grulerightwidth		grrw	{} 
+ 	named grulegap			grg	{}
+ 	named grulehorizontalgap	grhg	{}
+ 	named gruleabovegap		grag	{}
+ 	named grulebelowgap		grbg	{}
+ 	named gruleverticalgap		grvg	{}
+ 	named gruleleftgap		grlg	{}
+ 	named grulerightgap		grrg	{}
+ 	named grulecolour grulecolor			grc	{}
+ 	named grulehorizontalcolour grulehorizontalcolor grhc	{}
+ 	named gruleabovecolour gruleabovecolor		grac	{}
+ 	named grulebelowcolour grulebelowcolor		grbc	{}
+ 	named gruleverticalcolour gruleverticalcolor	grvc	{}
+ 	named gruleleftcolour gruleleftcolor		grlc	{}
+ 	named grulerightcolour grulerightcolor		grrc	{}
+ 	named gruleplainchar		grpc	{}
+ 	named gformat
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	    named @Cell
+ 		named paint			p	{}
+ 		named background		bg	{}
+ 		named font			f	{}
+ 		named break			b	{}
+ 		named width			w	{}
+ 		named height			h	{}
+ 		named indent			i	{}
+ 		named indentvertical		iv	{}
+ 		named strut			s	{}
+ 		named struthorizontal		sh	{}
+ 		named margin			m	{}
+ 		named marginhorizontal		mh	{}
+ 		named marginleft		ml	{}
+ 		named marginright		mr	{}
+ 		named marginvertical		mv	{}
+ 		named marginabove		ma	{}
+ 		named marginbelow		mb	{}
+ 		named rule			r	{}
+ 		named rulehorizontal		rh	{}
+ 		named ruleabove			ra	{}
+ 		named rulebelow			rb	{}
+ 		named rulevertical		rv	{}
+ 		named ruleleft			rl	{}
+ 		named ruleright			rr	{}
+ 		named rulewidth			rw	{}
+ 		named rulehorizontalwidth	rhw	{}
+ 		named ruleabovewidth		raw	{}
+ 		named rulebelowwidth		rbw	{}
+ 		named ruleverticalwidth		rvw	{}
+ 		named ruleleftwidth		rlw	{}
+ 		named rulerightwidth		rrw	{}
+ 		named rulegap			rg	{}
+ 		named rulehorizontalgap		rhg	{}
+ 		named ruleabovegap		rag	{}
+ 		named rulebelowgap		rbg	{}
+ 		named ruleverticalgap		rvg	{}
+ 		named ruleleftgap		rlg	{}
+ 		named rulerightgap		rrg	{}
+ 		named rulecolour rulecolor			rc	{}
+ 		named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 		named ruleabovecolour ruleabovecolor		rac	{}
+ 		named rulebelowcolour rulebelowcolor		rbc	{}
+ 		named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 		named ruleleftcolour ruleleftcolor		rlc	{}
+ 		named rulerightcolour rulerightcolor		rrc	{}
+ 		named ruleplainchar		rpc	{}
+ 		right x
+ 	    {}
+ 	{}
+ 
+ 	# parameters for formatting @Rowh rows
+ 	named hpaint			hp	{}
+ 	named hbackground		hbg	{}
+ 	named hfont			hf	{}
+ 	named hbreak			hb	{}
+ 	named hwidth			hw	{}
+ 	named hheight			hh	{}
+ 	named hindent			hi	{}
+ 	named hindentvertical		hiv	{}
+ 	named hstrut			hs	{}
+ 	named hstruthorizontal		hsh	{}
+ 	named hmargin			hm	{}
+ 	named hmarginhorizontal		hmh	{}
+ 	named hmarginleft		hml	{}
+ 	named hmarginright		hmr	{}
+ 	named hmarginvertical		hmv	{}
+ 	named hmarginabove		hma	{}
+ 	named hmarginbelow		hmb	{}
+ 	named hrule			hr	{}
+ 	named hrulehorizontal		hrh	{}
+ 	named hruleabove		hra	{}
+ 	named hrulebelow		hrb	{}
+ 	named hrulevertical		hrv	{}
+ 	named hruleleft			hrl	{}
+ 	named hruleright		hrr	{}
+ 	named hrulewidth		hrw	{}
+ 	named hrulehorizontalwidth	hrhw	{}
+ 	named hruleabovewidth		hraw	{}
+ 	named hrulebelowwidth		hrbw	{}
+ 	named hruleverticalwidth	hrvw	{}
+ 	named hruleleftwidth		hrlw	{}
+ 	named hrulerightwidth		hrrw	{} 
+ 	named hrulegap			hrg	{}
+ 	named hrulehorizontalgap	hrhg	{}
+ 	named hruleabovegap		hrag	{}
+ 	named hrulebelowgap		hrbg	{}
+ 	named hruleverticalgap		hrvg	{}
+ 	named hruleleftgap		hrlg	{}
+ 	named hrulerightgap		hrrg	{}
+ 	named hrulecolour hrulecolor			hrc	{}
+ 	named hrulehorizontalcolour hrulehorizontalcolor hrhc	{}
+ 	named hruleabovecolour hruleabovecolor		hrac	{}
+ 	named hrulebelowcolour hrulebelowcolor		hrbc	{}
+ 	named hruleverticalcolour hruleverticalcolor	hrvc	{}
+ 	named hruleleftcolour hruleleftcolor		hrlc	{}
+ 	named hrulerightcolour hrulerightcolor		hrrc	{}
+ 	named hruleplainchar		hrpc	{}
+ 	named hformat
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	    named @Cell
+ 		named paint			p	{}
+ 		named background		bg	{}
+ 		named font			f	{}
+ 		named break			b	{}
+ 		named width			w	{}
+ 		named height			h	{}
+ 		named indent			i	{}
+ 		named indentvertical		iv	{}
+ 		named strut			s	{}
+ 		named struthorizontal		sh	{}
+ 		named margin			m	{}
+ 		named marginhorizontal		mh	{}
+ 		named marginleft		ml	{}
+ 		named marginright		mr	{}
+ 		named marginvertical		mv	{}
+ 		named marginabove		ma	{}
+ 		named marginbelow		mb	{}
+ 		named rule			r	{}
+ 		named rulehorizontal		rh	{}
+ 		named ruleabove			ra	{}
+ 		named rulebelow			rb	{}
+ 		named rulevertical		rv	{}
+ 		named ruleleft			rl	{}
+ 		named ruleright			rr	{}
+ 		named rulewidth			rw	{}
+ 		named rulehorizontalwidth	rhw	{}
+ 		named ruleabovewidth		raw	{}
+ 		named rulebelowwidth		rbw	{}
+ 		named ruleverticalwidth		rvw	{}
+ 		named ruleleftwidth		rlw	{}
+ 		named rulerightwidth		rrw	{}
+ 		named rulegap			rg	{}
+ 		named rulehorizontalgap		rhg	{}
+ 		named ruleabovegap		rag	{}
+ 		named rulebelowgap		rbg	{}
+ 		named ruleverticalgap		rvg	{}
+ 		named ruleleftgap		rlg	{}
+ 		named rulerightgap		rrg	{}
+ 		named rulecolour rulecolor			rc	{}
+ 		named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 		named ruleabovecolour ruleabovecolor		rac	{}
+ 		named rulebelowcolour rulebelowcolor		rbc	{}
+ 		named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 		named ruleleftcolour ruleleftcolor		rlc	{}
+ 		named rulerightcolour rulerightcolor		rrc	{}
+ 		named ruleplainchar		rpc	{}
+ 		right x
+ 	    {}
+ 	{}
+ 
+ 	body @Body   # this is the right parameter of @Tbl
+ 
+     {
+ 
+ 	#######################################################################
+ 	#                                                                     #
+ 	#  Specific option values as @Tbl knows them (i.e. Level 2)           #
+ 	#                                                                     #
+ 	#######################################################################
+ 
+ 	def tblp    { p				@Else setupp   }
+ 	def tblbg   { bg			@Else setupbg  }
+ 	def tblf    { f				@Else setupf   }
+ 	def tblb    { b				@Else setupb   }
+ 	def tblw    { w				@Else setupw   }
+ 	def tblh    { h				@Else setuph   }
+ 	def tbli    { i				@Else setupi   }
+ 	def tbliv   { iv			@Else setupiv  }
+ 	def tbls    { s				@Else setups   }
+ 	def tblsh   { sh			@Else setupsh  }
+ 	def tblml   { ml  @Else mh  @Else m	@Else setupml  }
+ 	def tblmr   { mr  @Else mh  @Else m	@Else setupmr  }
+ 	def tblma   { ma  @Else mv  @Else m	@Else setupma  }
+ 	def tblmb   { mb  @Else mv  @Else m	@Else setupmb  }
+ 	def tblra   { ra  @Else rh  @Else r	@Else setupra  }
+ 	def tblrb   { rb  @Else rh  @Else r	@Else setuprb  }
+ 	def tblrl   { rl  @Else rv  @Else r	@Else setuprl  }
+ 	def tblrr   { rr  @Else rv  @Else r	@Else setuprr  }
+ 	def tblraw  { raw @Else rhw @Else rw	@Else setupraw }
+ 	def tblrbw  { rbw @Else rhw @Else rw	@Else setuprbw }
+ 	def tblrlw  { rlw @Else rvw @Else rw	@Else setuprlw }
+ 	def tblrrw  { rrw @Else rvw @Else rw	@Else setuprrw }
+ 	def tblrag  { rag @Else rhg @Else rg	@Else setuprag }
+ 	def tblrbg  { rbg @Else rhg @Else rg	@Else setuprbg }
+ 	def tblrlg  { rlg @Else rvg @Else rg	@Else setuprlg }
+ 	def tblrrg  { rrg @Else rvg @Else rg	@Else setuprrg }
+ 	def tblrac  { rac @Else rhc @Else rc	@Else setuprac }
+ 	def tblrbc  { rbc @Else rhc @Else rc	@Else setuprbc }
+ 	def tblrlc  { rlc @Else rvc @Else rc	@Else setuprlc }
+ 	def tblrrc  { rrc @Else rvc @Else rc	@Else setuprrc }
+ 	def tblrpc  { rpc			@Else setuprpc }
+ 
+ 
+ 	def @DoCell
+ 	    named compulsory p    {}
+ 	    named compulsory bg   {}
+ 	    named compulsory f    {}
+ 	    named compulsory b    {}
+ 	    named compulsory w    {}
+ 	    named compulsory h    {}
+ 	    named compulsory i    {}
+ 	    named compulsory iv   {}
+ 	    named compulsory s    {}
+ 	    named compulsory sh   {}
+ 	    named compulsory ml   {}
+ 	    named compulsory mr   {}
+ 	    named compulsory ma   {}
+ 	    named compulsory mb   {}
+ 	    named compulsory ra   {}
+ 	    named compulsory rb   {}
+ 	    named compulsory rl   {}
+ 	    named compulsory rr   {}
+ 	    named compulsory raw  {}
+ 	    named compulsory rbw  {}
+ 	    named compulsory rlw  {}
+ 	    named compulsory rrw  {}
+ 	    named compulsory rag  {}
+ 	    named compulsory rbg  {}
+ 	    named compulsory rlg  {}
+ 	    named compulsory rrg  {}
+ 	    named compulsory rac  {}
+ 	    named compulsory rbc  {}
+ 	    named compulsory rlc  {}
+ 	    named compulsory rrc  {}
+ 	    named compulsory rpc  {}
+ 	    right @Body
+ 	{
+ 
+ 	    def @ZeroWidth right x
+ 	    {
+ 		@OneCol { |0io x |0io }
+ 	    }
+ 
+ 	    def @ZeroHeight right x
+ 	    {
+ 		@OneRow { /0io x /0io }
+ 	    }
+ 
+ 	    def @PDFColourCommand right col
+ 	    {
+ 	        def @ColourCoords
+ 	        {
+ 	            col @Case {
+ 			nochange	@Yield  { nochange    }
+ 	                darkblue        @Yield  { 0.0 0.0 0.5 }
+ 	                blue            @Yield  { 0.0 0.0 1.0 }
+ 	                lightblue       @Yield  { 0.5 0.5 1.0 }
+ 	                darkgreen       @Yield  { 0.0 0.5 0.0 }
+ 	                green           @Yield  { 0.0 1.0 0.0 }
+ 	                lightgreen      @Yield  { 0.5 1.0 0.5 }
+ 	                darkred         @Yield  { 0.5 0.0 0.0 }
+ 	                red             @Yield  { 1.0 0.0 0.0 }
+ 	                lightred        @Yield  { 1.0 0.5 0.5 }
+ 	                darkcyan        @Yield  { 0.0 0.5 0.5 }
+ 	                cyan            @Yield  { 0.0 1.0 1.0 }
+ 	                lightcyan       @Yield  { 0.5 1.0 1.0 }
+ 	                darkmagenta     @Yield  { 0.5 0.0 0.5 }
+ 	                magenta         @Yield  { 1.0 0.0 1.0 }
+ 	                lightmagenta    @Yield  { 1.0 0.5 1.0 }
+ 	                darkyellow      @Yield  { 0.5 0.5 0.0 }
+ 	                yellow          @Yield  { 1.0 1.0 0.0 }
+ 	                lightyellow     @Yield  { 1.0 1.0 0.5 }
+ 	                darkgray        @Yield  { 0.2 0.2 0.2 }
+ 	                gray            @Yield  { 0.5 0.5 0.5 }
+ 	                lightgray       @Yield  { 0.8 0.8 0.8 }
+ 	                darkgrey        @Yield  { 0.2 0.2 0.2 }
+ 	                grey            @Yield  { 0.5 0.5 0.5 }
+ 	                lightgrey       @Yield  { 0.8 0.8 0.8 }
+ 	                black           @Yield  { 0.0 0.0 0.0 }
+                 	white           @Yield  { 1.0 1.0 1.0 }
+ 		    }
+ 	        }
+ 
+ 		@ColourCoords "rg" @ColourCoords "RG"
+ 	    }
+ 
+ 	    def @PDFAddPaint right col
+ 	    {
+ 	        col @Case {
+ 	            none @Yield ""
+ 	            nochange @Yield "q f Q"
+ 	            else @Yield { "q" @PDFColourCommand col "f Q" }
+ 	        }
+ 	    }
+ 
+ 	    def @FillBox left col right x
+ 	    {
+ 	      @BackEnd @Case {
+ 		PostScript @Yield {{"LoutBox ltbl"col} @Graphic x}
+ 		PDF        @Yield {{
+ 				     "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h"
+ 				     @PDFAddPaint col "S"
+ 				   } @Graphic x}
+ 		PlainText  @Yield { rpc @PlainGraphic x }
+ 	      }
+ 	    }
+ 
+ 	    def @PaintBox left col right x
+ 	    {
+ 	      @BackEnd @Case {
+ 		PostScript @Yield {{"LoutBox ltbl"col} @Graphic x}
+ 		PDF        @Yield {{
+ 				     "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h"
+ 				     @PDFAddPaint col "S"
+ 				   } @Graphic x}
+ 		PlainText  @Yield { x }
+ 	      }
+ 	    }
+ 
+ 	    def @HRule left col right thick
+ 	    {
+ 		@ZeroHeight thick @High col @FillBox {}
+ 		# thick @High col @FillBox {}
+ 	    }
+ 
+ 	    def @VRule left col right thick
+ 	    {
+ 		@ZeroWidth thick @Wide col @FillBox {}
+ 		# thick @Wide col @FillBox {}
+ 	    }
+ 
+ 	    def @DoubleHRule
+ 		left col
+ 		named gap {}
+ 		right thick
+ 	    {
+ 		@OneCol { col @HRule thick /gap col @HRule thick }
+ 	    }
+ 
+ 	    def @DoubleVRule
+ 		left col
+ 		named gap {}
+ 		right thick
+ 	    {
+ 		@OneRow { col @VRule thick |gap col @VRule thick }
+ 	    }
+ 
+ 	    def @MakeHRule
+ 		left col
+ 		named thick {}
+ 		named gap {}
+ 		right type
+ 	    {
+ 		type @Case {
+ 		    { none "" no } @Yield {}
+ 		    { yes single } @Yield col @HRule thick
+ 		    { double } @Yield col @DoubleHRule gap { gap } thick
+ 		}
+ 	    }
+ 
+ 	    def @MakeVRule
+ 		left col
+ 		named thick {}
+ 		named gap {}
+ 		right type
+ 	    {
+ 		type @Case {
+ 		    { none "" no } @Yield {}
+ 		    { yes single } @Yield col @VRule thick
+ 		    { double } @Yield col @DoubleVRule gap { gap } thick
+ 		}
+ 	    }
+ 
+ 	    def @RuleBox
+ 		left col
+ 		named hthick {}
+ 		named vthick {}
+ 		named htype {}
+ 		named vtype {}
+ 	    {
+ 		htype @Case {
+ 		    { none "" no } @Yield {}
+ 		    else @Yield vtype @Case {
+ 			{ none "" no } @Yield {}
+ 			else @Yield {
+ 			    @ZeroWidth @ZeroHeight hthick @Wide vthick @High
+ 			    col @FillBox {}
+ 			}
+ 		    }
+ 		}
+ 	    }
+ 
+ 	    def @AddRules
+ 		right x
+ 	    {
+ 		{
+ 		  rlc @MakeVRule thick { rlw } gap { rlg } rl
+ 		  |0rt |1rt
+ 		  rrc @MakeVRule thick { rrw } gap { rrg } rr
+ 		} @Background
+ 		{ rac @MakeHRule thick { raw } gap { rag } ra
+ 		  /0rt
+ 		  /1rt
+ 		  rbc @MakeHRule thick { rbw } gap { rbg } rb
+ 		} @Background
+ 		{
+ 		  |1rt rac @RuleBox hthick { rrw } vthick { raw } htype { rr } vtype { ra }
+ 		  /0rt
+ 		  /1rt |1rt
+ 		  rbc @RuleBox hthick { rrw } vthick { rbw } htype { rr } vtype { rb }
+ 		} @Background x
+ 
+ 	    }
+ 
+ 	    def @AddMargins
+ 		right x
+ 	    {
+ 		@OneCol @OneRow {
+ 		          ^|ml    |mr
+ 		    ^/ma   |    x |
+ 		     /mb   |      |
+ 		}
+ 	    }
+ 
+ 	    def @AddPaint
+ 		right x
+ 	    {
+ 		p @Case {
+ 		    { none nopaint no } @Yield x
+ 		    else                @Yield { p @PaintBox x }
+ 		}
+ 	    }
+ 
+ 	    def @Strut right x
+ 	    {
+ 		def strutval right x
+ 		{
+ 		    x @Case {
+ 			{ no No "" } @Yield "0.0f"
+ 			{ yes Yes  } @Yield "1.0f"
+ 			else         @Yield x
+ 		    }
+ 		}
+ 
+ 		def vs { "0.5w" @VShift { { strutval s  } @High } }
+ 		def hs {                { strutval sh } @Wide   }
+ 
+ 		@OneCol @OneRow { ^| hs ^/ vs | x }
+ 	    }
+ 
+ 	    def @VSize right x
+ 	    {
+ 		h @Case {
+ 		    ""   @Yield x
+ 		    else @Yield { h @High x }
+ 		}
+ 	    }
+ 
+ 	    def @HSize right x
+ 	    {
+ 		w @Case {
+ 		    ""       @Yield x
+ 		    "expand" @Yield { "40c" @Wide x }
+ 		    else     @Yield { w @Wide x }
+ 		}
+ 	    }
+ 
+ 	    def @HIndent right x
+ 	    {
+ 		i @Case {
+ 		    left  @Yield @OneCol { | x }
+ 		    ctr   @Yield @OneCol { |"0.5rt" x }
+ 		    right @Yield @OneCol { |"1.0rt" x }
+ 		    mctr  @Yield @OneCol { |"0.5bx" x }
+ 		    align @Yield @OneCol x
+ 		    else  @Yield @OneCol { |i x }
+ 		}
+ 	    }
+ 
+ 	    def @VIndent right x
+ 	    {
+ 		# note: the default value "" gives top alignment,
+ 		# but that is not a problem because we are by
+ 		# default putting in a vertical strut
+ 
+ 		iv @Case {
+ 		    top   @Yield @OneRow { / x }
+ 		    ctr   @Yield @OneRow { /"0.5rt" x }
+ 		    foot  @Yield @OneRow { /"1.0rt" x }
+ 		    mctr  @Yield @OneRow { /"0.5bx" x }
+ 		    align @Yield @OneRow x
+ 		    else  @Yield @OneRow { /iv x }
+ 		}
+ 	    }
+ 
+ 	    @HSize @VSize @AddPaint bg @Background @AddRules
+ 	    @HIndent @VIndent @AddMargins f @Font b @Break @Strut @Body
+ 	}
+ 
+ 	# symbol for producing @Row rows
+ 	def @DoRow
+ 	    named paint			p	{}
+ 	    named background		bg	{}
+ 	    named font			f	{}
+ 	    named break			b	{}
+ 	    named width			w	{}
+ 	    named height		h	{}
+ 	    named indent		i	{}
+ 	    named indentvertical	iv	{}
+ 	    named strut			s	{}
+ 	    named struthorizontal	sh	{}
+ 	    named margin		m	{}
+ 	    named marginhorizontal	mh	{}
+ 	    named marginleft		ml	{}
+ 	    named marginright		mr	{}
+ 	    named marginvertical	mv	{}
+ 	    named marginabove		ma	{}
+ 	    named marginbelow		mb	{}
+ 	    named rule			r	{}
+ 	    named rulehorizontal	rh	{}
+ 	    named ruleabove		ra	{}
+ 	    named rulebelow		rb	{}
+ 	    named rulevertical		rv	{}
+ 	    named ruleleft		rl	{}
+ 	    named ruleright		rr	{}
+ 	    named rulewidth		rw	{}
+ 	    named rulehorizontalwidth	rhw	{}
+ 	    named ruleabovewidth	raw	{}
+ 	    named rulebelowwidth	rbw	{}
+ 	    named ruleverticalwidth	rvw	{}
+ 	    named ruleleftwidth		rlw	{}
+ 	    named rulerightwidth	rrw	{}
+ 	    named rulegap		rg	{}
+ 	    named rulehorizontalgap	rhg	{}
+ 	    named ruleabovegap		rag	{}
+ 	    named rulebelowgap		rbg	{}
+ 	    named ruleverticalgap	rvg	{}
+ 	    named ruleleftgap		rlg	{}
+ 	    named rulerightgap		rrg	{}
+ 	    named rulecolour rulecolor				rc	{}
+ 	    named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	    named ruleabovecolour ruleabovecolor		rac	{}
+ 	    named rulebelowcolour rulebelowcolor		rbc	{}
+ 	    named ruleverticalcolour ruleverticalcolor		rvc	{}
+ 	    named ruleleftcolour ruleleftcolor			rlc	{}
+ 	    named rulerightcolour rulerightcolor		rrc	{}
+ 	    named ruleplainchar		rpc	{}
+ 	    named compulsory format
+ 		named A {} named B {} named C {} named D {} named E {}
+ 		named F {} named G {} named H {} named I {} named J {}
+ 		named K {} named L {} named M {} named N {} named O {}
+ 		named P {} named Q {} named R {} named S {} named T {}
+ 		named U {} named V {} named W {} named X {} named Y {}
+ 		named Z {}
+ 		named @Cell
+ 		    named paint			p	{}
+ 		    named background		bg	{}
+ 		    named font			f	{}
+ 		    named break			b	{}
+ 		    named width			w	{}
+ 		    named height		h	{}
+ 		    named indent		i	{}
+ 		    named indentvertical	iv	{}
+ 		    named strut			s	{}
+ 		    named struthorizontal	sh	{}
+ 		    named margin		m	{}
+ 		    named marginhorizontal	mh	{}
+ 		    named marginleft		ml	{}
+ 		    named marginright		mr	{}
+ 		    named marginvertical	mv	{}
+ 		    named marginabove		ma	{}
+ 		    named marginbelow		mb	{}
+ 		    named rule			r	{}
+ 		    named rulehorizontal	rh	{}
+ 		    named ruleabove		ra	{}
+ 		    named rulebelow		rb	{}
+ 		    named rulevertical		rv	{}
+ 		    named ruleleft		rl	{}
+ 		    named ruleright		rr	{}
+ 		    named rulewidth		rw	{}
+ 		    named rulehorizontalwidth	rhw	{}
+ 		    named ruleabovewidth	raw	{}
+ 		    named rulebelowwidth	rbw	{}
+ 		    named ruleverticalwidth	rvw	{}
+ 		    named ruleleftwidth		rlw	{}
+ 		    named rulerightwidth	rrw	{}
+ 		    named rulegap		rg	{}
+ 		    named rulehorizontalgap	rhg	{}
+ 		    named ruleabovegap		rag	{}
+ 		    named rulebelowgap		rbg	{}
+ 		    named ruleverticalgap	rvg	{}
+ 		    named ruleleftgap		rlg	{}
+ 		    named rulerightgap		rrg	{}
+ 		    named rulecolour rulecolor			rc	{}
+ 		    named rulehorizontalcolour rulehorizontalcolor rhc	{}
+ 		    named ruleabovecolour ruleabovecolor	rac	{}
+ 		    named rulebelowcolour rulebelowcolor	rbc	{}
+ 		    named ruleverticalcolour ruleverticalcolor	rvc	{}
+ 		    named ruleleftcolour ruleleftcolor		rlc	{}
+ 		    named rulerightcolour rulerightcolor	rrc	{}
+ 		    named ruleplainchar		rpc	{}
+ 		    right x
+ 		{}
+ 	    {}
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	{
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values as @Row knows them (i.e. Level 6)       #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def rowp    { p				@Else tblp   }
+ 	    def rowbg   { bg				@Else tblbg  }
+ 	    def rowf    { f				@Else tblf   }
+ 	    def rowb    { b				@Else tblb   }
+ 	    def roww    { w				@Else tblw   }
+ 	    def rowh    { h				@Else tblh   }
+ 	    def rowi    { i				@Else tbli   }
+ 	    def rowiv   { iv				@Else tbliv  }
+ 	    def rows    { s				@Else tbls   }
+ 	    def rowsh   { sh				@Else tblsh  }
+ 	    def rowml   { ml  @Else mh  @Else m		@Else tblml  }
+ 	    def rowmr   { mr  @Else mh  @Else m		@Else tblmr  }
+ 	    def rowma   { ma  @Else mv  @Else m		@Else tblma  }
+ 	    def rowmb   { mb  @Else mv  @Else m		@Else tblmb  }
+ 	    def rowra   { ra  @Else rh  @Else r		@Else tblra  }
+ 	    def rowrb   { rb  @Else rh  @Else r		@Else tblrb  }
+ 	    def rowrl   { rl  @Else rv  @Else r		@Else tblrl  }
+ 	    def rowrr   { rr  @Else rv  @Else r		@Else tblrr  }
+ 	    def rowraw  { raw @Else rhw @Else rw	@Else tblraw }
+ 	    def rowrbw  { rbw @Else rhw @Else rw	@Else tblrbw }
+ 	    def rowrlw  { rlw @Else rvw @Else rw	@Else tblrlw }
+ 	    def rowrrw  { rrw @Else rvw @Else rw	@Else tblrrw }
+ 	    def rowrag  { rag @Else rhg @Else rg	@Else tblrag }
+ 	    def rowrbg  { rbg @Else rhg @Else rg	@Else tblrbg }
+ 	    def rowrlg  { rlg @Else rvg @Else rg	@Else tblrlg }
+ 	    def rowrrg  { rrg @Else rvg @Else rg	@Else tblrrg }
+ 	    def rowrac  { rac @Else rhc @Else rc	@Else tblrac }
+ 	    def rowrbc  { rbc @Else rhc @Else rc	@Else tblrbc }
+ 	    def rowrlc  { rlc @Else rvc @Else rc	@Else tblrlc }
+ 	    def rowrrc  { rrc @Else rvc @Else rc	@Else tblrrc }
+ 	    def rowrpc  { rpc				@Else tblrpc }
+ 
+ 	    format
+ 		A { A } B { B } C { C } D { D } E { E } F { F }
+ 		G { G } H { H } I { I } J { J } K { K } L { L }
+ 		M { M } N { N } O { O } P { P } Q { Q } R { R }
+ 		S { S } T { T } U { U } V { V } W { W } X { X }
+ 		Y { Y } Z { Z }
+ 		@Cell {
+ 		
+ 		    @DoCell
+ 
+ 			#######################################################
+ 			#                                                     #
+ 			#  Specific option values to @Cell (i.e. Level 7)     #
+ 			#                                                     #
+ 			#######################################################
+ 
+ 			p    { p			@Else rowp   }
+ 			bg   { bg			@Else rowbg  }
+ 			f    { f			@Else rowf   }
+ 			b    { b			@Else rowb   }
+ 			w    { w			@Else roww   }
+ 			h    { h			@Else rowh   }
+ 			i    { i			@Else rowi   }
+ 			iv   { iv			@Else rowiv  }
+ 			s    { s			@Else rows   }
+ 			sh   { sh			@Else rowsh  }
+ 			ml   { ml  @Else mh  @Else m	@Else rowml  }
+ 			mr   { mr  @Else mh  @Else m	@Else rowmr  }
+ 			ma   { ma  @Else mv  @Else m	@Else rowma  }
+ 			mb   { mb  @Else mv  @Else m	@Else rowmb  }
+ 			ra   { ra  @Else rh  @Else r	@Else rowra  }
+ 			rb   { rb  @Else rh  @Else r	@Else rowrb  }
+ 			rl   { rl  @Else rv  @Else r	@Else rowrl  }
+ 			rr   { rr  @Else rv  @Else r	@Else rowrr  }
+ 			raw  { raw @Else rhw @Else rw	@Else rowraw }
+ 			rbw  { rbw @Else rhw @Else rw	@Else rowrbw }
+ 			rlw  { rlw @Else rvw @Else rw	@Else rowrlw }
+ 			rrw  { rrw @Else rvw @Else rw	@Else rowrrw }
+ 			rag  { rag @Else rhg @Else rg	@Else rowrag }
+ 			rbg  { rbg @Else rhg @Else rg	@Else rowrbg }
+ 			rlg  { rlg @Else rvg @Else rg	@Else rowrlg }
+ 			rrg  { rrg @Else rvg @Else rg	@Else rowrrg }
+ 			rac  { rac @Else rhc @Else rc	@Else rowrac }
+ 			rbc  { rbc @Else rhc @Else rc	@Else rowrbc }
+ 			rlc  { rlc @Else rvc @Else rc	@Else rowrlc }
+ 			rrc  { rrc @Else rvc @Else rc	@Else rowrrc }
+ 			rpc  { rpc			@Else rowrpc }
+ 
+ 			x
+ 		}
+ 	}
+ 
+ 	# symbol for producing @Rowa rows
+ 	def @DoRowa
+ 	    named paint			p	{}
+ 	    named background		bg	{}
+ 	    named font			f	{}
+ 	    named break			b	{}
+ 	    named width			w	{}
+ 	    named height		h	{}
+ 	    named indent		i	{}
+ 	    named indentvertical	iv	{}
+ 	    named strut			s	{}
+ 	    named struthorizontal	sh	{}
+ 	    named margin		m	{}
+ 	    named marginhorizontal	mh	{}
+ 	    named marginleft		ml	{}
+ 	    named marginright		mr	{}
+ 	    named marginvertical	mv	{}
+ 	    named marginabove		ma	{}
+ 	    named marginbelow		mb	{}
+ 	    named rule			r	{}
+ 	    named rulehorizontal	rh	{}
+ 	    named ruleabove		ra	{}
+ 	    named rulebelow		rb	{}
+ 	    named rulevertical		rv	{}
+ 	    named ruleleft		rl	{}
+ 	    named ruleright		rr	{}
+ 	    named rulewidth		rw	{}
+ 	    named rulehorizontalwidth	rhw	{}
+ 	    named ruleabovewidth	raw	{}
+ 	    named rulebelowwidth	rbw	{}
+ 	    named ruleverticalwidth	rvw	{}
+ 	    named ruleleftwidth		rlw	{}
+ 	    named rulerightwidth	rrw	{}
+ 	    named rulegap		rg	{}
+ 	    named rulehorizontalgap	rhg	{}
+ 	    named ruleabovegap		rag	{}
+ 	    named rulebelowgap		rbg	{}
+ 	    named ruleverticalgap	rvg	{}
+ 	    named ruleleftgap		rlg	{}
+ 	    named rulerightgap		rrg	{}
+ 	    named rulecolour rulecolor				rc	{}
+ 	    named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	    named ruleabovecolour ruleabovecolor		rac	{}
+ 	    named rulebelowcolour rulebelowcolor		rbc	{}
+ 	    named ruleverticalcolour ruleverticalcolor		rvc	{}
+ 	    named ruleleftcolour ruleleftcolor			rlc	{}
+ 	    named rulerightcolour rulerightcolor		rrc	{}
+ 	    named ruleplainchar		rpc	{}
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	{
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at "aoption" level (i.e. Level 3)       #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def tbxp    { ap				@Else tblp   }
+ 	    def tbxbg   { abg				@Else tblbg  }
+ 	    def tbxf    { af				@Else tblf   }
+ 	    def tbxb    { ab				@Else tblb   }
+ 	    def tbxw    { aw				@Else tblw   }
+ 	    def tbxh    { ah				@Else tblh   }
+ 	    def tbxi    { ai				@Else tbli   }
+ 	    def tbxiv   { aiv				@Else tbliv  }
+ 	    def tbxs    { as				@Else tbls   }
+ 	    def tbxsh   { ash				@Else tblsh  }
+ 	    def tbxml   { aml  @Else amh  @Else am	@Else tblml  }
+ 	    def tbxmr   { amr  @Else amh  @Else am	@Else tblmr  }
+ 	    def tbxma   { ama  @Else amv  @Else am	@Else tblma  }
+ 	    def tbxmb   { amb  @Else amv  @Else am	@Else tblmb  }
+ 	    def tbxra   { ara  @Else arh  @Else ar	@Else tblra  }
+ 	    def tbxrb   { arb  @Else arh  @Else ar	@Else tblrb  }
+ 	    def tbxrl   { arl  @Else arv  @Else ar	@Else tblrl  }
+ 	    def tbxrr   { arr  @Else arv  @Else ar	@Else tblrr  }
+ 	    def tbxraw  { araw @Else arhw @Else arw	@Else tblraw }
+ 	    def tbxrbw  { arbw @Else arhw @Else arw	@Else tblrbw }
+ 	    def tbxrlw  { arlw @Else arvw @Else arw	@Else tblrlw }
+ 	    def tbxrrw  { arrw @Else arvw @Else arw	@Else tblrrw }
+ 	    def tbxrag  { arag @Else arhg @Else arg	@Else tblrag }
+ 	    def tbxrbg  { arbg @Else arhg @Else arg	@Else tblrbg }
+ 	    def tbxrlg  { arlg @Else arvg @Else arg	@Else tblrlg }
+ 	    def tbxrrg  { arrg @Else arvg @Else arg	@Else tblrrg }
+ 	    def tbxrac  { arac @Else arhc @Else arc	@Else tblrac }
+ 	    def tbxrbc  { arbc @Else arhc @Else arc	@Else tblrbc }
+ 	    def tbxrlc  { arlc @Else arvc @Else arc	@Else tblrlc }
+ 	    def tbxrrc  { arrc @Else arvc @Else arc	@Else tblrrc }
+ 	    def tbxrpc  { arpc				@Else tblrpc }
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at @Rowa level (i.e. Level 4)           #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def rowp    { p				@Else tbxp   }
+ 	    def rowbg   { bg				@Else tbxbg  }
+ 	    def rowf    { f				@Else tbxf   }
+ 	    def rowb    { b				@Else tbxb   }
+ 	    def roww    { w				@Else tbxw   }
+ 	    def rowh    { h				@Else tbxh   }
+ 	    def rowi    { i				@Else tbxi   }
+ 	    def rowiv   { iv				@Else tbxiv  }
+ 	    def rows    { s				@Else tbxs   }
+ 	    def rowsh   { sh				@Else tbxsh  }
+ 	    def rowml   { ml  @Else mh  @Else m		@Else tbxml  }
+ 	    def rowmr   { mr  @Else mh  @Else m		@Else tbxmr  }
+ 	    def rowma   { ma  @Else mv  @Else m		@Else tbxma  }
+ 	    def rowmb   { mb  @Else mv  @Else m		@Else tbxmb  }
+ 	    def rowra   { ra  @Else rh  @Else r		@Else tbxra  }
+ 	    def rowrb   { rb  @Else rh  @Else r		@Else tbxrb  }
+ 	    def rowrl   { rl  @Else rv  @Else r		@Else tbxrl  }
+ 	    def rowrr   { rr  @Else rv  @Else r		@Else tbxrr  }
+ 	    def rowraw  { raw @Else rhw @Else rw	@Else tbxraw }
+ 	    def rowrbw  { rbw @Else rhw @Else rw	@Else tbxrbw }
+ 	    def rowrlw  { rlw @Else rvw @Else rw	@Else tbxrlw }
+ 	    def rowrrw  { rrw @Else rvw @Else rw	@Else tbxrrw }
+ 	    def rowrag  { rag @Else rhg @Else rg	@Else tbxrag }
+ 	    def rowrbg  { rbg @Else rhg @Else rg	@Else tbxrbg }
+ 	    def rowrlg  { rlg @Else rvg @Else rg	@Else tbxrlg }
+ 	    def rowrrg  { rrg @Else rvg @Else rg	@Else tbxrrg }
+ 	    def rowrac  { rac @Else rhc @Else rc	@Else tbxrac }
+ 	    def rowrbc  { rbc @Else rhc @Else rc	@Else tbxrbc }
+ 	    def rowrlc  { rlc @Else rvc @Else rc	@Else tbxrlc }
+ 	    def rowrrc  { rrc @Else rvc @Else rc	@Else tbxrrc }
+ 	    def rowrpc  { rpc				@Else tbxrpc }
+ 
+ 	    aformat
+ 		A { A } B { B } C { C } D { D } E { E } F { F }
+ 		G { G } H { H } I { I } J { J } K { K } L { L }
+ 		M { M } N { N } O { O } P { P } Q { Q } R { R }
+ 		S { S } T { T } U { U } V { V } W { W } X { X }
+ 		Y { Y } Z { Z }
+ 		@Cell {
+ 		
+ 		    @DoCell
+ 
+ 			#######################################################
+ 			#                                                     #
+ 			#  Specific option values to @Cell (i.e. Level 5)     #
+ 			#                                                     #
+ 			#######################################################
+ 
+ 			p    { p			@Else rowp   }
+ 			bg   { bg			@Else rowbg  }
+ 			f    { f			@Else rowf   }
+ 			b    { b			@Else rowb   }
+ 			w    { w			@Else roww   }
+ 			h    { h			@Else rowh   }
+ 			i    { i			@Else rowi   }
+ 			iv   { iv			@Else rowiv  }
+ 			s    { s			@Else rows   }
+ 			sh   { sh			@Else rowsh  }
+ 			ml   { ml  @Else mh  @Else m	@Else rowml  }
+ 			mr   { mr  @Else mh  @Else m	@Else rowmr  }
+ 			ma   { ma  @Else mv  @Else m	@Else rowma  }
+ 			mb   { mb  @Else mv  @Else m	@Else rowmb  }
+ 			ra   { ra  @Else rh  @Else r	@Else rowra  }
+ 			rb   { rb  @Else rh  @Else r	@Else rowrb  }
+ 			rl   { rl  @Else rv  @Else r	@Else rowrl  }
+ 			rr   { rr  @Else rv  @Else r	@Else rowrr  }
+ 			raw  { raw @Else rhw @Else rw	@Else rowraw }
+ 			rbw  { rbw @Else rhw @Else rw	@Else rowrbw }
+ 			rlw  { rlw @Else rvw @Else rw	@Else rowrlw }
+ 			rrw  { rrw @Else rvw @Else rw	@Else rowrrw }
+ 			rag  { rag @Else rhg @Else rg	@Else rowrag }
+ 			rbg  { rbg @Else rhg @Else rg	@Else rowrbg }
+ 			rlg  { rlg @Else rvg @Else rg	@Else rowrlg }
+ 			rrg  { rrg @Else rvg @Else rg	@Else rowrrg }
+ 			rac  { rac @Else rhc @Else rc	@Else rowrac }
+ 			rbc  { rbc @Else rhc @Else rc	@Else rowrbc }
+ 			rlc  { rlc @Else rvc @Else rc	@Else rowrlc }
+ 			rrc  { rrc @Else rvc @Else rc	@Else rowrrc }
+ 			rpc  { rpc			@Else rowrpc }
+ 
+ 			x
+ 		}
+ 	}
+ 
+ 	# symbol for producing @Rowb rows
+ 	def @DoRowb
+ 	    named paint			p	{}
+ 	    named background		bg	{}
+ 	    named font			f	{}
+ 	    named break			b	{}
+ 	    named width			w	{}
+ 	    named height		h	{}
+ 	    named indent		i	{}
+ 	    named indentvertical	iv	{}
+ 	    named strut			s	{}
+ 	    named struthorizontal	sh	{}
+ 	    named margin		m	{}
+ 	    named marginhorizontal	mh	{}
+ 	    named marginleft		ml	{}
+ 	    named marginright		mr	{}
+ 	    named marginvertical	mv	{}
+ 	    named marginabove		ma	{}
+ 	    named marginbelow		mb	{}
+ 	    named rule			r	{}
+ 	    named rulehorizontal	rh	{}
+ 	    named ruleabove		ra	{}
+ 	    named rulebelow		rb	{}
+ 	    named rulevertical		rv	{}
+ 	    named ruleleft		rl	{}
+ 	    named ruleright		rr	{}
+ 	    named rulewidth		rw	{}
+ 	    named rulehorizontalwidth	rhw	{}
+ 	    named ruleabovewidth	raw	{}
+ 	    named rulebelowwidth	rbw	{}
+ 	    named ruleverticalwidth	rvw	{}
+ 	    named ruleleftwidth		rlw	{}
+ 	    named rulerightwidth	rrw	{}
+ 	    named rulegap		rg	{}
+ 	    named rulehorizontalgap	rhg	{}
+ 	    named ruleabovegap		rag	{}
+ 	    named rulebelowgap		rbg	{}
+ 	    named ruleverticalgap	rvg	{}
+ 	    named ruleleftgap		rlg	{}
+ 	    named rulerightgap		rrg	{}
+ 	    named rulecolour rulecolor				rc	{}
+ 	    named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	    named ruleabovecolour ruleabovecolor		rac	{}
+ 	    named rulebelowcolour rulebelowcolor		rbc	{}
+ 	    named ruleverticalcolour ruleverticalcolor		rvc	{}
+ 	    named ruleleftcolour ruleleftcolor			rlc	{}
+ 	    named rulerightcolour rulerightcolor		rrc	{}
+ 	    named ruleplainchar		rpc	{}
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	{
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at "boption" level (i.e. Level 3)       #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def tbxp    { bp				@Else tblp   }
+ 	    def tbxbg   { bbg				@Else tblbg  }
+ 	    def tbxf    { bf				@Else tblf   }
+ 	    def tbxb    { bb				@Else tblb   }
+ 	    def tbxw    { bw				@Else tblw   }
+ 	    def tbxh    { bh				@Else tblh   }
+ 	    def tbxi    { bi				@Else tbli   }
+ 	    def tbxiv   { biv				@Else tbliv  }
+ 	    def tbxs    { bs				@Else tbls   }
+ 	    def tbxsh   { bsh				@Else tblsh  }
+ 	    def tbxml   { bml  @Else bmh  @Else bm	@Else tblml  }
+ 	    def tbxmr   { bmr  @Else bmh  @Else bm	@Else tblmr  }
+ 	    def tbxma   { bma  @Else bmv  @Else bm	@Else tblma  }
+ 	    def tbxmb   { bmb  @Else bmv  @Else bm	@Else tblmb  }
+ 	    def tbxra   { bra  @Else brh  @Else br	@Else tblra  }
+ 	    def tbxrb   { brb  @Else brh  @Else br	@Else tblrb  }
+ 	    def tbxrl   { brl  @Else brv  @Else br	@Else tblrl  }
+ 	    def tbxrr   { brr  @Else brv  @Else br	@Else tblrr  }
+ 	    def tbxraw  { braw @Else brhw @Else brw	@Else tblraw }
+ 	    def tbxrbw  { brbw @Else brhw @Else brw	@Else tblrbw }
+ 	    def tbxrlw  { brlw @Else brvw @Else brw	@Else tblrlw }
+ 	    def tbxrrw  { brrw @Else brvw @Else brw	@Else tblrrw }
+ 	    def tbxrag  { brag @Else brhg @Else brg	@Else tblrag }
+ 	    def tbxrbg  { brbg @Else brhg @Else brg	@Else tblrbg }
+ 	    def tbxrlg  { brlg @Else brvg @Else brg	@Else tblrlg }
+ 	    def tbxrrg  { brrg @Else brvg @Else brg	@Else tblrrg }
+ 	    def tbxrac  { brac @Else brhc @Else brc	@Else tblrac }
+ 	    def tbxrbc  { brbc @Else brhc @Else brc	@Else tblrbc }
+ 	    def tbxrlc  { brlc @Else brvc @Else brc	@Else tblrlc }
+ 	    def tbxrrc  { brrc @Else brvc @Else brc	@Else tblrrc }
+ 	    def tbxrpc  { brpc				@Else tblrpc }
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at @Rowb level (i.e. Level 4)           #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def rowp    { p				@Else tbxp   }
+ 	    def rowbg   { bg				@Else tbxbg  }
+ 	    def rowf    { f				@Else tbxf   }
+ 	    def rowb    { b				@Else tbxb   }
+ 	    def roww    { w				@Else tbxw   }
+ 	    def rowh    { h				@Else tbxh   }
+ 	    def rowi    { i				@Else tbxi   }
+ 	    def rowiv   { iv				@Else tbxiv  }
+ 	    def rows    { s				@Else tbxs   }
+ 	    def rowsh   { sh				@Else tbxsh  }
+ 	    def rowml   { ml  @Else mh  @Else m		@Else tbxml  }
+ 	    def rowmr   { mr  @Else mh  @Else m		@Else tbxmr  }
+ 	    def rowma   { ma  @Else mv  @Else m		@Else tbxma  }
+ 	    def rowmb   { mb  @Else mv  @Else m		@Else tbxmb  }
+ 	    def rowra   { ra  @Else rh  @Else r		@Else tbxra  }
+ 	    def rowrb   { rb  @Else rh  @Else r		@Else tbxrb  }
+ 	    def rowrl   { rl  @Else rv  @Else r		@Else tbxrl  }
+ 	    def rowrr   { rr  @Else rv  @Else r		@Else tbxrr  }
+ 	    def rowraw  { raw @Else rhw @Else rw	@Else tbxraw }
+ 	    def rowrbw  { rbw @Else rhw @Else rw	@Else tbxrbw }
+ 	    def rowrlw  { rlw @Else rvw @Else rw	@Else tbxrlw }
+ 	    def rowrrw  { rrw @Else rvw @Else rw	@Else tbxrrw }
+ 	    def rowrag  { rag @Else rhg @Else rg	@Else tbxrag }
+ 	    def rowrbg  { rbg @Else rhg @Else rg	@Else tbxrbg }
+ 	    def rowrlg  { rlg @Else rvg @Else rg	@Else tbxrlg }
+ 	    def rowrrg  { rrg @Else rvg @Else rg	@Else tbxrrg }
+ 	    def rowrac  { rac @Else rhc @Else rc	@Else tbxrac }
+ 	    def rowrbc  { rbc @Else rhc @Else rc	@Else tbxrbc }
+ 	    def rowrlc  { rlc @Else rvc @Else rc	@Else tbxrlc }
+ 	    def rowrrc  { rrc @Else rvc @Else rc	@Else tbxrrc }
+ 	    def rowrpc  { rpc				@Else tbxrpc }
+ 
+ 	    bformat
+ 		A { A } B { B } C { C } D { D } E { E } F { F }
+ 		G { G } H { H } I { I } J { J } K { K } L { L }
+ 		M { M } N { N } O { O } P { P } Q { Q } R { R }
+ 		S { S } T { T } U { U } V { V } W { W } X { X }
+ 		Y { Y } Z { Z }
+ 		@Cell {
+ 		
+ 		    @DoCell
+ 
+ 			#######################################################
+ 			#                                                     #
+ 			#  Specific option values to @Cell (i.e. Level 5)     #
+ 			#                                                     #
+ 			#######################################################
+ 
+ 			p    { p			@Else rowp   }
+ 			bg   { bg			@Else rowbg  }
+ 			f    { f			@Else rowf   }
+ 			b    { b			@Else rowb   }
+ 			w    { w			@Else roww   }
+ 			h    { h			@Else rowh   }
+ 			i    { i			@Else rowi   }
+ 			iv   { iv			@Else rowiv  }
+ 			s    { s			@Else rows   }
+ 			sh   { sh			@Else rowsh  }
+ 			ml   { ml  @Else mh  @Else m	@Else rowml  }
+ 			mr   { mr  @Else mh  @Else m	@Else rowmr  }
+ 			ma   { ma  @Else mv  @Else m	@Else rowma  }
+ 			mb   { mb  @Else mv  @Else m	@Else rowmb  }
+ 			ra   { ra  @Else rh  @Else r	@Else rowra  }
+ 			rb   { rb  @Else rh  @Else r	@Else rowrb  }
+ 			rl   { rl  @Else rv  @Else r	@Else rowrl  }
+ 			rr   { rr  @Else rv  @Else r	@Else rowrr  }
+ 			raw  { raw @Else rhw @Else rw	@Else rowraw }
+ 			rbw  { rbw @Else rhw @Else rw	@Else rowrbw }
+ 			rlw  { rlw @Else rvw @Else rw	@Else rowrlw }
+ 			rrw  { rrw @Else rvw @Else rw	@Else rowrrw }
+ 			rag  { rag @Else rhg @Else rg	@Else rowrag }
+ 			rbg  { rbg @Else rhg @Else rg	@Else rowrbg }
+ 			rlg  { rlg @Else rvg @Else rg	@Else rowrlg }
+ 			rrg  { rrg @Else rvg @Else rg	@Else rowrrg }
+ 			rac  { rac @Else rhc @Else rc	@Else rowrac }
+ 			rbc  { rbc @Else rhc @Else rc	@Else rowrbc }
+ 			rlc  { rlc @Else rvc @Else rc	@Else rowrlc }
+ 			rrc  { rrc @Else rvc @Else rc	@Else rowrrc }
+ 			rpc  { rpc			@Else rowrpc }
+ 
+ 			x
+ 		}
+ 	}
+ 
+ 	# symbol for producing @Rowc rows
+ 	def @DoRowc
+ 	    named paint			p	{}
+ 	    named background		bg	{}
+ 	    named font			f	{}
+ 	    named break			b	{}
+ 	    named width			w	{}
+ 	    named height		h	{}
+ 	    named indent		i	{}
+ 	    named indentvertical	iv	{}
+ 	    named strut			s	{}
+ 	    named struthorizontal	sh	{}
+ 	    named margin		m	{}
+ 	    named marginhorizontal	mh	{}
+ 	    named marginleft		ml	{}
+ 	    named marginright		mr	{}
+ 	    named marginvertical	mv	{}
+ 	    named marginabove		ma	{}
+ 	    named marginbelow		mb	{}
+ 	    named rule			r	{}
+ 	    named rulehorizontal	rh	{}
+ 	    named ruleabove		ra	{}
+ 	    named rulebelow		rb	{}
+ 	    named rulevertical		rv	{}
+ 	    named ruleleft		rl	{}
+ 	    named ruleright		rr	{}
+ 	    named rulewidth		rw	{}
+ 	    named rulehorizontalwidth	rhw	{}
+ 	    named ruleabovewidth	raw	{}
+ 	    named rulebelowwidth	rbw	{}
+ 	    named ruleverticalwidth	rvw	{}
+ 	    named ruleleftwidth		rlw	{}
+ 	    named rulerightwidth	rrw	{}
+ 	    named rulegap		rg	{}
+ 	    named rulehorizontalgap	rhg	{}
+ 	    named ruleabovegap		rag	{}
+ 	    named rulebelowgap		rbg	{}
+ 	    named ruleverticalgap	rvg	{}
+ 	    named ruleleftgap		rlg	{}
+ 	    named rulerightgap		rrg	{}
+ 	    named rulecolour rulecolor				rc	{}
+ 	    named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	    named ruleabovecolour ruleabovecolor		rac	{}
+ 	    named rulebelowcolour rulebelowcolor		rbc	{}
+ 	    named ruleverticalcolour ruleverticalcolor		rvc	{}
+ 	    named ruleleftcolour ruleleftcolor			rlc	{}
+ 	    named rulerightcolour rulerightcolor		rrc	{}
+ 	    named ruleplainchar		rpc	{}
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	{
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at "coption" level (i.e. Level 3)       #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def tbxp    { cp				@Else tblp   }
+ 	    def tbxbg   { cbg				@Else tblbg  }
+ 	    def tbxf    { cf				@Else tblf   }
+ 	    def tbxb    { cb				@Else tblb   }
+ 	    def tbxw    { cw				@Else tblw   }
+ 	    def tbxh    { ch				@Else tblh   }
+ 	    def tbxi    { ci				@Else tbli   }
+ 	    def tbxiv   { civ				@Else tbliv  }
+ 	    def tbxs    { cs				@Else tbls   }
+ 	    def tbxsh   { csh				@Else tblsh  }
+ 	    def tbxml   { cml  @Else cmh  @Else cm	@Else tblml  }
+ 	    def tbxmr   { cmr  @Else cmh  @Else cm	@Else tblmr  }
+ 	    def tbxma   { cma  @Else cmv  @Else cm	@Else tblma  }
+ 	    def tbxmb   { cmb  @Else cmv  @Else cm	@Else tblmb  }
+ 	    def tbxra   { cra  @Else crh  @Else cr	@Else tblra  }
+ 	    def tbxrb   { crb  @Else crh  @Else cr	@Else tblrb  }
+ 	    def tbxrl   { crl  @Else crv  @Else cr	@Else tblrl  }
+ 	    def tbxrr   { crr  @Else crv  @Else cr	@Else tblrr  }
+ 	    def tbxraw  { craw @Else crhw @Else crw	@Else tblraw }
+ 	    def tbxrbw  { crbw @Else crhw @Else crw	@Else tblrbw }
+ 	    def tbxrlw  { crlw @Else crvw @Else crw	@Else tblrlw }
+ 	    def tbxrrw  { crrw @Else crvw @Else crw	@Else tblrrw }
+ 	    def tbxrag  { crag @Else crhg @Else crg	@Else tblrag }
+ 	    def tbxrbg  { crbg @Else crhg @Else crg	@Else tblrbg }
+ 	    def tbxrlg  { crlg @Else crvg @Else crg	@Else tblrlg }
+ 	    def tbxrrg  { crrg @Else crvg @Else crg	@Else tblrrg }
+ 	    def tbxrac  { crac @Else crhc @Else crc	@Else tblrac }
+ 	    def tbxrbc  { crbc @Else crhc @Else crc	@Else tblrbc }
+ 	    def tbxrlc  { crlc @Else crvc @Else crc	@Else tblrlc }
+ 	    def tbxrrc  { crrc @Else crvc @Else crc	@Else tblrrc }
+ 	    def tbxrpc  { crpc				@Else tblrpc }
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at @Rowc level (i.e. Level 4)           #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def rowp    { p				@Else tbxp   }
+ 	    def rowbg   { bg				@Else tbxbg  }
+ 	    def rowf    { f				@Else tbxf   }
+ 	    def rowb    { b				@Else tbxb   }
+ 	    def roww    { w				@Else tbxw   }
+ 	    def rowh    { h				@Else tbxh   }
+ 	    def rowi    { i				@Else tbxi   }
+ 	    def rowiv   { iv				@Else tbxiv  }
+ 	    def rows    { s				@Else tbxs   }
+ 	    def rowsh   { sh				@Else tbxsh  }
+ 	    def rowml   { ml  @Else mh  @Else m		@Else tbxml  }
+ 	    def rowmr   { mr  @Else mh  @Else m		@Else tbxmr  }
+ 	    def rowma   { ma  @Else mv  @Else m		@Else tbxma  }
+ 	    def rowmb   { mb  @Else mv  @Else m		@Else tbxmb  }
+ 	    def rowra   { ra  @Else rh  @Else r		@Else tbxra  }
+ 	    def rowrb   { rb  @Else rh  @Else r		@Else tbxrb  }
+ 	    def rowrl   { rl  @Else rv  @Else r		@Else tbxrl  }
+ 	    def rowrr   { rr  @Else rv  @Else r		@Else tbxrr  }
+ 	    def rowraw  { raw @Else rhw @Else rw	@Else tbxraw }
+ 	    def rowrbw  { rbw @Else rhw @Else rw	@Else tbxrbw }
+ 	    def rowrlw  { rlw @Else rvw @Else rw	@Else tbxrlw }
+ 	    def rowrrw  { rrw @Else rvw @Else rw	@Else tbxrrw }
+ 	    def rowrag  { rag @Else rhg @Else rg	@Else tbxrag }
+ 	    def rowrbg  { rbg @Else rhg @Else rg	@Else tbxrbg }
+ 	    def rowrlg  { rlg @Else rvg @Else rg	@Else tbxrlg }
+ 	    def rowrrg  { rrg @Else rvg @Else rg	@Else tbxrrg }
+ 	    def rowrac  { rac @Else rhc @Else rc	@Else tbxrac }
+ 	    def rowrbc  { rbc @Else rhc @Else rc	@Else tbxrbc }
+ 	    def rowrlc  { rlc @Else rvc @Else rc	@Else tbxrlc }
+ 	    def rowrrc  { rrc @Else rvc @Else rc	@Else tbxrrc }
+ 	    def rowrpc  { rpc				@Else tbxrpc }
+ 
+ 	    cformat
+ 		A { A } B { B } C { C } D { D } E { E } F { F }
+ 		G { G } H { H } I { I } J { J } K { K } L { L }
+ 		M { M } N { N } O { O } P { P } Q { Q } R { R }
+ 		S { S } T { T } U { U } V { V } W { W } X { X }
+ 		Y { Y } Z { Z }
+ 		@Cell {
+ 		
+ 		    @DoCell
+ 
+ 			#######################################################
+ 			#                                                     #
+ 			#  Specific option values to @Cell (i.e. Level 5)     #
+ 			#                                                     #
+ 			#######################################################
+ 
+ 			p    { p			@Else rowp   }
+ 			bg   { bg			@Else rowbg  }
+ 			f    { f			@Else rowf   }
+ 			b    { b			@Else rowb   }
+ 			w    { w			@Else roww   }
+ 			h    { h			@Else rowh   }
+ 			i    { i			@Else rowi   }
+ 			iv   { iv			@Else rowiv  }
+ 			s    { s			@Else rows   }
+ 			sh   { sh			@Else rowsh  }
+ 			ml   { ml  @Else mh  @Else m	@Else rowml  }
+ 			mr   { mr  @Else mh  @Else m	@Else rowmr  }
+ 			ma   { ma  @Else mv  @Else m	@Else rowma  }
+ 			mb   { mb  @Else mv  @Else m	@Else rowmb  }
+ 			ra   { ra  @Else rh  @Else r	@Else rowra  }
+ 			rb   { rb  @Else rh  @Else r	@Else rowrb  }
+ 			rl   { rl  @Else rv  @Else r	@Else rowrl  }
+ 			rr   { rr  @Else rv  @Else r	@Else rowrr  }
+ 			raw  { raw @Else rhw @Else rw	@Else rowraw }
+ 			rbw  { rbw @Else rhw @Else rw	@Else rowrbw }
+ 			rlw  { rlw @Else rvw @Else rw	@Else rowrlw }
+ 			rrw  { rrw @Else rvw @Else rw	@Else rowrrw }
+ 			rag  { rag @Else rhg @Else rg	@Else rowrag }
+ 			rbg  { rbg @Else rhg @Else rg	@Else rowrbg }
+ 			rlg  { rlg @Else rvg @Else rg	@Else rowrlg }
+ 			rrg  { rrg @Else rvg @Else rg	@Else rowrrg }
+ 			rac  { rac @Else rhc @Else rc	@Else rowrac }
+ 			rbc  { rbc @Else rhc @Else rc	@Else rowrbc }
+ 			rlc  { rlc @Else rvc @Else rc	@Else rowrlc }
+ 			rrc  { rrc @Else rvc @Else rc	@Else rowrrc }
+ 			rpc  { rpc			@Else rowrpc }
+ 
+ 			x
+ 		}
+ 	}
+ 
+ 	# symbol for producing @Rowd rows
+ 	def @DoRowd
+ 	    named paint			p	{}
+ 	    named background		bg	{}
+ 	    named font			f	{}
+ 	    named break			b	{}
+ 	    named width			w	{}
+ 	    named height		h	{}
+ 	    named indent		i	{}
+ 	    named indentvertical	iv	{}
+ 	    named strut			s	{}
+ 	    named struthorizontal	sh	{}
+ 	    named margin		m	{}
+ 	    named marginhorizontal	mh	{}
+ 	    named marginleft		ml	{}
+ 	    named marginright		mr	{}
+ 	    named marginvertical	mv	{}
+ 	    named marginabove		ma	{}
+ 	    named marginbelow		mb	{}
+ 	    named rule			r	{}
+ 	    named rulehorizontal	rh	{}
+ 	    named ruleabove		ra	{}
+ 	    named rulebelow		rb	{}
+ 	    named rulevertical		rv	{}
+ 	    named ruleleft		rl	{}
+ 	    named ruleright		rr	{}
+ 	    named rulewidth		rw	{}
+ 	    named rulehorizontalwidth	rhw	{}
+ 	    named ruleabovewidth	raw	{}
+ 	    named rulebelowwidth	rbw	{}
+ 	    named ruleverticalwidth	rvw	{}
+ 	    named ruleleftwidth		rlw	{}
+ 	    named rulerightwidth	rrw	{}
+ 	    named rulegap		rg	{}
+ 	    named rulehorizontalgap	rhg	{}
+ 	    named ruleabovegap		rag	{}
+ 	    named rulebelowgap		rbg	{}
+ 	    named ruleverticalgap	rvg	{}
+ 	    named ruleleftgap		rlg	{}
+ 	    named rulerightgap		rrg	{}
+ 	    named rulecolour rulecolor				rc	{}
+ 	    named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	    named ruleabovecolour ruleabovecolor		rac	{}
+ 	    named rulebelowcolour rulebelowcolor		rbc	{}
+ 	    named ruleverticalcolour ruleverticalcolor		rvc	{}
+ 	    named ruleleftcolour ruleleftcolor			rlc	{}
+ 	    named rulerightcolour rulerightcolor		rrc	{}
+ 	    named ruleplainchar		rpc	{}
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	{
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at "doption" level (i.e. Level 3)       #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def tbxp    { dp				@Else tblp   }
+ 	    def tbxbg   { dbg				@Else tblbg  }
+ 	    def tbxf    { df				@Else tblf   }
+ 	    def tbxb    { db				@Else tblb   }
+ 	    def tbxw    { dw				@Else tblw   }
+ 	    def tbxh    { dh				@Else tblh   }
+ 	    def tbxi    { di				@Else tbli   }
+ 	    def tbxiv   { div				@Else tbliv  }
+ 	    def tbxs    { ds				@Else tbls   }
+ 	    def tbxsh   { dsh				@Else tblsh  }
+ 	    def tbxml   { dml  @Else dmh  @Else dm	@Else tblml  }
+ 	    def tbxmr   { dmr  @Else dmh  @Else dm	@Else tblmr  }
+ 	    def tbxma   { dma  @Else dmv  @Else dm	@Else tblma  }
+ 	    def tbxmb   { dmb  @Else dmv  @Else dm	@Else tblmb  }
+ 	    def tbxra   { dra  @Else drh  @Else dr	@Else tblra  }
+ 	    def tbxrb   { drb  @Else drh  @Else dr	@Else tblrb  }
+ 	    def tbxrl   { drl  @Else drv  @Else dr	@Else tblrl  }
+ 	    def tbxrr   { drr  @Else drv  @Else dr	@Else tblrr  }
+ 	    def tbxraw  { draw @Else drhw @Else drw	@Else tblraw }
+ 	    def tbxrbw  { drbw @Else drhw @Else drw	@Else tblrbw }
+ 	    def tbxrlw  { drlw @Else drvw @Else drw	@Else tblrlw }
+ 	    def tbxrrw  { drrw @Else drvw @Else drw	@Else tblrrw }
+ 	    def tbxrag  { drag @Else drhg @Else drg	@Else tblrag }
+ 	    def tbxrbg  { drbg @Else drhg @Else drg	@Else tblrbg }
+ 	    def tbxrlg  { drlg @Else drvg @Else drg	@Else tblrlg }
+ 	    def tbxrrg  { drrg @Else drvg @Else drg	@Else tblrrg }
+ 	    def tbxrac  { drac @Else drhc @Else drc	@Else tblrac }
+ 	    def tbxrbc  { drbc @Else drhc @Else drc	@Else tblrbc }
+ 	    def tbxrlc  { drlc @Else drvc @Else drc	@Else tblrlc }
+ 	    def tbxrrc  { drrc @Else drvc @Else drc	@Else tblrrc }
+ 	    def tbxrpc  { drpc				@Else tblrpc }
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at @Rowd level (i.e. Level 4)           #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def rowp    { p				@Else tbxp   }
+ 	    def rowbg   { bg				@Else tbxbg  }
+ 	    def rowf    { f				@Else tbxf   }
+ 	    def rowb    { b				@Else tbxb   }
+ 	    def roww    { w				@Else tbxw   }
+ 	    def rowh    { h				@Else tbxh   }
+ 	    def rowi    { i				@Else tbxi   }
+ 	    def rowiv   { iv				@Else tbxiv  }
+ 	    def rows    { s				@Else tbxs   }
+ 	    def rowsh   { sh				@Else tbxsh  }
+ 	    def rowml   { ml  @Else mh  @Else m		@Else tbxml  }
+ 	    def rowmr   { mr  @Else mh  @Else m		@Else tbxmr  }
+ 	    def rowma   { ma  @Else mv  @Else m		@Else tbxma  }
+ 	    def rowmb   { mb  @Else mv  @Else m		@Else tbxmb  }
+ 	    def rowra   { ra  @Else rh  @Else r		@Else tbxra  }
+ 	    def rowrb   { rb  @Else rh  @Else r		@Else tbxrb  }
+ 	    def rowrl   { rl  @Else rv  @Else r		@Else tbxrl  }
+ 	    def rowrr   { rr  @Else rv  @Else r		@Else tbxrr  }
+ 	    def rowraw  { raw @Else rhw @Else rw	@Else tbxraw }
+ 	    def rowrbw  { rbw @Else rhw @Else rw	@Else tbxrbw }
+ 	    def rowrlw  { rlw @Else rvw @Else rw	@Else tbxrlw }
+ 	    def rowrrw  { rrw @Else rvw @Else rw	@Else tbxrrw }
+ 	    def rowrag  { rag @Else rhg @Else rg	@Else tbxrag }
+ 	    def rowrbg  { rbg @Else rhg @Else rg	@Else tbxrbg }
+ 	    def rowrlg  { rlg @Else rvg @Else rg	@Else tbxrlg }
+ 	    def rowrrg  { rrg @Else rvg @Else rg	@Else tbxrrg }
+ 	    def rowrac  { rac @Else rhc @Else rc	@Else tbxrac }
+ 	    def rowrbc  { rbc @Else rhc @Else rc	@Else tbxrbc }
+ 	    def rowrlc  { rlc @Else rvc @Else rc	@Else tbxrlc }
+ 	    def rowrrc  { rrc @Else rvc @Else rc	@Else tbxrrc }
+ 	    def rowrpc  { rpc				@Else tbxrpc }
+ 
+ 	    dformat
+ 		A { A } B { B } C { C } D { D } E { E } F { F }
+ 		G { G } H { H } I { I } J { J } K { K } L { L }
+ 		M { M } N { N } O { O } P { P } Q { Q } R { R }
+ 		S { S } T { T } U { U } V { V } W { W } X { X }
+ 		Y { Y } Z { Z }
+ 		@Cell {
+ 		
+ 		    @DoCell
+ 
+ 			#######################################################
+ 			#                                                     #
+ 			#  Specific option values to @Cell (i.e. Level 5)     #
+ 			#                                                     #
+ 			#######################################################
+ 
+ 			p    { p			@Else rowp   }
+ 			bg   { bg			@Else rowbg  }
+ 			f    { f			@Else rowf   }
+ 			b    { b			@Else rowb   }
+ 			w    { w			@Else roww   }
+ 			h    { h			@Else rowh   }
+ 			i    { i			@Else rowi   }
+ 			iv   { iv			@Else rowiv  }
+ 			s    { s			@Else rows   }
+ 			sh   { sh			@Else rowsh  }
+ 			ml   { ml  @Else mh  @Else m	@Else rowml  }
+ 			mr   { mr  @Else mh  @Else m	@Else rowmr  }
+ 			ma   { ma  @Else mv  @Else m	@Else rowma  }
+ 			mb   { mb  @Else mv  @Else m	@Else rowmb  }
+ 			ra   { ra  @Else rh  @Else r	@Else rowra  }
+ 			rb   { rb  @Else rh  @Else r	@Else rowrb  }
+ 			rl   { rl  @Else rv  @Else r	@Else rowrl  }
+ 			rr   { rr  @Else rv  @Else r	@Else rowrr  }
+ 			raw  { raw @Else rhw @Else rw	@Else rowraw }
+ 			rbw  { rbw @Else rhw @Else rw	@Else rowrbw }
+ 			rlw  { rlw @Else rvw @Else rw	@Else rowrlw }
+ 			rrw  { rrw @Else rvw @Else rw	@Else rowrrw }
+ 			rag  { rag @Else rhg @Else rg	@Else rowrag }
+ 			rbg  { rbg @Else rhg @Else rg	@Else rowrbg }
+ 			rlg  { rlg @Else rvg @Else rg	@Else rowrlg }
+ 			rrg  { rrg @Else rvg @Else rg	@Else rowrrg }
+ 			rac  { rac @Else rhc @Else rc	@Else rowrac }
+ 			rbc  { rbc @Else rhc @Else rc	@Else rowrbc }
+ 			rlc  { rlc @Else rvc @Else rc	@Else rowrlc }
+ 			rrc  { rrc @Else rvc @Else rc	@Else rowrrc }
+ 			rpc  { rpc			@Else rowrpc }
+ 
+ 			x
+ 		}
+ 	}
+ 
+ 	# symbol for producing @Rowe rows
+ 	def @DoRowe
+ 	    named paint			p	{}
+ 	    named background		bg	{}
+ 	    named font			f	{}
+ 	    named break			b	{}
+ 	    named width			w	{}
+ 	    named height		h	{}
+ 	    named indent		i	{}
+ 	    named indentvertical	iv	{}
+ 	    named strut			s	{}
+ 	    named struthorizontal	sh	{}
+ 	    named margin		m	{}
+ 	    named marginhorizontal	mh	{}
+ 	    named marginleft		ml	{}
+ 	    named marginright		mr	{}
+ 	    named marginvertical	mv	{}
+ 	    named marginabove		ma	{}
+ 	    named marginbelow		mb	{}
+ 	    named rule			r	{}
+ 	    named rulehorizontal	rh	{}
+ 	    named ruleabove		ra	{}
+ 	    named rulebelow		rb	{}
+ 	    named rulevertical		rv	{}
+ 	    named ruleleft		rl	{}
+ 	    named ruleright		rr	{}
+ 	    named rulewidth		rw	{}
+ 	    named rulehorizontalwidth	rhw	{}
+ 	    named ruleabovewidth	raw	{}
+ 	    named rulebelowwidth	rbw	{}
+ 	    named ruleverticalwidth	rvw	{}
+ 	    named ruleleftwidth		rlw	{}
+ 	    named rulerightwidth	rrw	{}
+ 	    named rulegap		rg	{}
+ 	    named rulehorizontalgap	rhg	{}
+ 	    named ruleabovegap		rag	{}
+ 	    named rulebelowgap		rbg	{}
+ 	    named ruleverticalgap	rvg	{}
+ 	    named ruleleftgap		rlg	{}
+ 	    named rulerightgap		rrg	{}
+ 	    named rulecolour rulecolor				rc	{}
+ 	    named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	    named ruleabovecolour ruleabovecolor		rac	{}
+ 	    named rulebelowcolour rulebelowcolor		rbc	{}
+ 	    named ruleverticalcolour ruleverticalcolor		rvc	{}
+ 	    named ruleleftcolour ruleleftcolor			rlc	{}
+ 	    named rulerightcolour rulerightcolor		rrc	{}
+ 	    named ruleplainchar		rpc	{}
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	{
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at "eoption" level (i.e. Level 3)       #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def tbxp    { ep				@Else tblp   }
+ 	    def tbxbg   { ebg				@Else tblbg  }
+ 	    def tbxf    { ef				@Else tblf   }
+ 	    def tbxb    { eb				@Else tblb   }
+ 	    def tbxw    { ew				@Else tblw   }
+ 	    def tbxh    { eh				@Else tblh   }
+ 	    def tbxi    { ei				@Else tbli   }
+ 	    def tbxiv   { eiv				@Else tbliv  }
+ 	    def tbxs    { es				@Else tbls   }
+ 	    def tbxsh   { esh				@Else tblsh  }
+ 	    def tbxml   { eml  @Else emh  @Else em	@Else tblml  }
+ 	    def tbxmr   { emr  @Else emh  @Else em	@Else tblmr  }
+ 	    def tbxma   { ema  @Else emv  @Else em	@Else tblma  }
+ 	    def tbxmb   { emb  @Else emv  @Else em	@Else tblmb  }
+ 	    def tbxra   { era  @Else erh  @Else er	@Else tblra  }
+ 	    def tbxrb   { erb  @Else erh  @Else er	@Else tblrb  }
+ 	    def tbxrl   { erl  @Else erv  @Else er	@Else tblrl  }
+ 	    def tbxrr   { err  @Else erv  @Else er	@Else tblrr  }
+ 	    def tbxraw  { eraw @Else erhw @Else erw	@Else tblraw }
+ 	    def tbxrbw  { erbw @Else erhw @Else erw	@Else tblrbw }
+ 	    def tbxrlw  { erlw @Else ervw @Else erw	@Else tblrlw }
+ 	    def tbxrrw  { errw @Else ervw @Else erw	@Else tblrrw }
+ 	    def tbxrag  { erag @Else erhg @Else erg	@Else tblrag }
+ 	    def tbxrbg  { erbg @Else erhg @Else erg	@Else tblrbg }
+ 	    def tbxrlg  { erlg @Else ervg @Else erg	@Else tblrlg }
+ 	    def tbxrrg  { errg @Else ervg @Else erg	@Else tblrrg }
+ 	    def tbxrac  { erac @Else erhc @Else erc	@Else tblrac }
+ 	    def tbxrbc  { erbc @Else erhc @Else erc	@Else tblrbc }
+ 	    def tbxrlc  { erlc @Else ervc @Else erc	@Else tblrlc }
+ 	    def tbxrrc  { errc @Else ervc @Else erc	@Else tblrrc }
+ 	    def tbxrpc  { erpc				@Else tblrpc }
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at @Rowe level (i.e. Level 4)           #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def rowp    { p				@Else tbxp   }
+ 	    def rowbg   { bg				@Else tbxbg  }
+ 	    def rowf    { f				@Else tbxf   }
+ 	    def rowb    { b				@Else tbxb   }
+ 	    def roww    { w				@Else tbxw   }
+ 	    def rowh    { h				@Else tbxh   }
+ 	    def rowi    { i				@Else tbxi   }
+ 	    def rowiv   { iv				@Else tbxiv  }
+ 	    def rows    { s				@Else tbxs   }
+ 	    def rowsh   { sh				@Else tbxsh  }
+ 	    def rowml   { ml  @Else mh  @Else m		@Else tbxml  }
+ 	    def rowmr   { mr  @Else mh  @Else m		@Else tbxmr  }
+ 	    def rowma   { ma  @Else mv  @Else m		@Else tbxma  }
+ 	    def rowmb   { mb  @Else mv  @Else m		@Else tbxmb  }
+ 	    def rowra   { ra  @Else rh  @Else r		@Else tbxra  }
+ 	    def rowrb   { rb  @Else rh  @Else r		@Else tbxrb  }
+ 	    def rowrl   { rl  @Else rv  @Else r		@Else tbxrl  }
+ 	    def rowrr   { rr  @Else rv  @Else r		@Else tbxrr  }
+ 	    def rowraw  { raw @Else rhw @Else rw	@Else tbxraw }
+ 	    def rowrbw  { rbw @Else rhw @Else rw	@Else tbxrbw }
+ 	    def rowrlw  { rlw @Else rvw @Else rw	@Else tbxrlw }
+ 	    def rowrrw  { rrw @Else rvw @Else rw	@Else tbxrrw }
+ 	    def rowrag  { rag @Else rhg @Else rg	@Else tbxrag }
+ 	    def rowrbg  { rbg @Else rhg @Else rg	@Else tbxrbg }
+ 	    def rowrlg  { rlg @Else rvg @Else rg	@Else tbxrlg }
+ 	    def rowrrg  { rrg @Else rvg @Else rg	@Else tbxrrg }
+ 	    def rowrac  { rac @Else rhc @Else rc	@Else tbxrac }
+ 	    def rowrbc  { rbc @Else rhc @Else rc	@Else tbxrbc }
+ 	    def rowrlc  { rlc @Else rvc @Else rc	@Else tbxrlc }
+ 	    def rowrrc  { rrc @Else rvc @Else rc	@Else tbxrrc }
+ 	    def rowrpc  { rpc				@Else tbxrpc }
+ 
+ 	    eformat
+ 		A { A } B { B } C { C } D { D } E { E } F { F }
+ 		G { G } H { H } I { I } J { J } K { K } L { L }
+ 		M { M } N { N } O { O } P { P } Q { Q } R { R }
+ 		S { S } T { T } U { U } V { V } W { W } X { X }
+ 		Y { Y } Z { Z }
+ 		@Cell {
+ 		
+ 		    @DoCell
+ 
+ 			#######################################################
+ 			#                                                     #
+ 			#  Specific option values to @Cell (i.e. Level 5)     #
+ 			#                                                     #
+ 			#######################################################
+ 
+ 			p    { p			@Else rowp   }
+ 			bg   { bg			@Else rowbg  }
+ 			f    { f			@Else rowf   }
+ 			b    { b			@Else rowb   }
+ 			w    { w			@Else roww   }
+ 			h    { h			@Else rowh   }
+ 			i    { i			@Else rowi   }
+ 			iv   { iv			@Else rowiv  }
+ 			s    { s			@Else rows   }
+ 			sh   { sh			@Else rowsh  }
+ 			ml   { ml  @Else mh  @Else m	@Else rowml  }
+ 			mr   { mr  @Else mh  @Else m	@Else rowmr  }
+ 			ma   { ma  @Else mv  @Else m	@Else rowma  }
+ 			mb   { mb  @Else mv  @Else m	@Else rowmb  }
+ 			ra   { ra  @Else rh  @Else r	@Else rowra  }
+ 			rb   { rb  @Else rh  @Else r	@Else rowrb  }
+ 			rl   { rl  @Else rv  @Else r	@Else rowrl  }
+ 			rr   { rr  @Else rv  @Else r	@Else rowrr  }
+ 			raw  { raw @Else rhw @Else rw	@Else rowraw }
+ 			rbw  { rbw @Else rhw @Else rw	@Else rowrbw }
+ 			rlw  { rlw @Else rvw @Else rw	@Else rowrlw }
+ 			rrw  { rrw @Else rvw @Else rw	@Else rowrrw }
+ 			rag  { rag @Else rhg @Else rg	@Else rowrag }
+ 			rbg  { rbg @Else rhg @Else rg	@Else rowrbg }
+ 			rlg  { rlg @Else rvg @Else rg	@Else rowrlg }
+ 			rrg  { rrg @Else rvg @Else rg	@Else rowrrg }
+ 			rac  { rac @Else rhc @Else rc	@Else rowrac }
+ 			rbc  { rbc @Else rhc @Else rc	@Else rowrbc }
+ 			rlc  { rlc @Else rvc @Else rc	@Else rowrlc }
+ 			rrc  { rrc @Else rvc @Else rc	@Else rowrrc }
+ 			rpc  { rpc			@Else rowrpc }
+ 
+ 			x
+ 		}
+ 	}
+ 
+ 	# symbol for producing @Rowf rows
+ 	def @DoRowf
+ 	    named paint			p	{}
+ 	    named background		bg	{}
+ 	    named font			f	{}
+ 	    named break			b	{}
+ 	    named width			w	{}
+ 	    named height		h	{}
+ 	    named indent		i	{}
+ 	    named indentvertical	iv	{}
+ 	    named strut			s	{}
+ 	    named struthorizontal	sh	{}
+ 	    named margin		m	{}
+ 	    named marginhorizontal	mh	{}
+ 	    named marginleft		ml	{}
+ 	    named marginright		mr	{}
+ 	    named marginvertical	mv	{}
+ 	    named marginabove		ma	{}
+ 	    named marginbelow		mb	{}
+ 	    named rule			r	{}
+ 	    named rulehorizontal	rh	{}
+ 	    named ruleabove		ra	{}
+ 	    named rulebelow		rb	{}
+ 	    named rulevertical		rv	{}
+ 	    named ruleleft		rl	{}
+ 	    named ruleright		rr	{}
+ 	    named rulewidth		rw	{}
+ 	    named rulehorizontalwidth	rhw	{}
+ 	    named ruleabovewidth	raw	{}
+ 	    named rulebelowwidth	rbw	{}
+ 	    named ruleverticalwidth	rvw	{}
+ 	    named ruleleftwidth		rlw	{}
+ 	    named rulerightwidth	rrw	{}
+ 	    named rulegap		rg	{}
+ 	    named rulehorizontalgap	rhg	{}
+ 	    named ruleabovegap		rag	{}
+ 	    named rulebelowgap		rbg	{}
+ 	    named ruleverticalgap	rvg	{}
+ 	    named ruleleftgap		rlg	{}
+ 	    named rulerightgap		rrg	{}
+ 	    named rulecolour rulecolor				rc	{}
+ 	    named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	    named ruleabovecolour ruleabovecolor		rac	{}
+ 	    named rulebelowcolour rulebelowcolor		rbc	{}
+ 	    named ruleverticalcolour ruleverticalcolor		rvc	{}
+ 	    named ruleleftcolour ruleleftcolor			rlc	{}
+ 	    named rulerightcolour rulerightcolor		rrc	{}
+ 	    named ruleplainchar		rpc	{}
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	{
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at "foption" level (i.e. Level 3)       #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def tbxp    { fp				@Else tblp   }
+ 	    def tbxbg   { fbg				@Else tblbg  }
+ 	    def tbxf    { ff				@Else tblf   }
+ 	    def tbxb    { fb				@Else tblb   }
+ 	    def tbxw    { fw				@Else tblw   }
+ 	    def tbxh    { fh				@Else tblh   }
+ 	    def tbxi    { fi				@Else tbli   }
+ 	    def tbxiv   { fiv				@Else tbliv  }
+ 	    def tbxs    { fs				@Else tbls   }
+ 	    def tbxsh   { fsh				@Else tblsh  }
+ 	    def tbxml   { fml  @Else fmh  @Else fm	@Else tblml  }
+ 	    def tbxmr   { fmr  @Else fmh  @Else fm	@Else tblmr  }
+ 	    def tbxma   { fma  @Else fmv  @Else fm	@Else tblma  }
+ 	    def tbxmb   { fmb  @Else fmv  @Else fm	@Else tblmb  }
+ 	    def tbxra   { fra  @Else frh  @Else fr	@Else tblra  }
+ 	    def tbxrb   { frb  @Else frh  @Else fr	@Else tblrb  }
+ 	    def tbxrl   { frl  @Else frv  @Else fr	@Else tblrl  }
+ 	    def tbxrr   { frr  @Else frv  @Else fr	@Else tblrr  }
+ 	    def tbxraw  { fraw @Else frhw @Else frw	@Else tblraw }
+ 	    def tbxrbw  { frbw @Else frhw @Else frw	@Else tblrbw }
+ 	    def tbxrlw  { frlw @Else frvw @Else frw	@Else tblrlw }
+ 	    def tbxrrw  { frrw @Else frvw @Else frw	@Else tblrrw }
+ 	    def tbxrag  { frag @Else frhg @Else frg	@Else tblrag }
+ 	    def tbxrbg  { frbg @Else frhg @Else frg	@Else tblrbg }
+ 	    def tbxrlg  { frlg @Else frvg @Else frg	@Else tblrlg }
+ 	    def tbxrrg  { frrg @Else frvg @Else frg	@Else tblrrg }
+ 	    def tbxrac  { frac @Else frhc @Else frc	@Else tblrac }
+ 	    def tbxrbc  { frbc @Else frhc @Else frc	@Else tblrbc }
+ 	    def tbxrlc  { frlc @Else frvc @Else frc	@Else tblrlc }
+ 	    def tbxrrc  { frrc @Else frvc @Else frc	@Else tblrrc }
+ 	    def tbxrpc  { frpc				@Else tblrpc }
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at @Rowf level (i.e. Level 4)           #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def rowp    { p				@Else tbxp   }
+ 	    def rowbg   { bg				@Else tbxbg  }
+ 	    def rowf    { f				@Else tbxf   }
+ 	    def rowb    { b				@Else tbxb   }
+ 	    def roww    { w				@Else tbxw   }
+ 	    def rowh    { h				@Else tbxh   }
+ 	    def rowi    { i				@Else tbxi   }
+ 	    def rowiv   { iv				@Else tbxiv  }
+ 	    def rows    { s				@Else tbxs   }
+ 	    def rowsh   { sh				@Else tbxsh  }
+ 	    def rowml   { ml  @Else mh  @Else m		@Else tbxml  }
+ 	    def rowmr   { mr  @Else mh  @Else m		@Else tbxmr  }
+ 	    def rowma   { ma  @Else mv  @Else m		@Else tbxma  }
+ 	    def rowmb   { mb  @Else mv  @Else m		@Else tbxmb  }
+ 	    def rowra   { ra  @Else rh  @Else r		@Else tbxra  }
+ 	    def rowrb   { rb  @Else rh  @Else r		@Else tbxrb  }
+ 	    def rowrl   { rl  @Else rv  @Else r		@Else tbxrl  }
+ 	    def rowrr   { rr  @Else rv  @Else r		@Else tbxrr  }
+ 	    def rowraw  { raw @Else rhw @Else rw	@Else tbxraw }
+ 	    def rowrbw  { rbw @Else rhw @Else rw	@Else tbxrbw }
+ 	    def rowrlw  { rlw @Else rvw @Else rw	@Else tbxrlw }
+ 	    def rowrrw  { rrw @Else rvw @Else rw	@Else tbxrrw }
+ 	    def rowrag  { rag @Else rhg @Else rg	@Else tbxrag }
+ 	    def rowrbg  { rbg @Else rhg @Else rg	@Else tbxrbg }
+ 	    def rowrlg  { rlg @Else rvg @Else rg	@Else tbxrlg }
+ 	    def rowrrg  { rrg @Else rvg @Else rg	@Else tbxrrg }
+ 	    def rowrac  { rac @Else rhc @Else rc	@Else tbxrac }
+ 	    def rowrbc  { rbc @Else rhc @Else rc	@Else tbxrbc }
+ 	    def rowrlc  { rlc @Else rvc @Else rc	@Else tbxrlc }
+ 	    def rowrrc  { rrc @Else rvc @Else rc	@Else tbxrrc }
+ 	    def rowrpc  { rpc				@Else tbxrpc }
+ 
+ 	    fformat
+ 		A { A } B { B } C { C } D { D } E { E } F { F }
+ 		G { G } H { H } I { I } J { J } K { K } L { L }
+ 		M { M } N { N } O { O } P { P } Q { Q } R { R }
+ 		S { S } T { T } U { U } V { V } W { W } X { X }
+ 		Y { Y } Z { Z }
+ 		@Cell {
+ 		
+ 		    @DoCell
+ 
+ 			#######################################################
+ 			#                                                     #
+ 			#  Specific option values to @Cell (i.e. Level 5)     #
+ 			#                                                     #
+ 			#######################################################
+ 
+ 			p    { p			@Else rowp   }
+ 			bg   { bg			@Else rowbg  }
+ 			f    { f			@Else rowf   }
+ 			b    { b			@Else rowb   }
+ 			w    { w			@Else roww   }
+ 			h    { h			@Else rowh   }
+ 			i    { i			@Else rowi   }
+ 			iv   { iv			@Else rowiv  }
+ 			s    { s			@Else rows   }
+ 			sh   { sh			@Else rowsh  }
+ 			ml   { ml  @Else mh  @Else m	@Else rowml  }
+ 			mr   { mr  @Else mh  @Else m	@Else rowmr  }
+ 			ma   { ma  @Else mv  @Else m	@Else rowma  }
+ 			mb   { mb  @Else mv  @Else m	@Else rowmb  }
+ 			ra   { ra  @Else rh  @Else r	@Else rowra  }
+ 			rb   { rb  @Else rh  @Else r	@Else rowrb  }
+ 			rl   { rl  @Else rv  @Else r	@Else rowrl  }
+ 			rr   { rr  @Else rv  @Else r	@Else rowrr  }
+ 			raw  { raw @Else rhw @Else rw	@Else rowraw }
+ 			rbw  { rbw @Else rhw @Else rw	@Else rowrbw }
+ 			rlw  { rlw @Else rvw @Else rw	@Else rowrlw }
+ 			rrw  { rrw @Else rvw @Else rw	@Else rowrrw }
+ 			rag  { rag @Else rhg @Else rg	@Else rowrag }
+ 			rbg  { rbg @Else rhg @Else rg	@Else rowrbg }
+ 			rlg  { rlg @Else rvg @Else rg	@Else rowrlg }
+ 			rrg  { rrg @Else rvg @Else rg	@Else rowrrg }
+ 			rac  { rac @Else rhc @Else rc	@Else rowrac }
+ 			rbc  { rbc @Else rhc @Else rc	@Else rowrbc }
+ 			rlc  { rlc @Else rvc @Else rc	@Else rowrlc }
+ 			rrc  { rrc @Else rvc @Else rc	@Else rowrrc }
+ 			rpc  { rpc			@Else rowrpc }
+ 
+ 			x
+ 		}
+ 	}
+ 
+ 	# symbol for producing @Rowg rows
+ 	def @DoRowg
+ 	    named paint			p	{}
+ 	    named background		bg	{}
+ 	    named font			f	{}
+ 	    named break			b	{}
+ 	    named width			w	{}
+ 	    named height		h	{}
+ 	    named indent		i	{}
+ 	    named indentvertical	iv	{}
+ 	    named strut			s	{}
+ 	    named struthorizontal	sh	{}
+ 	    named margin		m	{}
+ 	    named marginhorizontal	mh	{}
+ 	    named marginleft		ml	{}
+ 	    named marginright		mr	{}
+ 	    named marginvertical	mv	{}
+ 	    named marginabove		ma	{}
+ 	    named marginbelow		mb	{}
+ 	    named rule			r	{}
+ 	    named rulehorizontal	rh	{}
+ 	    named ruleabove		ra	{}
+ 	    named rulebelow		rb	{}
+ 	    named rulevertical		rv	{}
+ 	    named ruleleft		rl	{}
+ 	    named ruleright		rr	{}
+ 	    named rulewidth		rw	{}
+ 	    named rulehorizontalwidth	rhw	{}
+ 	    named ruleabovewidth	raw	{}
+ 	    named rulebelowwidth	rbw	{}
+ 	    named ruleverticalwidth	rvw	{}
+ 	    named ruleleftwidth		rlw	{}
+ 	    named rulerightwidth	rrw	{}
+ 	    named rulegap		rg	{}
+ 	    named rulehorizontalgap	rhg	{}
+ 	    named ruleabovegap		rag	{}
+ 	    named rulebelowgap		rbg	{}
+ 	    named ruleverticalgap	rvg	{}
+ 	    named ruleleftgap		rlg	{}
+ 	    named rulerightgap		rrg	{}
+ 	    named rulecolour rulecolor				rc	{}
+ 	    named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	    named ruleabovecolour ruleabovecolor		rac	{}
+ 	    named rulebelowcolour rulebelowcolor		rbc	{}
+ 	    named ruleverticalcolour ruleverticalcolor		rvc	{}
+ 	    named ruleleftcolour ruleleftcolor			rlc	{}
+ 	    named rulerightcolour rulerightcolor		rrc	{}
+ 	    named ruleplainchar		rpc	{}
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	{
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at "doption" level (i.e. Level 3)       #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def tbxp    { gp				@Else tblp   }
+ 	    def tbxbg   { gbg				@Else tblbg  }
+ 	    def tbxf    { gf				@Else tblf   }
+ 	    def tbxb    { gb				@Else tblb   }
+ 	    def tbxw    { gw				@Else tblw   }
+ 	    def tbxh    { gh				@Else tblh   }
+ 	    def tbxi    { gi				@Else tbli   }
+ 	    def tbxiv   { giv				@Else tbliv  }
+ 	    def tbxs    { gs				@Else tbls   }
+ 	    def tbxsh   { gsh				@Else tblsh  }
+ 	    def tbxml   { gml  @Else gmh  @Else gm	@Else tblml  }
+ 	    def tbxmr   { gmr  @Else gmh  @Else gm	@Else tblmr  }
+ 	    def tbxma   { gma  @Else gmv  @Else gm	@Else tblma  }
+ 	    def tbxmb   { gmb  @Else gmv  @Else gm	@Else tblmb  }
+ 	    def tbxra   { gra  @Else grh  @Else gr	@Else tblra  }
+ 	    def tbxrb   { grb  @Else grh  @Else gr	@Else tblrb  }
+ 	    def tbxrl   { grl  @Else grv  @Else gr	@Else tblrl  }
+ 	    def tbxrr   { grr  @Else grv  @Else gr	@Else tblrr  }
+ 	    def tbxraw  { graw @Else grhw @Else grw	@Else tblraw }
+ 	    def tbxrbw  { grbw @Else grhw @Else grw	@Else tblrbw }
+ 	    def tbxrlw  { grlw @Else grvw @Else grw	@Else tblrlw }
+ 	    def tbxrrw  { grrw @Else grvw @Else grw	@Else tblrrw }
+ 	    def tbxrag  { grag @Else grhg @Else grg	@Else tblrag }
+ 	    def tbxrbg  { grbg @Else grhg @Else grg	@Else tblrbg }
+ 	    def tbxrlg  { grlg @Else grvg @Else grg	@Else tblrlg }
+ 	    def tbxrrg  { grrg @Else grvg @Else grg	@Else tblrrg }
+ 	    def tbxrac  { grac @Else grhc @Else grc	@Else tblrac }
+ 	    def tbxrbc  { grbc @Else grhc @Else grc	@Else tblrbc }
+ 	    def tbxrlc  { grlc @Else grvc @Else grc	@Else tblrlc }
+ 	    def tbxrrc  { grrc @Else grvc @Else grc	@Else tblrrc }
+ 	    def tbxrpc  { grpc				@Else tblrpc }
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at @Rowg level (i.e. Level 4)           #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def rowp    { p				@Else tbxp   }
+ 	    def rowbg   { bg				@Else tbxbg  }
+ 	    def rowf    { f				@Else tbxf   }
+ 	    def rowb    { b				@Else tbxb   }
+ 	    def roww    { w				@Else tbxw   }
+ 	    def rowh    { h				@Else tbxh   }
+ 	    def rowi    { i				@Else tbxi   }
+ 	    def rowiv   { iv				@Else tbxiv  }
+ 	    def rows    { s				@Else tbxs   }
+ 	    def rowsh   { sh				@Else tbxsh  }
+ 	    def rowml   { ml  @Else mh  @Else m		@Else tbxml  }
+ 	    def rowmr   { mr  @Else mh  @Else m		@Else tbxmr  }
+ 	    def rowma   { ma  @Else mv  @Else m		@Else tbxma  }
+ 	    def rowmb   { mb  @Else mv  @Else m		@Else tbxmb  }
+ 	    def rowra   { ra  @Else rh  @Else r		@Else tbxra  }
+ 	    def rowrb   { rb  @Else rh  @Else r		@Else tbxrb  }
+ 	    def rowrl   { rl  @Else rv  @Else r		@Else tbxrl  }
+ 	    def rowrr   { rr  @Else rv  @Else r		@Else tbxrr  }
+ 	    def rowraw  { raw @Else rhw @Else rw	@Else tbxraw }
+ 	    def rowrbw  { rbw @Else rhw @Else rw	@Else tbxrbw }
+ 	    def rowrlw  { rlw @Else rvw @Else rw	@Else tbxrlw }
+ 	    def rowrrw  { rrw @Else rvw @Else rw	@Else tbxrrw }
+ 	    def rowrag  { rag @Else rhg @Else rg	@Else tbxrag }
+ 	    def rowrbg  { rbg @Else rhg @Else rg	@Else tbxrbg }
+ 	    def rowrlg  { rlg @Else rvg @Else rg	@Else tbxrlg }
+ 	    def rowrrg  { rrg @Else rvg @Else rg	@Else tbxrrg }
+ 	    def rowrac  { rac @Else rhc @Else rc	@Else tbxrac }
+ 	    def rowrbc  { rbc @Else rhc @Else rc	@Else tbxrbc }
+ 	    def rowrlc  { rlc @Else rvc @Else rc	@Else tbxrlc }
+ 	    def rowrrc  { rrc @Else rvc @Else rc	@Else tbxrrc }
+ 	    def rowrpc  { rpc				@Else tbxrpc }
+ 
+ 	    gformat
+ 		A { A } B { B } C { C } D { D } E { E } F { F }
+ 		G { G } H { H } I { I } J { J } K { K } L { L }
+ 		M { M } N { N } O { O } P { P } Q { Q } R { R }
+ 		S { S } T { T } U { U } V { V } W { W } X { X }
+ 		Y { Y } Z { Z }
+ 		@Cell {
+ 		
+ 		    @DoCell
+ 
+ 			#######################################################
+ 			#                                                     #
+ 			#  Specific option values to @Cell (i.e. Level 5)     #
+ 			#                                                     #
+ 			#######################################################
+ 
+ 			p    { p			@Else rowp   }
+ 			bg   { bg			@Else rowbg  }
+ 			f    { f			@Else rowf   }
+ 			b    { b			@Else rowb   }
+ 			w    { w			@Else roww   }
+ 			h    { h			@Else rowh   }
+ 			i    { i			@Else rowi   }
+ 			iv   { iv			@Else rowiv  }
+ 			s    { s			@Else rows   }
+ 			sh   { sh			@Else rowsh  }
+ 			ml   { ml  @Else mh  @Else m	@Else rowml  }
+ 			mr   { mr  @Else mh  @Else m	@Else rowmr  }
+ 			ma   { ma  @Else mv  @Else m	@Else rowma  }
+ 			mb   { mb  @Else mv  @Else m	@Else rowmb  }
+ 			ra   { ra  @Else rh  @Else r	@Else rowra  }
+ 			rb   { rb  @Else rh  @Else r	@Else rowrb  }
+ 			rl   { rl  @Else rv  @Else r	@Else rowrl  }
+ 			rr   { rr  @Else rv  @Else r	@Else rowrr  }
+ 			raw  { raw @Else rhw @Else rw	@Else rowraw }
+ 			rbw  { rbw @Else rhw @Else rw	@Else rowrbw }
+ 			rlw  { rlw @Else rvw @Else rw	@Else rowrlw }
+ 			rrw  { rrw @Else rvw @Else rw	@Else rowrrw }
+ 			rag  { rag @Else rhg @Else rg	@Else rowrag }
+ 			rbg  { rbg @Else rhg @Else rg	@Else rowrbg }
+ 			rlg  { rlg @Else rvg @Else rg	@Else rowrlg }
+ 			rrg  { rrg @Else rvg @Else rg	@Else rowrrg }
+ 			rac  { rac @Else rhc @Else rc	@Else rowrac }
+ 			rbc  { rbc @Else rhc @Else rc	@Else rowrbc }
+ 			rlc  { rlc @Else rvc @Else rc	@Else rowrlc }
+ 			rrc  { rrc @Else rvc @Else rc	@Else rowrrc }
+ 			rpc  { rpc			@Else rowrpc }
+ 
+ 			x
+ 		}
+ 	}
+ 
+ 	# symbol for producing @Rowh rows
+ 	def @DoRowh
+ 	    named paint			p	{}
+ 	    named background		bg	{}
+ 	    named font			f	{}
+ 	    named break			b	{}
+ 	    named width			w	{}
+ 	    named height		h	{}
+ 	    named indent		i	{}
+ 	    named indentvertical	iv	{}
+ 	    named strut			s	{}
+ 	    named struthorizontal	sh	{}
+ 	    named margin		m	{}
+ 	    named marginhorizontal	mh	{}
+ 	    named marginleft		ml	{}
+ 	    named marginright		mr	{}
+ 	    named marginvertical	mv	{}
+ 	    named marginabove		ma	{}
+ 	    named marginbelow		mb	{}
+ 	    named rule			r	{}
+ 	    named rulehorizontal	rh	{}
+ 	    named ruleabove		ra	{}
+ 	    named rulebelow		rb	{}
+ 	    named rulevertical		rv	{}
+ 	    named ruleleft		rl	{}
+ 	    named ruleright		rr	{}
+ 	    named rulewidth		rw	{}
+ 	    named rulehorizontalwidth	rhw	{}
+ 	    named ruleabovewidth	raw	{}
+ 	    named rulebelowwidth	rbw	{}
+ 	    named ruleverticalwidth	rvw	{}
+ 	    named ruleleftwidth		rlw	{}
+ 	    named rulerightwidth	rrw	{}
+ 	    named rulegap		rg	{}
+ 	    named rulehorizontalgap	rhg	{}
+ 	    named ruleabovegap		rag	{}
+ 	    named rulebelowgap		rbg	{}
+ 	    named ruleverticalgap	rvg	{}
+ 	    named ruleleftgap		rlg	{}
+ 	    named rulerightgap		rrg	{}
+ 	    named rulecolour rulecolor				rc	{}
+ 	    named rulehorizontalcolour rulehorizontalcolor	rhc	{}
+ 	    named ruleabovecolour ruleabovecolor		rac	{}
+ 	    named rulebelowcolour rulebelowcolor		rbc	{}
+ 	    named ruleverticalcolour ruleverticalcolor		rvc	{}
+ 	    named ruleleftcolour ruleleftcolor			rlc	{}
+ 	    named rulerightcolour rulerightcolor		rrc	{}
+ 	    named ruleplainchar		rpc	{}
+ 	    named A {} named B {} named C {} named D {} named E {}
+ 	    named F {} named G {} named H {} named I {} named J {}
+ 	    named K {} named L {} named M {} named N {} named O {}
+ 	    named P {} named Q {} named R {} named S {} named T {}
+ 	    named U {} named V {} named W {} named X {} named Y {}
+ 	    named Z {}
+ 	{
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at "hoption" level (i.e. Level 3)       #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def tbxp    { hp				@Else tblp   }
+ 	    def tbxbg   { hbg				@Else tblbg  }
+ 	    def tbxf    { hf				@Else tblf   }
+ 	    def tbxb    { hb				@Else tblb   }
+ 	    def tbxw    { hw				@Else tblw   }
+ 	    def tbxh    { hh				@Else tblh   }
+ 	    def tbxi    { hi				@Else tbli   }
+ 	    def tbxiv   { hiv				@Else tbliv  }
+ 	    def tbxs    { hs				@Else tbls   }
+ 	    def tbxsh   { hsh				@Else tblsh  }
+ 	    def tbxml   { hml  @Else hmh  @Else hm	@Else tblml  }
+ 	    def tbxmr   { hmr  @Else hmh  @Else hm	@Else tblmr  }
+ 	    def tbxma   { hma  @Else hmv  @Else hm	@Else tblma  }
+ 	    def tbxmb   { hmb  @Else hmv  @Else hm	@Else tblmb  }
+ 	    def tbxra   { hra  @Else hrh  @Else hr	@Else tblra  }
+ 	    def tbxrb   { hrb  @Else hrh  @Else hr	@Else tblrb  }
+ 	    def tbxrl   { hrl  @Else hrv  @Else hr	@Else tblrl  }
+ 	    def tbxrr   { hrr  @Else hrv  @Else hr	@Else tblrr  }
+ 	    def tbxraw  { hraw @Else hrhw @Else hrw	@Else tblraw }
+ 	    def tbxrbw  { hrbw @Else hrhw @Else hrw	@Else tblrbw }
+ 	    def tbxrlw  { hrlw @Else hrvw @Else hrw	@Else tblrlw }
+ 	    def tbxrrw  { hrrw @Else hrvw @Else hrw	@Else tblrrw }
+ 	    def tbxrag  { hrag @Else hrhg @Else hrg	@Else tblrag }
+ 	    def tbxrbg  { hrbg @Else hrhg @Else hrg	@Else tblrbg }
+ 	    def tbxrlg  { hrlg @Else hrvg @Else hrg	@Else tblrlg }
+ 	    def tbxrrg  { hrrg @Else hrvg @Else hrg	@Else tblrrg }
+ 	    def tbxrac  { hrac @Else hrhc @Else hrc	@Else tblrac }
+ 	    def tbxrbc  { hrbc @Else hrhc @Else hrc	@Else tblrbc }
+ 	    def tbxrlc  { hrlc @Else hrvc @Else hrc	@Else tblrlc }
+ 	    def tbxrrc  { hrrc @Else hrvc @Else hrc	@Else tblrrc }
+ 	    def tbxrpc  { hrpc				@Else tblrpc }
+ 
+ 	    ###################################################################
+ 	    #                                                                 #
+ 	    #  Specific option values at @Rowh level (i.e. Level 4)           #
+ 	    #                                                                 #
+ 	    ###################################################################
+ 
+ 	    def rowp    { p				@Else tbxp   }
+ 	    def rowbg   { bg				@Else tbxbg  }
+ 	    def rowf    { f				@Else tbxf   }
+ 	    def rowb    { b				@Else tbxb   }
+ 	    def roww    { w				@Else tbxw   }
+ 	    def rowh    { h				@Else tbxh   }
+ 	    def rowi    { i				@Else tbxi   }
+ 	    def rowiv   { iv				@Else tbxiv  }
+ 	    def rows    { s				@Else tbxs   }
+ 	    def rowsh   { sh				@Else tbxsh  }
+ 	    def rowml   { ml  @Else mh  @Else m		@Else tbxml  }
+ 	    def rowmr   { mr  @Else mh  @Else m		@Else tbxmr  }
+ 	    def rowma   { ma  @Else mv  @Else m		@Else tbxma  }
+ 	    def rowmb   { mb  @Else mv  @Else m		@Else tbxmb  }
+ 	    def rowra   { ra  @Else rh  @Else r		@Else tbxra  }
+ 	    def rowrb   { rb  @Else rh  @Else r		@Else tbxrb  }
+ 	    def rowrl   { rl  @Else rv  @Else r		@Else tbxrl  }
+ 	    def rowrr   { rr  @Else rv  @Else r		@Else tbxrr  }
+ 	    def rowraw  { raw @Else rhw @Else rw	@Else tbxraw }
+ 	    def rowrbw  { rbw @Else rhw @Else rw	@Else tbxrbw }
+ 	    def rowrlw  { rlw @Else rvw @Else rw	@Else tbxrlw }
+ 	    def rowrrw  { rrw @Else rvw @Else rw	@Else tbxrrw }
+ 	    def rowrag  { rag @Else rhg @Else rg	@Else tbxrag }
+ 	    def rowrbg  { rbg @Else rhg @Else rg	@Else tbxrbg }
+ 	    def rowrlg  { rlg @Else rvg @Else rg	@Else tbxrlg }
+ 	    def rowrrg  { rrg @Else rvg @Else rg	@Else tbxrrg }
+ 	    def rowrac  { rac @Else rhc @Else rc	@Else tbxrac }
+ 	    def rowrbc  { rbc @Else rhc @Else rc	@Else tbxrbc }
+ 	    def rowrlc  { rlc @Else rvc @Else rc	@Else tbxrlc }
+ 	    def rowrrc  { rrc @Else rvc @Else rc	@Else tbxrrc }
+ 	    def rowrpc  { rpc				@Else tbxrpc }
+ 
+ 	    hformat
+ 		A { A } B { B } C { C } D { D } E { E } F { F }
+ 		G { G } H { H } I { I } J { J } K { K } L { L }
+ 		M { M } N { N } O { O } P { P } Q { Q } R { R }
+ 		S { S } T { T } U { U } V { V } W { W } X { X }
+ 		Y { Y } Z { Z }
+ 		@Cell {
+ 		
+ 		    @DoCell
+ 
+ 			#######################################################
+ 			#                                                     #
+ 			#  Specific option values to @Cell (i.e. Level 5)     #
+ 			#                                                     #
+ 			#######################################################
+ 
+ 			p    { p			@Else rowp   }
+ 			bg   { bg			@Else rowbg  }
+ 			f    { f			@Else rowf   }
+ 			b    { b			@Else rowb   }
+ 			w    { w			@Else roww   }
+ 			h    { h			@Else rowh   }
+ 			i    { i			@Else rowi   }
+ 			iv   { iv			@Else rowiv  }
+ 			s    { s			@Else rows   }
+ 			sh   { sh			@Else rowsh  }
+ 			ml   { ml  @Else mh  @Else m	@Else rowml  }
+ 			mr   { mr  @Else mh  @Else m	@Else rowmr  }
+ 			ma   { ma  @Else mv  @Else m	@Else rowma  }
+ 			mb   { mb  @Else mv  @Else m	@Else rowmb  }
+ 			ra   { ra  @Else rh  @Else r	@Else rowra  }
+ 			rb   { rb  @Else rh  @Else r	@Else rowrb  }
+ 			rl   { rl  @Else rv  @Else r	@Else rowrl  }
+ 			rr   { rr  @Else rv  @Else r	@Else rowrr  }
+ 			raw  { raw @Else rhw @Else rw	@Else rowraw }
+ 			rbw  { rbw @Else rhw @Else rw	@Else rowrbw }
+ 			rlw  { rlw @Else rvw @Else rw	@Else rowrlw }
+ 			rrw  { rrw @Else rvw @Else rw	@Else rowrrw }
+ 			rag  { rag @Else rhg @Else rg	@Else rowrag }
+ 			rbg  { rbg @Else rhg @Else rg	@Else rowrbg }
+ 			rlg  { rlg @Else rvg @Else rg	@Else rowrlg }
+ 			rrg  { rrg @Else rvg @Else rg	@Else rowrrg }
+ 			rac  { rac @Else rhc @Else rc	@Else rowrac }
+ 			rbc  { rbc @Else rhc @Else rc	@Else rowrbc }
+ 			rlc  { rlc @Else rvc @Else rc	@Else rowrlc }
+ 			rrc  { rrc @Else rvc @Else rc	@Else rowrrc }
+ 			rpc  { rpc			@Else rowrpc }
+ 
+ 			x
+ 		}
+ 	}
+ 
+ 	macro @Row		{ /  @DoRow  }
+ 	macro @Rowa		{ /  @DoRowa }
+ 	macro @Rowb		{ /  @DoRowb }
+ 	macro @Rowc		{ /  @DoRowc }
+ 	macro @Rowd		{ /  @DoRowd }
+ 	macro @Rowe		{ /  @DoRowe }
+ 	macro @Rowf		{ /  @DoRowf }
+ 	macro @Rowg		{ /  @DoRowg }
+ 	macro @Rowh		{ /  @DoRowh }
+ 
+ 	macro @FirstRow		{    @DoRow  }
+ 	macro @FirstRowa	{    @DoRowa }
+ 	macro @FirstRowb	{    @DoRowb }
+ 	macro @FirstRowc	{    @DoRowc }
+ 	macro @FirstRowd	{    @DoRowd }
+ 	macro @FirstRowe	{    @DoRowe }
+ 	macro @FirstRowf	{    @DoRowf }
+ 	macro @FirstRowg	{    @DoRowg }
+ 	macro @FirstRowh	{    @DoRowh }
+ 
+ 	macro @MarkRow		{ ^/ @DoRow  }
+ 	macro @MarkRowa		{ ^/ @DoRowa }
+ 	macro @MarkRowb		{ ^/ @DoRowb }
+ 	macro @MarkRowc		{ ^/ @DoRowc }
+ 	macro @MarkRowd		{ ^/ @DoRowd }
+ 	macro @MarkRowe		{ ^/ @DoRowe }
+ 	macro @MarkRowf		{ ^/ @DoRowf }
+ 	macro @MarkRowg		{ ^/ @DoRowg }
+ 	macro @MarkRowh		{ ^/ @DoRowh }
+ 
+ 	macro @NoBreakRow	{ /0iu @DoRow  }
+ 	macro @NoBreakRowa	{ /0iu @DoRowa }
+ 	macro @NoBreakRowb	{ /0iu @DoRowb }
+ 	macro @NoBreakRowc	{ /0iu @DoRowc }
+ 	macro @NoBreakRowd	{ /0iu @DoRowd }
+ 	macro @NoBreakRowe	{ /0iu @DoRowe }
+ 	macro @NoBreakRowf	{ /0iu @DoRowf }
+ 	macro @NoBreakRowg	{ /0iu @DoRowg }
+ 	macro @NoBreakRowh	{ /0iu @DoRowh }
+ 
+ 	macro @HeaderRow	{ /  @BeginHeaderComponent @DoRow  }
+ 	macro @HeaderRowa	{ /  @BeginHeaderComponent @DoRowa }
+ 	macro @HeaderRowb	{ /  @BeginHeaderComponent @DoRowb }
+ 	macro @HeaderRowc	{ /  @BeginHeaderComponent @DoRowc }
+ 	macro @HeaderRowd	{ /  @BeginHeaderComponent @DoRowd }
+ 	macro @HeaderRowe	{ /  @BeginHeaderComponent @DoRowe }
+ 	macro @HeaderRowf	{ /  @BeginHeaderComponent @DoRowf }
+ 	macro @HeaderRowg	{ /  @BeginHeaderComponent @DoRowg }
+ 	macro @HeaderRowh	{ /  @BeginHeaderComponent @DoRowh }
+ 
+ 	macro @HeaderFirstRow	{    @BeginHeaderComponent @DoRow  }
+ 	macro @HeaderFirstRowa	{    @BeginHeaderComponent @DoRowa }
+ 	macro @HeaderFirstRowb	{    @BeginHeaderComponent @DoRowb }
+ 	macro @HeaderFirstRowc	{    @BeginHeaderComponent @DoRowc }
+ 	macro @HeaderFirstRowd	{    @BeginHeaderComponent @DoRowd }
+ 	macro @HeaderFirstRowe	{    @BeginHeaderComponent @DoRowe }
+ 	macro @HeaderFirstRowf	{    @BeginHeaderComponent @DoRowf }
+ 	macro @HeaderFirstRowg	{    @BeginHeaderComponent @DoRowg }
+ 	macro @HeaderFirstRowh	{    @BeginHeaderComponent @DoRowh }
+ 
+ 	macro @EndHeaderRow	{ / @EndHeaderComponent }
+ 
+ 	macro @NP               { /"1.1b" }
+ 
+ 	@Body
+     }
+ 
+ @End @TblSetup


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tblf.lpg
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tblf.lpg:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/tblf.lpg	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,41 ----
+ %%BeginResource: procset LoutTblPrependGraphic
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %                                                                    %
+ %  PostScript @SysPrependGraphic file for @Tbl  Jeffrey H. Kingston  %
+ %  Version 1.0                                             June 1998 %
+ %                                                                    %
+ %  To assist in avoiding name clashes, the names of all symbols      %
+ %  defined here begin with "ltbl".                                   %
+ %                                                                    %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 
+ % painting (i.e. filling): - ltblwhite - (etc.)
+ /ltblnopaint		{			       } def
+ /ltblnochange		{ 			  fill } def
+ /ltbldarkblue		{ 0.0 0.0 0.5 setrgbcolor fill } def
+ /ltblblue		{ 0.0 0.0 1.0 setrgbcolor fill } def
+ /ltbllightblue		{ 0.5 0.5 1.0 setrgbcolor fill } def
+ /ltbldarkgreen		{ 0.0 0.5 0.0 setrgbcolor fill } def
+ /ltblgreen		{ 0.0 1.0 0.0 setrgbcolor fill } def
+ /ltbllightgreen	        { 0.5 1.0 0.5 setrgbcolor fill } def
+ /ltbldarkred		{ 0.5 0.0 0.0 setrgbcolor fill } def
+ /ltblred		{ 1.0 0.0 0.0 setrgbcolor fill } def
+ /ltbllightred		{ 1.0 0.5 0.5 setrgbcolor fill } def
+ /ltbldarkcyan		{ 0.0 0.5 0.5 setrgbcolor fill } def
+ /ltblcyan		{ 0.0 1.0 1.0 setrgbcolor fill } def
+ /ltbllightcyan		{ 0.5 1.0 1.0 setrgbcolor fill } def
+ /ltbldarkmagenta	{ 0.5 0.0 0.5 setrgbcolor fill } def
+ /ltblmagenta		{ 1.0 0.0 1.0 setrgbcolor fill } def
+ /ltbllightmagenta	{ 1.0 0.5 1.0 setrgbcolor fill } def
+ /ltbldarkyellow        	{ 0.5 0.5 0.0 setrgbcolor fill } def
+ /ltblyellow		{ 1.0 1.0 0.0 setrgbcolor fill } def
+ /ltbllightyellow	{ 1.0 1.0 0.5 setrgbcolor fill } def
+ /ltbldarkgray		{ 0.2 0.2 0.2 setrgbcolor fill } def
+ /ltblgray		{ 0.5 0.5 0.5 setrgbcolor fill } def
+ /ltbllightgray		{ 0.8 0.8 0.8 setrgbcolor fill } def
+ /ltbldarkgrey		{ 0.2 0.2 0.2 setrgbcolor fill } def
+ /ltblgrey		{ 0.5 0.5 0.5 setrgbcolor fill } def
+ /ltbllightgrey		{ 0.8 0.8 0.8 setrgbcolor fill } def
+ /ltblblack		{ 0.0 0.0 0.0 setrgbcolor fill } def
+ /ltblwhite		{ 1.0 1.0 1.0 setrgbcolor fill } def
+ %%EndResource


Index: llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/ts
diff -c /dev/null llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/ts:1.1
*** /dev/null	Tue Jan  9 18:08:35 2007
--- llvm-test/MultiSource/Benchmarks/MiBench/consumer-typeset/data/include/ts	Tue Jan  9 18:08:06 2007
***************
*** 0 ****
--- 1,106 ----
+ 
+ ###############################################################################
+ #                                                                             #
+ #  Lout @ToySetup package (Jeff Kingston, July 1993, updated October 1994)    #
+ #                                                                             #
+ #  In response to a user request I have put together this tiny package for    #
+ #  people to play with who want to start learning how to do page layout and   #
+ #  galleys with Lout.  It produces a very simple sequence of pages.  To       #
+ #  invoke the package, run "lout myfile > op" where myfile looks like this:   #
+ #                                                                             #
+ #     @SysInclude { ts }                                                      #
+ #     @Use { @ToySetup }                                                      #
+ #     @Document                                                               #
+ #     //                                                                      #
+ #     @Text {                                                                 #
+ #     Any text you like here, using @I, @B, @Heading, @PP, @LP, @DP,          #
+ #     @LeftDisplay, @IndentedDisplay, and @CenteredDisplay just as in         #
+ #     DocumentSetup.                                                          #
+ #     }                                                                       #
+ #                                                                             #
+ ###############################################################################
+ 
+ @SysInclude { langdefs }
+ 
+ export @I @B @Heading @PP @LP @DP @NP
+        @LeftDisplay @IndentedDisplay @CenteredDisplay
+        @Text @Document
+ 
+ def @ToySetup
+     named @PageWidth  { 21.0c }
+     named @PageHeight { 29.7c }
+ @Begin
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Font changes, headings, and paragraphs.                                #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @I       right x { Slope @Font x      }
+     def @B       right x { Bold @Font x       }
+     def @Heading right x { ragged @Break @B x }
+ 
+     macro @PP        { //1.3vx 1.0f @Wide &0i }
+     macro @LP        { //1.3vx                }
+     macro @DP        { //0.5v                 }
+     macro @NP        { //1.1b                 }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Displays.                                                              #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @DispPlace { @Galley }
+ 
+     def @Disp into { @DispPlace&&preceding }
+ 	right x
+     {
+ 	@OneRow x
+     }
+ 
+     macro @LeftDisplay     { @DP |       @DispPlace  |  @DP // @Disp   }
+     macro @IndentedDisplay { @DP |2f     @DispPlace  |  @DP // @Disp   }
+     macro @CenteredDisplay { @DP |0.5rt  @DispPlace  |  @DP // @Disp   }
+ 
+ 
+     ###########################################################################
+     #                                                                         #
+     #  Page layout.                                                           #
+     #                                                                         #
+     ###########################################################################
+ 
+     def @TextPlace { @Galley }
+ 
+     def @Text force into { @TextPlace&&preceding }
+         right x
+     {
+ 	x
+     }
+ 
+     def @Page right x
+     {
+ 	@PageWidth @Wide @PageHeight @High
+ 	{ Times Base 12p } @Font
+ 	{ adjust nohyphen 14px } @Break
+ 	English @Language { 0 0 0 } @SetColour
+ 	{   //1i ||1i
+ 	    @HExpand @VExpand x
+ 	    ||1i //1i
+ 	}
+     }
+ 
+     def @PageList right num
+     {
+ 	@Page { |0.5rt - num - //0.4i @TextPlace }
+ 	//
+ 	@PageList @Next num
+     }
+ 
+     def @Document { @PageList 1 }
+ 
+ @End @ToySetup
+ 
+ @SysDatabase @FontDef  { fontdefs }		  # font definitions






More information about the llvm-commits mailing list