
###############################################################################
#                                                                             #
#  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 { "tab.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 

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 PlainText @Yield 0.5v } }
    named linewidth
	named c { " cm" }
	named i { " in" }
	named e { " em" }
	named p { " pt" }
	named f { " ft" }
	named s { " sp" }
	named v { " vs" }
		    { 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 } }

    def @HSingle	{ linewidth ltabhs   }
    def @HSingleProject	{ linewidth ltabhsp  }
    def @HDouble	{ linewidth ltabhd   }
    def @HDoubleBelow	{ linewidth ltabhdb  }
    def @HDoubleNW	{ linewidth ltabhdnw }
    def @HDoubleNE	{ linewidth ltabhdne }
    def @HDoubleSW	{ linewidth ltabhdsw }
    def @HDoubleSE	{ linewidth ltabhdse }
    def @VSingle	{ linewidth ltabvs   }
    def @VDouble	{ linewidth ltabvd   }
    def @VDoubleRight	{ linewidth ltabvdr  }

    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 @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
