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