12 #include <boost/filesystem.hpp> 14 #include <cairoSurfaceImage.h> 24 #include "eco_hashmap.h" 25 #include "eco_strstream.h" 31 #include <ecolab_epilogue.h> 33 using boost::filesystem::path;
36 #define SIG_DFL ((__sighandler_t) 0) 77 #define _WIN32_WINNT 0x0501 81 int main(
int argc,
char* argv[])
83 const Timer timer(
"main");
87 ecolab::Pango::defaultFamily=
"Arial Unicode MS";
89 ecolab::Pango::defaultFamily=
"Adobe Courier Regular";
92 #if defined(NDEBUG) && defined(_WIN32) 93 ShowWindow(GetConsoleWindow(),SW_HIDE);
96 Tcl_FindExecutable(argv[0]);
100 r=Tcl_Init(interp());
105 const path exeDir=path(Tcl_GetNameOfExecutable()).parent_path();
106 tclvar tcl_library(
"tcl_library", (exeDir/
"library"/
"tcl").
string().c_str());
107 tclvar tk_library(
"tk_library", (exeDir/
"library"/
"tk").
string().c_str());
108 if ((r=Tcl_Init(interp()))!=TCL_OK)
113 tcl_library=(exeDir/
".."/
"lib"/
"minsky"/
"library"/
"tcl").
string();
114 tk_library=(exeDir/
".."/
"lib"/
"minsky"/
"library"/
"tcl").
string();
115 r=Tcl_Init(interp());
120 fprintf(stderr,
"%s\n",Tcl_GetStringResult(interp()));
121 fprintf(stderr,
"%s\n",Tcl_GetVar(interp(),
"errorInfo",0));
127 tclvar tcl_argc(
"argc"), tcl_argv(
"argv");
129 for (
int i=0; i<argc; i++) tcl_argv[i]=argv[i];
131 path minskydir=path(Tcl_GetNameOfExecutable()).parent_path();
134 if (!exists(minskydir/
"minsky.tcl"))
135 minskydir/=
"../lib/minsky";
136 if (!exists(minskydir/
"minsky.tcl"))
138 fprintf(stderr,
"Minsky library not found!\n");
141 const tclvar minskyHome(
"minskyHome",minskydir.string().c_str());
143 srand(time(
nullptr));
145 if (Tcl_EvalFile(interp(), (minskydir/
"minsky.tcl").
string().c_str())!=TCL_OK)
147 fprintf(stderr,
"%s\n",Tcl_GetStringResult(interp()));
148 fprintf(stderr,
"%s\n",Tcl_GetVar(interp(),
"errorInfo",0));
154 Tcl_DeleteInterp(interp());
163 Tcl_DoOneEvent(TCL_DONT_WAIT | (idletasksOnly? TCL_IDLE_EVENTS: 0));
180 if (Tk_Init(interp())==TCL_ERROR)
182 fprintf(stderr,
"Error initialising Tk: %s",Tcl_GetStringResult(interp()));
183 fprintf(stderr,
"%s\n",Tcl_GetVar(interp(),
"errorInfo",0));
189 CairoSurface::registerImage();
191 mainWin = Tk_MainWindow(interp());
256 const int signo = (isdigit(argv[1][0]))? atoi(argv[1]):
257 signum[
const_cast<char*
>(argv[1])];
262 void aborthand(
int) {
throw error(
"Fatal Error: Execution recovered");}
267 if (argc>1 && strcmp(argv[1],
"off")==0) hand=
SIG_DFL;
279 extern "C" char *readline(
char *);
280 extern "C" void add_history(
char *);
285 int braces=0, brackets=0;
288 cmd <<
"savebgerror\n";
291 eco_string prompt((
const char*)tclvar(
"argv(0)")); prompt+=
'>';
292 while ( (c=readline(const_cast<char*>(prompt.c_str())))!=NULL && strcmp(c,
"exit")!=0)
295 while (fgets(c,512,stdin)!=NULL && strcmp(c,
"exit\n")!=0)
299 for (
char* cc=c; *cc!=
'\0'; ++cc)
303 if (!inString) braces++;
306 if (!inString) brackets++;
309 if (!inString) braces--;
312 if (!inString) brackets--;
318 inString = !inString;
322 if (!inString && braces<=0 && brackets <=0)
328 catch (std::exception& e) {fputs(e.what(),stderr);}
329 catch (...) {fputs(
"caught unknown exception",stderr);}
330 puts(cmd.result.c_str());
333 if (strlen(c)) add_history(c);
337 cmd <<
"restorebgerror\n";
343 #include <shellapi.h> 346 ShellExecute(NULL,
"open",argv[1],NULL,NULL,1);
356 tclvar(
"argv")[1]=argv[1];
371 #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200 372 extern "C" int mkostemp(
char* templ,
int flags)
375 return open(templ,flags);
int tk_mac_OpenDocument(ClientData, Tcl_Interp *, int argc, const char **argv)
void doOneEvent(bool idletasksOnly)
checks if any GUI events are waiting, and proces an event if so
static int tk_mac_OpenDocument_dummy
hash_map< eco_string, int > signum
struct TCLcmd::trap::init_t init
Creation and access to the minskyTCL_obj object, which has code to record whenever Minsky's state cha...
NEWCMD(minsky_version, 0)
int main(int argc, char *argv[])