TclCmdUtils.cc
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:1k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. #include "plvGlobals.h"
  2. #include "TclCmdUtils.h"
  3. static bool
  4. boolFromString (char* str)
  5. {
  6.   struct { char* name; bool val; } table[] = {
  7.     { "true", true },
  8.     { "false", false },
  9.     { "yes", true },
  10.     { "no", false },
  11.     { "on", true },
  12.     { "off", false }
  13.   };
  14.   #define nTable (sizeof(table) / sizeof(table[0]))
  15.   for (int i = 0; i < nTable; i++) {
  16.     if (!strcmp (table[i].name, str))
  17.       return table[i].val;
  18.   }
  19.   return (atoi (str) > 0);
  20. }
  21. char* GetTclGlobal (char* name, char* def)
  22. {
  23.   char* val = Tcl_GetVar (g_tclInterp, name, TCL_GLOBAL_ONLY);
  24.   if (!val)
  25.     return def;
  26.   return val;
  27. }
  28. bool  GetTclGlobalBool (char* name, bool def)
  29. {
  30.   char* val = GetTclGlobal (name);
  31.   if (!val)
  32.     return def; // == false
  33.   return boolFromString (val);
  34. }
  35. bool SetVarFromBoolString (char* str, bool& out)
  36. {
  37.   // could have this error-check that given str is actually a bool value
  38.   out = boolFromString (str);
  39.   return true;
  40. }
  41. bool SetVarFromBoolArgListIndex (int argc, char** argv,
  42. int i, bool& var)
  43. {
  44.   if (i >= argc) {
  45.     char buffer[1000];
  46.     sprintf (buffer, "Missing argument to %s %sn", argv[0], argv[i-1]);
  47.     Tcl_SetResult (g_tclInterp, buffer, TCL_VOLATILE);
  48.     return false;
  49.   }
  50.   if (!SetVarFromBoolString (argv[i], var)) {
  51.     char buffer[1000];
  52.     sprintf (buffer, "Bad argument '%s' to %s %sn",
  53.      argv[i], argv[0], argv[i-1]);
  54.     Tcl_SetResult (g_tclInterp, buffer, TCL_VOLATILE);
  55.     return false;
  56.   }
  57.   return true;
  58. }