changes from H.G. Muller; version 4.3.2
[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 #define BOARD_SIZE              12                     /* [HGM] for in declarations */\r
104 #define BOARD_WIDTH             (appData.NrFiles)      /* [HGM] made user adjustable */\r
105 #define BOARD_HEIGHT            (appData.NrRanks)\r
106 #define ONE                     ('1'-(BOARD_HEIGHT>9)) /* [HGM] foremost board rank */\r
107 #define DROP_RANK               -3\r
108 #define MAX_MOVES               1000\r
109 #define MSG_SIZ                 512\r
110 #define DIALOG_SIZE             256\r
111 #define STAR_MATCH_N            16\r
112 #define MOVE_LEN                32\r
113 #define TIME_CONTROL            "5"     /* in minutes */\r
114 #define TIME_DELAY_QUOTE        "1.0"   /* seconds between moves */\r
115 #define TIME_DELAY              ((float) 1.0)\r
116 #define MOVES_PER_SESSION       40      /* moves per TIME_CONTROL */\r
117 #define TIME_INCREMENT          -1      /* if >= 0, MOVES_PER_SESSION unused */\r
118 #define WhiteOnMove(move)       (((move) % 2) == 0)\r
119 #define ICS_HOST                "chessclub.com"\r
120 #define ICS_PORT                "5000"\r
121 #define ICS_COMM_PORT           ""\r
122 #define FIRST_HOST              "localhost"\r
123 #define SECOND_HOST             "localhost"\r
124 #define TELNET_PROGRAM          "telnet"\r
125 #define MATCH_MODE              "False"\r
126 #define INIT_STRING             "new\nrandom\n"\r
127 #define WHITE_STRING            "white\ngo\n"\r
128 #define BLACK_STRING            "black\ngo\n"\r
129 #define COMPUTER_STRING         "computer\n"\r
130 #define REUSE_CHESS_PROGRAMS    1\r
131 #define WHITE_PIECE_COLOR       "#FFFFCC"\r
132 #define BLACK_PIECE_COLOR       "#202020"\r
133 #define LIGHT_SQUARE_COLOR      "#C8C365"\r
134 #define DARK_SQUARE_COLOR       "#77A26D"\r
135 #define JAIL_SQUARE_COLOR       "#808080"\r
136 #define HIGHLIGHT_SQUARE_COLOR  "#FFFF00"\r
137 #define PREMOVE_HIGHLIGHT_COLOR "#FF0000"\r
138 #define BELLCHAR                '\007'\r
139 #define NULLCHAR                '\000'\r
140 #define FEATURE_TIMEOUT         10000 /*ms*/\r
141 \r
142 /* Zippy defaults */\r
143 #define ZIPPY_TALK FALSE\r
144 #define ZIPPY_PLAY FALSE\r
145 #define ZIPPY_LINES "yow.lines"\r
146 #define ZIPPY_PINHEAD ""\r
147 #define ZIPPY_PASSWORD ""\r
148 #define ZIPPY_PASSWORD2 ""\r
149 #define ZIPPY_WRONG_PASSWORD ""\r
150 #define ZIPPY_ACCEPT_ONLY ""\r
151 #define ZIPPY_USE_I TRUE\r
152 #define ZIPPY_BUGHOUSE 0\r
153 #define ZIPPY_NOPLAY_CRAFTY FALSE\r
154 #define ZIPPY_GAME_END "gameend\n"\r
155 #define ZIPPY_GAME_START ""\r
156 #define ZIPPY_ADJOURN FALSE\r
157 #define ZIPPY_ABORT FALSE\r
158 #define ZIPPY_VARIANTS "normal"\r
159 #define ZIPPY_MAX_GAMES 0\r
160 #define ZIPPY_REPLAY_TIMEOUT 120\r
161 \r
162 typedef enum {\r
163     BeginningOfGame, MachinePlaysWhite, MachinePlaysBlack,\r
164     AnalyzeMode, AnalyzeFile, TwoMachinesPlay,\r
165     EditGame, PlayFromGameFile, EndOfGame, EditPosition, Training,\r
166     IcsIdle, IcsPlayingWhite, IcsPlayingBlack, IcsObserving,\r
167     IcsExamining\r
168   } GameMode;\r
169 \r
170 typedef enum {\r
171     WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, \r
172 #ifdef FAIRY\r
173     WhiteCardinal, WhiteMarshall, WhiteFairyPawn, WhiteFairyKnight,\r
174     WhiteFairyBishop, WhiteFairyRook, WhiteFairyCardinal, WhiteFairyMarshall,\r
175     WhiteFairyQueen, WhiteFairyKing,\r
176 #endif\r
177     WhiteQueen, WhiteKing,\r
178     BlackPawn, BlackKnight, BlackBishop, BlackRook,\r
179 #ifdef FAIRY\r
180     BlackCardinal, BlackMarshall, BlackFairyPawn, BlackFairyKnight,\r
181     BlackFairyBishop, BlackFairyRook, BlackFairyCardinal, BlackFairyMarshall,\r
182     BlackFairyQueen, BlackFairyKing,\r
183 #endif\r
184     BlackQueen, BlackKing,\r
185     EmptySquare, \r
186     ClearBoard, WhitePlay, BlackPlay /*for use on EditPosition menus*/\r
187   } ChessSquare;\r
188 \r
189 typedef ChessSquare Board[BOARD_SIZE][BOARD_SIZE];\r
190 \r
191 typedef enum {\r
192     WhiteKingSideCastle = 1, WhiteQueenSideCastle,\r
193     WhiteKingSideCastleWild, WhiteQueenSideCastleWild,\r
194     WhiteHSideCastleFR, WhiteASideCastleFR, \r
195     BlackKingSideCastle, BlackQueenSideCastle,\r
196     BlackKingSideCastleWild, BlackQueenSideCastleWild,\r
197     BlackHSideCastleFR, BlackASideCastleFR, \r
198     WhitePromotionKnight, WhitePromotionBishop,\r
199     WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing,\r
200 #ifdef FAIRY\r
201     WhitePromotionChancellor, WhitePromotionArchbishop,\r
202 #endif\r
203     BlackPromotionKnight, BlackPromotionBishop,\r
204     BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing,\r
205 #ifdef FAIRY\r
206     BlackPromotionChancellor, BlackPromotionArchbishop,\r
207 #endif\r
208     WhiteCapturesEnPassant, BlackCapturesEnPassant,\r
209     WhiteDrop, BlackDrop, \r
210     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,\r
211     WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,\r
212     GNUChessGame, XBoardGame, MoveNumberOne, \r
213     Comment, PositionDiagram, ElapsedTime, PGNTag, NAG\r
214   } ChessMove;\r
215 \r
216 typedef enum {\r
217     ColorShout, ColorSShout, ColorChannel1, ColorChannel, ColorKibitz,\r
218     ColorTell, ColorChallenge, ColorRequest, ColorSeek, ColorNormal,\r
219     ColorNone, NColorClasses\r
220 } ColorClass;\r
221 \r
222 typedef enum {\r
223     SoundMove, SoundBell, SoundAlarm, SoundIcsWin, SoundIcsLoss,\r
224     SoundIcsDraw, SoundIcsUnfinished, NSoundClasses\r
225 } SoundClass;\r
226 \r
227 /* Names for chess variants, not necessarily supported */\r
228 typedef enum {\r
229     VariantNormal,       /* Normal chess */\r
230     VariantLoadable,     /* "loadgame" command allowed (not really a variant)*/\r
231     VariantWildCastle,   /* Shuffle chess where king can castle from d file */\r
232     VariantNoCastle,     /* Shuffle chess with no castling at all */\r
233     VariantFischeRandom, /* FischeRandom */\r
234     VariantBughouse,     /* Bughouse, ICC/FICS rules */\r
235     VariantCrazyhouse,   /* Crazyhouse, ICC/FICS rules */\r
236     VariantLosers,       /* Try to lose all pieces or get mated (ICC wild 17)*/\r
237     VariantSuicide,      /* Try to lose all pieces incl. king (FICS) */\r
238     VariantGiveaway,     /* Try to have no legal moves left (ICC wild 26) */\r
239     VariantTwoKings,     /* Weird ICC wild 9 */\r
240     VariantKriegspiel,   /* Kriegspiel; pawns can capture invisible pieces */\r
241     VariantAtomic,       /* Capturing piece explodes (ICC wild 27) */\r
242     Variant3Check,       /* Win by giving check 3 times (ICC wild 25) */\r
243     VariantShatranj,     /* Unsupported (ICC wild 28) */\r
244     Variant29,           /* Temporary name for possible future ICC wild 29 */\r
245     Variant30,           /* Temporary name for possible future ICC wild 30 */\r
246 #ifdef FAIRY\r
247     VariantShogi,        /* [HGM] To be supported in next version */\r
248     VariantXiangqi,\r
249     VariantCourier,\r
250     VariantGothic,\r
251     VariantCapablanca,\r
252     VariantFairy,        /* [HGM] allow more piece types */\r
253 #else\r
254     Variant31,           /* Temporary name for possible future ICC wild 31 */\r
255     Variant32,           /* Temporary name for possible future ICC wild 32 */\r
256     Variant33,\r
257     Variant34,           /* Temporary name for possible future ICC wild 34 */\r
258     Variant35,           /* Temporary name for possible future ICC wild 35 */\r
259     Variant36,           /* Temporary name for possible future ICC wild 36 */\r
260 #endif\r
261     VariantUnknown       /* Catchall for other unknown variants */\r
262 } VariantClass;\r
263 \r
264 #ifdef FAIRY\r
265 #define VARIANT_NAMES { \\r
266   "normal", \\r
267   "normal", \\r
268   "wildcastle", \\r
269   "nocastle", \\r
270   "fischerandom", \\r
271   "bughouse", \\r
272   "crazyhouse", \\r
273   "losers", \\r
274   "suicide", \\r
275   "giveaway", \\r
276   "twokings", \\r
277   "kriegspiel", \\r
278   "atomic", \\r
279   "3check", \\r
280   "shatranj", \\r
281   "wild29", \\r
282   "wild30", \\r
283   "shogi", \\r
284   "xiangqi", \\r
285   "courier", \\r
286   "gothic", \\r
287   "capablanca", \\r
288   "fairy", \\r
289   "unknown" \\r
290 }\r
291 #else\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   "unknown" \\r
317 }\r
318 #endif\r
319 \r
320 typedef struct {\r
321 #if !defined(_amigados)\r
322     char *whitePieceColor;\r
323     char *blackPieceColor;\r
324     char *lightSquareColor;\r
325     char *darkSquareColor;\r
326     char *jailSquareColor;\r
327     char *highlightSquareColor;\r
328     char *premoveHighlightColor;\r
329 #else\r
330     int whitePieceColor;\r
331     int blackPieceColor;\r
332     int lightSquareColor;\r
333     int darkSquareColor;\r
334     int jailSquareColor;\r
335     int highlightSquareColor;\r
336     int premoveHighlightColor;\r
337 #endif\r
338     int movesPerSession;\r
339     int timeIncrement;\r
340     char *initString;\r
341     char *secondInitString;\r
342     char *firstComputerString;\r
343     char *secondComputerString;\r
344     char *firstChessProgram;\r
345     char *secondChessProgram;\r
346     char *firstDirectory;\r
347     char *secondDirectory;\r
348     Boolean firstPlaysBlack;\r
349     Boolean noChessProgram;\r
350     char *firstHost;\r
351     char *secondHost;\r
352     char *bitmapDirectory;\r
353     char *remoteShell;\r
354     char *remoteUser;\r
355     float timeDelay;\r
356     char *timeControl;\r
357     Boolean icsActive;\r
358     char *icsHost;\r
359     char *icsPort;\r
360     char *icsCommPort;  /* if set, use serial port instead of tcp host/port */\r
361     char *icsLogon;     /* Hack to permit variable logon scripts. */\r
362     char *icsHelper;\r
363     Boolean icsInputBox;\r
364     Boolean useTelnet;\r
365     char *telnetProgram;\r
366     char *gateway;\r
367     char *loadGameFile;\r
368     int loadGameIndex;      /* game # within file */\r
369     char *saveGameFile;\r
370     Boolean autoSaveGames;\r
371     char *loadPositionFile;\r
372     int loadPositionIndex;  /* position # within file */\r
373     char *savePositionFile;\r
374     Boolean matchMode;\r
375     int matchGames;\r
376     Boolean monoMode;\r
377     Boolean debugMode;\r
378     Boolean clockMode;\r
379     char *boardSize;\r
380     Boolean Iconic;\r
381     char *searchTime;\r
382     int searchDepth;\r
383     Boolean showCoords;\r
384     char *clockFont;\r
385     char *messageFont; /* WinBoard only */\r
386     char *coordFont;\r
387     char *font; /* xboard only: all other fonts */\r
388     char *tagsFont; /* WinBoard only */\r
389     char *commentFont; /* WinBoard only */\r
390     char *icsFont; /* WinBoard only */\r
391     Boolean ringBellAfterMoves;\r
392     Boolean autoCallFlag;\r
393     Boolean flipView;\r
394     Boolean autoFlipView;\r
395     char *cmailGameName; /* xboard only */\r
396     Boolean alwaysPromoteToQueen;\r
397     Boolean oldSaveStyle;\r
398     Boolean quietPlay;\r
399     Boolean showThinking;\r
400     Boolean ponderNextMove;\r
401     Boolean periodicUpdates;\r
402     Boolean autoObserve;\r
403     Boolean autoComment;\r
404     Boolean getMoveList;\r
405     Boolean testLegality;\r
406     int borderXoffset; /* xboard only */\r
407     int borderYoffset; /* xboard only */\r
408     Boolean titleInWindow; /* xboard only */\r
409     Boolean localLineEditing; /* WinBoard only */\r
410     Boolean zippyTalk;\r
411     Boolean zippyPlay;\r
412     int flashCount; /* Number of times to flash (xboard only) */\r
413     int flashRate; /* Flashes per second (xboard only)  */\r
414     char *pixmapDirectory; /* Path to XPM/XIM files to use (xboard only) */\r
415     int msLoginDelay;  /* Delay per character (in msec) while sending\r
416                           ICS logon script (xboard only) */\r
417     Boolean colorize;   /* If True, use the following colors to color text */\r
418     /* Strings for colors, as "fg, bg, bold" (strings used in xboard only) */\r
419     char *colorShout;\r
420     char *colorSShout;\r
421     char *colorChannel1;\r
422     char *colorChannel;\r
423     char *colorKibitz;\r
424     char *colorTell;\r
425     char *colorChallenge;\r
426     char *colorRequest;\r
427     char *colorSeek;\r
428     char *colorNormal;\r
429     char *soundProgram; /* sound-playing program */\r
430     char *soundShout;\r
431     char *soundSShout;\r
432     char *soundChannel1;\r
433     char *soundChannel;\r
434     char *soundKibitz;\r
435     char *soundTell;\r
436     char *soundChallenge;\r
437     char *soundRequest;\r
438     char *soundSeek;\r
439     char *soundMove;\r
440     char *soundIcsWin;\r
441     char *soundIcsLoss;\r
442     char *soundIcsDraw;\r
443     char *soundIcsUnfinished;\r
444     char *soundIcsAlarm;\r
445     Boolean reuseFirst;\r
446     Boolean reuseSecond;\r
447     Boolean animateDragging; /* If True, animate mouse dragging of pieces */\r
448     Boolean animate;    /* If True, animate non-mouse moves */\r
449     int animSpeed;      /* Delay in milliseconds between animation frames */\r
450     Boolean popupMoveErrors;\r
451     Boolean popupExitMessage;\r
452     int showJail;\r
453     Boolean highlightLastMove;\r
454     Boolean highlightDragging;\r
455     Boolean blindfold;          /* if true, no pieces are drawn */\r
456     Boolean premove;            /* true if premove feature enabled */ \r
457     Boolean premoveWhite;       /* true if premoving White first move  */ \r
458     char *premoveWhiteText;     /* text of White premove 1 */ \r
459     Boolean premoveBlack;       /* true if premoving Black first move */ \r
460     char *premoveBlackText;     /* text of Black premove 1 */ \r
461     Boolean icsAlarm;           /* true if sounding alarm at a certain time */  \r
462     int icsAlarmTime;           /* time to sound alarm, in milliseconds */\r
463     Boolean autoRaiseBoard;\r
464     int fontSizeTolerance; /* xboard only */\r
465     char *initialMode;\r
466     char *variant;\r
467     int firstProtocolVersion;\r
468     int secondProtocolVersion;\r
469     Boolean showButtonBar;\r
470 \r
471     /* [AS] New properties (down to the "ZIPPY" part) */\r
472     Boolean firstScoreIsAbsolute;  /* If true, engine score is always from white side */\r
473     Boolean secondScoreIsAbsolute; /* If true, engine score is always from white side */\r
474     Boolean saveExtendedInfoInPGN; /* If true, saved PGN games contain extended info */\r
475     Boolean hideThinkingFromHuman; /* If true, program thinking is generated but not displayed in human/computer matches */\r
476     char * liteBackTextureFile; /* Name of texture bitmap for lite squares */\r
477     char * darkBackTextureFile; /* Name of texture bitmap for dark squares */\r
478     int liteBackTextureMode;\r
479     int darkBackTextureMode;\r
480     char * renderPiecesWithFont; /* Name of font for rendering chess pieces */\r
481     char * fontToPieceTable; /* Map to translate font character to chess pieces */\r
482     int fontBackColorWhite;\r
483     int fontForeColorWhite;\r
484     int fontBackColorBlack;\r
485     int fontForeColorBlack;\r
486     int fontPieceSize; /* Size of font relative to square (percentage) */\r
487     int overrideLineGap; /* If >= 0 overrides the lineGap value of the board size properties */\r
488     int adjudicateLossThreshold; /* Adjudicate a two-machine game if both engines agree the score is below this for 6 plies */\r
489     int delayBeforeQuit;\r
490     int delayAfterQuit;\r
491     char * nameOfDebugFile;\r
492     char * pgnEventHeader;\r
493     int defaultFrcPosition;\r
494     char * gameListTags;\r
495     Boolean saveOutOfBookInfo;\r
496     Boolean showEvalInMoveHistory;\r
497     int evalHistColorWhite;\r
498     int evalHistColorBlack;\r
499     Boolean highlightMoveWithArrow;\r
500     int highlightArrowColor;\r
501     Boolean useStickyWindows;\r
502     int adjudicateDrawMoves;\r
503     Boolean autoDisplayComment;\r
504     Boolean autoDisplayTags;\r
505     Boolean firstIsUCI;\r
506     Boolean secondIsUCI;\r
507     Boolean firstHasOwnBookUCI;\r
508     Boolean secondHasOwnBookUCI;\r
509     char * polyglotDir;\r
510     Boolean usePolyglotBook;\r
511     char * polyglotBook;\r
512     int defaultHashSize;\r
513     int defaultCacheSizeEGTB;\r
514     char * defaultPathEGTB;\r
515 \r
516     /* [HGM] Board size */\r
517     int NrFiles;\r
518     int NrRanks;\r
519     int matchPause;\r
520     Boolean testClaims;\r
521     int ruleMoves;\r
522     int drawRepeats;\r
523 \r
524 #if ZIPPY\r
525     char *zippyLines;\r
526     char *zippyPinhead;\r
527     char *zippyPassword;\r
528     char *zippyPassword2;\r
529     char *zippyWrongPassword;\r
530     char *zippyAcceptOnly;\r
531     int zippyUseI;\r
532     int zippyBughouse;\r
533     int zippyNoplayCrafty;\r
534     char *zippyGameEnd;\r
535     char *zippyGameStart;\r
536     int zippyAdjourn;\r
537     int zippyAbort;\r
538     char *zippyVariants;\r
539     int zippyMaxGames;\r
540     int zippyReplayTimeout; /*seconds*/\r
541 #endif\r
542 } AppData, *AppDataPtr;\r
543 \r
544 /* [AS] PGN tags (for showing in the game list) */\r
545 #define GLT_EVENT           'e'\r
546 #define GLT_SITE            's'\r
547 #define GLT_DATE            'd'\r
548 #define GLT_ROUND           'o'\r
549 #define GLT_PLAYERS         'p'     /* I.e. white "-" black */\r
550 #define GLT_RESULT          'r'\r
551 #define GLT_WHITE_ELO       'w'\r
552 #define GLT_BLACK_ELO       'b'\r
553 #define GLT_TIME_CONTROL    't'\r
554 #define GLT_VARIANT         'v'\r
555 #define GLT_OUT_OF_BOOK     'a'\r
556 \r
557 #define GLT_DEFAULT_TAGS    "eprd"  /* Event, players, result, date */\r
558 \r
559 #define GLT_ALL_TAGS        "esdoprwbtva"\r
560 \r
561 #define PGN_OUT_OF_BOOK     "Annotator"\r
562 \r
563 extern AppData appData;\r
564 \r
565 typedef struct {\r
566     /* PGN 7-tag info */\r
567     char *event;\r
568     char *site;\r
569     char *date;\r
570     char *round;\r
571     char *white;\r
572     char *black;\r
573     ChessMove result;\r
574     /* Additional info */\r
575     char *fen;          /* NULL or FEN for starting position; input only */\r
576     char *resultDetails;\r
577     char *timeControl;\r
578     char *extraTags;    /* NULL or "[Tag \"Value\"]\n", etc. */\r
579     int whiteRating;    /* -1 if unknown */\r
580     int blackRating;    /* -1 if unknown */\r
581     VariantClass variant;\r
582     char *outOfBook;    /* [AS] Move and score when engine went out of book */\r
583 } GameInfo;\r
584 \r
585 \r
586 #endif\r