- /* 
-     Protector -- a UCI chess engine 
-   
-     Copyright (C) 2009-2010 Raimund Heid (Raimund_Heid@yahoo.com) 
-   
-     This program is free software: you can redistribute it and/or modify 
-     it under the terms of the GNU General Public License as published by 
-     the Free Software Foundation, either version 3 of the License, or 
-     (at your option) any later version. 
-   
-     This program is distributed in the hope that it will be useful, 
-     but WITHOUT ANY WARRANTY; without even the implied warranty of 
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
-     GNU General Public License for more details. 
-   
-     You should have received a copy of the GNU General Public License 
-     along with this program.  If not, see <http://www.gnu.org/licenses/>. 
-   
- */ 
-   
- #ifndef _pgn_h_ 
- #define _pgn_h_ 
-   
- #include <stdio.h> 
-   
- typedef struct 
- { 
-    long *index; 
-    long indexSize; 
-    long numGames; 
-    FILE *file; 
- } 
- PGNFile; 
-   
- #define PGN_ROASTERLINE_SIZE 256 
-   
- typedef struct 
- { 
-    Square from, to; 
-    Piece newPiece; 
-    Position position; 
-    void *previousMove; 
-    void *nextMove; 
-    void *alternativeMove; 
-   
-    char *comment, *glyphs; 
- } 
- Gamemove; 
-   
- typedef struct 
- { 
-    char event[PGN_ROASTERLINE_SIZE]; 
-    char site[PGN_ROASTERLINE_SIZE]; 
-    char date[PGN_ROASTERLINE_SIZE]; 
-    char round[PGN_ROASTERLINE_SIZE]; 
-    char white[PGN_ROASTERLINE_SIZE]; 
-    char black[PGN_ROASTERLINE_SIZE]; 
-    char result[PGN_ROASTERLINE_SIZE]; 
-    char setup[PGN_ROASTERLINE_SIZE]; 
-    char fen[PGN_ROASTERLINE_SIZE]; 
-    char whiteTitle[PGN_ROASTERLINE_SIZE]; 
-    char blackTitle[PGN_ROASTERLINE_SIZE]; 
-    char whiteElo[PGN_ROASTERLINE_SIZE]; 
-    char blackElo[PGN_ROASTERLINE_SIZE]; 
-    char eco[PGN_ROASTERLINE_SIZE]; 
-    char nic[PGN_ROASTERLINE_SIZE]; 
-    char timeControl[PGN_ROASTERLINE_SIZE]; 
-    char termination[PGN_ROASTERLINE_SIZE]; 
-   
-    char *moveText; 
-    Gamemove *firstMove, *lastMove; 
-    Gamemove moveHeap[1024]; 
-    int nextMoveFromHeap; 
- } 
- PGNGame; 
-   
- /** 
-  * Open the PGN file specified by 'filename'. 
-  * 
-  * @return 0 if the file could be opened without any error 
-  */ 
- int openPGNFile(PGNFile * pgnfile, const char *filename); 
-   
- /** 
-  * Close the PGN file specified by 'pgnfile'. 
-  */ 
- void closePGNFile(PGNFile * pgnfile); 
-   
- /** 
-  * Get the PGNGame specified by 'number'. 
-  * 
-  * @param number the number of the game to be loaded [1...pgnfile.numGames] 
-  * @param pgngame the struct supposed to contain the game data. It is  
-  *        important to free the memory allocated for the game moves as 
-  *        soon as the pgngame is no longer needed. 
-  * 
-  * @return 0 if no errors occured 
-  */ 
- PGNGame *getGame(PGNFile * pgnfile, int number); 
-   
- /** 
-  * Initialize the specified PGNGame. 
-  */ 
- void initializePGNGame(PGNGame * game); 
-   
- /** 
-  * Free all memory allocated for the specified pgn game. 
-  */ 
- void resetPGNGame(PGNGame * game); 
-   
- /** 
-  * Free all memory allocated for the specified pgn game  
-  * (including the game itself). 
-  */ 
- void freePgnGame(PGNGame * game); 
-   
- /** 
-  * Generate the SAN notation of the specified move. 
-  */ 
- void generateMoveText(Variation * variation, const Move move, char *pgnMove); 
-   
- /** 
-  * Get the current principal variation of the specified variation. 
-  * 
-  * @return a newly allocated string 
-  */ 
- char *getPrincipalVariation(const Variation * variation); 
-   
- /** 
-  * Generate the pgn text of the specified game. 
-  */ 
- char *generatePgn(PGNGame * game); 
-   
- /** 
-  * Initialize a variation with the specified game. 
-  */ 
- void initializeVariationFromGame(Variation * variation, PGNGame * game); 
-   
- /** 
-  * Initialize a game with the specified variation. 
-  */ 
- void initializeGameFromVariation(const Variation * variation, PGNGame * game, 
-                                  bool copyPv); 
- /** 
-  * Convert a gamemove to a move. 
-  */ 
- Move gameMove2Move(const Gamemove * gamemove); 
-   
- /** 
-  * Interpret the given pgn move and return an appropriate Move. 
-  */ 
- Move interpretPGNMove(const char *moveText, PGNGame * game); 
-   
- /** 
-  * Append the specified move to the specified game. If the move 
-  * is found to be illegal this call has no effect on the game and 
-  * a nonzero value will be returned. 
-  * 
-  * @return 0 if and only if the specified move was legal 
-  */ 
- int appendMove(PGNGame * game, const Move move); 
-   
- /** 
-  * Take back the last move of the specified game. 
-  */ 
- void takebackLastMove(PGNGame * game); 
-   
- /** 
-  * Initialize this module. 
-  * 
-  * @return 0 if no errors occurred. 
-  */ 
- int initializeModulePgn(void); 
-   
- /** 
-  * Test this module. 
-  * 
-  * @return 0 if all tests succeed. 
-  */ 
- int testModulePgn(void); 
-   
- #endif 
-