  X-BASED HEXAGONS
  ================ Hexagons X widget, V5.4

Primary site: ftp://ftp.tux.org/pub/people/david-bagley/xpuzzles
Secondary site: ftp://ftp.x.org/contrib/games/puzzles
Web page: http://www.tux.org/~bagleyd/puzzles.html
Maintainer: David A. Bagley <bagleyd@bigfoot.com>

  It has been tested on the following platforms:

    Sun4 SPARC   SunOS 5.5.1  X11R5,X11R6
    DEC  VAX     VMS6.1       X11R5
    DEC  ALPHA   VMS6.1       X11R5
    HP   HPPA1.1 HP-UX 9.01   X11R5
    PC   486     Linux 1.2.13 X11R6(*)

    * Keypad may not work, since various keycodes may not be defined
      by default.  Check that "KP_1 - KP_9, Home, Up, Prior, Left,
      Begin, Right, End, Down, Next" are defined towards the end of
      /usr/lib/X11/etc/xmodmap.std .  If not defined
      cp /usr/lib/X11/etc/xmodmap.std /usr/lib/X11/xinit/.Xmodmap
      and then motify this or create your own at ${HOME}/.Xmodmap .
      You should just have to uncomment them (get rid of some '!').
      This should be done before X is started.  Also it may work better
      with the Num-Lock on.

  If you have to do any editing to get this to work, please mail me
  the changes.

HOW TO BUILD?

  An ANSI C compiler is required for build.

  To build, it should be easy.  There are 3 choices.

    configure:
      Relatively new so there is a good possiblity that it is not set up
      correctly on your system.  You may want to set SCOREFILE and DATAFILE
      in Makefile.in .

      configure ; make

    imake:
      Sometimes this is not setup correctly by the distributer ... i.e. not
      my fault.  You may want to set SCOREFILE and DATAFILE in Imakefile .
      If you have Motif you may want to do this quick edit in the Imakefile:
        Uncomment line "#define XpmLibrary".

      xmkmf ; make

    make.com (VMS users only):
      You may want to set SCOREFILE and DATAFILE in make.com .

      @make

  Then just run "xhexagons" (or "xmhexagons" if you have Motif).
  If you do a "make install" "SCOREFILE" and "DATAFILE" must be
  set correctly.

  You should have Hexagons.ad copied to $(HOME)/Hexagons or 
  /usr/lib/X11/app-defaults/Hexagons to run, especially if the background
  is similar to one of the faces. Edit this file for your preferences.
  You might want to move xhexagons into /usr/bin/X11 (or wherever your
  X binaries are).
  You might also want to move xhexagons.man to /usr/man/man6/xhexagons.6

  If you were looking for a auto-solver, sorry.

  Keep in mind that Hexagons is a widget that can be simply stuck in
  other X programs. (If you find a use for this, let me know).

  Refer to the man page for detailed command line options.

  If you want further information on puzzles, I'll be glad :-) to send
  it to you.

MATHEMATICAL STUFF USED IN CONSTRUCTION
 
  Lets start out with a triangle of hexagons for simplicity's sake
  and then expand these ideas to a hexagon of hexagons

  Assuming it is a triangle of i hexagons in each row and the
  numbering starts from 1.
    Corner 1-> 1
           2-> i(i+1)/2 - i + 1
           3-> i(i+1)/2

    Center ->i%3 =>
           1: (2i'-1)*(2i')/2-i'+1 where i'= (i+2)/3
           default: None

    Max_Width -> i * 3^(1/2) units
    Max_Height -> (3/2)i+(1/2) units

    Start -> x= i * 3^(1/2)/2 units
             y=0
             fin=i
             step=i
    Next -> (n==fin) =>
             true: x+= -3^(1/2) * (2 * step - 1)/2 units; y+=3/2 units;
                   step++; fin+=step
             default: x+= 3^(1/2) units

    Same row? -> (m'==n') where s'=(1+sqrt_trunc(1+8*(s - 1)))/2 {k}
                              i.e. s = s'(s'-1)/2
    Same trbl? -> (m-1)-m'(m'-1)/2 == (n-1)-n'(n'-1)/2 {i}
    Same tlbr? -> (m'+1)m'/2-m == (n'+1)n'/2-n {j}

    Now assuming it is a hexagon of i hexagons in each row and
    the numbering starts from 1.
 
    Corner 1-> 1
           2-> i
           3-> Center - i + 1
           4-> Center + i - 1
           5-> 3i(i-1) - i + 2
           6-> 3i(i-1) + 1

    Center -> 3i(i-1)/2 + 1

    Max_Width -> (2i-1) * 3^(1/2) units
    Max_Height -> 3i-1 units

    Start -> x= i * 3^(1/2)/2 units
        y=0
        fin=i
        step=i
    Next -> (n<=center) =>
        true: (n==fin)
            true: x+= -3^(1/2) * (2 * step - 1)/2 units; y+=3/2 units;
                  step++; fin+=step
            default: x+= 3^(1/2) units
        default: (n==fin)
            true: step--; x+= -3^(1/2) * (2 * step - 1)/2 units;
                  y+=3/2 units; fin+=step
            default: x+= 3^(1/2) units

    Same row? -> (m'==n') {k} where (s<=center) =>
        true: s' = (1+sqrt_trunc(1+8*(s+i*(i-1)/2)))/2-i
                       i.e. s = s'*(2s'-1)-(i)(i-1)/2
        default: s' = 3*i-2-(1+sqrt_trunc(1+8*(3i(i-1)+1+i*(i-1)/2-s)))/2)
    Same trbl? -> (m''==n'') {i} where (s<=center) =>
        true: s'' = (s+i*(i-1)/2)-(s'+i)*(s'+i-1)/2
        default: s'' = 2*i-2-(3i(i-1)+i*(i-1)/2-s-(3*i-s'-2)*(3*i-s'-3)/2)
    Same tlbr? -> (m''==n'') {j} where (s<=center) =>
        true: s'' = -1-((s+i*(i-1)/2)-(s'+i+1)*(s'+i)/2)
        default: s'' = 2*i-1+(3i(i-1)+i*(i-1)/2-s-(3*i-s'-1)*(3*i-s'-2)/2)
 
FOUND A BUG?

  Send bugs reports and fixes to the author. For bugs, please include
  as much information as to their location as possible, since I may not
  have the resources to duplicate the them.

HISTORY

  [Jan 01, 97]  V5.4: Username, concurrency check, configure, man page
    updates.
  [Apr 08, 96]  V5.3: Minor changes.
  [Jan 31, 96]  V5.2: If corners mode, a tile is now moved by a more
    intuitive drag and drop approach.  Tiles will invert,
    when selected.  Now using dynamic allocation, so there
    is no maximum size.
  [Dec 15, 95]  V5.1: Minor updates, RNG for 32/64 bit, border color
    to make faces look more realistic.
  [Oct 01, 95]  V5.0: Xt/Motif, your choice.
  [May 16, 95]  V4.10: Warnings removed from Sun's cc and lint and now
    include a random number generator.
  [Mar 13, 95]  V4.5: Removed lint warnings and added a VMS make.com .
  [Nov 11, 94]  V4.4: Conservative guess for random number generator.
  [Nov 02, 94]  V4.3: Now allows undos, saves, and recalls.
  [Aug 23, 94]  V4.2: Switched left and middle buttons on the mouse to
    have up and down consistent with vi's "j", "k" keys.
  [Jun 28, 94]  V4.1: Can accommodate a auto-solver.
  [Jun 07, 94]  V4.0: Xt version.
    I got some good ideas from oclock.
  [Apr 01, 93]  V3.0: Motif version.
    I got some good ideas from Douglas A. Young's
    book: "The X Window System Programming and Applications
    with Xt OSF/Motif Edition", particularly his dial widget.
    I got some good ideas on presentation from Q. Zhao's tetris.
  [Jan 07, 92]  V2.0: XView version.
  [Sep 06, 91]  V1.0: SunView version.
