in scriptators/tcl/Tclator.cpp [86:225]
TyErrorId initialize(AnnotatorContext &ac) {
swig_type_info *ac_type;
char srcfile[1000 + 256];
if (ac.isParameterDefined("DebugLevel")) {
ac.extractValue("DebugLevel", debug);
}
if (debug > 0) {
cerr<< MODULENAME ": Initialize - debug=" << debug <<endl;
}
if (!ac.isParameterDefined("SourceFile")) {
cerr<< MODULENAME ": Missing Tcl SourceFile" <<endl;
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
UnicodeString fn;
ac.extractValue(UnicodeString("SourceFile"), fn);
if (fn == "") {
cerr<< MODULENAME ": Empty Tcl SourceFile" <<endl;
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
// cerr << fn << endl;
UErrorCode err = U_ZERO_ERROR;
fn.extract(srcfile,sizeof(srcfile),0,err);
if (U_FAILURE(err)) {
cerr << MODULENAME ": Unable to extract parameter, got " << u_errorName(err) << endl;
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
if (interp == 0) {
// this seems to make windows work
// would be nice to know argv[0] somehow
Tcl_FindExecutable( 0 );
interp = Tcl_CreateInterp();
if (interp == 0) {
cerr << MODULENAME ": failed to create interpreter" << endl;
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
int tclret = Tcl_Init(interp);
if (tclret != TCL_OK) {
cerr << MODULENAME ": failed to init interpreter - " <<
Tcl_GetStringResult(interp) << endl;
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
if (Tclator_Init(interp) != TCL_OK) {
cerr << MODULENAME ": failed to init tclator package" << endl;
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
commands[INITIALIZE] = Tcl_NewStringObj("initialize", -1);
commands[TYPESYSTEMINIT] = Tcl_NewStringObj("typeSystemInit", -1);
commands[RECONFIGURE] = Tcl_NewStringObj("reconfigure", -1);
commands[PROCESS] = Tcl_NewStringObj("process", -1);
commands[DESTROY] = Tcl_NewStringObj("destroy", -1);
commands[BATCHPROCESSCOMPLETE] = Tcl_NewStringObj("batchProcessComplete", -1);
commands[COLLECTIONPROCESSCOMPLETE] = Tcl_NewStringObj("collectionProcessComplete", -1);
for (unsigned int i=0; i<7; ++i) Tcl_IncrRefCount(commands[i]);
if (Tcl_Eval(interp, default_methods) != TCL_OK) {
cerr << MODULENAME << ": Error - " <<
Tcl_GetStringResult(interp) << endl;
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
if (Tcl_EvalFile(interp, srcfile) != TCL_OK) {
cerr << MODULENAME << ": Error - " <<
Tcl_GetStringResult(interp) << endl;
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
// this is a static variable because of the way that SWIG's
// initialization code is written.
static swig_module_info *module = 0;
if (module == 0) {
MUTEX_INIT
MUTEX_LOCK
module = SWIG_Tcl_GetModule(interp);
} else {
MUTEX_LOCK
SWIG_Tcl_SetModule(interp, module);
}
if (!module) {
cerr << MODULENAME ": could not get Tcl swig module" << endl;
MUTEX_UNLOCK
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
ts_type = SWIG_TypeQueryModule(module,module, "TypeSystem *");
if (!ts_type) {
cerr << MODULENAME ": could lookup TypeSystem type in swig" << endl;
MUTEX_UNLOCK
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
ac_type = SWIG_TypeQueryModule(module,module, "AnnotatorContext *");
if (!ac_type) {
cerr << MODULENAME ": could lookup AnnotatorContext type in swig" << endl;
MUTEX_UNLOCK
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
cas_type = SWIG_TypeQueryModule(module,module, "CAS *");
if (!cas_type) {
cerr << MODULENAME ": could lookup cas type in swig" << endl;
MUTEX_UNLOCK
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
rs_type = SWIG_TypeQueryModule(module,module,
"ResultSpecification *");
if (!rs_type) {
cerr << MODULENAME ": could lookup rs type in swig" << endl;
MUTEX_UNLOCK
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
}
Tcl_Obj *args[2];
args[0] = commands[INITIALIZE];
args[1] = SWIG_Tcl_NewPointerObj(
reinterpret_cast<void *>( const_cast<AnnotatorContext *>(&ac)),
ac_type, 0);
Tcl_IncrRefCount(args[0]);
Tcl_IncrRefCount(args[1]);
int rc = Tcl_EvalObjv(interp, 2, args, 0);
Tcl_DecrRefCount(args[0]);
Tcl_DecrRefCount(args[1]);
if (rc != TCL_OK) {
cerr << MODULENAME " initialize error " <<
Tcl_GetStringResult(interp) << endl;
MUTEX_UNLOCK
return UIMA_ERR_USER_ANNOTATOR_COULD_NOT_INIT;
}
MUTEX_UNLOCK
return UIMA_ERR_NONE;
}