1 /*
2  * backgammon.h
3  *
4  * by Gary Wong <gtw@gnu.org>, 1999, 2000, 2001, 2002.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of version 3 or later of the GNU General Public License as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  *
19  * $Id: backgammon.h,v 1.462 2018/06/10 18:17:59 plm Exp $
20  */
21 
22 #ifndef BACKGAMMON_H
23 #define BACKGAMMON_H
24 
25 #include "common.h"
26 
27 #include "output.h"
28 #include "analysis.h"
29 #include "eval.h"
30 #include "rollout.h"
31 
32 #define STRINGIZEAUX(num) #num
33 #define STRINGIZE(num) STRINGIZEAUX(num)
34 
35 #define MAX_CUBE ( 1 << 12 )
36 #define MAX_NAME_LEN 32
37 #ifndef BUILD_DATE
38 #define BUILD_DATE_STR " " __DATE__
39 #else
40 #define BUILD_DATE_STR STRINGIZE(BUILD_DATE)
41 #endif
42 
43 #define VERSION_STRING "GNU Backgammon " VERSION " " BUILD_DATE_STR
44 #define GNUBG_CHARSET "UTF-8"
45 
46 extern const char *intro_string;
47 typedef struct _command {
48     /* Command name (NULL indicates end of list) */
49     const char *sz;
50     /* Command handler; NULL to use default subcommand handler */
51     void (*pf) (char *);
52     /* Documentation; NULL for abbreviations */
53     const char *szHelp;
54     const char *szUsage;
55     /* List of subcommands (NULL if none) */
56     struct _command *pc;
57 } command;
58 
59 typedef struct _procrecorddata {
60     /* Record handler */
61     int (*pfProcessRecord) (struct _procrecorddata *);
62     void *pvUserData;
63     void *avInputData[8];
64     void *avOutputData[8];
65 } procrecorddata;
66 
67 #define PROCREC_HINT_ARGIN_SHOWPROGRESS 0
68 #define PROCREC_HINT_ARGIN_MAXMOVES 1
69 #define PROCREC_HINT_ARGOUT_MATCHSTATE 0
70 #define PROCREC_HINT_ARGOUT_CUBEINFO 1
71 #define PROCREC_HINT_ARGOUT_MOVELIST 2
72 #define PROCREC_HINT_ARGOUT_MOVERECORD 3
73 #define PROCREC_HINT_ARGOUT_INDEX 4
74 
75 
76 typedef enum _playertype {
77     PLAYER_HUMAN, PLAYER_GNU, PLAYER_EXTERNAL
78 } playertype;
79 
80 typedef struct _player {
81     /* For all player types: */
82     char szName[MAX_NAME_LEN];
83     playertype pt;
84     /* For PLAYER_GNU: */
85     evalsetup esChequer;
86     evalsetup esCube;
87     movefilter aamf[MAX_FILTER_PLIES][MAX_FILTER_PLIES];
88     /* For PLAYER_EXTERNAL: */
89     int h;
90     char *szSocket;
91 } player;
92 
93 typedef enum _movetype {
94     MOVE_GAMEINFO,
95     MOVE_NORMAL,
96     MOVE_DOUBLE,
97     MOVE_TAKE,
98     MOVE_DROP,
99     MOVE_RESIGN,
100     MOVE_SETBOARD,
101     MOVE_SETDICE,
102     MOVE_SETCUBEVAL,
103     MOVE_SETCUBEPOS
104 } movetype;
105 
106 typedef struct _movegameinfo {
107     /* ordinal number of the game within a match */
108     int i;
109     /* match length */
110     int nMatch;
111     /* match score BEFORE the game */
112     int anScore[2];
113     /* the Crawford rule applies during this match */
114     int fCrawford;
115     /* this is the Crawford game */
116     int fCrawfordGame;
117     int fJacoby;
118     /* who won (-1 = unfinished) */
119     int fWinner;
120     /* how many points were scored by the winner */
121     int nPoints;
122     /* the game was ended by resignation */
123     int fResigned;
124     /* how many automatic doubles were rolled */
125     int nAutoDoubles;
126     /* Type of game */
127     bgvariation bgv;
128     /* Cube used in game */
129     int fCubeUse;
130     statcontext sc;
131 } xmovegameinfo;
132 
133 typedef struct _cubedecisiondata {
134     float aarOutput[2][NUM_ROLLOUT_OUTPUTS];
135     float aarStdDev[2][NUM_ROLLOUT_OUTPUTS];
136     evalsetup esDouble;
137     CMark cmark;
138 } cubedecisiondata;
139 
140 typedef struct _movenormal {
141     /* Move made. */
142     int anMove[8];
143     /* index into the movelist of the move that was made */
144     unsigned int iMove;
145     skilltype stMove;
146 } xmovenormal;
147 
148 typedef struct _moveresign {
149     int nResigned;
150     evalsetup esResign;
151     float arResign[NUM_ROLLOUT_OUTPUTS];
152     skilltype stResign;
153     skilltype stAccept;
154 } xmoveresign;
155 
156 typedef struct _movesetboard {
157     positionkey key;            /* always stored as if player 0 was on roll */
158 } xmovesetboard;
159 
160 typedef struct _movesetcubeval {
161     int nCube;
162 } xmovesetcubeval;
163 
164 typedef struct _movesetcubepos {
165     int fCubeOwner;
166 } xmovesetcubepos;
167 
168 typedef struct _moverecord {
169     /*
170      * Common variables
171      */
172     /* type of the move */
173     movetype mt;
174     /* annotation */
175     char *sz;
176     /* move record is for player */
177     int fPlayer;
178     /* luck analysis (shared between MOVE_SETDICE and MOVE_NORMAL) */
179     /* dice rolled */
180     unsigned int anDice[2];
181     /* classification of luck */
182     lucktype lt;
183     /* magnitude of luck */
184     float rLuck;                /* ERR_VAL means unknown */
185     /* move analysis (shared between MOVE_SETDICE and MOVE_NORMAL) */
186     /* evaluation setup for move analysis */
187     evalsetup esChequer;
188     /* evaluation of the moves */
189     movelist ml;
190     /* cube analysis (shared between MOVE_NORMAL and MOVE_DOUBLE) */
191     /* 0 in match play, even numbers are doubles, raccoons
192      * odd numbers are beavers, aardvarken, etc. */
193     int nAnimals;
194     /* the evaluation and settings */
195     cubedecisiondata *CubeDecPtr;
196     cubedecisiondata CubeDec;
197     /* skill for the cube decision */
198     skilltype stCube;
199     /* "private" data */
200     xmovegameinfo g;            /* game information */
201     xmovenormal n;              /* chequerplay move */
202     xmoveresign r;              /* resignation */
203     xmovesetboard sb;           /* setting up board */
204     xmovesetcubeval scv;        /* setting cube */
205     xmovesetcubepos scp;        /* setting cube owner */
206 } moverecord;
207 
208 
209 typedef struct _matchinfo {     /* SGF match information */
210     char *pchRating[2];
211     char *pchEvent;
212     char *pchRound;
213     char *pchPlace;
214     char *pchAnnotator;
215     char *pchComment;           /* malloc()ed, or NULL if unknown */
216     unsigned int nYear;
217     unsigned int nMonth;
218     unsigned int nDay;          /* 0 for nYear means date unknown */
219 } matchinfo;
220 
221 typedef struct _decisionData {
222     float aarOutput[2][NUM_ROLLOUT_OUTPUTS];
223     float aarStdDev[2][NUM_ROLLOUT_OUTPUTS];
224     rolloutstat aarsStatistics[2][2];
225     float aarRates[2][2];
226     cubeinfo *pci;
227     const evalcontext *pec;
228     evalsetup *pes;
229     ConstTanBoard pboard;
230     char *szOutput;
231     int n;
232 } decisionData;
233 
234 typedef struct _moveData {
235     moverecord *pmr;
236     matchstate *pms;
237     const evalsetup *pesChequer;
238     evalsetup *pesCube;
239      movefilter(*aamf)[MAX_FILTER_PLIES];
240 } moveData;
241 
242 typedef struct _findData {
243     movelist *pml;
244     ConstTanBoard pboard;
245     positionkey *keyMove;
246     float rThr;
247     const cubeinfo *pci;
248     const evalcontext *pec;
249     int anDice[2];
250      movefilter(*aamf)[MAX_FILTER_PLIES];
251 } findData;
252 
253 typedef struct _scoreData {
254     move *pm;
255     const cubeinfo *pci;
256     const evalcontext *pec;
257 } scoreData;
258 
259 typedef void (*AsyncFun) (void *);
260 
261 void asyncDumpDecision(decisionData * pdd);
262 void asyncFindBestMoves(findData * pfd);
263 void asyncFindMove(findData * pfd);
264 void asyncScoreMove(scoreData * psd);
265 void asyncEvalRoll(decisionData * pdd);
266 void asyncAnalyzeMove(moveData * pmd);
267 void asyncGammonRates(decisionData * pdd);
268 void asyncMoveDecisionE(decisionData * pdd);
269 void asyncCubeDecisionE(decisionData * pdd);
270 void asyncCubeDecision(decisionData * pdd);
271 int RunAsyncProcess(AsyncFun fun, void *data, const char *msg);
272 
273 /* There is a global storedmoves struct to maintain the list of moves
274  * for "=n" notation (e.g. "hint", "rollout =1 =2 =4").
275  * Anything that _writes_ stored moves ("hint", "show moves", "add move")
276  * should free the old dynamic move list first (sm.ml.amMoves), if it is
277  * non-NULL.
278  * Anything that _reads_ stored moves should check that the move is still
279  * valid (i.e. auchKey matches the current board and anDice matches the
280  * current dice). */
281 
282 /*
283  * Store cube analysis
284  *
285  */
286 
287 /*  List of moverecords representing the current game. One of the elements in
288  * lMatch.
289  * Typically the last game in the match).
290  */
291 extern listOLD *plGame;
292 
293 /* Current move inside plGame (typically the most recently
294  * one played, but "previous" and "next" commands navigate back and forth).
295  */
296 extern listOLD *plLastMove;
297 
298 /* The current match.
299  * A list of games. Each game is a list of moverecords.
300  * Note that the first list element is empty. The first game is in
301  * lMatch.plNext->p. Same is true for games.
302  */
303 extern listOLD lMatch;
304 
305 extern int automaticTask;
306 
307 extern char *aszCopying[];
308 extern const char *aszGameResult[];
309 extern const char *aszLuckType[];
310 extern const char *aszLuckTypeAbbr[];
311 extern const char *aszLuckTypeCommand[];
312 extern const char *aszSkillType[];
313 extern const char *aszSkillTypeAbbr[];
314 extern const char *aszSkillTypeCommand[];
315 extern char *aszWarranty[];
316 extern char *default_export_folder;
317 extern char *default_import_folder;
318 extern char *default_sgf_folder;
319 extern char *log_file_name;
320 extern char *szCurrentFileName;
321 extern char *szCurrentFolder;
322 extern const char szDefaultPrompt[];
323 extern char *szLang;
324 extern const char *szPrompt;
325 extern const char *szHomeDirectory;
326 extern evalcontext ecLuck;
327 extern evalsetup esAnalysisChequer;
328 extern evalsetup esAnalysisCube;
329 extern evalsetup esEvalChequer;
330 extern evalsetup esEvalCube;
331 extern int fEvalSameAsAnalysis;
332 extern evalsetup *GetEvalChequer(void);
333 extern evalsetup *GetEvalCube(void);
334 extern float arLuckLevel[N_LUCKS];
335 extern float arSkillLevel[N_SKILLS];
336 extern float rEvalsPerSec;
337 extern float rRatingOffset;
338 extern int fAnalyseCube;
339 extern int fAnalyseDice;
340 extern int fAnalyseMove;
341 extern int fAutoBearoff;
342 extern int fAutoCrawford;
343 extern int fAutoGame;
344 extern int fAutoMove;
345 extern int fAutoRoll;
346 extern int fCheat;
347 extern int fComputing;
348 extern int nConfirmDefault;
349 extern int fConfirmNew;
350 extern int fConfirmSave;
351 extern int nAutoSaveTime;
352 extern int fAutoSaveRollout;
353 extern int fAutoSaveAnalysis;
354 extern int fAutoSaveConfirmDelete;
355 extern int fCubeEqualChequer;
356 extern int fPlayersAreSame;
357 extern int fTruncEqualPlayer0;
358 extern int fCubeUse;
359 extern int fDisplay;
360 extern int fFullScreen;
361 extern int fGotoFirstGame;
362 extern int fInvertMET;
363 extern int fJacoby;
364 extern int fNextTurn;
365 extern int fOutputRawboard;
366 extern int fRecord;
367 extern int fShowProgress;
368 extern int fStyledGamelist;
369 extern int fTutor;
370 extern int fTutorChequer;
371 extern int fTutorCube;
372 extern int log_rollouts;
373 extern int nThreadPriority;
374 extern int nToolbarStyle;
375 extern int nTutorSkillCurrent;
376 #if defined(USE_BOARD3D)
377 extern int fSync;
378 extern int fResetSync;
379 #endif
380 extern matchinfo mi;
381 extern matchstate ms;
382 extern ConstTanBoard msBoard(void);
383 extern movefilter aamfAnalysis[MAX_FILTER_PLIES][MAX_FILTER_PLIES];
384 extern movefilter aamfEval[MAX_FILTER_PLIES][MAX_FILTER_PLIES];
385 typedef movefilter TmoveFilter[MAX_FILTER_PLIES][MAX_FILTER_PLIES];
386 typedef const movefilter (*ConstTmoveFilter)[MAX_FILTER_PLIES];
387 
388 extern TmoveFilter *GetEvalMoveFilter(void);
389 extern player ap[2];
390 extern char default_names[2][31];
391 extern char player1aliases[256];
392 extern rolloutcontext rcRollout;
393 extern skilltype TutorSkill;
394 extern statcontext scMatch;
395 extern unsigned int afCheatRoll[2];
396 extern unsigned int cAutoDoubles;
397 extern unsigned int nBeavers;
398 extern unsigned int nDefaultLength;
399 extern rngcontext *rngctxRollout;
400 
401 extern command acAnnotateMove[];
402 extern command acSetAnalysisPlayer[];
403 extern command acSetCheatPlayer[];
404 extern command acSetEvalParam[];
405 extern command acSetEvaluation[];
406 extern command acSetExportParameters[];
407 extern command acSetGeometryValues[];
408 extern command acSetPlayer[];
409 extern command acSetRNG[];
410 extern command acSetRollout[];
411 extern command acSetRolloutJsd[];
412 extern command acSetRolloutLate[];
413 extern command acSetRolloutLatePlayer[];
414 extern command acSetRolloutLimit[];
415 extern command acSetRolloutPlayer[];
416 extern command acSetTruncation[];
417 extern command acTop[];
418 
419 extern int fInteractive;
420 
421 #if defined(_LIBINTL_H) && defined(__MINGW32__)
422 #warning "libintl.h already included expect warnings under mingw"
423 #endif
424 
425 /* now we can include libintl.h */
426 #include <glib/gi18n.h>
427 /* Like strncpy, except it does the right thing */
428 extern char *strcpyn(char *szDest, const char *szSrc, int cch);
429 
430 extern char *GetMatchCheckSum(void);
431 extern char *CheckCommand(char *sz, command * ac);
432 extern char *FormatMoveHint(char *sz, const matchstate * pms, movelist * pml,
433                             int i, int fRankKnown, int fDetailProb, int fShowParameters);
434 extern char *FormatPrompt(void);
435 extern const char *GetBuildInfoString(void);
436 extern char *GetInput(char *szPrompt);
437 extern char *GetLuckAnalysis(const matchstate * pms, float rLuck);
438 extern const char *GetMoveString(moverecord * pmr, int *pPlayer, gboolean addSkillMarks);
439 extern double get_time(void);
440 extern char *NextToken(char **ppch);
441 extern char *NextTokenGeneral(char **ppch, const char *szTokens);
442 extern char *SetupLanguage(const char *newLangCode);
443 extern command *FindHelpCommand(command * pcBase, char *sz, char *pchCommand, char *pchUsage);
444 extern float ParseReal(char **ppch);
445 extern int AnalyzeMove(moverecord * pmr, matchstate * pms,
446                        const listOLD * plGame, statcontext * psc,
447                        const evalsetup * pesChequer, evalsetup * pesCube,
448                        movefilter aamf[MAX_FILTER_PLIES][MAX_FILTER_PLIES],
449                        const int afAnalysePlayers[2], float *doubleError);
450 extern void EvaluateRoll(float ar[NUM_ROLLOUT_OUTPUTS], int nDie1, int nDie2, const TanBoard anBoard,
451                          const cubeinfo * pci, const evalcontext * pec);
452 extern int CompareNames(char *sz0, char *sz1);
453 extern int confirmOverwrite(const char *sz, const int f);
454 extern int EPC(const TanBoard anBoard, float *arEPC, float *arMu,
455                float *arSigma, int *pfSource, const int fOnlyBearoff);
456 extern int EvalCmp(const evalcontext *, const evalcontext *, const int);
457 extern int getFinalScore(int *anScore);
458 extern int GetInputYN(char *szPrompt);
459 extern int GiveAdvice(skilltype Skill);
460 extern int InternalCommandNext(int mark, int cmark, int n);
461 extern int NextTurn(int fPlayNext);
462 extern int ParseKeyValue(char **ppch, char *apch[2]);
463 extern int ParseNumber(char **ppch);
464 extern int ParsePlayer(char *sz);
465 extern int ParsePosition(TanBoard an, char **ppch, char *pchDesc);
466 extern int SetToggle(const char *szName, int *pf, char *sz, const char *szOn, const char *szOff);
467 extern moverecord *get_current_moverecord(int *pfHistory);
468 extern moverecord *LinkToDouble(moverecord * pmr);
469 #if defined(HAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL)
470 extern moverecord *NewMoveRecord(void) __attribute__((returns_nonnull));
471 #else
472 extern moverecord *NewMoveRecord(void);
473 #endif
474 extern void HandleInterrupt(int idSignal);
475 extern void AddGame(moverecord * pmr);
476 extern void AddMoveRecord(moverecord * pmr);
477 extern void ApplyMoveRecord(matchstate * pms, const listOLD * plGame, const moverecord * pmr);
478 extern void CalculateBoard(void);
479 extern void CancelCubeAction(void);
480 extern void ChangeGame(listOLD * plGameNew);
481 extern void UpdateGame(int fShowBoard);
482 extern void ClearMatch(void);
483 extern void ClearMoveRecord(void);
484 extern void DisectPath(const char *path, const char *extension, char **name, char **folder);
485 extern void FixMatchState(matchstate * pms, const moverecord * pmr);
486 extern void FreeMatch(void);
487 extern void GetMatchStateCubeInfo(cubeinfo * pci, const matchstate * pms);
488 extern void HandleCommand(char *sz, command * ac);
489 extern void InitBoard(TanBoard anBoard, const bgvariation bgv);
490 extern void PortableSignal(int nSignal, void (*p) (int), psighandler * pOld, int fRestart);
491 extern void PortableSignalRestore(int nSignal, psighandler * p);
492 extern void PrintCheatRoll(const int fPlayer, const int n);
493 extern void ProgressEnd(void);
494 extern void ProgressStart(const char *sz);
495 extern void ProgressStartValue(char *sz, int iMax);
496 extern void ProgressValueAdd(int iValue);
497 extern void ProgressValue(int iValue);
498 extern void PromptForExit(void);
499 extern void Prompt(void);
500 extern void ResetInterrupt(void);
501 extern void SaveRolloutSettings(FILE * pf, const char *sz, rolloutcontext * prc);
502 extern void setDefaultFileName(char *path);
503 extern void SetMatchDate(matchinfo * pmi);
504 extern void SetMatchID(const char *szMatchID);
505 extern void SetMatchInfo(char **ppch, const char *sz, char *szMessage);
506 extern void SetMoveRecord(moverecord *pmr);
507 extern void SetTurn(int i);
508 extern void show_8912(TanBoard anBoard, char *sz);
509 extern void show_bearoff(TanBoard an, char *sz);
510 extern void ShowBoard(void);
511 extern void show_keith(TanBoard an, char *sz);
512 extern void show_kleinman(TanBoard an, char *sz);
513 extern void show_isight(TanBoard an, char *sz);
514 extern void show_thorp(TanBoard an, char *sz);
515 extern void TextToClipboard(const char *sz);
516 extern void UpdateSettings(void);
517 extern void UpdateSetting(void *p);
518 extern void CommandAccept(char *);
519 extern void CommandAgree(char *);
520 extern void CommandAnalyseClearGame(char *);
521 extern void CommandAnalyseClearMatch(char *);
522 extern void CommandAnalyseClearMove(char *);
523 extern void CommandAnalyseGame(char *);
524 extern void CommandAnalyseMatch(char *);
525 extern void CommandAnalyseMove(char *);
526 extern void CommandAnalyseRolloutCube(char *);
527 extern void CommandAnalyseRolloutGame(char *);
528 extern void CommandAnalyseRolloutMatch(char *);
529 extern void CommandAnalyseRolloutMove(char *);
530 extern void CommandAnalyseSession(char *);
531 extern void CommandAnnotateAccept(char *);
532 extern void CommandAnnotateAddComment(char *);
533 extern void CommandAnnotateBad(char *);
534 extern void CommandAnnotateClearComment(char *);
535 extern void CommandAnnotateClearLuck(char *);
536 extern void CommandAnnotateClearSkill(char *);
537 extern void CommandAnnotateCube(char *);
538 extern void CommandAnnotateDouble(char *);
539 extern void CommandAnnotateDoubtful(char *);
540 extern void CommandAnnotateDrop(char *);
541 extern void CommandAnnotateLucky(char *);
542 extern void CommandAnnotateMove(char *);
543 extern void CommandAnnotateReject(char *);
544 extern void CommandAnnotateResign(char *);
545 extern void CommandAnnotateUnlucky(char *);
546 extern void CommandAnnotateVeryBad(char *);
547 extern void CommandAnnotateVeryLucky(char *);
548 extern void CommandAnnotateVeryUnlucky(char *);
549 extern void CommandCalibrate(char *);
550 extern void CommandClearCache(char *);
551 extern void CommandClearHint(char *);
552 extern void CommandClearTurn(char *);
553 extern void CommandCMarkCubeSetNone(char *);
554 extern void CommandCMarkCubeSetRollout(char *);
555 extern void CommandCMarkCubeShow(char *);
556 extern void CommandCMarkGameClear(char *);
557 extern void CommandCMarkGameShow(char *);
558 extern void CommandCMarkMatchClear(char *);
559 extern void CommandCMarkMatchShow(char *);
560 extern void CommandCMarkMoveClear(char *);
561 extern void CommandCMarkMoveSetNone(char *);
562 extern void CommandCMarkMoveSetRollout(char *);
563 extern void CommandCMarkMoveShow(char *);
564 extern void CommandCopy(char *);
565 extern void CommandDecline(char *);
566 extern void CommandDiceRolls(char *);
567 extern void CommandDouble(char *);
568 extern void CommandDrop(char *);
569 extern void CommandEndGame(char *);
570 extern void CommandEq2MWC(char *);
571 extern void CommandEval(char *);
572 extern void CommandExportGameGam(char *);
573 extern void CommandExportGameSnowieTxt(char *);
574 extern void CommandExportGameHtml(char *);
575 extern void CommandExportGameLaTeX(char *);
576 extern void CommandExportGamePDF(char *);
577 extern void CommandExportGamePS(char *);
578 extern void CommandExportGameText(char *);
579 extern void CommandExportHTMLImages(char *);
580 extern void CommandExportMatchHtml(char *);
581 extern void CommandExportMatchLaTeX(char *);
582 extern void CommandExportMatchMat(char *);
583 extern void CommandExportMatchSnowieTxt(char *);
584 extern void CommandExportMatchPDF(char *);
585 extern void CommandExportMatchPS(char *);
586 extern void CommandExportMatchText(char *);
587 extern void CommandExportPositionGammOnLine(char *);
588 extern void CommandExportPositionGOL2Clipboard(char *);
589 extern void CommandExportPositionHtml(char *);
590 extern void CommandExportPositionJF(char *);
591 extern void CommandExportPositionPDF(char *);
592 extern void CommandExportPositionPNG(char *);
593 extern void CommandExportPositionPS(char *);
594 extern void CommandExportPositionSnowieTxt(char *);
595 extern void CommandExportPositionSVG(char *);
596 extern void CommandExportPositionText(char *);
597 extern void CommandExternal(char *);
598 extern void CommandFirstGame(char *);
599 extern void CommandFirstMove(char *);
600 extern void CommandHelp(char *);
601 extern void CommandHint(char *);
602 extern void CommandHistory(char *);
603 extern void CommandImportAuto(char *);
604 extern void CommandImportBGRoom(char *);
605 extern void CommandImportEmpire(char *);
606 extern void CommandImportJF(char *);
607 extern void CommandImportMat(char *);
608 extern void CommandImportOldmoves(char *);
609 extern void CommandImportParty(char *);
610 extern void CommandImportSGG(char *);
611 extern void CommandImportSnowieTxt(char *);
612 extern void CommandImportTMG(char *);
613 extern void CommandListGame(char *);
614 extern void CommandListMatch(char *);
615 extern void CommandLoadCommands(char *);
616 extern void CommandLoadGame(char *);
617 extern void CommandLoadMatch(char *);
618 extern void CommandLoadPosition(char *);
619 extern void CommandLoadPython(char *);
620 extern void CommandMove(char *);
621 extern void CommandMWC2Eq(char *);
622 extern void CommandNewGame(char *);
623 extern void CommandNewMatch(char *);
624 extern void CommandNewSession(char *);
625 extern void CommandNext(char *);
626 extern void CommandNotImplemented(char *);
627 extern void CommandPlay(char *);
628 extern void CommandPrevious(char *);
629 extern void CommandQuit(char *);
630 extern void CommandRedouble(char *);
631 extern void CommandReject(char *);
632 extern void CommandRelationalAddMatch(char *);
633 extern void CommandRelationalEraseAll(char *);
634 extern void CommandRelationalErase(char *);
635 extern void CommandRelationalSelect(char *);
636 extern void CommandRelationalSetup(char *);
637 extern void CommandRelationalShowDetails(char *);
638 extern void CommandRelationalShowPlayers(char *);
639 extern void CommandRelationalTest(char *);
640 extern void CommandResign(char *);
641 extern void CommandRoll(char *);
642 extern void CommandRollout(char *);
643 extern void CommandSaveGame(char *);
644 extern void CommandSaveMatch(char *);
645 extern void CommandSavePosition(char *);
646 extern void CommandSaveSettings(char *);
647 extern void CommandSetAnalysisChequerplay(char *);
648 extern void CommandSetAnalysisCube(char *);
649 extern void CommandSetAnalysisCubedecision(char *);
650 extern void CommandSetAnalysisLimit(char *);
651 extern void CommandSetAnalysisLuckAnalysis(char *);
652 extern void CommandSetAnalysisLuck(char *);
653 extern void CommandSetAnalysisMoveFilter(char *);
654 extern void CommandSetAnalysisMoves(char *);
655 extern void CommandSetAnalysisPlayerAnalyse(char *);
656 extern void CommandSetAnalysisPlayer(char *);
657 extern void CommandSetAnalysisThresholdBad(char *);
658 extern void CommandSetAnalysisThresholdDoubtful(char *);
659 extern void CommandSetAnalysisThresholdLucky(char *);
660 extern void CommandSetAnalysisThresholdUnlucky(char *);
661 extern void CommandSetAnalysisThresholdVeryBad(char *);
662 extern void CommandSetAnalysisThresholdVeryLucky(char *);
663 extern void CommandSetAnalysisThresholdVeryUnlucky(char *);
664 extern void CommandSetAnalysisWindows(char *);
665 extern void CommandSetAnnotation(char *);
666 extern void CommandSetAppearance(char *);
667 extern void CommandSetAutoBearoff(char *);
668 extern void CommandSetAutoCrawford(char *);
669 extern void CommandSetAutoDoubles(char *);
670 extern void CommandSetAutoGame(char *);
671 extern void CommandSetAutoMove(char *);
672 extern void CommandSetAutoRoll(char *);
673 extern void CommandSetAutoSaveAnalysis(char *sz);
674 extern void CommandSetAutoSaveConfirmDelete(char *sz);
675 extern void CommandSetAutoSaveRollout(char *sz);
676 extern void CommandSetAutoSaveTime(char *sz);
677 extern void CommandSetBeavers(char *);
678 extern void CommandSetBoard(char *);
679 extern void CommandSetBrowser(char *);
680 extern void CommandSetCache(char *);
681 extern void CommandSetCalibration(char *);
682 extern void CommandSetCheatEnable(char *);
683 extern void CommandSetCheatPlayer(char *);
684 extern void CommandSetCheatPlayerRoll(char *);
685 extern void CommandSetClockwise(char *);
686 extern void CommandSetCommandWindow(char *);
687 extern void CommandSetConfirmDefault(char *);
688 extern void CommandSetConfirmNew(char *);
689 extern void CommandSetConfirmSave(char *);
690 extern void CommandSetCrawford(char *);
691 extern void CommandSetCubeCentre(char *);
692 extern void CommandSetCubeEfficiencyContact(char *);
693 extern void CommandSetCubeEfficiencyCrashed(char *);
694 extern void CommandSetCubeEfficiencyOS(char *);
695 extern void CommandSetCubeEfficiencyRaceCoefficient(char *);
696 extern void CommandSetCubeEfficiencyRaceFactor(char *);
697 extern void CommandSetCubeEfficiencyRaceMax(char *);
698 extern void CommandSetCubeEfficiencyRaceMin(char *);
699 extern void CommandSetCubeOwner(char *);
700 extern void CommandSetCubeUse(char *);
701 extern void CommandSetCubeValue(char *);
702 extern void CommandSetDelay(char *);
703 extern void CommandSetDice(char *);
704 extern void CommandSetDisplay(char *);
705 extern void CommandSetDockPanels(char *);
706 extern void CommandSetEvalChequerplay(char *);
707 extern void CommandSetEvalCubedecision(char *);
708 extern void CommandSetEvalCubeful(char *);
709 extern void CommandSetEvalDeterministic(char *);
710 extern void CommandSetEvalMoveFilter(char *);
711 extern void CommandSetEvalNoise(char *);
712 extern void CommandSetEvalParamEvaluation(char *);
713 extern void CommandSetEvalParamRollout(char *);
714 extern void CommandSetEvalParamType(char *);
715 extern void CommandSetEvalPlies(char *);
716 extern void CommandSetEvalPrune(char *);
717 extern void CommandSetEvalSameAsAnalysis(char *);
718 extern void CommandSetExportCubeDisplayActual(char *);
719 extern void CommandSetExportCubeDisplayBad(char *);
720 extern void CommandSetExportCubeDisplayClose(char *);
721 extern void CommandSetExportCubeDisplayDoubtful(char *);
722 extern void CommandSetExportCubeDisplayMissed(char *);
723 extern void CommandSetExportCubeDisplayUnmarked(char *);
724 extern void CommandSetExportCubeDisplayVeryBad(char *);
725 extern void CommandSetExportCubeParameters(char *);
726 extern void CommandSetExportCubeProb(char *);
727 extern void CommandSetExportFolder(char *);
728 extern void CommandSetExportHTMLCSSExternal(char *);
729 extern void CommandSetExportHTMLCSSHead(char *);
730 extern void CommandSetExportHTMLCSSInline(char *);
731 extern void CommandSetExportHTMLPictureURL(char *);
732 extern void CommandSetExportHtmlSize(char *);
733 extern void CommandSetExportHTMLTypeBBS(char *);
734 extern void CommandSetExportHTMLTypeFibs2html(char *);
735 extern void CommandSetExportHTMLTypeGNU(char *);
736 extern void CommandSetExportIncludeAnalysis(char *);
737 extern void CommandSetExportIncludeAnnotations(char *);
738 extern void CommandSetExportIncludeMatchInfo(char *);
739 extern void CommandSetExportIncludeStatistics(char *);
740 extern void CommandSetExportMovesDisplayBad(char *);
741 extern void CommandSetExportMovesDisplayDoubtful(char *);
742 extern void CommandSetExportMovesDisplayUnmarked(char *);
743 extern void CommandSetExportMovesDisplayVeryBad(char *);
744 extern void CommandSetExportMovesNumber(char *);
745 extern void CommandSetExportMovesParameters(char *);
746 extern void CommandSetExportMovesProb(char *);
747 extern void CommandSetExportParametersEvaluation(char *);
748 extern void CommandSetExportParametersRollout(char *);
749 extern void CommandSetExportPNGSize(char *);
750 extern void CommandSetExportShowBoard(char *);
751 extern void CommandSetExportShowPlayer(char *);
752 extern void CommandSetFullScreen(char *);
753 extern void CommandSetGameList(char *);
754 extern void CommandSetGeometryAnalysis(char *);
755 extern void CommandSetGeometryCommand(char *);
756 extern void CommandSetGeometryGame(char *);
757 extern void CommandSetGeometryHeight(char *);
758 extern void CommandSetGeometryHint(char *);
759 extern void CommandSetGeometryMain(char *);
760 extern void CommandSetGeometryMax(char *);
761 extern void CommandSetGeometryMessage(char *);
762 extern void CommandSetGeometryPosX(char *);
763 extern void CommandSetGeometryPosY(char *);
764 extern void CommandSetGeometryTheory(char *);
765 extern void CommandSetGeometryWidth(char *);
766 extern void CommandSetGNUBgID(char *);
767 extern void CommandSetXGID(char *);
768 extern void CommandSetGotoFirstGame(char *);
769 extern void CommandSetGUIAnimationBlink(char *);
770 extern void CommandSetGUIAnimationNone(char *);
771 extern void CommandSetGUIAnimationSlide(char *);
772 extern void CommandSetGUIAnimationSpeed(char *);
773 extern void CommandSetGUIBeep(char *);
774 extern void CommandSetGUIDiceArea(char *);
775 extern void CommandSetGUIDragTargetHelp(char *);
776 extern void CommandSetGUIGrayEdit(char *);
777 extern void CommandSetGUIHighDieFirst(char *);
778 extern void CommandSetGUIIllegal(char *);
779 extern void CommandSetGUIMoveListDetail(char *);
780 extern void CommandSetGUIShowIDs(char *);
781 extern void CommandSetGUIShowPipsEPC(char *);
782 extern void CommandSetGUIShowPipsNone(char *);
783 extern void CommandSetGUIShowPipsPips(char *);
784 extern void CommandSetGUIShowPipsWastage(char *);
785 extern void CommandSetGUIUseStatsPanel(char *);
786 extern void CommandSetGUIWindowPositions(char *);
787 extern void CommandSetImportFolder(char *);
788 extern void CommandSetInvertMatchEquityTable(char *);
789 extern void CommandSetJacoby(char *);
790 extern void CommandSetLang(char *);
791 extern void CommandSetMatchAnnotator(char *);
792 extern void CommandSetMatchComment(char *);
793 extern void CommandSetMatchDate(char *);
794 extern void CommandSetMatchEvent(char *);
795 extern void CommandSetMatchID(char *);
796 extern void CommandSetMatchLength(char *);
797 extern void CommandSetMatchPlace(char *);
798 extern void CommandSetMatchRating(char *);
799 extern void CommandSetMatchRound(char *);
800 extern void CommandSetMessage(char *);
801 extern void CommandSetMET(char *);
802 extern void CommandSetOutputDigits(char *);
803 extern void CommandSetOutputErrorRateFactor(char *);
804 extern void CommandSetOutputMatchPC(char *);
805 extern void CommandSetOutputMWC(char *);
806 extern void CommandSetOutputOutput(char *sz);
807 extern void CommandSetOutputRawboard(char *);
808 extern void CommandSetOutputWinPC(char *);
809 extern void CommandSetPanels(char *);
810 extern void CommandSetPanelWidth(char *);
811 extern void CommandSetPlayer(char *);
812 extern void CommandSetPlayerChequerplay(char *);
813 extern void CommandSetPlayerCubedecision(char *);
814 extern void CommandSetPlayerExternal(char *);
815 extern void CommandSetPlayerGNU(char *);
816 extern void CommandSetPlayerHuman(char *);
817 extern void CommandSetPlayerMoveFilter(char *);
818 extern void CommandSetPlayerName(char *);
819 extern void CommandSetPostCrawford(char *);
820 extern void CommandSetPriorityAboveNormal(char *);
821 extern void CommandSetPriorityBelowNormal(char *);
822 extern void CommandSetPriorityHighest(char *);
823 extern void CommandSetPriorityIdle(char *);
824 extern void CommandSetPriorityNice(char *);
825 extern void CommandSetPriorityNormal(char *);
826 extern void CommandSetPriorityTimeCritical(char *);
827 extern void CommandSetPrompt(char *);
828 extern void CommandSetRatingOffset(char *);
829 extern void CommandSetRecord(char *);
830 extern void CommandSetRNGBBS(char *);
831 extern void CommandSetRNG(char *);
832 extern void CommandSetRNGFile(char *);
833 extern void CommandSetRNGIsaac(char *);
834 extern void CommandSetRNGManual(char *);
835 extern void CommandSetRNGMD5(char *);
836 extern void CommandSetRNGMersenne(char *);
837 extern void CommandSetRNGRandomDotOrg(char *);
838 extern void CommandSetRolloutBearoffTruncationExact(char *);
839 extern void CommandSetRolloutBearoffTruncationOS(char *);
840 extern void CommandSetRollout(char *);
841 extern void CommandSetRolloutChequerplay(char *);
842 extern void CommandSetRolloutCubedecision(char *);
843 extern void CommandSetRolloutCubeEqualChequer(char *);
844 extern void CommandSetRolloutCubeful(char *);
845 extern void CommandSetRolloutInitial(char *);
846 extern void CommandSetRolloutJsd(char *);
847 extern void CommandSetRolloutJsdEnable(char *);
848 extern void CommandSetRolloutJsdLimit(char *);
849 extern void CommandSetRolloutJsdMinGames(char *);
850 extern void CommandSetRolloutLate(char *);
851 extern void CommandSetRolloutLateChequerplay(char *);
852 extern void CommandSetRolloutLateCubedecision(char *);
853 extern void CommandSetRolloutLateEnable(char *);
854 extern void CommandSetRolloutLateMoveFilter(char *);
855 extern void CommandSetRolloutLatePlayer(char *);
856 extern void CommandSetRolloutLatePlies(char *);
857 extern void CommandSetRolloutLimit(char *);
858 extern void CommandSetRolloutLimitEnable(char *);
859 extern void CommandSetRolloutLimitMinGames(char *);
860 extern void CommandSetRolloutLogEnable(char *);
861 extern void CommandSetRolloutLogFile(char *);
862 extern void CommandSetRolloutMaxError(char *);
863 extern void CommandSetRolloutMoveFilter(char *);
864 extern void CommandSetRolloutPlayer(char *);
865 extern void CommandSetRolloutPlayerChequerplay(char *);
866 extern void CommandSetRolloutPlayerCubedecision(char *);
867 extern void CommandSetRolloutPlayerLateChequerplay(char *);
868 extern void CommandSetRolloutPlayerLateCubedecision(char *);
869 extern void CommandSetRolloutPlayerLateMoveFilter(char *);
870 extern void CommandSetRolloutPlayerMoveFilter(char *);
871 extern void CommandSetRolloutPlayersAreSame(char *);
872 extern void CommandSetRolloutRNG(char *);
873 extern void CommandSetRolloutRotate(char *);
874 extern void CommandSetRolloutSeed(char *);
875 extern void CommandSetRolloutTrials(char *);
876 extern void CommandSetRolloutTruncation(char *);
877 extern void CommandSetRolloutTruncationChequer(char *);
878 extern void CommandSetRolloutTruncationCube(char *);
879 extern void CommandSetRolloutTruncationEnable(char *);
880 extern void CommandSetRolloutTruncationEqualPlayer0(char *);
881 extern void CommandSetRolloutTruncationPlies(char *);
882 extern void CommandSetRolloutVarRedn(char *);
883 extern void CommandSetScore(char *);
884 extern void CommandSetSeed(char *);
885 extern void CommandSetSGFFolder(char *);
886 extern void CommandSetSoundEnable(char *);
887 extern void CommandSetSoundSoundAgree(char *);
888 extern void CommandSetSoundSoundAnalysisFinished(char *);
889 extern void CommandSetSoundSoundBotDance(char *);
890 extern void CommandSetSoundSoundBotWinGame(char *);
891 extern void CommandSetSoundSoundBotWinMatch(char *);
892 extern void CommandSetSoundSoundChequer(char *);
893 extern void CommandSetSoundSoundDouble(char *);
894 extern void CommandSetSoundSoundDrop(char *);
895 extern void CommandSetSoundSoundExit(char *);
896 extern void CommandSetSoundSoundHumanDance(char *);
897 extern void CommandSetSoundSoundHumanWinGame(char *);
898 extern void CommandSetSoundSoundHumanWinMatch(char *);
899 extern void CommandSetSoundSoundMove(char *);
900 extern void CommandSetSoundSoundRedouble(char *);
901 extern void CommandSetSoundSoundResign(char *);
902 extern void CommandSetSoundSoundRoll(char *);
903 extern void CommandSetSoundSoundStart(char *);
904 extern void CommandSetSoundSoundTake(char *);
905 extern void CommandSetSoundSystemCommand(char *);
906 extern void CommandSetStyledGameList(char *);
907 extern void CommandSetTheoryWindow(char *);
908 extern void CommandSetThreads(char *);
909 extern void CommandSetToolbar(char *);
910 extern void CommandSetTurn(char *);
911 extern void CommandSetTutorChequer(char *);
912 extern void CommandSetTutorCube(char *);
913 extern void CommandSetTutorMode(char *);
914 extern void CommandSetTutorSkillBad(char *);
915 extern void CommandSetTutorSkillDoubtful(char *);
916 extern void CommandSetTutorSkillVeryBad(char *);
917 extern void CommandSetVariation1ChequerHypergammon(char *);
918 extern void CommandSetVariation2ChequerHypergammon(char *);
919 extern void CommandSetVariation3ChequerHypergammon(char *);
920 extern void CommandSetVariationNackgammon(char *);
921 extern void CommandSetVariationStandard(char *);
922 extern void CommandSetVsync3d(char *);
923 extern void CommandSetWarning(char *);
924 extern void CommandShow8912(char *);
925 extern void CommandShowAliases(char *);
926 extern void CommandShowAnalysis(char *);
927 extern void CommandShowAutoSave(char *);
928 extern void CommandShowAutomatic(char *);
929 extern void CommandShowBearoff(char *);
930 extern void CommandShowBeavers(char *);
931 extern void CommandShowBoard(char *);
932 extern void CommandShowBrowser(char *);
933 extern void CommandShowBuildInfo(char *);
934 extern void CommandShowCache(char *);
935 extern void CommandShowCalibration(char *);
936 extern void CommandShowCheat(char *);
937 extern void CommandShowClockwise(char *);
938 extern void CommandShowCommands(char *);
939 extern void CommandShowConfirm(char *);
940 extern void CommandShowCopying(char *);
941 extern void CommandShowCrawford(char *);
942 extern void CommandShowCredits(char *);
943 extern void CommandShowCube(char *);
944 extern void CommandShowCubeEfficiency(char *);
945 extern void CommandShowDelay(char *);
946 extern void CommandShowDice(char *);
947 extern void CommandShowDisplay(char *);
948 extern void CommandShowEngine(char *);
949 extern void CommandShowEvaluation(char *);
950 extern void CommandShowExport(char *);
951 extern void CommandShowFullBoard(char *);
952 extern void CommandShowGammonValues(char *);
953 extern void CommandShowGeometry(char *);
954 extern void CommandShowJacoby(char *);
955 extern void CommandShowKeith(char *);
956 extern void CommandShowKleinman(char *);
957 extern void CommandShowIsight(char *);
958 extern void CommandShowLang(char *);
959 extern void CommandShowManualAbout(char *);
960 extern void CommandShowManualWeb(char *);
961 extern void CommandShowMarketWindow(char *);
962 extern void CommandShowMatchEquityTable(char *);
963 extern void CommandShowMatchInfo(char *);
964 extern void CommandShowMatchLength(char *);
965 extern void CommandShowMatchResult(char *);
966 extern void CommandShowOneSidedRollout(char *);
967 extern void CommandShowOutput(char *);
968 extern void CommandShowPanels(char *);
969 extern void CommandShowPipCount(char *);
970 extern void CommandShowPlayer(char *);
971 extern void CommandShowPostCrawford(char *);
972 extern void CommandShowPrompt(char *);
973 extern void CommandShowRatingOffset(char *);
974 extern void CommandShowRNG(char *);
975 extern void CommandShowRollout(char *);
976 extern void CommandShowRolls(char *);
977 extern void CommandShowScore(char *);
978 extern void CommandShowScoreSheet(char *);
979 extern void CommandShowSeed(char *);
980 extern void CommandShowSound(char *);
981 extern void CommandShowStatisticsGame(char *);
982 extern void CommandShowStatisticsMatch(char *);
983 extern void CommandShowStatisticsSession(char *);
984 extern void CommandShowTemperatureMap(char *);
985 extern void CommandShowThorp(char *);
986 extern void CommandShowThreads(char *);
987 extern void CommandShowTurn(char *);
988 extern void CommandShowTutor(char *);
989 extern void CommandShowVariation(char *);
990 extern void CommandShowVersion(char *);
991 extern void CommandShowWarning(char *);
992 extern void CommandShowWarranty(char *);
993 extern void CommandSwapPlayers(char *);
994 extern void CommandTake(char *);
995 extern void CommandSetDefaultNames(char *sz);
996 extern void CommandSetAliases(char *sz);
997 extern void hint_move(char *sz, gboolean show, procrecorddata * procdatarec);
998 extern void hint_double(int show, int did_double);
999 extern void hint_take(int show, int did_take);
1000 extern void find_skills(moverecord * pmr, const matchstate * pms, int did_double, int did_take);
1001 extern int getGameNumber(const listOLD * plGame);
1002 extern int getMoveNumber(const listOLD * plGame, const void *p);
1003 extern int CheckGameExists(void);
1004 extern void pmr_cubedata_set(moverecord * pmr, evalsetup * pes, float output[2][NUM_ROLLOUT_OUTPUTS],
1005                              float stddev[2][NUM_ROLLOUT_OUTPUTS]);
1006 extern void pmr_movelist_set(moverecord * pmr, evalsetup * pes, movelist * pml);
1007 extern listOLD *game_add_pmr_hint(listOLD * plGame);
1008 extern void game_remove_pmr_hint(listOLD * pl_hint);
1009 extern gboolean game_is_last(listOLD * plGame);
1010 extern void pmr_hint_destroy(void);
1011 extern void StopAutomaticPlay(void);
1012 extern gboolean save_autosave(gpointer unused);
1013 extern void delete_autosave(void);
1014 extern int get_input_discard(void);
1015 extern void SaveGame(FILE * pf, listOLD * plGame);
1016 
1017 extern int fMatchCancelled;
1018 extern int fJustSwappedPlayers;
1019 
1020 extern void ProcessEvents(void);
1021 #if !defined(USE_MULTITHREAD)
1022 extern void CallbackProgress(void);
1023 #endif
1024 extern void SetRNG(rng * prng, rngcontext * rngctx, rng rngNew, char *szSeed);
1025 extern int check_resigns(cubeinfo * pci);
1026 extern int quick_roll(void);
1027 extern int board_in_list(const movelist * pml, const TanBoard old_board, const TanBoard board, int *an);
1028 extern int GetManualDice(unsigned int anDice[2]);
1029 
1030 #endif	/* BACKGAMMON_H */
1031