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

Primary site: ftp://ftp.tux.org/pub/tux/bagleyd/xpuzzles
Secondary site: ftp://ibiblio.org/pub/Linux/games/strategy
Web page: http://www.tux.org/~bagleyd/puzzles.html
Maintainer: David A. Bagley <bagleyd@tux.org>

  It has been tested on the following platforms:
    Sun Ultra 5     SunOS 5.8
    PC  Pentium 4   Linux 2.4.18
    PC  Pentium 4   WindowsXP/Cygwin
    IBM PowerPC     AIX 4.3.3.0

  Previous versions tested on:
    Sun Ultra       SunOS 5.6-5.7
    Sun SPARC       SunOS 5.5.1 (X11R5 & X11R6)
    Sun SPARC       SunOS 4.1.3
    PC  Pentium     Linux 2.0.9
    PC  486         Linux 1.2.13(*)
    DEC VAX & ALPHA VMS 6.1
    IBM PowerPC     AIX 4.3.1.0
    HP  898         HP-UX 10.20
    HP  3xx & 700   HP-UX 9.01

    * 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:
      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 XmLibrary".

      xmkmf ; make

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

      @make

  Then just run "xhexagons".  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

  Try resizing Hexagons.  Notice the puzzle resizes to take advantage of
  the "room" available.

  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 and instructions
  on how to operate.

  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
  be able to duplicate them.

HISTORY

  [Mar 21, 2003]  V5.6.2:
    Installation fixes for Motif and X versions.
  [Nov 06, 2002]  V5.6.1:
    VMS Motif fix and minor changes
  [Sep 06, 2002]  V5.6:
    configure if around 2nd AC_CHECK_FUNC
    removed Sun CC (char *) warnings
    removed hard coding of program name
    Cygwin changes ./, -lSM -lICE
    record store fix
    x and xm files combined using HAVE_MOTIF
    port back from Java (on the Java side I got some help from
        Sarat Chandran, saratcmahadevan@yahoo.com)
      use -1 for NEVER instead of 32767
      handle nobody = (null)
      .data->.dat for consistency
      frame color change on enter/leave
      background/foreground set by default
      allow more arrow keys (osf)
      menu
      3d tiles
      puzzle border changes
      clear
      PositionToTile update
      sizeX&sizeY
      reset maximum
  [Sep 01, 2001]  V5.5.4: g++ 3.0 warnings removed.
  [Mar 27, 2001]  V5.5.3: Infinite loop fix for ARM thanks to Matej Vela
    <mvela@public.srce.hr>.
  [Aug 11, 1999]  V5.5.2: Fixed runtime library problems when using configure.
  [Jul 31, 1999]  V5.5.1: Imakefile fix for xhexagons and removed HP usleep
    warning.
  [Jun 20, 1999]  V5.5: Added -rv, -mono, -base
  [Jan 01, 1997]  V5.4: Username, concurrency check, configure, man page
    updates.
  [Apr 08, 1996]  V5.3: Minor changes.
  [Jan 31, 1996]  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, 1995]  V5.1: Minor updates, RNG for 32/64 bit, border color
    to make faces look more realistic.
  [Oct 01, 1995]  V5.0: Xt/Motif, your choice.
  [May 16, 1995]  V4.10: Warnings removed from Sun's cc and lint and now
    include a random number generator.
  [Mar 13, 1995]  V4.5: Removed lint warnings and added a VMS make.com .
  [Nov 11, 1994]  V4.4: Conservative guess for random number generator.
  [Nov 02, 1994]  V4.3: Now allows undos, saves, and recalls.
  [Aug 23, 1994]  V4.2: Switched left and middle buttons on the mouse to
    have up and down consistent with vi's "j", "k" keys.
  [Jun 28, 1994]  V4.1: Can accommodate a auto-solver.
  [Jun 07, 1994]  V4.0: Xt version.
    I got some good ideas from oclock.
  [Apr 01, 1993]  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, 1992]  V2.0: XView version.
  [Sep 06, 1991]  V1.0: SunView version.
