aboutsummaryrefslogtreecommitdiff
path: root/tcl_loader.cxx
diff options
context:
space:
mode:
authormescalinum <mescalinum@users.sourceforge.net>2009-08-28 21:34:18 +0000
committermescalinum <mescalinum@users.sourceforge.net>2009-08-28 21:34:18 +0000
commit066a639c0bb28d759c017ab2e00624dfb0a64b3f (patch)
tree366cc443591df37fdaeec674cb9ce18e9ce366ba /tcl_loader.cxx
parent9545397540a80010def7b2d6028715faf1ec0506 (diff)
improve errors printouts, and cleanup
svn path=/trunk/externals/tclpd/; revision=12132
Diffstat (limited to 'tcl_loader.cxx')
-rw-r--r--tcl_loader.cxx41
1 files changed, 31 insertions, 10 deletions
diff --git a/tcl_loader.cxx b/tcl_loader.cxx
index d4b45d1..fececed 100644
--- a/tcl_loader.cxx
+++ b/tcl_loader.cxx
@@ -7,18 +7,22 @@ extern "C" int tclpd_do_load_lib(t_canvas *canvas, char *objectname)
char filename[MAXPDSTRING], dirbuf[MAXPDSTRING],
*classname, *nameptr;
int fd;
- if (classname = strrchr(objectname, '/'))
+
+ if ((classname = strrchr(objectname, '/')) != NULL)
classname++;
- else classname = objectname;
- if (sys_onloadlist(objectname))
- {
+ else
+ classname = objectname;
+
+ if(sys_onloadlist(objectname)) {
post("%s: already loaded", objectname);
return (1);
}
+
/* try looking in the path for (objectname).(tcl) ... */
if ((fd = canvas_open(canvas, objectname, ".tcl",
dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
goto gotone;
+
/* next try (objectname)/(classname).(tcl) ... */
strncpy(filename, objectname, MAXPDSTRING);
filename[MAXPDSTRING-2] = 0;
@@ -28,7 +32,9 @@ extern "C" int tclpd_do_load_lib(t_canvas *canvas, char *objectname)
if ((fd = canvas_open(canvas, filename, ".tcl",
dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
goto gotone;
- return (0);
+
+ return 0;
+
gotone:
close(fd);
class_set_extern_dir(gensym(dirbuf));
@@ -42,13 +48,28 @@ gotone:
// load tcl:
char b[MAXPDSTRING+10];
snprintf(&b[0], MAXPDSTRING+10, "source %s", filename);
- if (Tcl_Eval(tcl_for_pd,b) == TCL_OK)
- post("Tcl_loader: loaded %s", b);
- else
- post("Tcl_loader: error trying to load %s", b);
+ int result = Tcl_Eval(tcl_for_pd, b);
+ if(result == TCL_OK) {
+ post("Tcl_loader: loaded %s", filename);
+ } else {
+ post("Tcl_loader: error trying to load %s", filename);
+ post("Error: %s", Tcl_GetStringResult(tcl_for_pd));
+ post("(see stderr for details)");
+
+ fprintf(stderr, "------------------- Tcl error: -------------------\n");
+ Tcl_Obj* dict = Tcl_GetReturnOptions(tcl_for_pd, result);
+ Tcl_Obj* errorInfo = NULL;
+ Tcl_Obj* errorInfoK = Tcl_NewStringObj("-errorinfo", -1);
+ Tcl_IncrRefCount(errorInfoK);
+ Tcl_DictObjGet(tcl_for_pd, dict, errorInfoK, &errorInfo);
+ Tcl_DecrRefCount(errorInfoK);
+ fprintf(stderr, "%s\n", Tcl_GetStringFromObj(errorInfo, 0));
+ fprintf(stderr, "--------------------------------------------------\n");
+ return 0;
+ }
class_set_extern_dir(&s_);
sys_putonloadlist(objectname);
- return (1);
+ return 1;
}