cleanup: got rid of a lot of files that are not needed for a new release
[xboard.git] / installer / WinBoard-4.2.7 / gnuches5.txt
diff --git a/installer/WinBoard-4.2.7/gnuches5.txt b/installer/WinBoard-4.2.7/gnuches5.txt
deleted file mode 100644 (file)
index c2f39f7..0000000
+++ /dev/null
@@ -1,512 +0,0 @@
-README
-GNU CHESS 5
-by Stuart Cracraft <cracraft@gnu.org>
-copyright (c) 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993
-1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Modified Simon Waters <simon@wretched.demon.co.uk> 2001
-Modified Simon Waters <simon@wretched.demon.co.uk> 2003
-
-IMPORTANT: Please send all updates to Simon at the above address.
-
-Table of Contents
-
-  Introduction
-  Who We Are
-  Data Structures
-  Move Generator
-  Search
-  Evaluation
-  Book
-  Hash Table
-  Auxillary File Formats (PGN, EPD)
-  Universal Board
-  Caveats
-  Compilers
-  Internet
-  Xboard/Winboard
-  Command List
-
-
-INTRODUCTION
-
-Welcome to the GNU CHESS 5 README. This is somewhat different than 
-a normal readme. You might consider this a manual. We've always found
-multiple documents confusing, overlapping and sometimes contradictory
-as far as software documentation goes. By putting it all together in
-one place we hope to avoid these traditional inadequacies and be able
-to maintain a single document. If you add documentation, add it to
-this document only.
-
-GNU Chess 5 is the new version of GNU Chess. The goal of creating this
-new version was to eliminate perceived problems with past versions, the
-major one being spaghetti-code that was extremely poorly documented, but
-another being antiquated data structures and especially the ignominous
-linked list. Another good reason was to have more standard file formats
-for game positions and game listings.
-
-
-WHO WE ARE
-
-We are the GNU Chess developers and you may reach us at 
-
-       bug-gnu-chess@gnu.org
-
-We are indebted to our sponsor, the Free Software Foundation
-whose web page is:
-
-       http://www.gnu.org
-
-and which also serves as our software depository for new versions of
-GNU and GNU Chess.
-
-We also have a Usenet bulletin board, gnu.chess. Feel free to post and
-support. Please become a developer and contribute your time and coding skill
-to GNU Chess. Make a donation of your time and money.
-
-But, as developers we like to develop our own ideas. Thus, if you have
-an idea check to see that no one else is working on it (posting on the
-above bulletin board or sending an email should be sufficient to find
-if someone is working on the idea and if you can collaborate with
-them.)
-
-We don't like messages asking us to implement features. Everybody
-has a list a mile long. Instead, contribute by writing code or pointing
-out very clearly a bug. To report a bug, tell us the version number
-of the program ("./gnuchess --version").
-
-The code is provided for the purpose of encouraging you to do the
-programming.  If you lack the programming skills to do so, try
-dabbling in it. You might surprise yourself.
-
-
-DATA STRUCTURES
-
-The primary data structure of GNU Chess is the bitboard. A bitboard
-is a 64-bit GNU C long long. It represents characteristics of a position.
-For example, 12 bitboards are sufficient to describe the whereabouts
-of all the pieces for both sides, i.e.
-
-       BitBoard board.b[2][6];
-
-So for example with a knight equal to 2 and white equal to 0 all the
-knights are located by the reference
-
-       #define white 0
-       #define knight 2
-
-       ... board.b[white][knight] ...
-
-Testing whether a particular square has a knight on it could be done
-with 
-
-       if (BitBoard[B1] & board.b[white][knight]) { ... }
-
-Another set of move arrays is helpful for calculating the simple moves
-of a knight or a king
-
-       MoveArray[knight or king][sq]
-
-This returns a bitmap of the squares from which a knight or king
-could move from the square sq. Squares are based at 0 for a1 (White's
-queen's rook 1) and numbered left to right up until 63 for h8 (Black's
-king's rook 1).
-
-Another basic data structure is the board. It is defined in common.h
-as the Board typedef:
-
-  typedef struct 
-  {
-     BitBoard b[2][7];         /* Pieces by side (0 - white, 1 black
-                                  by piece (1 - pawn ... 6 - king */
-     BitBoard friend[2];       /* Friendly (this side's) pieces */
-     BitBoard blocker;         /* Enemy pieces */
-     BitBoard blockerr90;
-     BitBoard blockerr45;
-     BitBoard blockerr315;
-     short ep;                 /* Location of en passant square */
-     short flag;               /* Relevant flags relating to castle privs */
-     short side;               /* Color of side on move 0 - white 1 - black */
-     short material[2];                /* Total material by side not inc. king */
-     short pmaterial[2];       /* Total pawn material by side not inc. king */
-     short castled[2];         /* True (1) if side is castled */
-     short king[2];            /* Location of king 0 - a1 .. 63 - h8 */
-  } Board; 
-
-Basic data structure typedefs are defined in common.h and allocated in
-main.c for the most part. Please read and understand those files. The
-best way to understand data structures is to add new evaluation terms.
-
-MOVE GENERATOR
-
-This is a rotated bit-board method which is considered state-of-the-art
-currently.
-
-SEARCH
-
-Based on Professor Tony Marsland's modification to alpha-beta minimax,
-called Principal Variation Search (PVS), this algorithm performs credibly.
-
-EVALUATION
-
-Evaluation in this version is quite a bit different than before.
-Earlier versions used piece/square tables with some end-leaf
-evaluation (but primary pc/sq tables). These are tables filled with
-values regarding the importance of having pieces on particular squares.
-It was filled once, at the beginning of the search.
-
-The drawback of pc/sq tables is that the information is typically of
-less and less importance the deeper a program searches because the
-board changes so much. With computers getting faster and faster, deeper
-and deeper searches are possible and so the pc/sq tables can provide
-misleading direction to the program, resulting in anti-positional moves.
-
-More recently there has been a return by some to what we espouse here:
-full end-leaf evaluation. Further, we use bitboards (64-bit quantities)
-to represents characteristics of the board. This harkens back, ironically
-to the early days of computer chess when giant number-crunching machines
-back in the 60's used bitmaps to describe positions.
-
-Bitboards in this version of GNU are defined using the "BitBoard" typedef
-defined in common.h. main.c contains most of the bitboards and these
-are accessed and used throughout the program and particularly by
-the move generator and the evaluator.
-
-The evaluator in eval.c consists of a series of scoring routines like
-ScoreP (), ScoreN (), ScoreB (), corresponding to the piece being
-scored. The routine evaluates all pieces of that type (P - pawn,
-N - knight, B - bishop, etc.) on the current board and returns a
-score.
-
-Typically a loop is used of the form
-
-    short sq;  /* Location of the piece of this type */
-    short s;   /* Score value for all pieces
-    BitBoard b;        /* Stores the bitboard representing location of the piece */
-    s = 0;     /* Score starts out as zero */
-    b = board.b[side][knight];
-    while (b) {
-      sq = leadz(b);
-      CLEARBIT (b, sq);
-      if (piece on sq has some property)
-       s += SOME_BONUS_OR_PENALTY;    /* defined in eval.h */
-    }
-    return(s);
-
-As you can see, this routine locates each piece in the 64-bit map
-where the corresponding square of the 64 is set to 1 meaning a piece
-is there. Hence for example in the opening position, board.b[white][bishop]
-would have the 3rd and 7th low-order bits set corresponding to the original
-locations of bishops in a game on C1 and F1. Likewise the values
-BitPosArray[C1] and BitPosArray[F1] can be used to return 64-bit
-quantities for checking specific matches as in
-
-   if (BitPosArray[A1] & board.b[side][bishop])
-       s += SOME_VERY_NEGATIVE_PENALTY_FOR_BISHOP_IN_A1_CORNER
-
-Writing evaluation code comes very naturally using these methods. Try
-to avoid too many specific square checks as those are expensive. Ideas
-as shown in the CTL() routine can be used to check for piece placement
-on specific squares being advantageous or disadvantageous.
-
-Primary evaluation is done with Evaluate(). Certain specifics are
-calculated which are deemed very important such as king evaluation
-and pawn evaluation. Then a "lazy evaluation" scenario is checked
-for which can save time. Otherwise other pieces are also evaluated.
-
-Very important for evaluation is the ability to see what board you
-are evaluating. Typically this should be sufficient when you add
-the new term:
-
-       /* ... new logic ... */
-       {
-         s += SOME_NEW_BONUS (define in eval.h)
-         printf("The condition is triggered:\n");
-         ShowBoard ();
-         getchar();
-       }
-
-This lets you see the board at the point the condition is triggered
-which adds the bonus or penalty to the evaluation score.
-
-
-BOOK
-
-The opening book is implemented as a simple binary file consisting of
-a set of sequential records of struct hashtype as defined in the module
-book.c. This data structure is simply two part, a 64-bit HashType (see
-common.h) and a 32-bit score. 
-
-The binary book stored in book.dat is compiled from the file book.pgn
-using the command "book add book.pgn" into a sequential set of binary 
-records in the format as described above. book.pgn is simply a set of 
-game records in portable game notation format.  A set of master games 
-may be used or specific openings programmed this way for a user-changeable
-opening book.
-
-HASH TABLE
-
-The hash table is simply an area of memory where information about
-positions is stored. In this version of the program there are two
-types of hash tables: general and pawn. 
-
-The general hash table size is controlled by the variable HASHSLOTS
-as defined in common.h. Likewise the pawn hash table size is controlled
-by the variable PAWNSLOTS in common.h.
-
-The number of hashtable slots can be controlled from the command
-line (Type "gnuchess -help" for details), or via the interactive
-hashsize command.
-
-Typically middle-game searches are sped up by 25%-50% by the general
-hash table and by much more in endgames where there are few pieces
-(because so many of the positions turn out to be cached already in
-the hash table.)
-
-Pawn evaluation is traditionally expensive because there are so many 
-things to evaluate. The pawn hash table remembers all the different
-pawn structures in the search. Typically pawn structure evaluation
-(without reference to pieces) may be calculated by simple table
-lookup this way 90-99% of the time. Hence, any amount of pawn logic
-that is pure-pawn and not related to pieces may be added without guilt.
-On the other hand, pawn structure that relates to pieces must be
-recalculated for every position. See ScoreP() in eval.c
-
-
-AUXILLARY FILE FORMATS
-
-.dat - binary book format, simply a 64-bit position hash and a 32-bit score
-.pgn - game listing like 1. e4 e5 2. Nf3 etc.
-.epd - epd-style format using FEN notation. See tests subdirectory for example.
-log.nnn - record of an entire game from computer's viewpoint (thinking, etc.)
-game.nnn - record of an entire game, similar to .pgn but auto-generated
-
-The .dat file format is a simple binary format for the compiled book
-which is read by the program when it is using book. See the section BOOK
-for more detail.
-
-EPD and PGN require little introduction. These are the uniformly accepted
-standards for position recording and game recording.
-
-Note that log.nnn and game.nnn files are written at the end of a game
-when you use the "name" command to give the computer your name. It is
-highly recommended to do this since the resulting two files that match
-in a monotonically-increasing extension numbered suffix may be used for
-reporting bugs and keeping track of your games.
-
-
-COMPILERS
-
-  We like GNU C in all its various forms. For Unix and Linux, use GNU C.
-
-  For Microsoft Windows platforms we compile and test using Cygwin,
-  which is a port of many GNU packages, including GCC.
-
-  Cygwin may require specific run time DLL's to provide the interface, 
-  these should be provided with any executable you receive.
-
-  Whilst GCC is the supported compiler, a key goal is portability. If
-  you experience problems compiling GNU Chess with a modern C compiler
-  please let the developers know.
-
-INTERNET
-
-  GNU CHESS 5 has been tested substantially on the Free Internet Chess
-  Servers (freechess.org) with Xboard (See Zippy documentation in the
-  Xboard/Winboard distribution http://www.tim-mann.org/).
-
-  GNU Chess 5.06 and later should also operate with icsDrone. Testing
-  5.06 with icsDrone 1.5.0 showed no immediate issues.
-
-XBOARD/WINBOARD
-
-  Running the program with the "--xboard" command line parameter sets it
-  to produce output acceptable to and accept input suitable for xboard
-  and winboard, the graphical display front-ends with mouse interface.
-
-  For historical reasons the option "xboard" does not need to be 
-  preceeded by "--", however we would encourage the new syntax.
-
-COMMAND LIST
-
-  ^C
-       Typically the interrupt key stops a search in progress,
-       makes the move last considered best and returns to the
-       command prompt
-
-  quit
-       Quit the program.
-  exit
-       In analysis mode this stops analysis, otherwise it quits the program.
-
-  help
-       Produces a help blurb corresponding to this list of commands.
-
-  usage
-       Produce blurb on command line options.
-       (Same as "gnuchess --help")
-
-  book
-       add - compiles book.dat from book.pgn
-       on - enables use of book
-       off - disables use of book
-       best - play best move from book
-       worst - play worst move from book
-       random - play any move from book
-       
-       prefer (default) - choose a good move from book
-       (Method subject to variation)
-
-  version
-       prints out the version of this program
-       (Same as "gnuchess --version")
-
-  pgnsave FILENAME
-       saves the game so far to the file from memory
-
-  pgnload FILENAME
-       loads the game in the file into memory
-
-  force
-  manual
-       Makes the program stop moving. You may now enter moves
-       to reach some position in the future.
-       (Same as "gnuchess --manual")
-   
-  white
-       Program plays black, set white to move.
-
-  black
-       Program plays white, set black to move.
-
-       (White and black commands are mainly for icsDrone
-        and will cause the current en-passant capture
-        square to be forgotten).
-
-  go
-       Computer takes whichever side is on move and begins its
-       thinking immediately
-
-  easy 
-       Disables thinking on opponent's time
-       (Same as "gnuchess --easy").
-
-  hard
-       Enables thinking on opponent's time
-
-  post
-       Arranges for verbose thinking output showing variation, score,
-       time, depth, etc.
-
-       If pondering (see hard) is on, the program will output
-       it's thinking whilst the opponent is thinking.
-
-       (Also "gnuchess --post")
-
-  nopost
-       Turns off verbose thinking output
-
-  name NAME
-       Lets you input your name. Also writes the log.nnn and a
-       corresponding game.nnn file. For details please see
-       auxillary file format sections.
-
-  result
-       Mostly used by Internet Chess server.
-
-  activate
-
-       This command reactivates a game that has been terminated automatically
-       due to checkmate or no more time on the clock. However, it does not
-       alter those conditions. You would have to undo a move or two or
-       add time to the clock with level or time in that case.
-
-  rating COMPUTERRATING OPPONENTRATING
-       Inputs the estimated rating for computer and for its opponent
-
-  new
-       Sets up new game (i.e. positions in original positions)
-
-  time
-       Inputs time left in game for computer in hundredths of a second.
-       Mostly used by Internet Chess server.
-
-  otim (NOT IMPLEMENTED)
-       Mostly used by Internet Chess server.
-
-  random (NOT IMPLEMENTED)
-       Randomizes play by perturbing the evaluation score slightly.
-       The degree of perturbation is adjustable.
-
-  hash
-       on - enables using the memory hash table to speed search
-       off - disables the memory hash table
-
-  hashsize N
-       Sets the hash table to permit storage of N positions
-       N is rounded down to nearest power of 2.
-       (Also "gnuchess --hashsize=N")
-
-  null
-       on - enables using the null move heuristic to speed search
-       off - disables using the null move heuristic
-
-  xboard
-       on - enables use of xboard/winboard
-       off - disables use of xboard/winboard
-       (Also "gnuchess --xboard")
-
-  depth N
-       Sets the program to look N ply (half-moves) deep for every
-       search it performs. If there is a checkmate or other condition
-       that does not allow that depth, then it will not be 
-
-  level MOVES MINUTES INCREMENT
-       Sets time control to be MOVES in MINUTES with each move giving
-       an INCREMENT (in seconds, i.e. Fischer-style clock).
-
-  load
-  epdload
-       Loads a position in EPD format from disk into memory.
-
-  save
-  epdsave
-       Saves game position into EPD format from memory to disk.
-
-  switch
-       Switches side to move
-
-  solve FILENAME
-  solveepd FILENAME
-       Solves the positions in FILENAME
-
-  remove
-       Backs up two moves in game history
-
-  undo
-       Backs up one move in game history
-
-  show
-       board - displays the current board
-       time - displays the time settings
-       moves - shows all moves using one call to routine
-       escape - shows moves that escape from check using one call to routine
-       noncapture - shows non-capture moves
-       capture - shows capture moves
-       eval [or score] - shows the evaluation per piece and overall
-       game - shows moves in game history
-       pin - shows pinned pieces
-
-  test
-       movelist - reads in an epd file and shows legal moves for its entries
-       capture - reads in an epd file and shows legal captures for its entries
-       movegenspeed - tests speed of move generator
-       capturespeed - tests speed of capture move generator
-       eval - reads in an epd file and shows evaluation for its entries
-       evalspeed tests speed of the evaluator
-
-  analyze
-       Switches program into analysis mode, this is primarily intended for
-       communicating analysis to an external interface using the Xboard 
-       chess engine protocol. It enables "force", "post", and
-       "hard", at the same time, whilst altering the
-       output format of post to conform with the engine protocol.