Merge commit 'v4.3.16'
[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     VariantGreat,\r
290     VariantUnknown       /* Catchall for other unknown variants */\r
291 } VariantClass;\r
292 \r
293 #define VARIANT_NAMES { \\r
294   "normal", \\r
295   "normal", \\r
296   "wildcastle", \\r
297   "nocastle", \\r
298   "fischerandom", \\r
299   "bughouse", \\r
300   "crazyhouse", \\r
301   "losers", \\r
302   "suicide", \\r
303   "giveaway", \\r
304   "twokings", \\r
305   "kriegspiel", \\r
306   "atomic", \\r
307   "3check", \\r
308   "shatranj", \\r
309   "wild29", \\r
310   "wild30", \\r
311   "wild31", \\r
312   "wild32", \\r
313   "wild33", \\r
314   "wild34", \\r
315   "wild35", \\r
316   "wild36", \\r
317   "shogi", \\r
318   "xiangqi", \\r
319   "courier", \\r
320   "gothic", \\r
321   "capablanca", \\r
322   "knightmate", \\r
323   "fairy", \\r
324   "cylinder", \\r
325   "falcon",\\r
326   "caparandom",\\r
327   "berolina",\\r
328   "janus",\\r
329   "super",\\r
330   "great",\\r
331   "unknown" \\r
332 }\r
333 \r
334 typedef struct {\r
335 #if !defined(_amigados)\r
336     char *whitePieceColor;\r
337     char *blackPieceColor;\r
338     char *lightSquareColor;\r
339     char *darkSquareColor;\r
340     char *jailSquareColor;\r
341     char *highlightSquareColor;\r
342     char *premoveHighlightColor;\r
343 #else\r
344     int whitePieceColor;\r
345     int blackPieceColor;\r
346     int lightSquareColor;\r
347     int darkSquareColor;\r
348     int jailSquareColor;\r
349     int highlightSquareColor;\r
350     int premoveHighlightColor;\r
351 #endif\r
352     int movesPerSession;\r
353     int timeIncrement;\r
354     char *initString;\r
355     char *secondInitString;\r
356     char *firstComputerString;\r
357     char *secondComputerString;\r
358     char *firstChessProgram;\r
359     char *secondChessProgram;\r
360     char *firstDirectory;\r
361     char *secondDirectory;\r
362     Boolean firstPlaysBlack;\r
363     Boolean noChessProgram;\r
364     char *firstHost;\r
365     char *secondHost;\r
366     char *bitmapDirectory;\r
367     char *remoteShell;\r
368     char *remoteUser;\r
369     float timeDelay;\r
370     char *timeControl;\r
371     Boolean icsActive;\r
372     char *icsHost;\r
373     char *icsPort;\r
374     char *icsCommPort;  /* if set, use serial port instead of tcp host/port */\r
375     char *icsLogon;     /* Hack to permit variable logon scripts. */\r
376     char *icsHelper;\r
377     Boolean icsInputBox;\r
378     Boolean useTelnet;\r
379     char *telnetProgram;\r
380     char *gateway;\r
381     char *loadGameFile;\r
382     int loadGameIndex;      /* game # within file */\r
383     char *saveGameFile;\r
384     Boolean autoSaveGames;\r
385     char *loadPositionFile;\r
386     int loadPositionIndex;  /* position # within file */\r
387     char *savePositionFile;\r
388     Boolean matchMode;\r
389     int matchGames;\r
390     Boolean monoMode;\r
391     Boolean debugMode;\r
392     Boolean clockMode;\r
393     char *boardSize;\r
394     Boolean Iconic;\r
395     char *searchTime;\r
396     int searchDepth;\r
397     Boolean showCoords;\r
398     char *clockFont;\r
399     char *messageFont; /* WinBoard only */\r
400     char *coordFont;\r
401     char *font; /* xboard only: all other fonts */\r
402     char *tagsFont; /* WinBoard only */\r
403     char *commentFont; /* WinBoard only */\r
404     char *icsFont; /* WinBoard only */\r
405     Boolean ringBellAfterMoves;\r
406     Boolean autoCallFlag;\r
407     Boolean flipView;\r
408     Boolean autoFlipView;\r
409     char *cmailGameName; /* xboard only */\r
410     Boolean alwaysPromoteToQueen;\r
411     Boolean oldSaveStyle;\r
412     Boolean quietPlay;\r
413     Boolean showThinking;\r
414     Boolean ponderNextMove;\r
415     Boolean periodicUpdates;\r
416     Boolean autoObserve;\r
417     Boolean autoComment;\r
418     Boolean getMoveList;\r
419     Boolean testLegality;\r
420     int borderXoffset; /* xboard only */\r
421     int borderYoffset; /* xboard only */\r
422     Boolean titleInWindow; /* xboard only */\r
423     Boolean localLineEditing; /* WinBoard only */\r
424     Boolean zippyTalk;\r
425     Boolean zippyPlay;\r
426     int flashCount; /* Number of times to flash (xboard only) */\r
427     int flashRate; /* Flashes per second (xboard only)  */\r
428     char *pixmapDirectory; /* Path to XPM/XIM files to use (xboard only) */\r
429     int msLoginDelay;  /* Delay per character (in msec) while sending\r
430                           ICS logon script (xboard only) */\r
431     Boolean colorize;   /* If True, use the following colors to color text */\r
432     /* Strings for colors, as "fg, bg, bold" (strings used in xboard only) */\r
433     char *colorShout;\r
434     char *colorSShout;\r
435     char *colorChannel1;\r
436     char *colorChannel;\r
437     char *colorKibitz;\r
438     char *colorTell;\r
439     char *colorChallenge;\r
440     char *colorRequest;\r
441     char *colorSeek;\r
442     char *colorNormal;\r
443     char *soundProgram; /* sound-playing program */\r
444     char *soundShout;\r
445     char *soundSShout;\r
446     char *soundChannel1;\r
447     char *soundChannel;\r
448     char *soundKibitz;\r
449     char *soundTell;\r
450     char *soundChallenge;\r
451     char *soundRequest;\r
452     char *soundSeek;\r
453     char *soundMove;\r
454     char *soundIcsWin;\r
455     char *soundIcsLoss;\r
456     char *soundIcsDraw;\r
457     char *soundIcsUnfinished;\r
458     char *soundIcsAlarm;\r
459     Boolean reuseFirst;\r
460     Boolean reuseSecond;\r
461     Boolean animateDragging; /* If True, animate mouse dragging of pieces */\r
462     Boolean animate;    /* If True, animate non-mouse moves */\r
463     int animSpeed;      /* Delay in milliseconds between animation frames */\r
464     Boolean popupMoveErrors;\r
465     Boolean popupExitMessage;\r
466     int showJail;\r
467     Boolean highlightLastMove;\r
468     Boolean highlightDragging;\r
469     Boolean blindfold;          /* if true, no pieces are drawn */\r
470     Boolean premove;            /* true if premove feature enabled */ \r
471     Boolean premoveWhite;       /* true if premoving White first move  */ \r
472     char *premoveWhiteText;     /* text of White premove 1 */ \r
473     Boolean premoveBlack;       /* true if premoving Black first move */ \r
474     char *premoveBlackText;     /* text of Black premove 1 */ \r
475     Boolean icsAlarm;           /* true if sounding alarm at a certain time */  \r
476     int icsAlarmTime;           /* time to sound alarm, in milliseconds */\r
477     Boolean autoRaiseBoard;\r
478     int fontSizeTolerance; /* xboard only */\r
479     char *initialMode;\r
480     char *variant;\r
481     int firstProtocolVersion;\r
482     int secondProtocolVersion;\r
483     Boolean showButtonBar;\r
484     Boolean icsEngineAnalyze; \r
485 \r
486     /* [AS] New properties (down to the "ZIPPY" part) */\r
487     Boolean firstScoreIsAbsolute;  /* If true, engine score is always from white side */\r
488     Boolean secondScoreIsAbsolute; /* If true, engine score is always from white side */\r
489     Boolean saveExtendedInfoInPGN; /* If true, saved PGN games contain extended info */\r
490     Boolean hideThinkingFromHuman; /* If true, program thinking is generated but not displayed in human/computer matches */\r
491     char * liteBackTextureFile; /* Name of texture bitmap for lite squares */\r
492     char * darkBackTextureFile; /* Name of texture bitmap for dark squares */\r
493     int liteBackTextureMode;\r
494     int darkBackTextureMode;\r
495     char * renderPiecesWithFont; /* Name of font for rendering chess pieces */\r
496     char * fontToPieceTable; /* Map to translate font character to chess pieces */\r
497     int fontBackColorWhite;\r
498     int fontForeColorWhite;\r
499     int fontBackColorBlack;\r
500     int fontForeColorBlack;\r
501     int fontPieceSize; /* Size of font relative to square (percentage) */\r
502     int overrideLineGap; /* If >= 0 overrides the lineGap value of the board size properties */\r
503     int adjudicateLossThreshold; /* Adjudicate a two-machine game if both engines agree the score is below this for 6 plies */\r
504     int delayBeforeQuit;\r
505     int delayAfterQuit;\r
506     char * nameOfDebugFile;\r
507     char * pgnEventHeader;\r
508     int defaultFrcPosition;\r
509     char * gameListTags;\r
510     Boolean saveOutOfBookInfo;\r
511     Boolean showEvalInMoveHistory;\r
512     int evalHistColorWhite;\r
513     int evalHistColorBlack;\r
514     Boolean highlightMoveWithArrow;\r
515     int highlightArrowColor;\r
516     Boolean useStickyWindows;\r
517     int adjudicateDrawMoves;\r
518     Boolean autoDisplayComment;\r
519     Boolean autoDisplayTags;\r
520     Boolean firstIsUCI;\r
521     Boolean secondIsUCI;\r
522     Boolean firstHasOwnBookUCI;\r
523     Boolean secondHasOwnBookUCI;\r
524     char * polyglotDir;\r
525     Boolean usePolyglotBook;\r
526     char * polyglotBook;\r
527     int defaultHashSize;\r
528     int defaultCacheSizeEGTB;\r
529     char * defaultPathEGTB;\r
530 \r
531     /* [HGM] Board size */\r
532     int NrFiles;\r
533     int NrRanks;\r
534     int holdingsSize;\r
535     int matchPause;\r
536     char * pieceToCharTable;\r
537     Boolean allWhite;\r
538     Boolean upsideDown;\r
539     Boolean alphaRank;\r
540     Boolean testClaims;\r
541     Boolean checkMates;\r
542     Boolean materialDraws;\r
543     Boolean trivialDraws;\r
544     int ruleMoves;\r
545     int drawRepeats;\r
546 \r
547 #if ZIPPY\r
548     char *zippyLines;\r
549     char *zippyPinhead;\r
550     char *zippyPassword;\r
551     char *zippyPassword2;\r
552     char *zippyWrongPassword;\r
553     char *zippyAcceptOnly;\r
554     int zippyUseI;\r
555     int zippyBughouse;\r
556     int zippyNoplayCrafty;\r
557     char *zippyGameEnd;\r
558     char *zippyGameStart;\r
559     int zippyAdjourn;\r
560     int zippyAbort;\r
561     char *zippyVariants;\r
562     int zippyMaxGames;\r
563     int zippyReplayTimeout; /*seconds*/\r
564 #endif\r
565 \r
566     char *serverMovesName;\r
567     Boolean suppressLoadMoves;\r
568     int serverPause;\r
569     int firstTimeOdds;\r
570     int secondTimeOdds;\r
571     int timeOddsMode;\r
572     int firstAccumulateTC;\r
573     int secondAccumulateTC;\r
574     int firstNPS;\r
575     int secondNPS;\r
576     Boolean autoKibitz;\r
577     int engineComments;\r
578     char *userName;\r
579     int rewindIndex;    /* [HGM] autoinc   */\r
580     int sameColorGames; /* [HGM] alternate */\r
581     int smpCores;       /* [HGM] SMP       */\r
582     char *egtFormats;\r
583     int niceEngines;    /* [HGM] nice      */\r
584     char *firstLogo;    /* [HGM] logo      */\r
585     char *secondLogo;\r
586     Boolean autoLogo;\r
587     Boolean noGUI;      /* [HGM] fast: suppress all display updates */\r
588 } AppData, *AppDataPtr;\r
589 \r
590 /* [AS] PGN tags (for showing in the game list) */\r
591 #define GLT_EVENT           'e'\r
592 #define GLT_SITE            's'\r
593 #define GLT_DATE            'd'\r
594 #define GLT_ROUND           'o'\r
595 #define GLT_PLAYERS         'p'     /* I.e. white "-" black */\r
596 #define GLT_RESULT          'r'\r
597 #define GLT_WHITE_ELO       'w'\r
598 #define GLT_BLACK_ELO       'b'\r
599 #define GLT_TIME_CONTROL    't'\r
600 #define GLT_VARIANT         'v'\r
601 #define GLT_OUT_OF_BOOK     'a'\r
602 \r
603 #define GLT_DEFAULT_TAGS    "eprd"  /* Event, players, result, date */\r
604 \r
605 #define GLT_ALL_TAGS        "esdoprwbtva"\r
606 \r
607 #define PGN_OUT_OF_BOOK     "Annotator"\r
608 \r
609 extern AppData appData;\r
610 \r
611 typedef struct {\r
612     /* PGN 7-tag info */\r
613     char *event;\r
614     char *site;\r
615     char *date;\r
616     char *round;\r
617     char *white;\r
618     char *black;\r
619     ChessMove result;\r
620     /* Additional info */\r
621     char *fen;          /* NULL or FEN for starting position; input only */\r
622     char *resultDetails;\r
623     char *timeControl;\r
624     char *extraTags;    /* NULL or "[Tag \"Value\"]\n", etc. */\r
625     int whiteRating;    /* -1 if unknown */\r
626     int blackRating;    /* -1 if unknown */\r
627     VariantClass variant;\r
628     char *outOfBook;    /* [AS] Move and score when engine went out of book */\r
629     int boardWidth;     /* [HGM] adjustable board size */\r
630     int boardHeight;\r
631 /* [HGM] For Shogi and Crazyhouse: */\r
632     int holdingsSize;  /* number of different piece types in holdings       */\r
633     int holdingsWidth; /* number of files left and right of board, 0 or 2   */\r
634 } GameInfo;\r
635 \r
636 \r
637 #endif\r
638 \r