Updated all files to GPL version 3.
[xboard.git] / common.h
1 /*
2  * common.h -- Common definitions for X and Windows NT versions of XBoard
3  * $Id: common.h,v 2.1 2003/10/27 19:21:00 mann Exp $
4  *
5  * Copyright 1991 by Digital Equipment Corporation, Maynard,
6  * Massachusetts.  Enhancements Copyright
7  * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
8  * Foundation, Inc.
9  *
10  * The following terms apply to Digital Equipment Corporation's copyright
11  * interest in XBoard:
12  * ------------------------------------------------------------------------
13  * All Rights Reserved
14  *
15  * Permission to use, copy, modify, and distribute this software and its
16  * documentation for any purpose and without fee is hereby granted,
17  * provided that the above copyright notice appear in all copies and that
18  * both that copyright notice and this permission notice appear in
19  * supporting documentation, and that the name of Digital not be
20  * used in advertising or publicity pertaining to distribution of the
21  * software without specific, written prior permission.
22  *
23  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
24  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
25  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
26  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
27  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
28  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
29  * SOFTWARE.
30  * ------------------------------------------------------------------------
31  *
32  * The following terms apply to the enhanced version of XBoard
33  * distributed by the Free Software Foundation:
34  * ------------------------------------------------------------------------
35  *
36  * GNU XBoard is free software: you can redistribute it and/or modify
37  * it under the terms of the GNU General Public License as published by
38  * the Free Software Foundation, either version 3 of the License, or (at
39  * your option) any later version.
40  *
41  * GNU XBoard is distributed in the hope that it will be useful, but
42  * WITHOUT ANY WARRANTY; without even the implied warranty of
43  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
44  * General Public License for more details.
45  *
46  * You should have received a copy of the GNU General Public License
47  * along with this program. If not, see http://www.gnu.org/licenses/.  *
48  *
49  *------------------------------------------------------------------------
50  ** See the file ChangeLog for a revision history.  */
51
52 #ifndef _COMMON
53 #define _COMMON
54
55
56 /* Begin compatibility grunge  */
57
58 #if defined(__STDC__) || defined(WIN32) || defined(_amigados)
59 #define P(args) args
60 typedef void *VOIDSTAR;
61 #else
62 #define P(args)         ()
63 typedef char *VOIDSTAR;
64 #endif
65
66 #ifdef WIN32
67 typedef char Boolean;
68 typedef char *String;
69 #define popen _popen
70 #define pclose _pclose
71
72 #else
73 #ifdef _amigados        /*  It is important, that these types have  */
74 typedef int Boolean;    /*  a length of 4 bytes each, as we are     */
75 typedef char *String;   /*  using ReadArgs() for argument parsing.  */
76 #ifdef _DCC
77 FILE *popen(const char *, const char *);
78 int pclose(FILE *);
79 #endif
80
81 #else
82 #include <X11/Intrinsic.h>
83 #endif
84 #endif
85
86
87 #ifndef TRUE
88 #define TRUE 1
89 #define FALSE 0
90 #endif
91
92 #define UNKNOWN -1 /* [HGM] nps */
93
94 #if !HAVE_RANDOM
95 # if HAVE_RAND48
96 #  define srandom srand48
97 #  define random lrand48
98 # else /* not HAVE_RAND48 */
99 #  define srandom srand
100 #  define random rand
101 # endif /* not HAVE_RAND48 */
102 #endif /* !HAVE_RANDOM */
103
104 /* End compatibility grunge */
105
106 #define PROTOVER                2       /* engine protocol version */
107
108 // [HGM] license: Messages that engines must print to satisfy their license requirements for patented variants
109 #define GOTHIC "Gothic Chess (see www.GothicChess.com) is licensed under U.S. Patent #6,481,716 by Ed Trice"
110 #define NOFALCON "Falcon Chess (see www.chessvariants.com) is licensed under U.S. Patent #5,690,334 by George W. Duke"
111
112 /* [HGM] Some notes about board sizes:
113    In games that allow piece drops, the holdings are considered part of the
114    board, in the leftmost and rightmost two files. This way they are
115    automatically part of the game-history states, and enjoy all display
116    functions (including drag-drop and click-click moves to the regular part
117    of the board). The drawback of this is that the internal numbering of
118    files starts at 2 for the a-file if holdings are displayed. To ensure
119    consistency, this shifted numbering system is used _everywhere_ in the
120    code, and conversion to the 'normal' system only takes place when the
121    file number is converted to or from ASCII (by redefining the character
122    constant 'a'). This works because Winboard only communicates with the
123    outside world in ASCII. In a similar way, the different rank numbering
124    systems (starting at rank 0 or 1) are implemented by redefining '1'.
125 */
126 #define BOARD_SIZE              16            /* [HGM] for in declarations */
127 #define BOARD_HEIGHT (gameInfo.boardHeight)   // [HGM] made user adjustable 
128 #define BOARD_WIDTH  (gameInfo.boardWidth + 2*gameInfo.holdingsWidth)   
129 #define BOARD_LEFT   (gameInfo.holdingsWidth) // [HGM] play-board edges     
130 #define BOARD_RGHT   (gameInfo.boardWidth + gameInfo.holdingsWidth)
131 #define ONE          ('1'-(BOARD_HEIGHT>9))   // [HGM] foremost board rank  
132 #define AAA          ('a'-BOARD_LEFT)         // [HGM] leftmost board file  
133 #define DROP_RANK               -3
134 #define MAX_MOVES               1000
135 #define MSG_SIZ                 512
136 #define DIALOG_SIZE             256
137 #define STAR_MATCH_N            16
138 #define MOVE_LEN                32
139 #define TIME_CONTROL            "5"     /* in minutes */
140 #define TIME_DELAY_QUOTE        "1.0"   /* seconds between moves */
141 #define TIME_DELAY              ((float) 1.0)
142 #define MOVES_PER_SESSION       40      /* moves per TIME_CONTROL */
143 #define TIME_INCREMENT          -1      /* if >= 0, MOVES_PER_SESSION unused */
144 #define WhiteOnMove(move)       (((move) % 2) == 0)
145 #define ICS_HOST                "chessclub.com"
146 #define ICS_PORT                "5000"
147 #define ICS_COMM_PORT           ""
148 #define FIRST_HOST              "localhost"
149 #define SECOND_HOST             "localhost"
150 #define TELNET_PROGRAM          "telnet"
151 #define MATCH_MODE              "False"
152 #define INIT_STRING             "new\nrandom\n"
153 #define WHITE_STRING            "white\ngo\n"
154 #define BLACK_STRING            "black\ngo\n"
155 #define COMPUTER_STRING         "computer\n"
156 #define REUSE_CHESS_PROGRAMS    1
157 #define WHITE_PIECE_COLOR       "#FFFFCC"
158 #define BLACK_PIECE_COLOR       "#202020"
159 #define LIGHT_SQUARE_COLOR      "#C8C365"
160 #define DARK_SQUARE_COLOR       "#77A26D"
161 #define JAIL_SQUARE_COLOR       "#808080"
162 #define HIGHLIGHT_SQUARE_COLOR  "#FFFF00"
163 #define PREMOVE_HIGHLIGHT_COLOR "#FF0000"
164 #define BELLCHAR                '\007'
165 #define NULLCHAR                '\000'
166 #define FEATURE_TIMEOUT         10000 /*ms*/
167
168 /* Zippy defaults */
169 #define ZIPPY_TALK FALSE
170 #define ZIPPY_PLAY FALSE
171 #define ZIPPY_LINES "yow.lines"
172 #define ZIPPY_PINHEAD ""
173 #define ZIPPY_PASSWORD ""
174 #define ZIPPY_PASSWORD2 ""
175 #define ZIPPY_WRONG_PASSWORD ""
176 #define ZIPPY_ACCEPT_ONLY ""
177 #define ZIPPY_USE_I TRUE
178 #define ZIPPY_BUGHOUSE 0
179 #define ZIPPY_NOPLAY_CRAFTY FALSE
180 #define ZIPPY_GAME_END "gameend\n"
181 #define ZIPPY_GAME_START ""
182 #define ZIPPY_ADJOURN FALSE
183 #define ZIPPY_ABORT FALSE
184 #define ZIPPY_VARIANTS "normal,fischerandom,crazyhouse,losers,suicide,3checks,twokings,bughouse,shatranj"
185 #define ZIPPY_MAX_GAMES 0
186 #define ZIPPY_REPLAY_TIMEOUT 120
187
188 typedef enum {
189     BeginningOfGame, MachinePlaysWhite, MachinePlaysBlack,
190     AnalyzeMode, AnalyzeFile, TwoMachinesPlay,
191     EditGame, PlayFromGameFile, EndOfGame, EditPosition, Training,
192     IcsIdle, IcsPlayingWhite, IcsPlayingBlack, IcsObserving,
193     IcsExamining
194   } GameMode;
195
196 typedef enum {
197     /* [HGM] the order here is crucial for Crazyhouse & Shogi: */
198     /* only the first N pieces can go into the holdings, and   */
199     /* promotions in those variants shift P-W to U-S           */
200     WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen, 
201     WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan, 
202     WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,
203     WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,
204     BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,
205     BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan, 
206     BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
207     BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,
208     EmptySquare, 
209     ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/
210   } ChessSquare;
211
212 /* [HGM] some macros that can be used as prefixes to convert piece types */
213 #define WHITE_TO_BLACK (int)BlackPawn - (int)WhitePawn + (int)
214 #define BLACK_TO_WHITE (int)WhitePawn - (int)BlackPawn + (int)
215 #define PROMOTED       (int)WhiteDragon - (int)WhiteRook + (int)
216 #define DEMOTED        (int)WhiteRook - (int)WhiteDragon + (int)
217 #define SHOGI          (int)EmptySquare + (int)
218
219
220 typedef ChessSquare Board[BOARD_SIZE][BOARD_SIZE];
221
222 typedef enum {
223     WhiteKingSideCastle = 1, WhiteQueenSideCastle,
224     WhiteKingSideCastleWild, WhiteQueenSideCastleWild,
225     WhiteHSideCastleFR, WhiteASideCastleFR, 
226     BlackKingSideCastle, BlackQueenSideCastle,
227     BlackKingSideCastleWild, BlackQueenSideCastleWild,
228     BlackHSideCastleFR, BlackASideCastleFR, 
229     WhitePromotionKnight, WhitePromotionBishop,
230     WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing,
231     WhitePromotionChancellor, WhitePromotionArchbishop, WhitePromotionCentaur,
232     BlackPromotionKnight, BlackPromotionBishop,
233     BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing,
234     BlackPromotionChancellor, BlackPromotionArchbishop, BlackPromotionCentaur,
235     WhiteCapturesEnPassant, BlackCapturesEnPassant,
236     WhiteDrop, BlackDrop, 
237     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
238     WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,
239     GNUChessGame, XBoardGame, MoveNumberOne, 
240     Comment, PositionDiagram, ElapsedTime, PGNTag, NAG
241   } ChessMove;
242
243 typedef enum {
244     ColorShout, ColorSShout, ColorChannel1, ColorChannel, ColorKibitz,
245     ColorTell, ColorChallenge, ColorRequest, ColorSeek, ColorNormal,
246     ColorNone, NColorClasses
247 } ColorClass;
248
249 typedef enum {
250     SoundMove, SoundBell, SoundAlarm, SoundIcsWin, SoundIcsLoss,
251     SoundIcsDraw, SoundIcsUnfinished, NSoundClasses
252 } SoundClass;
253
254 /* Names for chess variants, not necessarily supported */
255 typedef enum {
256     VariantNormal,       /* Normal chess */
257     VariantLoadable,     /* "loadgame" command allowed (not really a variant)*/
258     VariantWildCastle,   /* Shuffle chess where king can castle from d file */
259     VariantNoCastle,     /* Shuffle chess with no castling at all */
260     VariantFischeRandom, /* FischeRandom */
261     VariantBughouse,     /* Bughouse, ICC/FICS rules */
262     VariantCrazyhouse,   /* Crazyhouse, ICC/FICS rules */
263     VariantLosers,       /* Try to lose all pieces or get mated (ICC wild 17)*/
264     VariantSuicide,      /* Try to lose all pieces incl. king (FICS) */
265     VariantGiveaway,     /* Try to have no legal moves left (ICC wild 26) */
266     VariantTwoKings,     /* Weird ICC wild 9 */
267     VariantKriegspiel,   /* Kriegspiel; pawns can capture invisible pieces */
268     VariantAtomic,       /* Capturing piece explodes (ICC wild 27) */
269     Variant3Check,       /* Win by giving check 3 times (ICC wild 25) */
270     VariantShatranj,     /* Unsupported (ICC wild 28) */
271     Variant29,           /* Temporary name for possible future ICC wild 29 */
272     Variant30,           /* Temporary name for possible future ICC wild 30 */
273     Variant31,           /* Temporary name for possible future ICC wild 31 */
274     Variant32,           /* Temporary name for possible future ICC wild 32 */
275     Variant33,           /* Temporary name for possible future ICC wild 33 */
276     Variant34,           /* Temporary name for possible future ICC wild 34 */
277     Variant35,           /* Temporary name for possible future ICC wild 35 */
278     Variant36,           /* Temporary name for possible future ICC wild 36 */
279     VariantShogi,        /* [HGM] added variants */
280     VariantXiangqi,
281     VariantCourier,
282     VariantGothic,
283     VariantCapablanca,
284     VariantKnightmate,
285     VariantFairy,        
286     VariantCylinder,
287     VariantFalcon,
288     VariantCapaRandom,
289     VariantBerolina,
290     VariantJanus,
291     VariantSuper,
292     VariantGreat,
293     VariantUnknown       /* Catchall for other unknown variants */
294 } VariantClass;
295
296 #define VARIANT_NAMES { \
297   "normal", \
298   "normal", \
299   "wildcastle", \
300   "nocastle", \
301   "fischerandom", \
302   "bughouse", \
303   "crazyhouse", \
304   "losers", \
305   "suicide", \
306   "giveaway", \
307   "twokings", \
308   "kriegspiel", \
309   "atomic", \
310   "3check", \
311   "shatranj", \
312   "wild29", \
313   "wild30", \
314   "wild31", \
315   "wild32", \
316   "wild33", \
317   "wild34", \
318   "wild35", \
319   "wild36", \
320   "shogi", \
321   "xiangqi", \
322   "courier", \
323   "gothic", \
324   "capablanca", \
325   "knightmate", \
326   "fairy", \
327   "cylinder", \
328   "falcon",\
329   "caparandom",\
330   "berolina",\
331   "janus",\
332   "super",\
333   "great",\
334   "unknown" \
335 }
336
337 typedef struct {
338 #if !defined(_amigados)
339     char *whitePieceColor;
340     char *blackPieceColor;
341     char *lightSquareColor;
342     char *darkSquareColor;
343     char *jailSquareColor;
344     char *highlightSquareColor;
345     char *premoveHighlightColor;
346 #else
347     int whitePieceColor;
348     int blackPieceColor;
349     int lightSquareColor;
350     int darkSquareColor;
351     int jailSquareColor;
352     int highlightSquareColor;
353     int premoveHighlightColor;
354 #endif
355     int movesPerSession;
356     int timeIncrement;
357     char *initString;
358     char *secondInitString;
359     char *firstComputerString;
360     char *secondComputerString;
361     char *firstChessProgram;
362     char *secondChessProgram;
363     char *firstDirectory;
364     char *secondDirectory;
365     Boolean firstPlaysBlack;
366     Boolean noChessProgram;
367     char *firstHost;
368     char *secondHost;
369     char *bitmapDirectory;
370     char *remoteShell;
371     char *remoteUser;
372     float timeDelay;
373     char *timeControl;
374     Boolean icsActive;
375     char *icsHost;
376     char *icsPort;
377     char *icsCommPort;  /* if set, use serial port instead of tcp host/port */
378     char *icsLogon;     /* Hack to permit variable logon scripts. */
379     char *icsHelper;
380     Boolean icsInputBox;
381     Boolean useTelnet;
382     char *telnetProgram;
383     char *gateway;
384     char *loadGameFile;
385     int loadGameIndex;      /* game # within file */
386     char *saveGameFile;
387     Boolean autoSaveGames;
388     char *loadPositionFile;
389     int loadPositionIndex;  /* position # within file */
390     char *savePositionFile;
391     Boolean matchMode;
392     int matchGames;
393     Boolean monoMode;
394     Boolean debugMode;
395     Boolean clockMode;
396     char *boardSize;
397     Boolean Iconic;
398     char *searchTime;
399     int searchDepth;
400     Boolean showCoords;
401     char *clockFont;
402     char *messageFont; /* WinBoard only */
403     char *coordFont;
404     char *font; /* xboard only: all other fonts */
405     char *tagsFont; /* WinBoard only */
406     char *commentFont; /* WinBoard only */
407     char *icsFont; /* WinBoard only */
408     Boolean ringBellAfterMoves;
409     Boolean autoCallFlag;
410     Boolean flipView;
411     Boolean autoFlipView;
412     char *cmailGameName; /* xboard only */
413     Boolean alwaysPromoteToQueen;
414     Boolean oldSaveStyle;
415     Boolean quietPlay;
416     Boolean showThinking;
417     Boolean ponderNextMove;
418     Boolean periodicUpdates;
419     Boolean autoObserve;
420     Boolean autoComment;
421     Boolean getMoveList;
422     Boolean testLegality;
423     int borderXoffset; /* xboard only */
424     int borderYoffset; /* xboard only */
425     Boolean titleInWindow; /* xboard only */
426     Boolean localLineEditing; /* WinBoard only */
427     Boolean zippyTalk;
428     Boolean zippyPlay;
429     int flashCount; /* Number of times to flash (xboard only) */
430     int flashRate; /* Flashes per second (xboard only)  */
431     char *pixmapDirectory; /* Path to XPM/XIM files to use (xboard only) */
432     int msLoginDelay;  /* Delay per character (in msec) while sending
433                           ICS logon script (xboard only) */
434     Boolean colorize;   /* If True, use the following colors to color text */
435     /* Strings for colors, as "fg, bg, bold" (strings used in xboard only) */
436     char *colorShout;
437     char *colorSShout;
438     char *colorChannel1;
439     char *colorChannel;
440     char *colorKibitz;
441     char *colorTell;
442     char *colorChallenge;
443     char *colorRequest;
444     char *colorSeek;
445     char *colorNormal;
446     char *soundProgram; /* sound-playing program */
447     char *soundShout;
448     char *soundSShout;
449     char *soundChannel1;
450     char *soundChannel;
451     char *soundKibitz;
452     char *soundTell;
453     char *soundChallenge;
454     char *soundRequest;
455     char *soundSeek;
456     char *soundMove;
457     char *soundIcsWin;
458     char *soundIcsLoss;
459     char *soundIcsDraw;
460     char *soundIcsUnfinished;
461     char *soundIcsAlarm;
462     Boolean reuseFirst;
463     Boolean reuseSecond;
464     Boolean animateDragging; /* If True, animate mouse dragging of pieces */
465     Boolean animate;    /* If True, animate non-mouse moves */
466     int animSpeed;      /* Delay in milliseconds between animation frames */
467     Boolean popupMoveErrors;
468     Boolean popupExitMessage;
469     int showJail;
470     Boolean highlightLastMove;
471     Boolean highlightDragging;
472     Boolean blindfold;          /* if true, no pieces are drawn */
473     Boolean premove;            /* true if premove feature enabled */ 
474     Boolean premoveWhite;       /* true if premoving White first move  */ 
475     char *premoveWhiteText;     /* text of White premove 1 */ 
476     Boolean premoveBlack;       /* true if premoving Black first move */ 
477     char *premoveBlackText;     /* text of Black premove 1 */ 
478     Boolean icsAlarm;           /* true if sounding alarm at a certain time */  
479     int icsAlarmTime;           /* time to sound alarm, in milliseconds */
480     Boolean autoRaiseBoard;
481     int fontSizeTolerance; /* xboard only */
482     char *initialMode;
483     char *variant;
484     int firstProtocolVersion;
485     int secondProtocolVersion;
486     Boolean showButtonBar;
487     Boolean icsEngineAnalyze; 
488
489     /* [AS] New properties (down to the "ZIPPY" part) */
490     Boolean firstScoreIsAbsolute;  /* If true, engine score is always from white side */
491     Boolean secondScoreIsAbsolute; /* If true, engine score is always from white side */
492     Boolean saveExtendedInfoInPGN; /* If true, saved PGN games contain extended info */
493     Boolean hideThinkingFromHuman; /* If true, program thinking is generated but not displayed in human/computer matches */
494     char * liteBackTextureFile; /* Name of texture bitmap for lite squares */
495     char * darkBackTextureFile; /* Name of texture bitmap for dark squares */
496     int liteBackTextureMode;
497     int darkBackTextureMode;
498     char * renderPiecesWithFont; /* Name of font for rendering chess pieces */
499     char * fontToPieceTable; /* Map to translate font character to chess pieces */
500     int fontBackColorWhite;
501     int fontForeColorWhite;
502     int fontBackColorBlack;
503     int fontForeColorBlack;
504     int fontPieceSize; /* Size of font relative to square (percentage) */
505     int overrideLineGap; /* If >= 0 overrides the lineGap value of the board size properties */
506     int adjudicateLossThreshold; /* Adjudicate a two-machine game if both engines agree the score is below this for 6 plies */
507     int delayBeforeQuit;
508     int delayAfterQuit;
509     char * nameOfDebugFile;
510     char * pgnEventHeader;
511     int defaultFrcPosition;
512     char * gameListTags;
513     Boolean saveOutOfBookInfo;
514     Boolean showEvalInMoveHistory;
515     int evalHistColorWhite;
516     int evalHistColorBlack;
517     Boolean highlightMoveWithArrow;
518     int highlightArrowColor;
519     Boolean useStickyWindows;
520     int adjudicateDrawMoves;
521     Boolean autoDisplayComment;
522     Boolean autoDisplayTags;
523     Boolean firstIsUCI;
524     Boolean secondIsUCI;
525     Boolean firstHasOwnBookUCI;
526     Boolean secondHasOwnBookUCI;
527     char * polyglotDir;
528     Boolean usePolyglotBook;
529     char * polyglotBook;
530     int defaultHashSize;
531     int defaultCacheSizeEGTB;
532     char * defaultPathEGTB;
533
534     /* [HGM] Board size */
535     int NrFiles;
536     int NrRanks;
537     int holdingsSize;
538     int matchPause;
539     char * pieceToCharTable;
540     Boolean allWhite;
541     Boolean upsideDown;
542     Boolean alphaRank;
543     Boolean testClaims;
544     Boolean checkMates;
545     Boolean materialDraws;
546     Boolean trivialDraws;
547     int ruleMoves;
548     int drawRepeats;
549
550 #if ZIPPY
551     char *zippyLines;
552     char *zippyPinhead;
553     char *zippyPassword;
554     char *zippyPassword2;
555     char *zippyWrongPassword;
556     char *zippyAcceptOnly;
557     int zippyUseI;
558     int zippyBughouse;
559     int zippyNoplayCrafty;
560     char *zippyGameEnd;
561     char *zippyGameStart;
562     int zippyAdjourn;
563     int zippyAbort;
564     char *zippyVariants;
565     int zippyMaxGames;
566     int zippyReplayTimeout; /*seconds*/
567 #endif
568
569     char *serverMovesName;
570     Boolean suppressLoadMoves;
571     int serverPause;
572     int firstTimeOdds;
573     int secondTimeOdds;
574     int timeOddsMode;
575     int firstAccumulateTC;
576     int secondAccumulateTC;
577     int firstNPS;
578     int secondNPS;
579     Boolean autoKibitz;
580     int engineComments;
581     char *userName;
582     int rewindIndex;    /* [HGM] autoinc   */
583     int sameColorGames; /* [HGM] alternate */
584     int smpCores;       /* [HGM] SMP       */
585     char *egtFormats;
586     int niceEngines;    /* [HGM] nice      */
587     char *firstLogo;    /* [HGM] logo      */
588     char *secondLogo;
589     Boolean autoLogo;
590     Boolean noGUI;      /* [HGM] fast: suppress all display updates */
591     char *firstOptions; /* [HGM] options   */
592     char *secondOptions;
593 } AppData, *AppDataPtr;
594
595 /* [AS] PGN tags (for showing in the game list) */
596 #define GLT_EVENT           'e'
597 #define GLT_SITE            's'
598 #define GLT_DATE            'd'
599 #define GLT_ROUND           'o'
600 #define GLT_PLAYERS         'p'     /* I.e. white "-" black */
601 #define GLT_RESULT          'r'
602 #define GLT_WHITE_ELO       'w'
603 #define GLT_BLACK_ELO       'b'
604 #define GLT_TIME_CONTROL    't'
605 #define GLT_VARIANT         'v'
606 #define GLT_OUT_OF_BOOK     'a'
607
608 #define GLT_DEFAULT_TAGS    "eprd"  /* Event, players, result, date */
609
610 #define GLT_ALL_TAGS        "esdoprwbtva"
611
612 #define PGN_OUT_OF_BOOK     "Annotator"
613
614 extern AppData appData;
615
616 typedef struct {
617     /* PGN 7-tag info */
618     char *event;
619     char *site;
620     char *date;
621     char *round;
622     char *white;
623     char *black;
624     ChessMove result;
625     /* Additional info */
626     char *fen;          /* NULL or FEN for starting position; input only */
627     char *resultDetails;
628     char *timeControl;
629     char *extraTags;    /* NULL or "[Tag \"Value\"]\n", etc. */
630     int whiteRating;    /* -1 if unknown */
631     int blackRating;    /* -1 if unknown */
632     VariantClass variant;
633     char *outOfBook;    /* [AS] Move and score when engine went out of book */
634     int boardWidth;     /* [HGM] adjustable board size */
635     int boardHeight;
636 /* [HGM] For Shogi and Crazyhouse: */
637     int holdingsSize;  /* number of different piece types in holdings       */
638     int holdingsWidth; /* number of files left and right of board, 0 or 2   */
639 } GameInfo;
640
641
642 #endif
643