19 #ifndef SCID_UI_TCLTK_H 20 #define SCID_UI_TCLTK_H 36 inline int Main (
int argc,
char* argv[],
void (*exit) (
void*)) {
37 Tcl_FindExecutable(argv[0]);
38 Tcl_CreateExitHandler(exit, 0);
39 bool search_tcl = (argc == 1) ?
true :
false;
40 if (argc > 1 && argc < 10) {
41 char* ext = strrchr (argv[1],
'.');
42 if (ext != 0 && strlen(ext) == 4 && std::string(
".tcl") != ext) {
47 char sourceFileName [4096] = {0};
50 char* exec_name = realpath(Tcl_GetNameOfExecutable(), 0);
51 strncpy(sourceFileName, exec_name, 4000);
54 strncpy(sourceFileName, Tcl_GetNameOfExecutable(), 4000);
57 char* dirname = strrchr(sourceFileName,
'/');
58 if (dirname == 0) dirname = sourceFileName;
60 strcpy (dirname,
"tcl/start.tcl");
61 if (0 != Tcl_Access(sourceFileName, 4)) {
62 strcpy (dirname,
"../tcl/start.tcl");
64 char* newArgv[10] = { argv[0], sourceFileName };
65 std::copy(argv + 1, argv + argc, newArgv + 2);
83 virtual bool report(
size_t done,
size_t total,
const char* msg) {
88 uint64_t estimated = (done == 0) ? 0 : elapsed * total / done;
90 tmp[0] = Tcl_NewStringObj(
"::progressCallBack", -1);
91 tmp[1] = Tcl_NewIntObj(static_cast<int>(done));
92 tmp[2] = Tcl_NewIntObj(static_cast<int>(total));
93 tmp[3] = Tcl_NewIntObj(static_cast<int>(elapsed / 1000));
94 tmp[4] = Tcl_NewIntObj(static_cast<int>(estimated / 1000));
95 Tcl_Obj*
cmd = Tcl_NewListObj(5, tmp);
97 Tcl_ListObjAppendElement(ti_, cmd, Tcl_NewStringObj(msg, -1));
98 Tcl_IncrRefCount(cmd);
99 int res = Tcl_EvalObjEx(ti_, cmd, TCL_EVAL_GLOBAL);
100 Tcl_DecrRefCount(cmd);
101 return res == TCL_OK;
112 virtual bool report(
size_t,
size_t,
const char*) {
113 return TCL_OK == Tcl_EvalEx(ti_,
"::windows::gamelist::PosMaskProgress", -1, 0);
118 int err = Tcl_EvalEx(data,
"::progressCallBack init", -1, 0);
119 if (err != TCL_OK)
return Progress();
131 Tcl_Obj* stackBuf_[6];
137 : list_(stackBuf_), i_(0) {
138 const size_t stackBuf_size =
sizeof(stackBuf_)/
sizeof(stackBuf_[0]);
139 if (max_size > stackBuf_size) {
140 list_ =
new Tcl_Obj*[max_size];
146 if (list_ != stackBuf_)
delete [] list_;
150 for (
int i=0; i < i_; i++) Tcl_DecrRefCount(list_[i]);
158 template <
typename T>
159 void push_back(
const T& value);
163 return Tcl_NewBooleanObj(v);
166 return Tcl_NewIntObj(v);
170 return Tcl_NewIntObj(static_cast<int>(v));
174 return Tcl_NewIntObj(static_cast<int>(v));
178 return Tcl_NewIntObj(static_cast<int>(v));
181 return Tcl_NewDoubleObj(v);
184 return Tcl_NewStringObj(s, -1);
188 return Tcl_NewStringObj(s.c_str(),
static_cast<int>(s.size()));
191 Tcl_Obj* res = Tcl_NewListObj(v.i_, v.list_);
196 template <
typename T>
203 if (res ==
OK)
return TCL_OK;
204 Tcl_SetObjErrorCode(ti, Tcl_NewIntObj(res));
213 template <
typename T>
243 if (Tcl_Init (ti) == TCL_ERROR) {
return TCL_ERROR; }
245 Tcl_CreateCommand(ti,
"strIsPrefix" , str_is_prefix , 0, NULL);
246 Tcl_CreateCommand(ti,
"strPrefixLen", str_prefix_len, 0, NULL);
247 Tcl_CreateCommand(ti,
"sc_base" , sc_base , 0, NULL);
248 Tcl_CreateCommand(ti,
"sc_book" , sc_book , 0, NULL);
249 Tcl_CreateCommand(ti,
"sc_clipbase" , sc_clipbase , 0, NULL);
250 Tcl_CreateCommand(ti,
"sc_eco" , sc_eco , 0, NULL);
251 Tcl_CreateCommand(ti,
"sc_filter" , sc_filter , 0, NULL);
252 Tcl_CreateCommand(ti,
"sc_game" , sc_game , 0, NULL);
253 Tcl_CreateCommand(ti,
"sc_info" , sc_info , 0, NULL);
254 Tcl_CreateCommand(ti,
"sc_move" , sc_move , 0, NULL);
255 Tcl_CreateCommand(ti,
"sc_name" , sc_name , 0, NULL);
256 Tcl_CreateCommand(ti,
"sc_report" , sc_report , 0, NULL);
257 Tcl_CreateCommand(ti,
"sc_pos" , sc_pos , 0, NULL);
258 Tcl_CreateCommand(ti,
"sc_search" , sc_search , 0, NULL);
259 Tcl_CreateCommand(ti,
"sc_tree" , sc_tree , 0, NULL);
260 Tcl_CreateCommand(ti,
"sc_var" , sc_var , 0, NULL);
long long MilliSecs(void) const
virtual bool report(size_t done, size_t total, const char *msg)
UI_impl::UI_res_t sc_move(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
UI_impl::UI_res_t str_is_prefix(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
Tcl_Obj * ObjMaker(bool v)
tcl_ProgressPosMask(UI_handle_t ti)
UI_res_t ResultHelper(UI_handle_t ti, errorT res)
UI_impl::UI_res_t sc_game(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
GAME functions.
int initTclTk(UI_handle_t ti)
UI_impl::UI_res_t sc_var(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
virtual bool report(size_t, size_t, const char *)
UI_impl::UI_res_t sc_name(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
UI_impl::UI_res_t sc_report(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
UI_res_t Result(UI_handle_t ti, errorT res)
UI_impl::UI_res_t str_prefix_len(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
Progress CreateProgressPosMask(UI_handle_t data)
virtual ~tcl_ProgressPosMask()
void push_back(Tcl_Obj *value)
UI_impl::UI_res_t sc_clipbase(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
CLIPBASE functions.
int Main(int argc, char *argv[], void(*exit)(void *))
UI_impl::UI_res_t sc_tree(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
tcl_Progress(UI_handle_t ti)
UI_impl::UI_res_t sc_search(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
UI_impl::UI_res_t sc_eco(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
Progress CreateProgress(UI_handle_t data)
UI_impl::UI_res_t sc_pos(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
UI_impl::UI_res_t sc_filter(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
UI_impl::UI_res_t sc_info(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
UI_impl::UI_res_t sc_book(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)
BOOK functions.
UI_impl::UI_res_t sc_base(UI_impl::UI_extra_t, UI_impl::UI_handle_t, int argc, const char **argv)