#include <stdio.h>
#include <stdlib.h>
-#include <malloc.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include "common.h"
#include "frontend.h"
#include "backend.h"
+#include "xhistory.h"
+#include "xboard.h"
#include "gettext.h"
#ifdef ENABLE_NLS
# define N_(s) s
#endif
-// templates for calls into back-end
+// templates for calls into back-end (= history.c; should be moved to history.h header shared with it!)
void RefreshMemoContent P((void));
void MemoContentUpdated P((void));
void FindMoveByCharIndex P(( int char_index ));
+void MoveHistorySet P(( char movelist[][2*MOVE_LEN], int first, int last, int current, ChessProgramStats_Move * pvInfo ));
-void AppendText P((Option *opt, char *s));
-int GenericPopUp P((Option *option, char *title, int dlgNr));
-void MarkMenu P((char *item, int dlgNr));
-void GetWidgetText P((Option *opt, char **buf));
-
+// variables in xoptions.c
extern Option historyOptions[];
-extern Widget shells[10];
-extern Boolean shellUp[10];
// ------------- low-level front-end actions called by MoveHistory back-end -----------------
void HighlightMove( int from, int to, Boolean highlight )
{
- if(!highlight) from = to = 0;
- XawTextSetSelection( historyOptions[0].handle, from, to ); // for lack of a better method, use selection for highighting
+ if(highlight)
+ XawTextSetSelection( historyOptions[0].handle, from, to ); // for lack of a better method, use selection for highighting
}
void ClearHistoryMemo()
// the colorNr argument says 0 = font-default, 1 = gray
int AppendToHistoryMemo( char * text, int bold, int colorNr )
{
- Arg args[10];
- char *s;
- GetWidgetText(&historyOptions[0], &s);
- AppendText(&historyOptions[0], text); // for now ignore bold & color stuff, as Xaw cannot handle that
- return strlen(s);
+ return AppendText(&historyOptions[0], text); // for now ignore bold & color stuff, as Xaw cannot handle that
}
void ScrollToCurrent(int caretPos)
{
Arg args[10];
char *s;
+ int len;
GetWidgetText(&historyOptions[0], &s);
- if(caretPos < 0 || caretPos > strlen(s)) caretPos = strlen(s);
- XtSetArg(args[0], XtNdisplayCaret, False);
- XtSetArg(args[1], XtNinsertPosition, caretPos); // this triggers scrolling in Xaw
+ len = strlen(s);
+ if(caretPos < 0 || caretPos > len) caretPos = len;
+ if(caretPos > len-30) { // scroll to end, which causes no flicker
+ static XEvent event;
+ XtCallActionProc(historyOptions[0].handle, "end-of-file", &event, NULL, 0);
+ return;
+ }
+ // the following leads to a very annoying flicker, even when no scrolling is done at all.
+ XtSetArg(args[0], XtNinsertPosition, caretPos); // this triggers scrolling in Xaw
+ XtSetArg(args[1], XtNdisplayCaret, False);
XtSetValues(historyOptions[0].handle, args, 2);
}
}
// duplicate of code in winboard.c, so an move to back-end!
+void EvalGraphSet P(( int first, int last, int current, ChessProgramStats_Move * pvInfo ));
+void MakeEngineOutputTitle P(());
+
void
HistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current )
{
MoveHistorySet( movelist, first, last, current, pvInfoList );
EvalGraphSet( first, last, current, pvInfoList );
+
+ MakeEngineOutputTitle();
}