- Timestamp:
- Feb 28, 2006, 11:20:59 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/tcl/src/RpLibraryTclInterface.cc
r225 r227 50 50 static int RpTclLibResult _ANSI_ARGS_(( ClientData cdata, Tcl_Interp *interp, 51 51 int argc, const char *argv[] )); 52 static int RpTclLibValue _ANSI_ARGS_(( ClientData cdata, Tcl_Interp *interp, 53 int argc, const char *argv[] )); 52 54 static int RpTclLibXml _ANSI_ARGS_(( ClientData cdata, Tcl_Interp *interp, 53 55 int argc, const char *argv[] )); … … 107 109 RpTclResult, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); 108 110 111 Tcl_CreateCommand(interp, "::Rappture::LibraryObj::value", 112 RpTclLibValue, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); 113 109 114 return TCL_OK; 110 115 } … … 830 835 831 836 int 837 RpTclLibValue ( ClientData cdata, 838 Tcl_Interp *interp, 839 int argc, 840 const char *argv[] ) 841 { 842 843 Tcl_CmdInfo info; // pointer to the command info 844 std::string path = ""; 845 std::string libStr = ""; 846 RpLibrary* lib = NULL; 847 int nextarg = 1; // start parsing using the '1'th argument 848 int argsLeft = 0; // temp variable for calculation 849 int noerr = 0; // err flag for Tcl_GetCommandInfo 850 851 std::list<std::string> valList; // list to store the return value 852 // from diff command 853 std::list<std::string>::iterator valListIter; 854 855 if ( argc != 3 ) { 856 Tcl_AppendResult(interp, 857 "usage: ", argv[0], " <xmlobj> <path>", 858 (char*)NULL); 859 return TCL_ERROR; 860 } 861 862 // parse input arguments 863 argsLeft = (argc-nextarg); 864 if (argsLeft == 2) { 865 libStr = std::string(argv[nextarg++]); 866 noerr = Tcl_GetCommandInfo(interp, libStr.c_str(), &info); 867 if (noerr == 1) { 868 if (info.proc == RpLibCallCmd) { 869 lib = (RpLibrary*) (info.clientData); 870 } 871 else { 872 Tcl_AppendResult(interp, 873 "wrong arg type: xmlobj should be a Rappture Library", 874 (char*)NULL); 875 return TCL_ERROR; 876 } 877 } 878 else { 879 // there was an error getting the command info 880 Tcl_AppendResult(interp, 881 "There was an error getting the command info for " 882 "the provided library \"", libStr.c_str(), "\'", 883 "\nAre you sure its a Rappture Library Object?", 884 (char*)NULL); 885 return TCL_ERROR; 886 } 887 path = std::string(argv[nextarg++]); 888 } 889 else { 890 Tcl_ResetResult(interp); 891 Tcl_AppendResult(interp, 892 "wrong # args: should be \"", argv[0], " <xmlobj> <path>\"", 893 (char*)NULL); 894 return TCL_ERROR; 895 } 896 897 // perform the value command 898 valList = lib->value(path); 899 valListIter = valList.begin(); 900 901 // parse through the output of the diff command 902 // put it into the return result 903 while (valListIter != valList.end()) { 904 Tcl_AppendElement(interp,(*valListIter).c_str()); 905 906 // increment the iterator 907 valListIter++; 908 } 909 910 return TCL_OK; 911 } 912 913 int 832 914 RpTclLibXml ( ClientData cdata, 833 915 Tcl_Interp *interp,
Note: See TracChangeset
for help on using the changeset viewer.