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