changes from H.G. Muller; version 4.3.14
[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 */\r
104 \r
105 /* [HGM] Some notes about board sizes:\r
106    In games that allow piece drops, the holdings are considered part of the\r
107    board, in the leftmost and rightmost two files. This way they are\r
108    automatically part of the game-history states, and enjoy all display\r
109    functions (including drag-drop and click-click moves to the regular part\r
110    of the board). The drawback of this is that the internal numbering of\r
111    files starts at 2 for the a-file if holdings are displayed. To ensure\r
112    consistency, this shifted numbering system is used _everywhere_ in the\r
113    code, and conversion to the 'normal' system only takes place when the\r
114    file number is converted to or from ASCII (by redefining the character\r
115    constant 'a'). This works because Winboard only communicates with the\r
116    outside world in ASCII. In a similar way, the different rank numbering\r
117    systems (starting at rank 0 or 1) are implemented by redefining '1'.\r
118 */\r
119 #define BOARD_SIZE              16            /* [HGM] for in declarations */\r
120 #define BOARD_HEIGHT (gameInfo.boardHeight)   // [HGM] made user adjustable \r
121 #define BOARD_WIDTH  (gameInfo.boardWidth + 2*gameInfo.holdingsWidth)   \r
122 #define BOARD_LEFT   (gameInfo.holdingsWidth) // [HGM] play-board edges     \r
123 #define BOARD_RGHT   (gameInfo.boardWidth + gameInfo.holdingsWidth)\r
124 #define ONE          ('1'-(BOARD_HEIGHT>9))   // [HGM] foremost board rank  \r
125 #define AAA          ('a'-BOARD_LEFT)         // [HGM] leftmost board file  \r
126 #define DROP_RANK               -3\r
127 #define MAX_MOVES               1000\r
128 #define MSG_SIZ                 512\r
129 #define DIALOG_SIZE             256\r
130 #define STAR_MATCH_N            16\r
131 #define MOVE_LEN                32\r
132 #define TIME_CONTROL            "5"     /* in minutes */\r
133 #define TIME_DELAY_QUOTE        "1.0"   /* seconds between moves */\r
134 #define TIME_DELAY              ((float) 1.0)\r
135 #define MOVES_PER_SESSION       40      /* moves per TIME_CONTROL */\r
136 #define TIME_INCREMENT          -1      /* if >= 0, MOVES_PER_SESSION unused */\r
137 #define WhiteOnMove(move)       (((move) % 2) == 0)\r
138 #define ICS_HOST                "chessclub.com"\r
139 #define ICS_PORT                "5000"\r
140 #define ICS_COMM_PORT           ""\r
141 #define FIRST_HOST              "localhost"\r
142 #define SECOND_HOST             "localhost"\r
143 #define TELNET_PROGRAM          "telnet"\r
144 #define MATCH_MODE              "False"\r
145 #define INIT_STRING             "new\nrandom\n"\r
146 #define WHITE_STRING            "white\ngo\n"\r
147 #define BLACK_STRING            "black\ngo\n"\r
148 #define COMPUTER_STRING         "computer\n"\r
149 #define REUSE_CHESS_PROGRAMS    1\r
150 #define WHITE_PIECE_COLOR       "#FFFFCC"\r
151 #define BLACK_PIECE_COLOR       "#202020"\r
152 #define LIGHT_SQUARE_COLOR      "#C8C365"\r
153 #define DARK_SQUARE_COLOR       "#77A26D"\r
154 #define JAIL_SQUARE_COLOR       "#808080"\r
155 #define HIGHLIGHT_SQUARE_COLOR  "#FFFF00"\r
156 #define PREMOVE_HIGHLIGHT_COLOR "#FF0000"\r
157 #define BELLCHAR                '\007'\r
158 #define NULLCHAR                '\000'\r
159 #define FEATURE_TIMEOUT         10000 /*ms*/\r
160 \r
161 /* Zippy defaults */\r
162 #define ZIPPY_TALK FALSE\r
163 #define ZIPPY_PLAY FALSE\r
164 #define ZIPPY_LINES "yow.lines"\r
165 #define ZIPPY_PINHEAD ""\r
166 #define ZIPPY_PASSWORD ""\r
167 #define ZIPPY_PASSWORD2 ""\r
168 #define ZIPPY_WRONG_PASSWORD ""\r
169 #define ZIPPY_ACCEPT_ONLY ""\r
170 #define ZIPPY_USE_I TRUE\r
171 #define ZIPPY_BUGHOUSE 0\r
172 #define ZIPPY_NOPLAY_CRAFTY FALSE\r
173 #define ZIPPY_GAME_END "gameend\n"\r
174 #define ZIPPY_GAME_START ""\r
175 #define ZIPPY_ADJOURN FALSE\r
176 #define ZIPPY_ABORT FALSE\r
177 #define ZIPPY_VARIANTS "normal,fischerandom,crazyhouse,losers,suicide,3checks,twokings,bughouse,shatranj"\r
178 #define ZIPPY_MAX_GAMES 0\r
179 #define ZIPPY_REPLAY_TIMEOUT 120\r
180 \r
181 typedef enum {\r
182     BeginningOfGame, MachinePlaysWhite, MachinePlaysBlack,\r
183     AnalyzeMode, AnalyzeFile, TwoMachinesPlay,\r
184     EditGame, PlayFromGameFile, EndOfGame, EditPosition, Training,\r
185     IcsIdle, IcsPlayingWhite, IcsPlayingBlack, IcsObserving,\r
186     IcsExamining\r
187   } GameMode;\r
188 \r
189 typedef enum {\r
190     /* [HGM] the order here is crucial for Crazyhouse & Shogi: */\r
191     /* only the first N pieces can go into the holdings, and   */\r
192     /* promotions in those variants shift P-W to U-S           */\r
193     WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen, \r
194     WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan, \r
195     WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,\r
196     WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,\r
197     BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,\r
198     BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan, \r
199     BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,\r
200     BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,\r
201     EmptySquare, \r
202     ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/\r
203   } ChessSquare;\r
204 \r
205 /* [HGM] some macros that can be used as prefixes to convert piece types */\r
206 #define WHITE_TO_BLACK (int)BlackPawn - (int)WhitePawn + (int)\r
207 #define BLACK_TO_WHITE (int)WhitePawn - (int)BlackPawn + (int)\r
208 #define PROMOTED       (int)WhiteDragon - (int)WhiteRook + (int)\r
209 #define DEMOTED        (int)WhiteRook - (int)WhiteDragon + (int)\r
210 #define SHOGI          (int)EmptySquare + (int)\r
211 \r
212 \r
213 typedef ChessSquare Board[BOARD_SIZE][BOARD_SIZE];\r
214 \r
215 typedef enum {\r
216     WhiteKingSideCastle = 1, WhiteQueenSideCastle,\r
217     WhiteKingSideCastleWild, WhiteQueenSideCastleWild,\r
218     WhiteHSideCastleFR, WhiteASideCastleFR, \r
219     BlackKingSideCastle, BlackQueenSideCastle,\r
220     BlackKingSideCastleWild, BlackQueenSideCastleWild,\r
221     BlackHSideCastleFR, BlackASideCastleFR, \r
222     WhitePromotionKnight, WhitePromotionBishop,\r
223     WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing,\r
224     WhitePromotionChancellor, WhitePromotionArchbishop,\r
225     BlackPromotionKnight, BlackPromotionBishop,\r
226     BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing,\r
227     BlackPromotionChancellor, BlackPromotionArchbishop,\r
228     WhiteCapturesEnPassant, BlackCapturesEnPassant,\r
229     WhiteDrop, BlackDrop, \r
230     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,\r
231     WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,\r
232     GNUChessGame, XBoardGame, MoveNumberOne, \r
233     Comment, PositionDiagram, ElapsedTime, PGNTag, NAG\r
234   } ChessMove;\r
235 \r
236 typedef enum {\r
237     ColorShout, ColorSShout, ColorChannel1, ColorChannel, ColorKibitz,\r
238     ColorTell, ColorChallenge, ColorRequest, ColorSeek, ColorNormal,\r
239     ColorNone, NColorClasses\r
240 } ColorClass;\r
241 \r
242 typedef enum {\r
243     SoundMove, SoundBell, SoundAlarm, SoundIcsWin, SoundIcsLoss,\r
244     SoundIcsDraw, SoundIcsUnfinished, NSoundClasses\r
245 } SoundClass;\r
246 \r
247 typedef enum { \r
248   SizeTiny, SizeTeeny, SizeDinky, SizePetite, SizeSlim, SizeSmall,\r
249   SizeMediocre, SizeMiddling, SizeAverage, SizeModerate, SizeMedium,\r
250   SizeBulky, SizeLarge, SizeBig, SizeHuge, SizeGiant, SizeColossal,\r
251   SizeTitanic, NUM_SIZES \r
252 } BoardSize;\r
253 \r
254 /* Names for chess variants, not necessarily supported */\r
255 typedef enum {\r
256     VariantNormal,       /* Normal chess */\r
257     VariantLoadable,     /* "loadgame" command allowed (not really a variant)*/\r
258     VariantWildCastle,   /* Shuffle chess where king can castle from d file */\r
259     VariantNoCastle,     /* Shuffle chess with no castling at all */\r
260     VariantFischeRandom, /* FischeRandom */\r
261     VariantBughouse,     /* Bughouse, ICC/FICS rules */\r
262     VariantCrazyhouse,   /* Crazyhouse, ICC/FICS rules */\r
263     VariantLosers,       /* Try to lose all pieces or get mated (ICC wild 17)*/\r
264     VariantSuicide,      /* Try to lose all pieces incl. king (FICS) */\r
265     VariantGiveaway,     /* Try to have no legal moves left (ICC wild 26) */\r
266     VariantTwoKings,     /* Weird ICC wild 9 */\r
267     VariantKriegspiel,   /* Kriegspiel; pawns can capture invisible pieces */\r
268     VariantAtomic,       /* Capturing piece explodes (ICC wild 27) */\r
269     Variant3Check,       /* Win by giving check 3 times (ICC wild 25) */\r
270     VariantShatranj,     /* Unsupported (ICC wild 28) */\r
271     Variant29,           /* Temporary name for possible future ICC wild 29 */\r
272     Variant30,           /* Temporary name for possible future ICC wild 30 */\r
273     Variant31,           /* Temporary name for possible future ICC wild 31 */\r
274     Variant32,           /* Temporary name for possible future ICC wild 32 */\r
275     Variant33,           /* Temporary name for possible future ICC wild 33 */\r
276     Variant34,           /* Temporary name for possible future ICC wild 34 */\r
277     Variant35,           /* Temporary name for possible future ICC wild 35 */\r
278     Variant36,           /* Temporary name for possible future ICC wild 36 */\r
279     VariantShogi,        /* [HGM] added variants */\r
280     VariantXiangqi,\r
281     VariantCourier,\r
282     VariantGothic,\r
283     VariantCapablanca,\r
284     VariantKnightmate,\r
285     VariantFairy,        \r
286     VariantCylinder,\r
287     VariantFalcon,\r
288     VariantCapaRandom,\r
289     VariantBerolina,\r
290     VariantJanus,\r
291     VariantUnknown       /* Catchall for other unknown variants */\r
292 } VariantClass;\r
293 \r
294 #define VARIANT_NAMES { \\r
295   "normal", \\r
296   "normal", \\r
297   "wildcastle", \\r
298   "nocastle", \\r
299   "fischerandom", \\r
300   "bughouse", \\r
301   "crazyhouse", \\r
302   "losers", \\r
303   "suicide", \\r
304   "giveaway", \\r
305   "twokings", \\r
306   "kriegspiel", \\r
307   "atomic", \\r
308   "3check", \\r
309   "shatranj", \\r
310   "wild29", \\r
311   "wild30", \\r
312   "wild31", \\r
313   "wild32", \\r
314   "wild33", \\r
315   "wild34", \\r
316   "wild35", \\r
317   "wild36", \\r
318   "shogi", \\r
319   "xiangqi", \\r
320   "courier", \\r
321   "gothic", \\r
322   "capablanca", \\r
323   "knightmate", \\r
324   "fairy", \\r
325   "cylinder", \\r
326   "falcon",\\r
327   "caparandom",\\r
328   "berolina",\\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 } AppData, *AppDataPtr;\r
577 \r
578 /* [AS] PGN tags (for showing in the game list) */\r
579 #define GLT_EVENT           'e'\r
580 #define GLT_SITE            's'\r
581 #define GLT_DATE            'd'\r
582 #define GLT_ROUND           'o'\r
583 #define GLT_PLAYERS         'p'     /* I.e. white "-" black */\r
584 #define GLT_RESULT          'r'\r
585 #define GLT_WHITE_ELO       'w'\r
586 #define GLT_BLACK_ELO       'b'\r
587 #define GLT_TIME_CONTROL    't'\r
588 #define GLT_VARIANT         'v'\r
589 #define GLT_OUT_OF_BOOK     'a'\r
590 \r
591 #define GLT_DEFAULT_TAGS    "eprd"  /* Event, players, result, date */\r
592 \r
593 #define GLT_ALL_TAGS        "esdoprwbtva"\r
594 \r
595 #define PGN_OUT_OF_BOOK     "Annotator"\r
596 \r
597 extern AppData appData;\r
598 \r
599 typedef struct {\r
600     /* PGN 7-tag info */\r
601     char *event;\r
602     char *site;\r
603     char *date;\r
604     char *round;\r
605     char *white;\r
606     char *black;\r
607     ChessMove result;\r
608     /* Additional info */\r
609     char *fen;          /* NULL or FEN for starting position; input only */\r
610     char *resultDetails;\r
611     char *timeControl;\r
612     char *extraTags;    /* NULL or "[Tag \"Value\"]\n", etc. */\r
613     int whiteRating;    /* -1 if unknown */\r
614     int blackRating;    /* -1 if unknown */\r
615     VariantClass variant;\r
616     char *outOfBook;    /* [AS] Move and score when engine went out of book */\r
617     int boardWidth;     /* [HGM] adjustable board size */\r
618     int boardHeight;\r
619 /* [HGM] For Shogi and Crazyhouse: */\r
620     int holdingsSize;  /* number of different piece types in holdings       */\r
621     int holdingsWidth; /* number of files left and right of board, 0 or 2   */\r
622 } GameInfo;\r
623 \r
624 \r
625 #endif\r
626 \r