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