X-Git-Url: http://winboard.nl/cgi-bin?p=xboard.git;a=blobdiff_plain;f=backend.h;h=fae2ee6377614b0ee1c19a5fb883747fc9da091c;hp=32e15ddc3a080ee5d575e86dccf1baffbef36f65;hb=HEAD;hpb=d39b0224115daf24fa2608e27d0ca16c8cd4aa70 diff --git a/backend.h b/backend.h index 32e15dd..fae2ee6 100644 --- a/backend.h +++ b/backend.h @@ -5,7 +5,8 @@ * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, - * 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free + * Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * @@ -51,52 +52,14 @@ *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ -#ifndef _BACKEND -#define _BACKEND - -/* unsigned int 64 for engine nodes work and display */ -#ifdef WIN32 - /* I don't know the name for this type of other compiler - * If it not work, just modify here - * This is for MS Visual Studio - */ - #ifdef _MSC_VER - #define u64 unsigned __int64 - #define s64 signed __int64 - #define u64Display "%I64u" - #define s64Display "%I64d" - #define u64Const(c) (c ## UI64) - #define s64Const(c) (c ## I64) - #else - /* place holder - * or dummy types for other compiler - * [HGM] seems that -mno-cygwin comple needs %I64? - */ - #define u64 unsigned long long - #define s64 signed long long - #ifdef USE_I64 - #define u64Display "%I64u" - #define s64Display "%I64d" - #else - #define u64Display "%llu" - #define s64Display "%lld" - #endif - #define u64Const(c) (c ## ULL) - #define s64Const(c) (c ## LL) - #endif -#else - /* GNU gcc */ - #define u64 unsigned long long - #define s64 signed long long - #define u64Display "%llu" - #define s64Display "%lld" - #define u64Const(c) (c ## ull) - #define s64Const(c) (c ## ll) -#endif +#ifndef XB_BACKEND +#define XB_BACKEND #include "lists.h" -#include "frontend.h" +typedef int (*FileProc) P((FILE *f, int n, char *title)); + +extern char *wbOptions; extern int gotPremove; extern GameMode gameMode; extern int matchMode; @@ -107,13 +70,22 @@ extern int currentMove, backwardMostMove, forwardMostMove; extern int blackPlaysFirst; extern FILE *debugFP; extern char* programVersion; -extern ProcRef firstProgramPR, secondProgramPR; extern Board boards[]; extern char marker[BOARD_RANKS][BOARD_FILES]; +extern char lastMsg[MSG_SIZ]; +extern Boolean bookUp; +extern Boolean addToBookFlag; +extern int tinyLayout, smallLayout; +extern Boolean mcMode; +extern int dragging; +extern char variantError[]; +extern char lastTalker[]; +extern int transparency[]; +void MarkMenuItem P((char *menuRef, int state)); char *CmailMsg P((void)); /* Tord: Added the useFEN960 parameter in PositionToFEN() below */ -char *PositionToFEN P((int move, char* useFEN960)); +char *PositionToFEN P((int move, char* useFEN960, int moveCounts)); void AlphaRank P((char *s, int n)); /* [HGM] Shogi move preprocessor */ void EditPositionPasteFEN P((char *fen)); void TimeDelay P((long ms)); @@ -124,18 +96,19 @@ void SetBlackToPlayEvent P((void)); void UploadGameEvent P((void)); void InitBackEnd1 P((void)); void InitBackEnd2 P((void)); -int HasPromotionChoice P((int fromX, int fromY, int toX, int toY, char *choice)); +int HasPromotionChoice P((int fromX, int fromY, int toX, int toY, char *choice, int sweep)); int InPalace P((int row, int column)); int PieceForSquare P((int x, int y)); int OKToStartUserMove P((int x, int y)); void Reset P((int redraw, int init)); void ResetGameEvent P((void)); -Boolean HasPattern P(( const char * text, const char * pattern )); -Boolean SearchPattern P(( const char * text, const char * pattern )); +Boolean HasPattern P(( const char * text, const char * pattern )); +Boolean SearchPattern P(( const char * text, const char * pattern )); int LoadGame P((FILE *f, int n, char *title, int useList)); int LoadGameFromFile P((char *filename, int n, char *title, int useList)); int CmailLoadGame P((FILE *f, int n, char *title, int useList)); int ReloadGame P((int offset)); +int SaveSelected P((FILE *f, int dummy, char *dummy2)); int SaveGame P((FILE *f, int dummy, char *dummy2)); int SaveGameToFile P((char *filename, int append)); int LoadPosition P((FILE *f, int n, char *title)); @@ -203,14 +176,14 @@ void MailMoveEvent P((void)); void EditTagsEvent P((void)); void GetMoveListEvent P((void)); void ExitAnalyzeMode P((void)); -void AnalyzeModeEvent P((void)); +int AnalyzeModeEvent P((void)); void AnalyzeFileEvent P((void)); void MatchEvent P((int mode)); +void RecentEngineEvent P((int nr)); void TypeInEvent P((char first)); void TypeInDoneEvent P((char *move)); void InitPosition P((int redraw)); void NewSettingEvent P((int option, int *feature, char *command, int value)); -int WaitForSecond P((DelayedEventCallback x)); void SettingsMenuIfReady P((void)); void DoEcho P((void)); void DontEcho P((void)); @@ -228,10 +201,26 @@ void OutputChatMessage P((int partner, char *mess)); void EditPositionDone P((Boolean fakeRights)); Boolean GetArgValue P((char *name)); Boolean LoadPV P((int x, int y)); -Boolean LoadMultiPV P((int x, int y, char *buf, int index, int *start, int *end)); +Boolean LoadMultiPV P((int x, int y, char *buf, int index, int *start, int *end, int pane)); void UnLoadPV P(()); void MovePV P((int x, int y, int h)); int PromoScroll P((int x, int y)); +void EditBookEvent P((void)); +Boolean DisplayBook P((int moveNr)); +void SaveToBook P((char *text)); +void AddBookMove P((char *text)); +void PlayBookMove P((char *text, int index)); +void HoverEvent P((int hiX, int hiY, int x, int y)); +int PackGame P((Board board)); +Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)); +void ApplyMove P((int fromX, int fromY, int toX, int toY, int promoChar, Board board)); +void PackMove P((int fromX, int fromY, int toX, int toY, ChessSquare promoPiece)); +void ics_printf P((char *format, ...)); +int GetEngineLine P((char *nick, int engine)); +void AddGameToBook P((int always)); +void FlushBook P((void)); +char PieceToChar P((ChessSquare p)); +int LoadPieceDesc P((char *s)); char *StrStr P((char *string, char *match)); char *StrCaseStr P((char *string, char *match)); @@ -252,13 +241,8 @@ int ToUpper P((int c)); extern GameInfo gameInfo; /* ICS vars used with backend.c and zippy.c */ -#define ICS_GENERIC 0 -#define ICS_ICC 1 -#define ICS_FICS 2 -#define ICS_CHESSNET 3 /* not really supported */ -int ics_type; - - +enum ICS_TYPE { ICS_GENERIC, ICS_ICC, ICS_FICS, ICS_CHESSNET /* not really supported */ }; +enum ICS_TYPE ics_type; /* pgntags.c prototypes */ @@ -272,22 +256,36 @@ char *PGNResult P((ChessMove result)); */ /* A game node in the double linked list of games. */ -typedef struct _ListGame { +typedef struct XB_ListGame { ListNode node; int number; + int position; + int moves; unsigned long offset; /* Byte offset of game within file. */ GameInfo gameInfo; /* Note that some entries may be NULL. */ } ListGame; - + +extern int border; +extern int doubleClick; +extern int storedGames; +extern int opponentKibitzes; extern ChessSquare gatingPiece; extern List gameList; +extern int lastLoadGameNumber; void ClearGameInfo P((GameInfo *)); int GameListBuild P((FILE *)); void GameListInitGameInfo P((GameInfo *)); char *GameListLine P((int, GameInfo *)); char * GameListLineFull P(( int, GameInfo *)); +void InitSearch P((void)); +int GameContainsPosition P((FILE *f, ListGame *lg)); void GLT_TagsToList P(( char * tags )); void GLT_ParseList P((void)); +int NamesToList P((char *name, char **engines, char **mnemonics, char *group)); +int CreateTourney P((char *name)); +char *MakeName P((char *templ)); +void SwapEngines P((int n)); +void Substitute P((char *participants, int expunge)); extern char* StripHighlight P((char *)); /* returns static data */ extern char* StripHighlightAndTitle P((char *)); /* returns static data */ @@ -296,22 +294,24 @@ extern Boolean set_cont_sequence P((char *new_seq)); extern int wrap P((char *dest, char *src, int count, int width, int *lp)); int Explode P((Board board, int fromX, int fromY, int toX, int toY)); -typedef enum { CheckBox, ComboBox, TextBox, Button, Spin, ResetButton, SaveButton, - FileName, PathName, Slider, Message, Fractional, Label, Break, EndMark } Control; +typedef enum { CheckBox, ComboBox, TextBox, Button, Spin, ResetButton, SaveButton, ListBox, Graph, PopUp, + FileName, PathName, Slider, Message, Fractional, Label, Icon, + BoxBegin, BoxEnd, BarBegin, BarEnd, DropDown, Break, EndMark, Skip } Control; -typedef struct _OPT { // [HGM] options: descriptor of UCI-style option +typedef struct XB_OPT { // [HGM] options: descriptor of UCI-style option int value; // current setting, starts as default - int min; + int min; // Also used for flags int max; void *handle; // for use by front end void *target; // for use by front end char *textValue; // points to beginning of text value in name field char **choice; // points to array of combo choices in cps->combo Control type; - char name[MSG_SIZ]; // holds both option name and text value + char *name; // holds both option name and text value (in allocated memory) + char **font; } Option; -typedef struct _CPS { +typedef struct XB_CPS { char *which; int maybeThinking; ProcRef pr; @@ -320,7 +320,7 @@ typedef struct _CPS { char *program; char *host; char *dir; - struct _CPS *other; + struct XB_CPS *other; char *initString; char *computerString; int sendTime; /* 0=don't, 1=do, 2=test */ @@ -330,6 +330,7 @@ typedef struct _CPS { int offeredDraw; /* countdown */ int reuse; int useSetboard; /* 0=use "edit"; 1=use "setboard" */ + int extendedEdit;/* 1=also set holdings with "edit" */ int useSAN; /* 0=use coordinate notation; 1=use SAN */ int usePing; /* 0=not OK to use ping; 1=OK */ int lastPing; @@ -341,13 +342,15 @@ typedef struct _CPS { int sendName; /* 0=don't use "name" command; 1=do */ int sdKludge; /* 0=use "sd DEPTH" command; 1=use "depth\nDEPTH" */ int stKludge; /* 0=use "st TIME" command; 1=use "level 1 TIME" */ - char tidy[MSG_SIZ]; + int excludeMoves;/* 0=don't use "exclude" command; 1=do */ + char *tidy; int matchWins; - char variants[MSG_SIZ]; + char *variants; int analysisSupport; int analyzing; int protocolVersion; int initDone; + int pseudo; /* Added by Tord: */ int useFEN960; /* 0=use "KQkq" style FENs, 1=use "HAha" style FENs */ @@ -363,13 +366,16 @@ typedef struct _CPS { int debug; /* [HGM] ignore engine debug lines starting with '#' */ int maxNrOfSessions; /* [HGM] secondary TC: max args in 'level' command */ int accumulateTC; /* [HGM] secondary TC: how to handle extra sessions */ + int drawDepth; /* [HGM] egbb: search depth to play egbb draws */ int nps; /* [HGM] nps: factor for node count to replace time */ int supportsNPS; int alphaRank; /* [HGM] shogi: engine uses shogi-type coordinates */ int maxCores; /* [HGM] SMP: engine understands cores command */ int memSize; /* [HGM] memsize: engine understands memory command */ - char egtFormats[MSG_SIZ]; /* [HGM] EGT: supported tablebase formats */ + char *egtFormats; /* [HGM] EGT: supported tablebase formats */ int bookSuspend; /* [HGM] book: go was deferred because of book hit */ + int pause; /* [HGM] pause: 1=supports it, 2=actually paused */ + int highlight; /* [HGM] engine wants to get lift and put commands */ int nrOptions; /* [HGM] options: remembered option="..." features */ #define MAX_OPTIONS 200 Option option[MAX_OPTIONS]; @@ -378,7 +384,8 @@ typedef struct _CPS { char *optionSettings; void *programLogo; /* [HGM] logo: bitmap of the logo */ char *fenOverride; /* [HGM} FRC: force FEN casling & ep fields by hand */ - char userError; /* [HGM] crash: flag to suppress fatal-error messages*/ + char userError; /* [HGM] crash: flag to suppress fatal-error messages*/ + char reload; /* [HGM] options: flag to resend options with xreuse */ } ChessProgramState; extern ChessProgramState first, second; @@ -401,10 +408,40 @@ typedef struct { } ChessProgramStats; extern ChessProgramStats_Move pvInfoList[MAX_MOVES]; -extern int shuffleOpenings; +extern Boolean shuffleOpenings; extern ChessProgramStats programStats; extern int opponentKibitzes; // used by wengineo.c -extern int errorExitStatus; +extern int errorExitStatus; +extern char *recentEngines; +extern char *comboLine; +extern Boolean partnerUp, twoBoards; +extern char engineVariant[]; +char *EngineDefinedVariant P((ChessProgramState *cps, int n)); void SettingsPopUp P((ChessProgramState *cps)); // [HGM] really in front-end, but CPS not known in frontend.h +int WaitForEngine P((ChessProgramState *cps, DelayedEventCallback x)); +void Load P((ChessProgramState *cps, int n)); +int MultiPV P((ChessProgramState *cps, int kind)); +void MoveHistorySet P(( char movelist[][2*MOVE_LEN], int first, int last, int current, ChessProgramStats_Move * pvInfo )); +void MakeEngineOutputTitle P((void)); +void LoadTheme P((void)); +void CreateBookEvent P((void)); +char *SupportedVariant P((char *list, VariantClass v, int w, int h, int s, int proto, char *engine)); +char *CollectPieceDescriptors P((void)); +void RefreshSettingsDialog P((ChessProgramState *cps, int val)); +void StartChessProgram P((ChessProgramState *cps)); +void SendToICS P((char *s)); +int PosFlags P((int n)); + + +/* A point in time */ +typedef struct { + long sec; /* Assuming this is >= 32 bits */ + int ms; /* Assuming this is >= 16 bits */ +} TimeMark; + +extern TimeMark programStartTime; + +void GetTimeMark P((TimeMark *)); +long SubtractTimeMarks P((TimeMark *, TimeMark *)); -#endif /* _BACKEND */ +#endif /* XB_BACKEND */