X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xboard.c;h=8106b9c80e7ff0419f0f99f065160189ad399d81;hb=d138c95b1f4dad365548a9d77321f626ef704c90;hp=c9546e250d53425030f80944e2296421e96fbd74;hpb=0183533e818083b1099145a0f42ee359bf0f3358;p=xboard.git diff --git a/xboard.c b/xboard.c index c9546e2..8106b9c 100644 --- a/xboard.c +++ b/xboard.c @@ -49,6 +49,8 @@ *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ +#define HIGHDRAG 1 + #include "config.h" #include @@ -200,7 +202,9 @@ extern char *getenv(); // must be moved to xengineoutput.h void EngineOutputProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); + String *prms, Cardinal *nprms)); +void EvalGraphProc P((Widget w, XEvent *event, + String *prms, Cardinal *nprms)); #ifdef __EMX__ @@ -254,6 +258,8 @@ void HandleUserMove P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void AnimateUserMove P((Widget w, XEvent * event, String * params, Cardinal * nParams)); +void HandlePV P((Widget w, XEvent * event, + String * params, Cardinal * nParams)); void WhiteClock P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void BlackClock P((Widget w, XEvent *event, @@ -446,6 +452,7 @@ void NewVariantPopDown P(()); void SettingsPopDown P(()); void update_ics_width P(()); int get_term_width P(()); +int CopyMemoProc P(()); /* * XBoard depends on Xt R4 or higher */ @@ -605,9 +612,9 @@ MenuItem modeMenu[] = { {N_("Training"), TrainingProc}, {"----", NothingProc}, {N_("Show Engine Output"), EngineOutputProc}, - {N_("Show Evaluation Graph"), NothingProc}, // [HGM] evalgr: not functional yet + {N_("Show Evaluation Graph"), EvalGraphProc}, {N_("Show Game List"), ShowGameListProc}, - {"Show Move History", HistoryShowProc}, // [HGM] hist: activate 4.2.7 code + {N_("Show Move History"), HistoryShowProc}, // [HGM] hist: activate 4.2.7 code {"----", NothingProc}, {N_("Edit Tags"), EditTagsProc}, {N_("Edit Comment"), EditCommentProc}, @@ -829,6 +836,8 @@ XtActionsRec boardActions[] = { { "DrawPosition", DrawPositionProc }, { "HandleUserMove", HandleUserMove }, { "AnimateUserMove", AnimateUserMove }, + { "HandlePV", HandlePV }, + { "UnLoadPV", UnLoadPV }, { "FileNameAction", FileNameAction }, { "AskQuestionProc", AskQuestionProc }, { "AskQuestionReplyAction", AskQuestionReplyAction }, @@ -865,6 +874,7 @@ XtActionsRec boardActions[] = { { "EditPositionProc", EditPositionProc }, { "TrainingProc", EditPositionProc }, { "EngineOutputProc", EngineOutputProc}, // [HGM] Winboard_x engine-output window + { "EvalGraphProc", EvalGraphProc}, // [HGM] Winboard_x avaluation graph window { "ShowGameListProc", ShowGameListProc }, { "ShowMoveListProc", HistoryShowProc}, { "EditTagsProc", EditCommentProc }, @@ -944,12 +954,14 @@ XtActionsRec boardActions[] = { { "PromotionPopDown", (XtActionProc) PromotionPopDown }, { "HistoryPopDown", (XtActionProc) HistoryPopDown }, { "EngineOutputPopDown", (XtActionProc) EngineOutputPopDown }, + { "EvalGraphPopDown", (XtActionProc) EvalGraphPopDown }, { "ShufflePopDown", (XtActionProc) ShufflePopDown }, { "EnginePopDown", (XtActionProc) EnginePopDown }, { "UciPopDown", (XtActionProc) UciPopDown }, { "TimeControlPopDown", (XtActionProc) TimeControlPopDown }, { "NewVariantPopDown", (XtActionProc) NewVariantPopDown }, { "SettingsPopDown", (XtActionProc) SettingsPopDown }, + { "CopyMemoProc", (XtActionProc) CopyMemoProc }, }; char globalTranslations[] = @@ -982,6 +994,8 @@ char boardTranslations[] = ": HandleUserMove() \n \ : HandleUserMove() \n \ : AnimateUserMove() \n \ + : HandlePV() \n \ + : UnLoadPV() \n \ Shift: XawPositionSimpleMenu(menuB) XawPositionSimpleMenu(menuD)\ PieceMenuPopup(menuB) \n \ Any: XawPositionSimpleMenu(menuW) XawPositionSimpleMenu(menuD) \ @@ -1245,14 +1259,13 @@ BoardToTop() #define JAWS_ARGS #define CW_USEDEFAULT (1<<31) #define ICS_TEXT_MENU_SIZE 90 +#define DEBUG_FILE "xboard.debug" #define SetCurrentDirectory chdir #define GetCurrentDirectory(SIZE, NAME) getcwd(NAME, SIZE) #define OPTCHAR "-" #define SEPCHAR " " // these two must some day move to frontend.h, when they are implemented -Boolean EvalGraphIsUp(); -Boolean MoveHistoryIsUp(); Boolean GameListIsUp(); // The option definition and parsing code common to XBoard and WinBoard is collected in this file @@ -1261,6 +1274,8 @@ Boolean GameListIsUp(); // front-end part of option handling // [HGM] This platform-dependent table provides the location for storing the color info +extern char *crWhite, * crBlack; + void * colorVariable[] = { &appData.whitePieceColor, @@ -1269,14 +1284,14 @@ colorVariable[] = { &appData.darkSquareColor, &appData.highlightSquareColor, &appData.premoveHighlightColor, + &appData.lowTimeWarningColor, NULL, NULL, NULL, NULL, NULL, - NULL, - NULL, - NULL, + &crWhite, + &crBlack, NULL }; @@ -1357,7 +1372,9 @@ SaveFontArg(FILE *f, ArgDescriptor *ad) default: return; } - fprintf(f, OPTCHAR "%s" SEPCHAR "%s\n", ad->argName, name); +// Do not save fonts for now, as the saved font would be board-size specific +// and not suitable for a re-start at another board size +// fprintf(f, OPTCHAR "%s" SEPCHAR "%s\n", ad->argName, name); } void @@ -1420,15 +1437,12 @@ GetWindowCoords() GetActualPlacement(shellWidget, &wpMain); if(EngineOutputIsUp()) GetActualPlacement(engineOutputShell, &wpEngineOutput); else if(MoveHistoryIsUp()) GetActualPlacement(historyShell, &wpMoveHistory); + if(EvalGraphIsUp()) GetActualPlacement(evalGraphShell, &wpEvalGraph); if(GameListIsUp()) GetActualPlacement(gameListShell, &wpGameList); if(commentShell) GetActualPlacement(commentShell, &wpComment); else GetActualPlacement(editShell, &wpComment); if(tagsShell) GetActualPlacement(tagsShell, &wpTags); else GetActualPlacement(editTagsShell, &wpTags); -#if 0 - GetActualPlacement(hwndConsole, &wpConsole); - GetActualPlacement(evalGraphDialog, &wpEvalGraph); -#endif } void @@ -1460,12 +1474,6 @@ EnsureOnScreen(int *x, int *y, int minX, int minY) return; } -Boolean -EvalGraphIsUp() -{ - return False; -} - int MainWindowUp() { // [HGM] args: allows testing if main window is realized from back-end @@ -1659,49 +1667,18 @@ main(argc, argv) char *p; XrmDatabase xdb; int forceMono = False; -//define INDIRECTION -#ifdef INDIRECTION - // [HGM] before anything else, expand any indirection files amongst options - char *argvCopy[1000]; // 1000 seems enough - char newArgs[10000]; // holds actual characters - int k = 0; srandom(time(0)); // [HGM] book: make random truly random - j = 0; - for(i=0; i= 1000-2) { printf(_("too many arguments\n")); exit(-1); } -//fprintf(stderr, "arg %s\n", argv[i]); - if(argv[i][0] != '@') argvCopy[j++] = argv[i]; else { - char c; - FILE *f = fopen(argv[i]+1, "rb"); - if(f == NULL) { fprintf(stderr, _("ignore %s\n"), argv[i]); continue; } // do not expand non-existing - argvCopy[j++] = newArgs + k; // get ready for first argument from file - while((c = fgetc(f)) != EOF) { // each line of file inserts 1 argument in the list - if(c == '\n') { - if(j >= 1000-2) { printf(_("too many arguments\n")); exit(-1); } - newArgs[k++] = 0; // terminate current arg - if(k >= 10000-1) { printf(_("too long arguments\n")); exit(-1); } - argvCopy[j++] = newArgs + k; // get ready for next - } else { - if(k >= 10000-1) { printf(_("too long arguments\n")); exit(-1); } - newArgs[k++] = c; - } - } - newArgs[k] = 0; - j--; - fclose(f); - } - } - argvCopy[j] = NULL; - argv = argvCopy; - argc = j; -#endif - setbuf(stdout, NULL); setbuf(stderr, NULL); debugFP = stderr; + if(argc > 1 && (!strcmp(argv[1], "-v" ) || !strcmp(argv[1], "--version" ))) { + printf("%s version %s\n", PACKAGE_NAME, PACKAGE_VERSION); + exit(0); + } + programName = strrchr(argv[0], '/'); if (programName == NULL) programName = argv[0]; @@ -2466,10 +2443,11 @@ XBoard square size (hint): %d\n\ HistoryPopUp(); } -// if( wpEvalGraph.visible ) { -// EvalGraphPopUp(); -// } - + if( wpEvalGraph.visible ) + { + EvalGraphPopUp(); + }; + if( wpEngineOutput.visible ) { EngineOutputPopUp(); } @@ -3702,6 +3680,8 @@ void PieceMenuPopup(w, event, params, num_params) Cardinal *num_params; { String whichMenu; + + if (event->type != ButtonRelease) UnLoadPV(); // [HGM] pv if (event->type != ButtonPress) return; if (errorUp) ErrorPopDown(); switch (gameMode) { @@ -3709,12 +3689,25 @@ void PieceMenuPopup(w, event, params, num_params) case IcsExamining: whichMenu = params[0]; break; + case IcsObserving: + if(!appData.icsEngineAnalyze) return; case IcsPlayingWhite: case IcsPlayingBlack: - case EditGame: + if(!appData.zippyPlay) goto noZip; + case AnalyzeMode: + case AnalyzeFile: case MachinePlaysWhite: case MachinePlaysBlack: - if (appData.testLegality && + case TwoMachinesPlay: // [HGM] pv: use for showing PV + if (!appData.dropMenu) { + LoadPV(event->xbutton.x, event->xbutton.y); + return; + } + if(gameMode == TwoMachinesPlay || gameMode == AnalyzeMode || + gameMode == AnalyzeFile || gameMode == IcsObserving) return; + case EditGame: + noZip: + if (!appData.dropMenu || appData.testLegality && gameInfo.variant != VariantBughouse && gameInfo.variant != VariantCrazyhouse) return; SetupDropMenu(); @@ -4206,6 +4199,10 @@ void DrawSquare(row, column, piece, do_flash) x + 2, y + font_ascent + 1, string, 1); } } + if(marker[row][column]) { + XFillArc(xDisplay, xBoardWindow, marker[row][column] == 2 ? prelineGC : highlineGC, + x + squareSize/4, y+squareSize/4, squareSize/2, squareSize/2, 0, 64*360); + } } @@ -4459,6 +4456,12 @@ void AnimateUserMove (Widget w, XEvent * event, DragPieceMove(event->xmotion.x, event->xmotion.y); } +void HandlePV (Widget w, XEvent * event, + String * params, Cardinal * nParams) +{ // [HGM] pv: walk PV + MovePV(event->xmotion.x, event->xmotion.y, lineGap + BOARD_HEIGHT * (squareSize + lineGap)); +} + Widget CommentCreate(name, text, mutable, callback, lines) char *name, *text; int /*Boolean*/ mutable; @@ -5551,9 +5554,9 @@ void MailMoveProc(w, event, prms, nprms) } /* this variable is shared between CopyPositionProc and SendPositionSelection */ -static char *selected_fen_position=NULL; +char *selected_fen_position=NULL; -static Boolean +Boolean SendPositionSelection(Widget w, Atom *selection, Atom *target, Atom *type_return, XtPointer *value_return, unsigned long *length_return, int *format_return) @@ -8635,7 +8638,7 @@ DragPieceMove(x, y) corner.x = x - player.mouseDelta.x; corner.y = y - player.mouseDelta.y; AnimationFrame(&player, &corner, player.dragPiece); -#if HIGHDRAG +#if HIGHDRAG*0 if (appData.highlightDragging) { int boardX, boardY; BoardSquare(x, y, &boardX, &boardY);