57 #undef QueuedAfterReading 58 #undef QueuedAfterFlush 59 #undef ConnectionNumber 62 #undef DefaultRootWindow 72 #undef DisplayHeightMM 77 #undef ProtocolVersion 78 #undef ProtocolRevision 82 #undef DefaultColormap 88 #undef LastKnownRequestProcessed 89 #undef ScreenOfDisplay 90 #undef DefaultScreenOfDisplay 91 #undef DisplayOfScreen 92 #undef RootWindowOfScreen 93 #undef BlackPixelOfScreen 94 #undef WhitePixelOfScreen 95 #undef DefaultColormapOfScreen 96 #undef DefaultDepthOfScreen 97 #undef DefaultGCOfScreen 98 #undef DefaultVisualOfScreen 100 #undef HeightOfScreen 101 #undef WidthMMOfScreen 102 #undef HeightMMOfScreen 103 #undef PlanesOfScreen 105 #undef MinCmapsOfScreen 106 #undef MaxCmapsOfScreen 107 #undef DoesSaveUnders 108 #undef DoesBackingStore 109 #undef EventMaskOfScreen 111 #undef XNRequiredCharSet 112 #undef XNQueryOrientation 113 #undef XNBaseFontName 115 #undef XNMissingCharSet 116 #undef XNDefaultString 118 #undef XNDirectionalDependentDrawing 119 #undef XNContextualDrawing 121 #undef XIMPreeditArea 122 #undef XIMPreeditCallbacks 123 #undef XIMPreeditPosition 124 #undef XIMPreeditNothing 125 #undef XIMPreeditNone 127 #undef XIMStatusCallbacks 128 #undef XIMStatusNothing 130 #undef XNVaNestedList 131 #undef XNQueryInputStyle 132 #undef XNClientWindow 135 #undef XNResourceName 136 #undef XNResourceClass 137 #undef XNGeometryCallback 138 #undef XNDestroyCallback 139 #undef XNFilterEvents 140 #undef XNPreeditStartCallback 141 #undef XNPreeditDoneCallback 142 #undef XNPreeditDrawCallback 143 #undef XNPreeditCaretCallback 144 #undef XNPreeditStateNotifyCallback 145 #undef XNPreeditAttributes 146 #undef XNStatusStartCallback 147 #undef XNStatusDoneCallback 148 #undef XNStatusDrawCallback 149 #undef XNStatusAttributes 152 #undef XNSpotLocation 157 #undef XNBackgroundPixmap 161 #undef XNQueryIMValuesList 162 #undef XNQueryICValuesList 163 #undef XNVisiblePosition 164 #undef XNR6PreeditCallback 165 #undef XNStringConversionCallback 166 #undef XNStringConversion 170 #undef XNPreeditState 171 #undef XNSeparatorofNestedList 172 #undef XBufferOverflow 183 #undef XIMVisibleToForward 184 #undef XIMVisibleToBackword 185 #undef XIMVisibleToCenter 186 #undef XIMPreeditUnKnown 187 #undef XIMPreeditEnable 188 #undef XIMPreeditDisable 189 #undef XIMInitialState 190 #undef XIMPreserveState 191 #undef XIMStringConversionLeftEdge 192 #undef XIMStringConversionRightEdge 193 #undef XIMStringConversionTopEdge 194 #undef XIMStringConversionBottomEdge 195 #undef XIMStringConversionConcealed 196 #undef XIMStringConversionWrapped 197 #undef XIMStringConversionBuffer 198 #undef XIMStringConversionLine 199 #undef XIMStringConversionWord 200 #undef XIMStringConversionChar 201 #undef XIMStringConversionSubstitution 202 #undef XIMStringConversionRetrieval 203 #undef XIMStringConversionRetrival 204 #undef XIMHotKeyStateON 205 #undef XIMHotKeyStateOFF 207 #undef Status // conflict between X11 usage and MPI++ usage 218 extern bool interpExiting;
219 void interpExitProc(ClientData
cd);
226 static Tcl_Interp*
interp=Tcl_CreateInterp();
227 Tcl_CreateExitHandler(interpExitProc, 0);
236 extern unsigned myid, nprocs;
248 #define PARALLEL if (myid==0) parsend(argc,argv); 254 void parsend(
int,CONST84
char**);
255 void parsendf(
const char*,...);
256 void parsend(
const std::string&);
265 return !Tcl_GetCommandInfo(
interp(),const_cast<char*>(c),&dum);
269 int TCL_proc(ClientData
cd, Tcl_Interp *
interp,
int argc, CONST84
char **argv);
275 typedef enum {invalid, memvoid, mem, func, nonconst} functor_class;
282 virtual void proc(
int argc, CONST84
char** argv)=0;
284 virtual void proc(
int argc, Tcl_Obj *
const argv[]) {
285 throw error(
"proc not implemented");};
286 cmd_data(
const char* nm,
int na=-1):
287 nargs(na), name(nm), is_const(
false), is_setterGetter(
false)
292 cmd_data(): nargs(-1), is_const(
false), is_setterGetter(
false) {}
299 void (*procptr)(int,CONST84
char**);
301 void proc(
int argc, CONST84
char** argv) {procptr(argc,argv);}
302 void proc(
int argc, Tcl_Obj *
const argv[]) {}
303 tclpp_cd(
const char* nm,
int na,
void (*p)(
int,CONST84
char**)):
305 {Tcl_CreateCommand(
interp(),const_cast<char*>(nm),(Tcl_CmdProc*)TCL_proc,(ClientData)
this,NULL);}
313 #define DEFINE_ECOLAB_LIBRARY \ 315 int dum=ecolab::setEcoLabLib(ECOLAB_LIB); \ 318 #define DEFINE_ECOLAB_LIBRARY 327 #define NEWCMD(name,nargs) \ 328 static void name(int argc, CONST84 char* argv[]); \ 329 namespace name##_ns { \ 330 DEFINE_ECOLAB_LIBRARY; \ 331 ecolab::tclpp_cd name##data(#name,nargs,name); \ 333 static void name(int argc,CONST84 char* argv[]) 359 inline double dget(
void);
360 inline double dput(
double x);
367 tclvar(
const string& nm,
const char* val=NULL): name(nm) {init(val);}
368 tclvar(
const string& nm,
const string& val): name(nm) {init(val.c_str());}
369 void init(
const char* val=NULL);
374 tclvar operator=(
const char* x) {
375 if (!interpExiting) Tcl_SetVar(
interp(),name.c_str(),x,TCL_GLOBAL_ONLY);
378 tclvar operator=(
const string& x) {
return (*
this)=x.c_str();}
379 tclvar operator+=(
const string& x)
380 {
return (*
this)=(*this)+x;}
382 string operator+(
const string& x)
384 string t(
operator const char*());
389 operator double () {
return dget();}
391 operator const char* ()
392 {
return interpExiting?
"": Tcl_GetVar(
interp(),name.c_str(),TCL_GLOBAL_ONLY);}
394 operator int() {
return (
int)dget();}
395 operator unsigned () {
return (
unsigned)dget();}
398 double operator++() {
return dput(dget()+1);}
400 double operator++(
int){
double tmp; tmp=dget(); dput(tmp+1);
return tmp;}
402 double operator--() {
return dput(dget()-1);}
404 double operator--(
int){
double tmp; tmp=dget(); dput(tmp-1);
return tmp;}
406 double operator+=(
double x) {
return dput(dget()+x);}
408 double operator-=(
double x) {
return dput(dget()-x);}
410 double operator*=(
double x) {
return dput(dget()*x);}
412 double operator/=(
double x) {
return dput(dget()/x);}
415 tclvar operator[](
int index);
417 tclvar operator[](
const string& index);
430 double tclvar::dget(
void)
432 if (interpExiting)
return 0;
436 tclval=
const_cast<char*
>(Tcl_GetVar(
interp(),name.c_str(),TCL_GLOBAL_ONLY));
439 if (Tcl_GetDouble(
interp(),tclval,&val)!=TCL_OK)
441 if (Tcl_GetBoolean(
interp(),tclval,&ival)!=TCL_OK)
442 throw error(
"%s as the value of %s\n",Tcl_GetStringResult(
interp()),name.c_str());
448 throw error(
"TCL Variable %s is undefined\n",name.c_str());
453 double tclvar::dput(
double x)
455 if (interpExiting)
return x;
458 std::string v(value.str());
459 Tcl_SetVar(
interp(),name.c_str(),v.c_str(),TCL_GLOBAL_ONLY);
466 {
return interpExiting?
false: Tcl_GetVar(
interp(),x.name.c_str(),TCL_GLOBAL_ONLY)!=NULL;}
469 tclvar::init(
const char* val)
472 if (val!=NULL) Tcl_SetVar(
interp(),const_cast<char*>(name.c_str()),
473 const_cast<char*>(val),0);
479 std::ostringstream os;
481 return operator[](os.str());
488 if (tmp.name.find(
'(')!=string::npos)
489 tmp.name=tmp.name.substr(0, tmp.name.find(
')'))+index+
")";
491 tmp.name+=
"("+index+
")";
497 std::ostream& operator<<(std::ostream& stream,
tclvar x)
498 {
return stream << (
const char*) x;}
504 inline std::string chomp(
const std::string& s)
506 if (s[s.length()-1]==
'\n')
return s.substr(0,s.length()-1);
518 if (interpExiting)
return;
519 std::string s=chomp(str());
520 if (Tcl_Eval(
interp(),s.c_str())!=TCL_OK)
522 error e(
"%s->%s\n",s.c_str(),Tcl_GetStringResult(
interp()));
526 result=Tcl_GetStringResult(
interp());
536 return (*
this)|
" "|x;
541 tclcmd& operator|(T x) {eco_strstream::operator|(x);
return *
this;}
548 return (
tclcmd&) eco_strstream::operator|(x);
552 tclcmd& operator|(
const char* cmd)
554 eco_strstream::operator|(cmd);
555 if (cmd[strlen(cmd)-1]==
'\n') exec();
558 tclcmd& operator|(
char* cmd) {
return operator|((
const char*) cmd);}
567 if (interpExiting)
return;
568 std::string tmps=str();
569 Tcl_SetResult(
interp(),const_cast<char*>(tmps.c_str()),TCL_VOLATILE);}
581 std::string searchid;
582 std::string arrayname;
597 void tclindex::done()
600 if (!searchid.empty())
602 cmd <<
"array donesearch " << arrayname << searchid <<
"\n";
614 cmd <<
"array exists " << x.name <<
"\n";
615 if (!atoi(cmd.result.c_str()))
return x;
618 cmd <<
"array startsearch " << x.name <<
"\n";
620 searchid = cmd.result;
631 if (searchid.empty())
throw error(
"tclindex not initialized");
632 cmd <<
"array nextelement " << arrayname << searchid <<
"\n";
633 r.name=arrayname+
"("+cmd.result+
")";
642 cmd <<
"array size " << name <<
"\n";
643 return atoi(cmd.result.c_str());
651 if (!searchid.empty())
653 cmd <<
"array anymore " << arrayname << searchid <<
"\n";
654 return !atoi(cmd.result.c_str());
descriptor access to a class's privates
An RAII class for returning values to TCL.
Definition: tcl++.h:563
tclvar(const string &nm, const char *val=NULL)
TCL var name this i sbound to. If val not null, then initialise the var to val.
Definition: tcl++.h:367
unsigned myid
main window of application
bool exists(const tclvar &x)
Check if a TCL variable exists.
Definition: tcl++.h:465
An EcoLab string stream class.
Definition: eco_strstream.h:64
EcoLab exception class.
Definition: error.h:25
Tcl_Interp * interp()
default interpreter. Set to NULL when interp() is destroyed
Definition: tcl++.h:222
int setEcoLabLib(const char *path)
set the value of the TCL variable ecolab_library
tclvar operator=(double x)
tclvars may be freely mixed with arithmetic expressions
Definition: tcl++.h:373
An EcoLab string stream class.
TCL variable class.
Definition: tcl++.h:354
tclvar operator[](int index)
arrays can be indexed either by integers, or by strings
Definition: tcl++.h:477
bool is_setterGetter
true if this command is a setter/getter (no argument=getter, 1 or more arguments a setter) ...
Definition: tcl++.h:281
#define CLASSDESC_ACCESS(type)
add friend statements for each accessor function
Definition: classdesc_access.h:36
int TCL_newcommand(const char *c)
test whether command is not already defined
Definition: tcl++.h:262
Contains definitions related to classdesc functionality.
Definition: arrays.h:2514
_OPENMP
Definition: accessor.h:16
int size()
size of arrays
Definition: tcl++.h:638
bool is_const
true if this command doesn't affect the object's (or global state)
Definition: tcl++.h:279