/* -*-ePiX-*- */
#include "epix.h"
using namespace ePiX;
const double dx(0.25);

double row0(-1.25), bot(-0.5), row1(0), row2(1), sep(1.75), row3(2.25);

int main()
{
  picture(P(0,-1.5), P(36,2.5), "6 x 0.75in");

  begin();
  arrow_inset(0.25);

  line(P(0, sep),    P(xmax(), sep));
  line(P(0, sep+0.05), P(xmax(), sep+0.05));

  line(P(xmax()-1, bot), P(xmax()-1, ymax()));
  line(P(xmax(),   bot), P(xmax(),   ymax()));

  for (int i=6; i <= 21; ++i)
    line(P(i, bot), P(i, ymax()));

  font_size("footnotesize");
  label(P(0,row1), P( 2,0), "Floating nos.", r);
  label(P(0,row2), P( 2,0), "Integers", r);
  label(P(6,row3), P(-2,0), "Columns.", l);

  for (int i=1; i <= 15; ++i)
    {
      std::ostringstream buf;
      buf << i;
      label(P(i+5.5, row3), buf.str());

      if (i <= 5)
	label(P(i+5.5, row2), "x");

      else if (i <= 13)
	label(P(i+3.5, row1), "x");

      else
	label(P(i+5.5, row1), "x");
    }

  label(P(6.5), "$±$");
  label(P(7.5), "$0$");
  label(P(8.5), P(0,-2), "$.$");
  label(P(18.5), "$±$");
  label(P(xmax()-0.5, row3), "$72$");

  base(White(), 2.5);
  line(P(11+dx,row2), P(xmax()-dx,row2));
  line(P(21+dx,row1), P(xmax()-dx,row1));

  base(Neutral(), 0);
  aarrow(P(11+dx,row2), P(xmax()-dx,row2), 0.5);
  aarrow(P(21+dx,row1), P(xmax()-dx,row1), 0.5);

  masklabel(P(0.5*(xmax()+11), row2), "any Hollerith character");
  masklabel(P(0.5*(xmax()+21), row1), "any Hollerith character");

  label(P(19.5, row0),
	"$\\underbrace{\\rule{0.5in}{0pt}}_{\\text{exponent}}$");

  label(P(13,   row0),
	"$\\underbrace{\\rule{1.333in}{0pt}}_{\\text{fractional part}}$");
  tikz_format();
  end();
}
