--- /dev/null
+-- File: ENV.edl
+-- Author: Jean GAUTIER
+-- History: Tue Sep 24 19:33:16 1996 Jean GAUTIER Creation
+-- Copyright: Matra Datavision 1996
+
+@ifnotdefined ( %ENV_EDL) then
+@set %ENV_EDL = "";
+
+@set %ENV_EngineLoadPath = "";
+@set %ENV_EngineStarterVersion = "1";
+
+@if ( %Station != "hp" ) then
+ @set %ENV_PATH = "PATH";
+ @set %ENV_LDPATH = "LD_LIBRARY_PATH";
+ @if ( %Station == "wnt" ) then
+ @set %ENV_PATH = "PATH";
+ @set %ENV_LDPATH = "PATH";
+ @endif;
+@else
+ @set %ENV_PATH = "PATH";
+ @set %ENV_LDPATH = "SHLIB_PATH";
+@endif;
+
+@endif;
--- /dev/null
+WOKTclTools_PInterp.hxx
+WOKTclTools_CommandFunction.hxx
+WOKTclTools_Messages.hxx
+WOKTclTools_Messages.cxx
+WOKTclTools_CMPLRS.edl
+WOKTclTools_WokCommand.hxx
+WOKTclTools_ExitHandler.hxx
+WOKTclTools_TriggerHandler.cxx
+WOKTclTools_TriggerHandler.hxx
+WOKTclTools_WOKSteps.edl
+WOKTclTools_Replace.tcl
+WOKTclTools_Interpretor_proto.hxx
+ENV.edl
+EXTERNLIB
--- /dev/null
+-- File: WOKTclTools.cdl
+-- Created: Fri Nov 24 13:59:07 1995
+-- Author: Jean GAUTIER
+-- <jga@cobrax>
+---Copyright: Matra Datavision 1995
+
+
+package WOKTclTools
+
+ ---Purpose:
+
+uses
+
+ WOKTools,
+ TCollection
+
+is
+
+ imported CommandFunction;
+ imported PInterp;
+ imported ExitHandler;
+
+ imported WokCommand;
+
+ class Package;
+
+ class Interpretor;
+
+ generic class HandleTable;
+
+ class MsgAPI;
+
+-- class SequenceOfHandleTable
+-- instantiates Sequence from TCollection ( HandleTable from WOKTclTools);
+
+end WOKTclTools;
--- /dev/null
+-- File: WOKTclTools_CMPLRS.edl
+-- Author: Stagiaire Pascal BABIN
+-- History: Tue Jul 9 13:39:27 1996 Stagiaire Pascal BABIN Creation
+-- Copyright: Matra Datavision 1996
+
+@ifnotdefined ( %WOKTclTools_CMPLRS_EDL) then
+@set %WOKTclTools_CMPLRS_EDL = "";
+
+
+@if ( (%Station != "wnt") && (%Station != "hp") ) then
+ @string %CMPLRS_CXX_Options = " -I/usr/tcltk/include -I/usr/tcltk/include/itcl -I/usr/include " %CMPLRS_CXX_Options;
+@endif;
+
+@if (%Station == "hp") then
+ @string %CMPLRS_CXX_Options = " -I/usr/tcltk/include -I/usr/tcltk/include/itcl " %CMPLRS_CXX_Options;
+@endif;
+
+@if ( %Station == "wnt" ) then
+ @string %CMPLRS_CXX_Options = %CMPLRS_CXX_Options " -ID:/DevTools/TclTk/include ";
+-- @set %CMPLRS_CXX_Command = "%MSDevDir%/bin/cl -nologo -MD -W3 -GX -Ob2 ";
+@endif;
+
+
+@endif;
--- /dev/null
+// File: WOKTclTools_CommandFunction.hxx
+// Created: Tue Aug 1 23:18:40 1995
+// Author: Jean GAUTIER
+// <jga@cobrax>
+
+
+#ifndef WOKTclTools_CommandFunction_HeaderFile
+#define WOKTclTools_CommandFunction_HeaderFile
+
+class WOKTclTools_Interpretor;
+
+typedef Standard_Integer (*WOKTclTools_CommandFunction)(const Handle(WOKTclTools_Interpretor)&, Standard_Integer, char**);
+
+
+#endif
--- /dev/null
+// File: WOKTclTools_ExitHandler.hxx
+// Created: Wed Aug 21 16:16:26 1996
+// Author: Jean GAUTIER
+// <jga@cobrax.paris1.matra-dtv.fr>
+
+
+#ifndef WOKTclTools_ExitHandler_HeaderFile
+#define WOKTclTools_ExitHandler_HeaderFile
+
+#if defined( WNT ) && defined( TCL_VERSION_75 )
+# include <tcl75.h>
+#endif // WNT
+
+#include <tcl.h>
+
+typedef Tcl_ExitProc* WOKTclTools_ExitHandler;
+
+
+#endif
--- /dev/null
+-- File: WOKTclTools_HandleTable.cdl
+-- Created: Wed Oct 9 13:22:07 1996
+-- Author: Jean GAUTIER
+-- <jga@cobrax.paris1.matra-dtv.fr>
+---Copyright: Matra Datavision 1996
+
+
+
+generic class HandleTable from WOKTclTools ( TableItem as any )
+
+ ---Purpose:
+
+uses
+ Transient from Standard,
+ HAsciiString from TCollection,
+ AsciiString from TCollection
+
+
+is
+
+ Create returns HandleTable from WOKTclTools;
+
+ Create(aprefix : CString from Standard; nbinit : Integer from Standard = 20 )
+ returns HandleTable from WOKTclTools;
+
+
+ Init(me:out; aprefix : CString from Standard; nbinit : Integer from Standard = 20 );
+
+ Prefix(me)
+ ---C++: return const &
+ returns AsciiString from TCollection;
+
+ AddHandle(me:out; ahandle : TableItem)
+ returns HAsciiString from TCollection;
+
+ RemoveHandle(me:out; aname : HAsciiString from TCollection);
+
+ GetHandle(me; aname : HAsciiString from TCollection)
+ ---C++: return const &
+ returns TableItem;
+
+ GetHandle(me; aname : CString from Standard)
+ ---C++: return const &
+ returns TableItem;
+
+fields
+
+ mybase : Address from Standard;
+ myprefix : AsciiString from TCollection;
+
+end HandleTable;
--- /dev/null
+// File: WOKTclTools_HandleTable.gxx
+// Created: Mon Oct 28 19:16:15 1996
+// Author: Jean GAUTIER
+// <jga@cobrax.paris1.matra-dtv.fr>
+
+// File: WOKTclTools_HandleTable.cxx
+// Created: Wed Oct 9 13:27:57 1996
+// Author: Jean GAUTIER
+// <jga@cobrax.paris1.matra-dtv.fr>
+
+
+#include <tclExtend.h>
+
+
+#include <Standard_ProgramError.hxx>
+
+
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : WOKTclTools_HandleTable
+//purpose :
+//=======================================================================
+WOKTclTools_HandleTable::WOKTclTools_HandleTable()
+{
+
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : WOKTclTools_HandleTable
+//purpose :
+//=======================================================================
+WOKTclTools_HandleTable::WOKTclTools_HandleTable(const Standard_CString aprefix, const Standard_Integer nbinit)
+{
+ Init(aprefix, nbinit);
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : Init
+//purpose :
+//=======================================================================
+void WOKTclTools_HandleTable::Init(const Standard_CString aprefix, const Standard_Integer nbinit)
+{
+ myprefix = aprefix;
+ mybase = Tcl_HandleTblInit(aprefix, sizeof(TableItem), nbinit);
+}
+
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : Prefix
+//purpose :
+//=======================================================================
+const TCollection_AsciiString& WOKTclTools_HandleTable::Prefix() const
+{
+ return myprefix;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : AddHandle
+//purpose :
+//=======================================================================
+Handle(TCollection_HAsciiString) WOKTclTools_HandleTable::AddHandle(const TableItem& object)
+{
+ static char HANDLE[256];
+ TableItem* ptr;
+ Handle(TCollection_HAsciiString) result;
+
+ ptr = (TableItem*) Tcl_HandleAlloc(mybase, HANDLE);
+ if(ptr != NULL)
+ {
+ *ptr = object;
+ result = new TCollection_HAsciiString;
+ }
+ return result;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : RemoveHandle
+//purpose :
+//=======================================================================
+void WOKTclTools_HandleTable::RemoveHandle(const Handle(TCollection_HAsciiString)& aname)
+{
+ Standard_Address handle;
+
+ handle = Tcl_HandleXlate(NULL, mybase, aname->ToCString());
+ if(handle != NULL)
+ {
+ Tcl_HandleFree(mybase,handle);
+ }
+}
+
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : GetHandle
+//purpose :
+//=======================================================================
+const TableItem& WOKTclTools_HandleTable::GetHandle(const Handle(TCollection_HAsciiString)& aname) const
+{
+ Standard_Address handle;
+
+ handle = Tcl_HandleXlate(NULL, mybase, aname->ToCString());
+ if(handle == NULL)
+ {
+ Standard_ProgramError::Raise("WOKTclTools_HandleTable::GetHandle : no such handle");
+ }
+ return *((TableItem *) handle);
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : GetHandle
+//purpose :
+//=======================================================================
+const TableItem& WOKTclTools_HandleTable::GetHandle(const Standard_CString aname) const
+{
+ Standard_Address handle;
+
+ handle = Tcl_HandleXlate(NULL, mybase, aname);
+ if(handle == NULL)
+ {
+ Standard_ProgramError::Raise("WOKTclTools_HandleTable::GetHandle : no such handle");
+ }
+ return *((TableItem *) handle);
+}
--- /dev/null
+-- File: WOKTclTools_Interpretor.cdl
+-- Created: Fri Jul 28 21:52:33 1995
+-- Author: Jean GAUTIER
+-- <jga@cobrax>
+---Copyright: Matra Datavision 1995
+
+
+
+class Interpretor from WOKTclTools
+inherits TShared from MMgt
+
+ ---Purpose: Provides an encapsulation of the TCL interpretor
+ -- to define WOKTclTools commands.
+
+uses
+ PInterp from WOKTclTools,
+ WokCommand from WOKTclTools,
+ Return from WOKTools,
+ CommandFunction from WOKTclTools,
+ ExitHandler from WOKTclTools
+
+is
+
+ Create returns mutable Interpretor from WOKTclTools;
+
+ Create(anInterp : PInterp from WOKTclTools)
+ returns mutable Interpretor from WOKTclTools;
+
+ Add(me : mutable; Command : CString;
+ Help : CString;
+ Function : CommandFunction from WOKTclTools;
+ Group : CString = "User Commands");
+ ---Purpose: Creates a new command with name <Command>, help
+ -- string <Help> in group <Group>.
+ -- <Function> implement the function.
+
+
+ Add(me : mutable; Command : CString;
+ Help : CString;
+ Function : WokCommand from WOKTclTools;
+ Group : CString = "User Commands");
+
+
+-- AddHandleTable(me : out;atable : HandleTable from WOKTclTools);
+-- AddHandleTable(me : out;aprefix : CString from Standard);
+
+ AddExitHandler(me: mutable; Function : ExitHandler from WOKTclTools);
+ DeleteExitHandler(me: mutable; Function : ExitHandler from WOKTclTools);
+
+ IsCmdName(me : mutable; Command : CString) returns Boolean from Standard;
+
+ Remove(me : mutable; Command : CString)
+ returns Boolean;
+ ---Purpose: Removes <Command>, returns true if success (the
+ -- command existed).
+
+
+ -- Packages
+ --
+ --
+
+ PkgProvide(me: mutable; aname, aversion : CString from Standard)
+ returns Integer from Standard;
+
+ -- The result
+ --
+
+ TreatReturn(me:mutable; values : Return from WOKTools)
+ returns Integer from Standard;
+
+ Result(me) returns CString;
+ GetReturnValues(me; retval : out Return from WOKTools)
+ returns Boolean from Standard;
+
+ Reset(me : mutable);
+ ---Purpose: Resets the result to empty string
+
+ Append(me : mutable; Result : CString);
+ ---Purpose: Appends to the result
+
+ Append(me : mutable; Result : Integer);
+ ---Purpose: Appends to the result
+
+ Append(me : mutable; Result : Real);
+ ---Purpose: Appends to the result
+
+ AppendElement(me : mutable; Result : CString);
+ ---Purpose: Appends to the result the string as a list element
+
+
+
+ --
+ -- Interpretation
+ --
+
+ Eval(me : mutable; Script : CString)
+ returns Integer;
+ ---Purpose: Eval the script and returns OK = 0, ERROR = 1
+
+ RecordAndEval(me : mutable; Script : CString; Flags : Integer = 0)
+ returns Integer;
+ ---Purpose: Eval the script and returns OK = 0, ERROR = 1
+ -- Store the script in the history record.
+
+ EvalFile(me : mutable; FileName : CString)
+ returns Integer;
+ ---Purpose: Eval the content on the file and returns status
+
+ Complete(myclass; Script : CString) returns Boolean;
+ ---Purpose: Returns True if the script is complete, no pending
+ -- closing braces. (})
+
+ Destroy(me : mutable);
+ ---C++: alias ~
+
+ --
+ -- Access to Tcl_Interp
+ --
+
+ Set(me : mutable; anInterp : PInterp from WOKTclTools);
+
+ Interp (me) returns PInterp from WOKTclTools;
+
+ --
+ -- Current Interpretor Handling
+ --
+ Current(myclass)
+ ---C++: return &
+ returns Interpretor from WOKTclTools;
+
+ --
+ -- Messages Handling
+ --
+ SetEndMessageProc(myclass; aproc : CString from Standard);
+ UnSetEndMessageProc(myclass);
+
+ EndMessageProc(myclass)
+ ---C++: return &
+ returns CString from Standard;
+
+ SetEndMessageArgs(myclass; aArgs : CString from Standard);
+ UnSetEndMessageArgs(myclass);
+
+ EndMessageArgs(myclass)
+ ---C++: return &
+ returns CString from Standard;
+
+ TreatMessage(me; newline : Boolean from Standard; atype : Character from Standard; amsg : CString from Standard);
+
+fields
+
+ isAllocated : Boolean from Standard;
+ myInterp : PInterp from WOKTclTools;
+-- myhtables : SequenceOfHandleTable from WOKTclTools;
+
+end Interpretor;
--- /dev/null
+// File: WOKTclTools_Interpretor.cxx
+// Created: Fri Jul 28 22:00:34 1995
+// Author: Jean GAUTIER
+// <jga@cobrax>
+
+#include <TCollection_HAsciiString.hxx>
+
+#include <WOKTools_ReturnValue.hxx>
+#include <WOKTools_StringValue.hxx>
+#include <WOKTools_EnvValue.hxx>
+#include <WOKTools_ChDirValue.hxx>
+#include <WOKTools_InterpFileValue.hxx>
+#include <WOKTools_HSequenceOfReturnValue.hxx>
+#include <WOKTools_Messages.hxx>
+
+#ifdef WNT
+#include <WOKUtils_ShellManager.hxx>
+#define WOKUtils_ProcessManager WOKUtils_ShellManager
+# ifdef _DEBUG
+# include <windows.h>
+typedef void ( *FREE_FUNC ) ( void* );
+void Free ( void* );
+# endif // _DEBUG
+#else
+#include <WOKUtils_ProcessManager.hxx>
+#endif // WNT
+#include <WOKTclTools_Interpretor.ixx>
+
+#include <Standard_RangeError.hxx>
+#include <Standard_ErrorHandler.hxx>
+
+#ifdef WNT
+# ifdef TCL_VERSION_75
+# pragma comment( lib, "tcl75.lib" )
+# pragma message( "Information: tcl75.lib is using as TCL library" )
+# include <tcl75.h>
+# elif defined( TCL_VERSION_76 )
+# pragma comment( lib, "tcl76.lib" )
+# pragma message( "Information: tcl76.lib is using as TCL library" )
+# else
+# pragma comment( lib, "tcl76i.lib" )
+# pragma message( "Information: tcl76i.lib is using as TCL library" )
+# endif // TCL75
+#endif // WNT
+
+#include <tcl.h>
+
+//
+// Call backs for TCL
+//
+
+struct CData {
+ CData(WOKTclTools_CommandFunction ff, Handle(WOKTclTools_Interpretor) ii) : f(ff), i(ii) {}
+ WOKTclTools_CommandFunction f;
+ Handle(WOKTclTools_Interpretor) i;
+};
+
+struct WOKCData {
+ WOKCData(WOKTclTools_WokCommand ff, Handle(WOKTclTools_Interpretor) ii) : f(ff), i(ii) {}
+ WOKTclTools_WokCommand f;
+ Handle(WOKTclTools_Interpretor) i;
+};
+
+Standard_EXPORT Handle(WOKTclTools_Interpretor) CurrentInterp;
+
+static Standard_Integer CommandCmd (ClientData clientData, Tcl_Interp *,
+ Standard_Integer argc, char* argv[])
+{
+ CData* C = (CData*) clientData;
+
+ // set de l'interprete en cours
+ CurrentInterp = C->i;
+
+ if (C->f(C->i,argc,argv) == 0)
+ {
+ CurrentInterp.Nullify();
+ return TCL_OK;
+ }
+ else
+ {
+ CurrentInterp.Nullify();
+ return TCL_ERROR;
+ }
+}
+
+static Standard_Integer WOKCommand(ClientData clientData, Tcl_Interp *,
+ Standard_Integer argc, char* argv[])
+{
+ WOKCData* C = (WOKCData*) clientData;
+
+ // set de l'interprete en cours
+ CurrentInterp = C->i;
+
+ WOKTclTools_WokCommand acmd = C->f;
+
+ {
+ try {
+
+ WOKTools_Return returns;
+
+ WOKUtils_ProcessManager::Arm();
+
+ // appel de la fonction API
+ if(!(*acmd)(argc, argv, returns))
+ {
+ if(!C->i->TreatReturn(returns))
+ {
+ WOKUtils_ProcessManager::UnArm();
+ return TCL_OK;
+ }
+ }
+ WOKUtils_ProcessManager::UnArm();
+ return TCL_ERROR;
+ }
+ catch (Standard_Failure) {
+ Handle(Standard_Failure) E = Standard_Failure::Caught();
+
+ strstream astream;
+ astream << E << ends;
+ ErrorMsg << argv[0] << "Exception was raised : " << astream.str() << endm;
+ WOKUtils_ProcessManager::UnArm();
+ return TCL_ERROR;
+ }
+ }
+
+ return TCL_OK;
+}
+
+static void CommandDelete (ClientData clientData)
+{
+ CData *C = (CData*) clientData;
+ delete C;
+}
+
+//=======================================================================
+//function : WOKTclTools_Interpretor
+//purpose :
+//=======================================================================
+WOKTclTools_Interpretor::WOKTclTools_Interpretor() :
+ isAllocated(Standard_True)
+{
+ myInterp = Tcl_CreateInterp();
+}
+
+//=======================================================================
+//function : WOKTclTools_Interpretor
+//purpose :
+//=======================================================================
+WOKTclTools_Interpretor::WOKTclTools_Interpretor(const WOKTclTools_PInterp& p) :
+ isAllocated(Standard_False),
+ myInterp(p)
+{
+}
+
+//=======================================================================
+//function : Add
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::Add(const Standard_CString n,
+ const Standard_CString help,
+ const WOKTclTools_CommandFunction f,
+ const Standard_CString group)
+{
+ CData* C = new CData(f,this);
+
+ Tcl_CreateCommand(myInterp,n,CommandCmd, (ClientData) C, CommandDelete);
+
+ // add the help
+ Tcl_SetVar2(myInterp,"WOKTclTools_Helps",n,help,TCL_GLOBAL_ONLY);
+ Tcl_SetVar2(myInterp,"WOKTclTools_Groups",group,n,
+ TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT);
+}
+
+
+//=======================================================================
+//function : Add
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::Add(const Standard_CString n,
+ const Standard_CString help,
+ const WOKTclTools_WokCommand f,
+ const Standard_CString group)
+{
+ WOKCData* C = new WOKCData(f,this);
+
+ Tcl_CreateCommand(myInterp,n,WOKCommand, (ClientData) C, CommandDelete);
+
+ // add the help
+ Tcl_SetVar2(myInterp,"WOKTclTools_Helps",n,help,TCL_GLOBAL_ONLY);
+ Tcl_SetVar2(myInterp,"WOKTclTools_Groups",group,n,
+ TCL_GLOBAL_ONLY|TCL_APPEND_VALUE|TCL_LIST_ELEMENT);
+}
+
+
+//=======================================================================
+//function : AddExitHandler
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::AddExitHandler(const WOKTclTools_ExitHandler f)
+{
+ Tcl_CreateExitHandler(f, NULL);
+}
+
+
+//=======================================================================
+//function : DeleteExitHandler
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::DeleteExitHandler(const WOKTclTools_ExitHandler f)
+{
+ Tcl_DeleteExitHandler(f, NULL);
+}
+
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : IsCmdName
+//purpose :
+//=======================================================================
+Standard_Boolean WOKTclTools_Interpretor::IsCmdName(Standard_CString const n)
+{
+ Tcl_CmdInfo Info;
+ return (Tcl_GetCommandInfo(myInterp, n, &Info)) != 0;
+}
+
+//=======================================================================
+//function : Remove
+//purpose :
+//=======================================================================
+Standard_Boolean WOKTclTools_Interpretor::Remove(Standard_CString const n)
+{
+ Standard_Integer result = Tcl_DeleteCommand(myInterp,n);
+ return (result == 0);
+}
+
+
+//=======================================================================
+//function : TreatResult
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_Interpretor::TreatReturn(const WOKTools_Return& returns)
+{
+ Standard_Integer i;
+
+ WOK_TRACE {
+ for(i = 1; i <= returns.Length() ; i++)
+ {
+ Handle(WOKTools_ReturnValue) avalue = returns.Value(i);
+
+ switch(avalue->Type())
+ {
+ case WOKTools_String:
+ {
+ Handle(WOKTools_StringValue) astrval = Handle(WOKTools_StringValue)::DownCast(avalue);
+ InfoMsg << "WOKTclTools_Intepretor::TreatResult"
+ << "Returned String " << astrval->Value() << endm;
+ }
+ break;
+ case WOKTools_Environment:
+ {
+ Handle(WOKTools_EnvValue) aenval = Handle(WOKTools_EnvValue)::DownCast(avalue);
+ if(aenval->ToSet())
+ {
+ InfoMsg << "WOKTclTools_Intepretor::TreatResult"
+ << "Returned SetEnvironment " << aenval->Name() << "=" << aenval->Value() << endm;
+ }
+ else
+ {
+ InfoMsg << "WOKTclTools_Intepretor::TreatResult"
+ << "Returned UnSetEnvironment " << aenval->Name() << endm;
+ }
+ }
+ break;
+ case WOKTools_ChDir:
+ {
+ Handle(WOKTools_ChDirValue) achdirval = Handle(WOKTools_ChDirValue)::DownCast(avalue);
+ InfoMsg << "WOKTclTools_Intepretor::TreatResult"
+ << "Returned Change dir " << achdirval->Path() << endm;
+ }
+ break;
+ case WOKTools_InterpFile:
+ {
+ Handle(WOKTools_InterpFileValue) aifile = Handle(WOKTools_InterpFileValue)::DownCast(avalue);
+ InfoMsg << "WOKTclTools_Intepretor::TreatResult"
+ << "Returned Source File " << aifile->File() << endm;
+ }
+ break;
+ }
+ }
+ }
+
+ Reset();
+
+ // Prise en compte des resultats
+ for(i = 1; i <= returns.Length() ; i++)
+ {
+ Handle(WOKTools_ReturnValue) avalue = returns.Value(i);
+
+ switch(avalue->Type())
+ {
+ case WOKTools_String:
+ {
+ Handle(WOKTools_StringValue) astrval = Handle(WOKTools_StringValue)::DownCast(avalue);
+ if (!astrval->Value().IsNull()) {
+ AppendElement(astrval->Value()->ToCString());
+ }
+ }
+ break;
+ case WOKTools_Environment:
+ {
+ Handle(WOKTools_EnvValue) aenval;
+ Handle(TCollection_HAsciiString) acmd;
+
+ aenval = Handle(WOKTools_EnvValue)::DownCast(avalue);
+
+ if(aenval->ToSet())
+ {
+ if(IsCmdName("wok_setenv_proc"))
+ {
+ acmd = new TCollection_HAsciiString("wok_setenv_proc ");
+ acmd->AssignCat(aenval->Name()->ToCString());
+ acmd->AssignCat(" \"");
+ acmd->AssignCat(aenval->Value()->ToCString());
+ acmd->AssignCat("\"");
+ if(Eval(acmd->ToCString())) return 1;
+ }
+ else
+ {
+ acmd = new TCollection_HAsciiString("set env(");
+ acmd->AssignCat(aenval->Name()->ToCString());
+ acmd->AssignCat(") \"");
+ acmd->AssignCat(aenval->Value()->ToCString());
+ acmd->AssignCat("\"");
+ if(Eval(acmd->ToCString())) return 1;
+ }
+ }
+ else
+ {
+ if(IsCmdName("wok_unsetenv_proc"))
+ {
+ acmd = new TCollection_HAsciiString("wok_unsetenv_proc ");
+ acmd->AssignCat(aenval->Name()->ToCString());
+ if(Eval(acmd->ToCString())) return 1;
+ }
+ else
+ {
+ acmd = new TCollection_HAsciiString("unset env(");
+ acmd->AssignCat(aenval->Name()->ToCString());
+ acmd->AssignCat(")");
+ if(Eval(acmd->ToCString())) return 1;
+ }
+ }
+ }
+ break;
+ case WOKTools_ChDir:
+ {
+ Handle(WOKTools_ChDirValue) achdirval;
+ Handle(TCollection_HAsciiString) acmd;
+
+ achdirval = Handle(WOKTools_ChDirValue)::DownCast(avalue);
+
+
+ if(IsCmdName("wok_cd_proc"))
+ {
+ acmd = new TCollection_HAsciiString("wok_cd_proc ");
+ acmd->AssignCat(achdirval->Path());
+ if(Eval(acmd->ToCString())) return 1;
+ }
+ else
+ {
+ acmd = new TCollection_HAsciiString("cd ");
+ acmd->AssignCat(achdirval->Path());
+ if(Eval(acmd->ToCString())) return 1;
+ }
+
+ }
+ break;
+ case WOKTools_InterpFile:
+ {
+ Handle(WOKTools_InterpFileValue) afilevalue = Handle(WOKTools_InterpFileValue)::DownCast(avalue);
+ Handle(TCollection_HAsciiString) acmd;
+
+ if(IsCmdName("wok_source_proc"))
+ {
+
+ switch(afilevalue->InterpType())
+ {
+ case WOKTools_CShell:
+ acmd = new TCollection_HAsciiString("wok_source_proc csh ");
+ break;
+ case WOKTools_BourneShell:
+ acmd = new TCollection_HAsciiString("wok_source_proc sh ");
+ break;
+ case WOKTools_KornShell:
+ acmd = new TCollection_HAsciiString("wok_source_proc ksh ");
+ break;
+ case WOKTools_TclInterp:
+ acmd = new TCollection_HAsciiString("wok_source_proc tcl ");
+ break;
+ case WOKTools_EmacsLisp:
+ acmd = new TCollection_HAsciiString("wok_source_proc emacs ");
+ break;
+ case WOKTools_WNTCmd:
+ acmd = new TCollection_HAsciiString("wok_source_proc wnt ");
+ break;
+ }
+ acmd->AssignCat(afilevalue->File());
+ if(Eval(acmd->ToCString())) return 1;
+ }
+ else
+ {
+ if(afilevalue->InterpType() != WOKTools_TclInterp)
+ {
+ ErrorMsg << "WOKTclTools_Intepretor::TreatResult"
+ << "Cannot eval not Tcl script without wok_source_proc defined" << endm;
+ ErrorMsg << "WOKTclTools_Intepretor::TreatResult"
+ << "Please provide wok_source_proc to use feature" << endm;
+ return 1;
+ }
+ else
+ {
+ if(EvalFile(afilevalue->File()->ToCString()) != TCL_OK) return 1;
+ }
+ }
+
+ }
+ }
+ }
+ return 0;
+}
+
+//=======================================================================
+//function : Result
+//purpose :
+//=======================================================================
+Standard_CString WOKTclTools_Interpretor::Result() const
+{
+ return myInterp->result;
+}
+
+//=======================================================================
+//function : GetReturnValues
+//purpose :
+//=======================================================================
+Standard_Boolean WOKTclTools_Interpretor::GetReturnValues(WOKTools_Return& retval) const
+{
+ Standard_Integer argc,i;
+ Standard_CString* argv;
+
+ if(Tcl_SplitList(myInterp, myInterp->result, &argc, &argv)) return Standard_True;
+
+ for(i=0; i<argc; i++)
+ {
+ retval.AddStringValue(argv[i]);
+ }
+#if defined( WNT ) && defined( _DEBUG )
+ Free ( argv );
+#else
+ free(argv);
+#endif // WNT && _DEBUG
+ return Standard_False;
+}
+
+//=======================================================================
+//function : Reset
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::Reset()
+{
+ Tcl_ResetResult(myInterp);
+}
+
+//=======================================================================
+//function : Append
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::Append(const Standard_CString s)
+{
+ Tcl_AppendResult(myInterp,s,(Standard_CString)0);
+}
+
+//=======================================================================
+//function : Append
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::Append(const Standard_Integer i)
+{
+ char c[100];
+ sprintf(c,"%d",i);
+ Tcl_AppendResult(myInterp,c,(Standard_CString)0);
+}
+
+//=======================================================================
+//function : Append
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::Append(const Standard_Real i)
+{
+ char s[100];
+ sprintf(s,"%.17g",i);
+ Tcl_AppendResult(myInterp,s,(Standard_CString)0);
+}
+
+//=======================================================================
+//function : AppendElement
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::AppendElement(const Standard_CString s)
+{
+ Tcl_AppendElement(myInterp,s);
+}
+
+//=======================================================================
+//function : Eval
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_Interpretor::Eval(const Standard_CString line)
+{
+ return Tcl_Eval(myInterp,line);
+}
+
+
+//=======================================================================
+//function : Eval
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_Interpretor::RecordAndEval(const Standard_CString line,
+ const Standard_Integer flags)
+{
+ return Tcl_RecordAndEval(myInterp,line,flags);
+}
+
+//=======================================================================
+//function : EvalFile
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_Interpretor::EvalFile(const Standard_CString fname)
+{
+ return Tcl_EvalFile(myInterp,fname);
+}
+
+//=======================================================================
+//function :Complete
+//purpose :
+//=======================================================================
+Standard_Boolean WOKTclTools_Interpretor::Complete(const Standard_CString line)
+{
+ return Tcl_CommandComplete(line);
+}
+
+//=======================================================================
+//function : Destroy
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::Destroy()
+{
+ if (isAllocated)
+ Tcl_DeleteInterp(myInterp);
+}
+
+//=======================================================================
+//function : Interp
+//purpose :
+//=======================================================================
+WOKTclTools_PInterp WOKTclTools_Interpretor::Interp() const
+{
+ return myInterp;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : Set
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::Set(const WOKTclTools_PInterp& PI)
+{
+ if (isAllocated)
+ Tcl_DeleteInterp(myInterp);
+ isAllocated = Standard_False;
+ myInterp = PI;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : Current
+//purpose :
+//=======================================================================
+Handle(WOKTclTools_Interpretor)& WOKTclTools_Interpretor::Current()
+{
+ return CurrentInterp;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : SetEndMessageProc
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::SetEndMessageProc(const Standard_CString aproc)
+{
+ EndMessageProc() = strdup(aproc);
+ return;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : UnSetEndMessageProc
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::UnSetEndMessageProc()
+{
+ EndMessageProc() = NULL;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : EndMessageProc
+//purpose :
+//=======================================================================
+Standard_CString& WOKTclTools_Interpretor::EndMessageProc()
+{
+ static Standard_CString myendmsgproc;
+ return myendmsgproc;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : SetEndMessageArgs
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::SetEndMessageArgs(const Standard_CString aArgs)
+{
+ EndMessageArgs() = strdup(aArgs);
+ return;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : UnSetEndMessageArgs
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::UnSetEndMessageArgs()
+{
+ EndMessageArgs() = NULL;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : EndMessageArgs
+//purpose :
+//=======================================================================
+Standard_CString& WOKTclTools_Interpretor::EndMessageArgs()
+{
+ static Standard_CString myendmsgArgs;
+ return myendmsgArgs;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : TreatMessage
+//purpose :
+//=======================================================================
+void WOKTclTools_Interpretor::TreatMessage(const Standard_Boolean newline,
+ const Standard_Character achar,
+ const Standard_CString astr) const
+{
+ Tcl_CmdInfo infoPtr;
+ Standard_Integer status;
+
+ if(EndMessageProc() != NULL)
+ {
+ Standard_Character* argv[5];
+ Standard_Character tmp[2];
+ int argc;
+ argv[0] = EndMessageProc();
+ argv[1] = tmp;
+ argv[1][0] = achar;
+ argv[1][1] = '\0';
+ argv[2] = astr;
+ if(EndMessageArgs() == NULL)
+ {
+ argc = 3;
+ argv[3] = NULL;
+ }
+ else
+ {
+ argc = 4;
+ argv[3] = EndMessageArgs();
+ argv[4] = NULL;
+ }
+
+ if (Tcl_GetCommandInfo(myInterp, argv[0], &infoPtr) != 0)
+ {
+ infoPtr.proc (infoPtr.clientData, myInterp, argc, argv);
+ if (status==1)
+ Tcl_AddErrorInfo(myInterp,"Invalid message");
+ }
+ else
+ Tcl_AddErrorInfo(myInterp,"Unknown message handler procedure");
+ }
+ else
+ {
+ if (!newline)
+ {
+ Standard_Character* argv[5];
+ int argc = 4;
+ argv[0] = "puts";
+ argv[2] = "stderr";
+ argv[1] = "-nonewline";
+ argv[3] = astr;
+ argv[4] = NULL;
+
+ if (Tcl_GetCommandInfo(myInterp, argv[0], &infoPtr) != 0)
+ {
+ status = infoPtr.proc (infoPtr.clientData, myInterp, argc, argv);
+ if (status==1)
+ Tcl_AddErrorInfo(myInterp,"Invalid message");
+ }
+ else
+ Tcl_AddErrorInfo(myInterp,"Unknown message handler procedure");
+ }
+ else
+ {
+ Standard_Character* argv[4];
+ int argc = 3;
+ argv[0] = "puts";
+ argv[1] = "stderr";
+ argv[2] = astr;
+ argv[3] = NULL;
+
+ if (Tcl_GetCommandInfo(myInterp, argv[0], &infoPtr) != 0)
+ {
+ status = infoPtr.proc (infoPtr.clientData, myInterp, argc, argv);
+ if (status==1)
+ Tcl_AddErrorInfo(myInterp,"Invalid message");
+ }
+ else
+ Tcl_AddErrorInfo(myInterp,"Unknown message handler procedure");
+ }
+ }
+ return;
+}
+//=======================================================================
+#if defined( WNT ) && defined( _DEBUG )
+void Free ( void* ptr ) {
+
+ static HMODULE hCrt;
+ static FREE_FUNC func;
+
+ if ( hCrt == NULL ) {
+
+ hCrt = GetModuleHandle ( "MSVCRT" );
+ func = ( FREE_FUNC )GetProcAddress ( hCrt, "free" );
+
+ } // end if
+
+ if ( hCrt != NULL && func != NULL ) ( *func ) ( ptr );
+
+} // end Free
+#endif // WNT && _DEBUG
+
--- /dev/null
+// File modified by jga for Visul C++ 5.0
+//
+#ifndef _WOKTclTools_Interpretor_HeaderFile
+#define _WOKTclTools_Interpretor_HeaderFile
+
+#include <Handle_WOKTclTools_Interpretor.hxx>
+
+#include <Standard_Boolean.hxx>
+#include <WOKTclTools_PInterp.hxx>
+#include <MMgt_TShared.hxx>
+#include <Standard_CString.hxx>
+#include <WOKTclTools_CommandFunction.hxx>
+#include <WOKTclTools_WokCommand.hxx>
+#include <WOKTclTools_ExitHandler.hxx>
+#include <Standard_Integer.hxx>
+#include <Standard_Real.hxx>
+#include <Standard_Character.hxx>
+class WOKTools_Return;
+
+
+class WOKTclTools_Interpretor : public MMgt_TShared {
+
+public:
+
+ // Methods PUBLIC
+ //
+ Standard_EXPORT WOKTclTools_Interpretor();
+ Standard_EXPORT WOKTclTools_Interpretor(const WOKTclTools_PInterp& anInterp);
+ Standard_EXPORT void Add(const Standard_CString Command,const Standard_CString Help,const WOKTclTools_CommandFunction Function,const Standard_CString Group = "User Commands") ;
+ Standard_EXPORT void Add(const Standard_CString Command,const Standard_CString Help,const WOKTclTools_WokCommand Function,const Standard_CString Group = "User Commands") ;
+ Standard_EXPORT void AddExitHandler(const WOKTclTools_ExitHandler Function) ;
+ Standard_EXPORT void DeleteExitHandler(const WOKTclTools_ExitHandler Function) ;
+ Standard_EXPORT Standard_Boolean IsCmdName(const Standard_CString Command) ;
+ Standard_EXPORT Standard_Boolean Remove(const Standard_CString Command) ;
+ Standard_EXPORT Standard_Integer PkgProvide(const Standard_CString aname,const Standard_CString aversion) ;
+ Standard_EXPORT Standard_Integer TreatReturn(const WOKTools_Return& values) ;
+ Standard_EXPORT Standard_CString Result() const;
+ Standard_EXPORT Standard_Boolean GetReturnValues(WOKTools_Return& retval) const;
+ Standard_EXPORT void Reset() ;
+ Standard_EXPORT void Append(const Standard_CString Result) ;
+ Standard_EXPORT void Append(const Standard_Integer Result) ;
+ Standard_EXPORT void Append(const Standard_Real Result) ;
+ Standard_EXPORT void AppendElement(const Standard_CString Result) ;
+ Standard_EXPORT Standard_Integer Eval(const Standard_CString Script) ;
+ Standard_EXPORT Standard_Integer RecordAndEval(const Standard_CString Script,const Standard_Integer Flags = 0) ;
+ Standard_EXPORT Standard_Integer EvalFile(const Standard_CString FileName) ;
+ Standard_EXPORT static Standard_Boolean Complete(const Standard_CString Script) ;
+ Standard_EXPORT void Destroy() ;
+ ~WOKTclTools_Interpretor()
+ {
+ Destroy();
+ }
+
+ Standard_EXPORT void Set(const WOKTclTools_PInterp& anInterp) ;
+ Standard_EXPORT WOKTclTools_PInterp Interp() const;
+ Standard_EXPORT static Handle_WOKTclTools_Interpretor& Current() ;
+ Standard_EXPORT static void SetEndMessageProc(const Standard_CString aproc) ;
+ Standard_EXPORT static void UnSetEndMessageProc() ;
+ Standard_EXPORT static Standard_CString& EndMessageProc() ;
+ Standard_EXPORT static void SetEndMessageArgs(const Standard_CString aArgs) ;
+ Standard_EXPORT static void UnSetEndMessageArgs() ;
+ Standard_EXPORT static Standard_CString& EndMessageArgs() ;
+ Standard_EXPORT void TreatMessage(const Standard_Boolean newline,const Standard_Character atype,const Standard_CString amsg) const;
+
+ // Type management
+ //
+ friend Standard_EXPORT Handle_Standard_Type& WOKTclTools_Interpretor_Type_();
+ Standard_EXPORT const Handle(Standard_Type)& DynamicType() const;
+ Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const;
+
+private:
+
+ // Fields PRIVATE
+ //
+ Standard_Boolean isAllocated;
+ WOKTclTools_PInterp myInterp;
+
+
+};
+
+#endif
--- /dev/null
+// File: WOKTCL_Messages.cxx
+// Created: Wed Oct 18 13:08:16 1995
+// Author: Jean GAUTIER
+// <jga@cobrax>
+
+#if defined( WNT ) && defined( TCL_VERSION_75 )
+# include <tcl75.h>
+#endif // WNT
+
+#include <tcl.h>
+
+#include <WOKTclTools_Messages.hxx>
+#include <WOKTclTools_Interpretor.hxx>
+
+#include <WOKTclTools_MsgAPI.hxx>
+
+#include <TCollection_HAsciiString.hxx>
+
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+#include <WOKTools_Messages.hxx>
+#include <WOKTools_Options.hxx>
+
+WOKTools_Message& TclEndMsgHandler(WOKTools_Message& amsgq, const Standard_Boolean newline)
+{
+ if(!amsgq.Message().IsNull())
+ {
+ Standard_CString astr;
+ astr = amsgq.ToPrint();
+
+ Handle(WOKTclTools_Interpretor)& theinterp = WOKTclTools_Interpretor::Current();
+
+ if(!theinterp.IsNull())
+ {
+ theinterp->TreatMessage(newline, amsgq.Code(), astr);
+ }
+ }
+ return amsgq;
+}
+
+void WOKTclTools_Usage_MessageCmdSet(char *cmd)
+{
+ cerr << "usage: " << cmd << " <atclprocname> [<args>]\n";
+}
+
+Standard_Integer WOKTclTools_MessageCmdSet(const Handle(WOKTclTools_Interpretor)& aninterp, Standard_Integer argc, WOKTools_ArgTable argv)
+{
+ WOKTools_Options opts(argc, argv, "", WOKTclTools_Usage_MessageCmdSet);
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ default:
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ switch(opts.Arguments()->Length())
+ {
+ case 1:
+ aninterp->SetEndMessageProc(opts.Arguments()->Value(1)->ToCString());
+ break;
+ case 2:
+ aninterp->SetEndMessageProc(opts.Arguments()->Value(1)->ToCString());
+ aninterp->SetEndMessageArgs(opts.Arguments()->Value(2)->ToCString());
+ break;
+ default:
+ WOKTclTools_Usage_MessageCmdSet(argv[0]);
+ return 1;
+ }
+
+ WOKTools_MsgHandler ahandler = TclEndMsgHandler;
+
+ InfoMsg.SetEndMsgHandler(ahandler);
+ WarningMsg.SetEndMsgHandler(ahandler);
+ ErrorMsg.SetEndMsgHandler(ahandler);
+ VerboseMsg.SetEndMsgHandler(ahandler);
+ return 0;
+}
+
+Standard_Integer WOKTclTools_MessageCmdUnSet(const Handle(WOKTclTools_Interpretor)& aninterp, Standard_Integer , WOKTools_ArgTable )
+{
+ aninterp->Reset();
+ aninterp->UnSetEndMessageProc();
+ aninterp->UnSetEndMessageArgs();
+ return 0;
+}
+
+Standard_Integer WOKTclTools_MessageCmdIsSet(const Handle(WOKTclTools_Interpretor)& aninterp, Standard_Integer , WOKTools_ArgTable )
+{
+ aninterp->Reset();
+ if(aninterp->EndMessageProc() != NULL)
+ {
+ aninterp->Append(1);
+ }
+ else
+ {
+ aninterp->Append(0);
+ }
+ return 0;
+}
--- /dev/null
+// File: WOKTCL_Messages.hxx
+// Created: Wed Oct 18 13:08:06 1995
+// Author: Jean GAUTIER
+// <jga@cobrax>
+
+
+#ifndef WOKTCL_Messages_HeaderFile
+#define WOKTCL_Messages_HeaderFile
+
+#include <WOKTclTools_Interpretor.hxx>
+
+#ifndef __WOKTCLTOOLS_API
+# ifdef WNT
+# ifdef __WOKTclTools_DLL
+# define __WOKTCLTOOLS_API __declspec( dllexport )
+# else
+# define __WOKTCLTOOLS_API __declspec( dllimport )
+# endif // __WOKTclTools_DLL
+# else
+# define __WOKTCLTOOLS_API
+# endif // WNT
+#endif // __WOKTCLTOOLS_API
+
+__WOKTCLTOOLS_API Standard_Integer WOKTclTools_MessageCmdSet(const Handle(WOKTclTools_Interpretor)& , Standard_Integer , WOKTools_ArgTable );
+__WOKTCLTOOLS_API Standard_Integer WOKTclTools_MessageCmdUnSet(const Handle(WOKTclTools_Interpretor)& aninterp, Standard_Integer , WOKTools_ArgTable );
+__WOKTCLTOOLS_API Standard_Integer WOKTclTools_MessageCmdIsSet(const Handle(WOKTclTools_Interpretor)& aninterp, Standard_Integer , WOKTools_ArgTable );
+
+
+#endif
--- /dev/null
+-- File: WOKTclTools_MsgAPI.cdl
+-- Created: Tue Nov 28 11:49:33 1995
+-- Author: Jean GAUTIER
+-- <jga@cobrax>
+---Copyright: Matra Datavision 1995
+
+
+class MsgAPI from WOKTclTools
+
+ ---Purpose:
+
+uses
+ ArgTable from WOKTools,
+ Return from WOKTools,
+ Message from WOKTools
+
+is
+
+ --- Messages Manipulation
+
+ Set(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ UnSet(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ IsSet(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ DoPrintContext(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ DontPrintContext(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ IsPrintContext(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ DoPrintHeader(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ DontPrintHeader(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ IsPrintHeader(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ PrintMessage(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+ MessageInfo(myclass; argc : Integer from Standard; argv : ArgTable from WOKTools; retval : out Return from WOKTools)
+ returns Integer from Standard;
+
+end MsgAPI;
--- /dev/null
+// File: WOKTclTools_MsgAPI.cxx
+// Created: Tue Nov 28 11:56:01 1995
+// Author: Jean GAUTIER
+// <jga@cobrax>
+
+#include <stdlib.h>
+
+#include <TCollection_HAsciiString.hxx>
+
+#include <OSD_Environment.hxx>
+
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+
+#include <WOKTools_Return.hxx>
+#include <WOKTools_Options.hxx>
+#include <WOKTools_Messages.hxx>
+#include <WOKTools_MsgStreamPtr.hxx>
+
+#include <WOKTclTools_Interpretor.hxx>
+
+#include <WOKTclTools_MsgAPI.ixx>
+
+//=======================================================================
+void WOKTclTools_Message_Usage(char *cmd)
+{
+ cerr << "usage : " << cmd << " [-i|-w|-e|-v|-V Class]" << endl;
+ return ;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : Set
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::Set(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hiwevV:L:", WOKTclTools_Message_Usage, "h");
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+ Standard_Boolean Verbose = Standard_False;
+ Standard_Boolean LogToFile = Standard_False;
+ Handle(TCollection_HAsciiString) logfile;
+ Handle(TCollection_HAsciiString) VClass;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ case 'L':
+ logfile = opts.OptionArgument();
+ break;
+ case 'V':
+ Verbose = Standard_True;
+ VClass = opts.OptionArgument();
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ if(info) {InfoMsg.Set();}
+ if(warning) {WarningMsg.Set();}
+ if(error) {ErrorMsg.Set();}
+ if(verbose) {VerboseMsg.Set();}
+ if(Verbose)
+ {
+ VerboseMsg.Set();
+
+ TCollection_AsciiString astr(VClass->String());
+
+ astr.AssignCat("=true");
+ putenv(astr.ToCString());
+ //OSD_Environment anenv(VClass->String());
+ //anenv.SetValue(TCollection_AsciiString("true"));
+
+ retval.AddSetEnvironment(VClass, new TCollection_HAsciiString("true"));
+ }
+
+ if(!logfile.IsNull())
+ {
+ if(info||warning||error||verbose||Verbose)
+ {
+
+ }
+ if(info) InfoMsg.LogToFile(logfile);
+ if(warning) WarningMsg.LogToFile(logfile);
+ if(error) ErrorMsg.LogToFile(logfile);
+ if(verbose||Verbose) VerboseMsg.LogToFile(logfile);
+ }
+
+ return 0;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : UnSet
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::UnSet(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hiwevV:L", WOKTclTools_Message_Usage, "h");
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+ Standard_Boolean Verbose = Standard_False;
+ Standard_Boolean endlogging = Standard_False;
+ Handle(TCollection_HAsciiString) VClass;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ case 'V':
+ Verbose = Standard_True;
+ VClass = opts.OptionArgument();
+ break;
+ case 'L':
+ endlogging = Standard_True;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+ if(info) {InfoMsg.UnSet(); }
+ if(warning) {WarningMsg.UnSet();}
+ if(error) {ErrorMsg.UnSet();}
+ if(verbose) {VerboseMsg.UnSet();}
+ if(Verbose)
+ {
+ TCollection_AsciiString astr(VClass->ToCString());
+ astr.AssignCat("=");
+ putenv(astr.ToCString());
+
+ retval.AddUnSetEnvironment(VClass);
+ }
+
+ if(endlogging)
+ {
+ if(info) {InfoMsg.EndLogging(); }
+ if(warning) {WarningMsg.EndLogging();}
+ if(error) {ErrorMsg.EndLogging();}
+ if(verbose||Verbose) {VerboseMsg.EndLogging();}
+ }
+ return 0;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : IsSet
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::IsSet(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hiwev", WOKTclTools_Message_Usage, "hiwev");
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ if(info) {retval.AddBooleanValue(InfoMsg.IsSet()); return 0;}
+ if(warning) {retval.AddBooleanValue(WarningMsg.IsSet()); return 0;}
+ if(error) {retval.AddBooleanValue(ErrorMsg.IsSet()); return 0;}
+ if(verbose) {retval.AddBooleanValue(VerboseMsg.IsSet()); return 0;}
+ return 0;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : DoPrintContext
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::DoPrintContext(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hiwev", WOKTclTools_Message_Usage, "h");
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ if(info) {InfoMsg.DoPrintContext(); return 0;}
+ if(warning) {WarningMsg.DoPrintContext(); return 0;}
+ if(error) {ErrorMsg.DoPrintContext(); return 0;}
+ if(verbose) {VerboseMsg.DoPrintContext(); return 0;}
+ return 0;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : DontPrintContext
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::DontPrintContext(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hiwev", WOKTclTools_Message_Usage, "h");
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ if(info) {InfoMsg.DontPrintContext();}
+ if(warning) {WarningMsg.DontPrintContext();}
+ if(error) {ErrorMsg.DontPrintContext();}
+ if(verbose) {VerboseMsg.DontPrintContext();}
+ return 0;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : IsPrintContext
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::IsPrintContext(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hiwev", WOKTclTools_Message_Usage, "hiwev");
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ if(info) {retval.AddBooleanValue(InfoMsg.PrintContext()); return 0;}
+ if(warning) {retval.AddBooleanValue(WarningMsg.PrintContext()); return 0;}
+ if(error) {retval.AddBooleanValue(ErrorMsg.PrintContext()); return 0;}
+ if(verbose) {retval.AddBooleanValue(VerboseMsg.PrintContext()); return 0;}
+ return 0;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : DoPrintHeader
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::DoPrintHeader(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hiwev", WOKTclTools_Message_Usage, "h");
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ if(info) {InfoMsg.DoPrintHeader(); return 0;}
+ if(warning) {WarningMsg.DoPrintHeader(); return 0;}
+ if(error) {ErrorMsg.DoPrintHeader(); return 0;}
+ if(verbose) {VerboseMsg.DoPrintHeader(); return 0;}
+ return 0;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : DontPrintHeader
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::DontPrintHeader(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hiwev", WOKTclTools_Message_Usage, "h");
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ if(info) {InfoMsg.DontPrintHeader();}
+ if(warning) {WarningMsg.DontPrintHeader();}
+ if(error) {ErrorMsg.DontPrintHeader();}
+ if(verbose) {VerboseMsg.DontPrintHeader();}
+ return 0;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : IsPrintHeader
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::IsPrintHeader(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hiwev", WOKTclTools_Message_Usage, "hiwev");
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ if(info) {retval.AddBooleanValue(InfoMsg.PrintHeader()); return 0;}
+ if(warning) {retval.AddBooleanValue(WarningMsg.PrintHeader()); return 0;}
+ if(error) {retval.AddBooleanValue(ErrorMsg.PrintHeader()); return 0;}
+ if(verbose) {retval.AddBooleanValue(VerboseMsg.PrintContext()); return 0;}
+ return 0;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : PrintMessage
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::PrintMessage(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &)
+{
+ WOKTools_Options opts(argc,argv, "hniwevc:V:", WOKTclTools_Message_Usage, "hiwev");
+
+ Standard_Boolean info = Standard_False;
+ Standard_Boolean warning = Standard_False;
+ Standard_Boolean error = Standard_False;
+ Standard_Boolean verbose = Standard_False;
+ Standard_Boolean nonl = Standard_False;
+ Handle(TCollection_HAsciiString) context;
+ Handle(TCollection_HAsciiString) Verbose;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'i':
+ info = Standard_True;
+ break;
+ case 'w':
+ warning = Standard_True;
+ break;
+ case 'e':
+ error = Standard_True;
+ break;
+ case 'v':
+ verbose = Standard_True;
+ break;
+ case 'V':
+ verbose = Standard_True;
+ Verbose = opts.OptionArgument();
+ break;
+ case 'c':
+ context = opts.OptionArgument();
+ break;
+ case 'n':
+ nonl = Standard_True;
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ if(context.IsNull())
+ {
+ context = new TCollection_HAsciiString("msgprint");
+ }
+
+ WOKTools_Message *mess = NULL;
+
+ if(info) mess = &InfoMsg;
+ if(warning) mess = &WarningMsg;
+ if(error) mess = &ErrorMsg;
+ if(verbose)
+ {
+ if(!Verbose.IsNull())
+ {
+ static WOKTools_Verbose averb;
+
+ averb = VerboseMsg.LocalSwitcher(Verbose->ToCString());
+ mess = &averb;
+ }
+ else
+ {
+ mess = &VerboseMsg;
+ }
+ }
+
+ if(mess == NULL)
+ {
+ mess = &InfoMsg;
+ }
+
+ const WOKTools_Message& mess1 = *mess;
+ const Handle(TCollection_HAsciiString)& astr = mess1.Message();
+ if(astr.IsNull())
+ {
+ *mess << context->ToCString();
+ }
+
+ Standard_Integer i;
+ Handle(TColStd_HSequenceOfHAsciiString) argseq = opts.Arguments();
+
+ for(i=1; i<=argseq->Length(); i++)
+ {
+ *mess << argseq->Value(i);
+ }
+
+ if(!nonl)
+ {*mess << endm;}
+ else
+ {*mess << flushm;}
+ return 0;
+}
+
+//=======================================================================
+void WOKTclTools_MessageInfo_Usage(char *cmd)
+{
+ cerr << "usage : " << cmd << " [-p|-a]" << endl;
+ cerr << endl;
+ cerr << " Options are : " << endl;
+ cerr << " -p : Message handler procedure name" << endl;
+ cerr << " -a : Arguments provided" << endl;
+ cerr << endl;
+ return ;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : MessageInfo
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_MsgAPI::MessageInfo(const Standard_Integer argc, const WOKTools_ArgTable& argv, WOKTools_Return &retval)
+{
+ WOKTools_Options opts(argc,argv, "hpa", WOKTclTools_MessageInfo_Usage, "h");
+
+ Standard_Boolean handler = Standard_False;
+ Standard_Boolean arguments = Standard_False;
+ Handle(TCollection_HAsciiString) astr;
+
+ while(opts.More())
+ {
+ switch(opts.Option())
+ {
+ case 'p':
+ handler = Standard_True;
+ break;
+ case 'a':
+ arguments = Standard_True;
+ break;
+ }
+ opts.Next();
+ }
+
+ if(opts.Failed()) return 1;
+
+ Handle(WOKTclTools_Interpretor)& Theinterp = WOKTclTools_Interpretor::Current();
+
+ if (Theinterp.IsNull())
+ {
+ ErrorMsg << argv[0] << "Current TCL interpretor not initialized" << endm;
+ return 1;
+ }
+
+ if (Theinterp->EndMessageProc()==NULL)
+ {
+ InfoMsg << argv[0] << "No message handler procedure" << endm;
+ return 0;
+ }
+
+ if(handler)
+ {
+ astr = new TCollection_HAsciiString(Theinterp->EndMessageProc());
+ retval.AddStringValue(astr);
+ }
+
+ if(arguments)
+ {
+ if (Theinterp->EndMessageArgs()!=NULL)
+ astr = new TCollection_HAsciiString(Theinterp->EndMessageArgs());
+ else
+ astr = new TCollection_HAsciiString;
+ retval.AddStringValue(astr);
+ }
+ return 0;
+ }
--- /dev/null
+// File: WOKTclTools_PInterp.hxx
+// Created: Tue Aug 1 23:21:29 1995
+// Author: Jean GAUTIER
+// <jga@cobrax>
+
+
+#ifndef WOKTclTools_PInterp_HeaderFile
+#define WOKTclTools_PInterp_HeaderFile
+
+
+struct Tcl_Interp;
+
+typedef Tcl_Interp *WOKTclTools_PInterp;
+
+
+#include <Standard_Type.hxx>
+
+
+
+#endif
--- /dev/null
+-- File: WOKTclTools_Package.cdl
+-- Created: Wed Aug 21 13:20:32 1996
+-- Author: Jean GAUTIER
+-- <jga@cobrax.paris1.matra-dtv.fr>
+---Copyright: Matra Datavision 1996
+
+
+class Package from WOKTclTools
+
+ ---Purpose:
+
+uses
+ AsciiString from TCollection,
+ Interpretor from WOKTclTools,
+ CommandFunction from WOKTclTools,
+ WokCommand from WOKTclTools
+
+is
+
+ Create(aninterp : Interpretor from WOKTclTools;
+ aname, aversion : CString from Standard)
+ returns Package from WOKTclTools;
+
+ Require(me:out; exactversion : Boolean from Standard = Standard_False)
+ returns Integer from Standard;
+
+ Provide(me:out)
+ returns Integer from Standard;
+
+ EvalInitFile(me:out; required : Boolean from Standard = Standard_True)
+ returns Integer from Standard;
+
+fields
+
+ myinterp : Interpretor from WOKTclTools;
+ myname : AsciiString from TCollection;
+ myversion : AsciiString from TCollection;
+
+end Package;
--- /dev/null
+// File: WOKTclTools_Package.cxx
+// Created: Wed Aug 21 13:47:00 1996
+// Author: Jean GAUTIER
+// <jga@cobrax.paris1.matra-dtv.fr>
+
+#if defined( WNT ) && defined( TCL_VERSION_75 )
+# include <tcl75.h>
+#endif // WNT
+
+#include <tcl.h>
+
+#include <WOKTclTools_Package.ixx>
+#include <WOKTclTools_Interpretor.hxx>
+
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : WOKTclTools_Package
+//purpose :
+//=======================================================================
+WOKTclTools_Package::WOKTclTools_Package(const Handle(WOKTclTools_Interpretor)& interp,
+ const Standard_CString aname,
+ const Standard_CString aversion)
+ : myinterp(interp), myname(aname), myversion(aversion)
+{
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : Require
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_Package::Require(const Standard_Boolean exact)
+{
+ if(!myinterp.IsNull())
+ {
+ if (Tcl_PkgRequire(myinterp->Interp(), myname.ToCString(), myversion.ToCString(),exact) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ }
+ return TCL_OK;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : Provide
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_Package::Provide()
+{
+ if(!myinterp.IsNull())
+ {
+ if (Tcl_PkgProvide(myinterp->Interp(), myname.ToCString(), myversion.ToCString()) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ }
+ return TCL_OK;
+}
+
+//=======================================================================
+//Author : Jean Gautier (jga)
+//function : EvalInitFile
+//purpose :
+//=======================================================================
+Standard_Integer WOKTclTools_Package::EvalInitFile(const Standard_Boolean required)
+{
+ if(!myinterp.IsNull())
+ {
+ TCollection_AsciiString envvar(myname);
+ envvar.UpperCase();
+ envvar.AssignCat("_LIBRARY");
+
+ TCollection_AsciiString filename;
+ filename.AssignCat(myname);
+ filename.AssignCat("_Init.tcl");
+
+ TCollection_AsciiString filepath;
+
+
+ filepath.AssignCat("[file join $env(");
+ filepath.AssignCat(envvar);
+ filepath.AssignCat(") ");
+ filepath.AssignCat(filename);
+ filepath.AssignCat("]");
+
+
+ TCollection_AsciiString cmd("if [file exists ");
+ cmd.AssignCat(filepath);
+ cmd.AssignCat("] {source ");
+ cmd.AssignCat(filepath);
+ cmd.AssignCat("} ");
+
+ if(required)
+ {
+ cmd.AssignCat(" else {set msg \"can't find ");
+ cmd.AssignCat(filepath);
+ cmd.AssignCat(";\\n");
+ cmd.AssignCat(" perhaps you need to install Wok or set your ");
+ cmd.AssignCat(envvar);
+ cmd.AssignCat(" environment variable?\"\n\
+error $msg\n\
+}");
+ }
+ else
+ {
+ cmd.AssignCat("\n");
+ }
+
+ if(Tcl_Eval(myinterp->Interp(), cmd.ToCString()) != TCL_OK)
+ return TCL_ERROR;
+ }
+ return TCL_OK;
+}
+
--- /dev/null
+
+
+proc WOKTclTools_Replace::AdmFileType {} {
+ return "dbadmfile";
+}
+
+proc WOKTclTools_Replace::OutputDirTypeName {} {
+ return "dbtmpfile";
+}
+
+
+proc WOKTclTools_Replace::HandleInputFile { ID } {
+
+ scan $ID "%\[^:\]:%\[^:\]:%\[^:\]" unit type name
+
+ switch $name {
+ WOKTclTools_Interpretor.hxx {return 1;}
+ default {
+ return 0;
+ }
+ }
+}
+
+proc WOKTclTools_Replace::Execute { unit args } {
+
+ global tcl_interactive
+
+ set tcl_interactive 1
+ package require Wokutils
+
+ msgprint -i -c "WOKTclTools_Replace::Execute" "Copying of WOKTclTools includes"
+
+ if { [wokparam -e %Station $unit] != "wnt" } {
+ set copycmd "cp -p "
+ set replstr "/"
+ } {
+ set copycmd "cmd /c copy"
+ set replstr "\\\\\\\\"
+ }
+
+ foreach file $args {
+ scan $file "%\[^:\]:%\[^:\]:%\[^:\]" Unit type name
+
+ regsub ".hxx" $name "_proto.hxx" sourcename
+
+ set source [woklocate -p WOKTclTools:source:$sourcename [wokinfo -N $unit]]
+ set vistarget [woklocate -p WOKTclTools:pubinclude:$name [wokinfo -N $unit]]
+ set target [wokinfo -p pubinclude:$name $unit]
+
+ regsub -all "/" " $source $target" $replstr TheArgs
+
+ set A [catch {eval "wokcmp $TheArgs"} result ]
+
+ if { [wokparam -e %Station $unit] == "wnt" && $result != "" } {
+ set result 0
+ }
+
+ if { ! $result } {
+ msgprint -i -c "WOKTclTools_Replace::Execute" "Copy $source to $target"
+ if { [wokparam -e %Station $unit] != "wnt" } {
+ eval exec "chmod u+w $target"
+ }
+ eval exec "$copycmd $TheArgs"
+ } else {
+ msgprint -i -c "WOKTclTools_Replace::Execute" "No change in $source"
+ }
+ }
+ return 0;
+}
--- /dev/null
+// File: WOKTclTools_TriggerHandler.cxx
+// Created: Thu Nov 14 17:19:45 1996
+// Author: Jean GAUTIER
+// <jga@cobrax.paris1.matra-dtv.fr>
+
+
+
+#include <WOKUtils_Trigger.hxx>
+#include <WOKTools_Messages.hxx>
+#include <WOKTools_Return.hxx>
+#include <WOKTools_StringValue.hxx>
+#include <WOKTools_InterpFileValue.hxx>
+
+
+
+#include <WOKTclTools_Interpretor.hxx>
+
+#if defined( WNT ) && defined( TCL_VERSION_75 )
+# include <tcl75.h>
+#endif // WNT
+
+#include <tcl.h>
+
+extern Standard_IMPORT Handle(WOKTclTools_Interpretor) CurrentInterp;
+
+Standard_EXPORT WOKUtils_TriggerStatus WOKTclTools_TriggerHandler(WOKUtils_Trigger &atrigger)
+{
+ Standard_Integer i;
+
+ const WOKTools_Return& args = atrigger.Args();
+
+ for(i = 1; i <= args.Length() ; i++)
+ {
+ Handle(WOKTools_ReturnValue) avalue = args.Value(i);
+
+ switch(avalue->Type())
+ {
+ case WOKTools_InterpFile:
+ {
+ Handle(WOKTools_InterpFileValue) afile = Handle(WOKTools_InterpFileValue)::DownCast(avalue);
+
+ if(afile->InterpType() == WOKTools_TclInterp)
+ {
+ WOK_TRACE {
+ VerboseMsg("WOK_TRIGGER") << "WOKTclTools_TriggerHandler"
+ << "LoadFile : " << afile->File() << endm;
+ }
+ CurrentInterp->EvalFile(afile->File()->ToCString());
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ if(!atrigger.Name().IsNull())
+ {
+ if(CurrentInterp->IsCmdName(atrigger.Name()->ToCString()))
+ {
+ Handle(TCollection_HAsciiString) acmd = new TCollection_HAsciiString(atrigger.Name());
+
+ WOK_TRACE {
+
+ VerboseMsg("WOK_TRIGGER") << "WOKTclTools_TriggerHandler"
+ << "Handler called for trigger : " << atrigger.Name() << endm;
+
+ // Prise en compte des resultats
+ const WOKTools_Return& args = atrigger.Args();
+
+ for(i = 1; i <= args.Length() ; i++)
+ {
+ Handle(WOKTools_ReturnValue) avalue = args.Value(i);
+
+ switch(avalue->Type())
+ {
+ case WOKTools_String:
+ {
+ Handle(WOKTools_StringValue) astrval = Handle(WOKTools_StringValue)::DownCast(avalue);
+ VerboseMsg("WOK_TRIGGER") << "WOKTclTools_TriggerHandler"
+ << "Arg " << i << " is : " << astrval->Value() << endm;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ for(i = 1; i <= args.Length() ; i++)
+ {
+ Handle(WOKTools_ReturnValue) avalue = args.Value(i);
+
+ switch(avalue->Type())
+ {
+ case WOKTools_String:
+ {
+ Handle(WOKTools_StringValue) astrval = Handle(WOKTools_StringValue)::DownCast(avalue);
+ acmd->AssignCat(" \"");
+ acmd->AssignCat(astrval->Value());
+ acmd->AssignCat("\"");
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ WOK_TRACE {
+ VerboseMsg("WOK_TRIGGER") << "WOKTclTools_TriggerHandler"
+ << "Command is : " << acmd << endm;
+ }
+
+ if(CurrentInterp->Eval(acmd->ToCString()))
+ return WOKUtils_Failed;
+ else
+ {
+ CurrentInterp->GetReturnValues(atrigger.ChangeReturn());
+
+ WOK_TRACE {
+ if(VerboseMsg("WOK_TRIGGER").IsSet())
+ {
+ Standard_Integer i;
+ VerboseMsg("WOK_TRIGGER") << "WOKTclTools_TriggerHandler"
+ << "Command returns : " << endm;
+
+ const WOKTools_Return& rets = atrigger.Return();
+
+ for(i=1; i<=rets.Length(); i++)
+ {
+ Handle(WOKTools_ReturnValue) aval = rets.Value(i);
+
+ VerboseMsg("WOK_TRIGGER") << "WOKTclTools_TriggerHandler"
+ << " ";
+
+ switch(aval->Type())
+ {
+ case WOKTools_String:
+ {
+ Handle(WOKTools_StringValue) astrval = Handle(WOKTools_StringValue)::DownCast(aval);
+ VerboseMsg("WOK_TRIGGER") << "WOKTclTools_TriggerHandler"
+ << " " << i << " : " << astrval->Value() << endm;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ }
+ return WOKUtils_Succeeded;
+ }
+ else
+ {
+ WOK_TRACE {
+ VerboseMsg("WOK_TRIGGER") << "WOKTclTools_TriggerHandler"
+ << "Trigger : " << atrigger.Name() << " not setted" << endm;
+ }
+ return WOKUtils_NotSetted;
+ }
+ }
+ else
+ {
+ WOK_TRACE {
+ VerboseMsg("WOK_TRIGGER") << "WOKTclTools_TriggerHandler"
+ << "No Trigger Name" << endm;
+ }
+ return WOKUtils_NotSetted;
+ }
+}
+
--- /dev/null
+// File: WOKTclTools_TriggerHandler.hxx
+// Created: Wed Nov 20 16:17:39 1996
+// Author: Jean GAUTIER
+// <jga@cobrax.paris1.matra-dtv.fr>
+
+
+#ifndef WOKTCL_TriggerHandler_HeaderFile
+#define WOKTCL_TriggerHandler_HeaderFile
+
+
+class WOKUtils_Trigger;
+
+#include <WOKUtils_TriggerStatus.hxx>
+
+WOKUtils_TriggerStatus WOKTclTools_TriggerHandler(WOKUtils_Trigger &atrigger);
+
+#endif
--- /dev/null
+
+@ifnotdefined ( %WOKTclTools_WOKUMake_EDL) then
+@set %WOKTclTools_WOKUMake_EDL = "";
+
+@string %WOKSteps_XcppGroup += " xcpp.repl ";
+@set %WOKSteps_xcpp_repl = "*WOKTclTools_Replace(xcpp.header)";
+
+@endif;
--- /dev/null
+// File: WOKTclTools_WokCommand.hxx
+// Created: Tue Aug 13 11:00:12 1996
+// Author: Jean GAUTIER
+// <jga@cobrax.paris1.matra-dtv.fr>
+
+
+#ifndef WOKTclTools_WokCommand_HeaderFile
+#define WOKTclTools_WokCommand_HeaderFile
+
+
+#include <WOKTools_ArgTable.hxx>
+#include <WOKTools_Return.hxx>
+
+typedef Standard_Integer (*WOKTclTools_WokCommand)(const Standard_Integer, const WOKTools_ArgTable& , WOKTools_Return &);
+
+#endif
+