]> OCCT Git - occt-wok.git/commitdiff
Initial revision
authorcas <cas@opencascade.com>
Fri, 22 Oct 1999 18:05:40 +0000 (18:05 +0000)
committercas <cas@opencascade.com>
Fri, 22 Oct 1999 18:05:40 +0000 (18:05 +0000)
24 files changed:
src/WOKTclTools/ENV.edl [new file with mode: 0755]
src/WOKTclTools/EXTERNLIB [new file with mode: 0755]
src/WOKTclTools/FILES [new file with mode: 0755]
src/WOKTclTools/WOKTclTools.cdl [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_CMPLRS.edl [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_CommandFunction.hxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_ExitHandler.hxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_HandleTable.cdl [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_HandleTable.gxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_Interpretor.cdl [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_Interpretor.cxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_Interpretor_proto.hxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_Messages.cxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_Messages.hxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_MsgAPI.cdl [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_MsgAPI.cxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_PInterp.hxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_Package.cdl [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_Package.cxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_Replace.tcl [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_TriggerHandler.cxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_TriggerHandler.hxx [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_WOKSteps.edl [new file with mode: 0755]
src/WOKTclTools/WOKTclTools_WokCommand.hxx [new file with mode: 0755]

diff --git a/src/WOKTclTools/ENV.edl b/src/WOKTclTools/ENV.edl
new file mode 100755 (executable)
index 0000000..97a73b2
--- /dev/null
@@ -0,0 +1,24 @@
+-- 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;
diff --git a/src/WOKTclTools/EXTERNLIB b/src/WOKTclTools/EXTERNLIB
new file mode 100755 (executable)
index 0000000..f95dfa0
--- /dev/null
@@ -0,0 +1 @@
+Tcl_Lib
diff --git a/src/WOKTclTools/FILES b/src/WOKTclTools/FILES
new file mode 100755 (executable)
index 0000000..6d8baea
--- /dev/null
@@ -0,0 +1,14 @@
+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
diff --git a/src/WOKTclTools/WOKTclTools.cdl b/src/WOKTclTools/WOKTclTools.cdl
new file mode 100755 (executable)
index 0000000..ec4899d
--- /dev/null
@@ -0,0 +1,36 @@
+-- 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;
diff --git a/src/WOKTclTools/WOKTclTools_CMPLRS.edl b/src/WOKTclTools/WOKTclTools_CMPLRS.edl
new file mode 100755 (executable)
index 0000000..3be7221
--- /dev/null
@@ -0,0 +1,24 @@
+-- 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;
diff --git a/src/WOKTclTools/WOKTclTools_CommandFunction.hxx b/src/WOKTclTools/WOKTclTools_CommandFunction.hxx
new file mode 100755 (executable)
index 0000000..13b5c57
--- /dev/null
@@ -0,0 +1,15 @@
+// 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
diff --git a/src/WOKTclTools/WOKTclTools_ExitHandler.hxx b/src/WOKTclTools/WOKTclTools_ExitHandler.hxx
new file mode 100755 (executable)
index 0000000..9109b9f
--- /dev/null
@@ -0,0 +1,19 @@
+// 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
diff --git a/src/WOKTclTools/WOKTclTools_HandleTable.cdl b/src/WOKTclTools/WOKTclTools_HandleTable.cdl
new file mode 100755 (executable)
index 0000000..fafa737
--- /dev/null
@@ -0,0 +1,51 @@
+-- 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;
diff --git a/src/WOKTclTools/WOKTclTools_HandleTable.gxx b/src/WOKTclTools/WOKTclTools_HandleTable.gxx
new file mode 100755 (executable)
index 0000000..ccc363f
--- /dev/null
@@ -0,0 +1,130 @@
+// 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);
+}
diff --git a/src/WOKTclTools/WOKTclTools_Interpretor.cdl b/src/WOKTclTools/WOKTclTools_Interpretor.cdl
new file mode 100755 (executable)
index 0000000..354d848
--- /dev/null
@@ -0,0 +1,156 @@
+-- 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;
diff --git a/src/WOKTclTools/WOKTclTools_Interpretor.cxx b/src/WOKTclTools/WOKTclTools_Interpretor.cxx
new file mode 100755 (executable)
index 0000000..a4ec975
--- /dev/null
@@ -0,0 +1,760 @@
+// 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
+
diff --git a/src/WOKTclTools/WOKTclTools_Interpretor_proto.hxx b/src/WOKTclTools/WOKTclTools_Interpretor_proto.hxx
new file mode 100755 (executable)
index 0000000..a592212
--- /dev/null
@@ -0,0 +1,81 @@
+// 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
diff --git a/src/WOKTclTools/WOKTclTools_Messages.cxx b/src/WOKTclTools/WOKTclTools_Messages.cxx
new file mode 100755 (executable)
index 0000000..884192c
--- /dev/null
@@ -0,0 +1,104 @@
+// 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;
+}
diff --git a/src/WOKTclTools/WOKTclTools_Messages.hxx b/src/WOKTclTools/WOKTclTools_Messages.hxx
new file mode 100755 (executable)
index 0000000..1ec9eb0
--- /dev/null
@@ -0,0 +1,29 @@
+// 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
diff --git a/src/WOKTclTools/WOKTclTools_MsgAPI.cdl b/src/WOKTclTools/WOKTclTools_MsgAPI.cdl
new file mode 100755 (executable)
index 0000000..e08fd4c
--- /dev/null
@@ -0,0 +1,54 @@
+-- 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;
diff --git a/src/WOKTclTools/WOKTclTools_MsgAPI.cxx b/src/WOKTclTools/WOKTclTools_MsgAPI.cxx
new file mode 100755 (executable)
index 0000000..d64587c
--- /dev/null
@@ -0,0 +1,640 @@
+// 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;
+ }
diff --git a/src/WOKTclTools/WOKTclTools_PInterp.hxx b/src/WOKTclTools/WOKTclTools_PInterp.hxx
new file mode 100755 (executable)
index 0000000..89008f4
--- /dev/null
@@ -0,0 +1,20 @@
+// 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
diff --git a/src/WOKTclTools/WOKTclTools_Package.cdl b/src/WOKTclTools/WOKTclTools_Package.cdl
new file mode 100755 (executable)
index 0000000..0c67046
--- /dev/null
@@ -0,0 +1,39 @@
+-- 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;
diff --git a/src/WOKTclTools/WOKTclTools_Package.cxx b/src/WOKTclTools/WOKTclTools_Package.cxx
new file mode 100755 (executable)
index 0000000..a3c95dc
--- /dev/null
@@ -0,0 +1,114 @@
+// 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;
+}
+
diff --git a/src/WOKTclTools/WOKTclTools_Replace.tcl b/src/WOKTclTools/WOKTclTools_Replace.tcl
new file mode 100755 (executable)
index 0000000..2c3dbf5
--- /dev/null
@@ -0,0 +1,69 @@
+
+
+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;
+}
diff --git a/src/WOKTclTools/WOKTclTools_TriggerHandler.cxx b/src/WOKTclTools/WOKTclTools_TriggerHandler.cxx
new file mode 100755 (executable)
index 0000000..9bf7536
--- /dev/null
@@ -0,0 +1,172 @@
+// 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;
+    }
+}
+
diff --git a/src/WOKTclTools/WOKTclTools_TriggerHandler.hxx b/src/WOKTclTools/WOKTclTools_TriggerHandler.hxx
new file mode 100755 (executable)
index 0000000..15b3582
--- /dev/null
@@ -0,0 +1,17 @@
+// 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
diff --git a/src/WOKTclTools/WOKTclTools_WOKSteps.edl b/src/WOKTclTools/WOKTclTools_WOKSteps.edl
new file mode 100755 (executable)
index 0000000..d5ed65c
--- /dev/null
@@ -0,0 +1,8 @@
+
+@ifnotdefined ( %WOKTclTools_WOKUMake_EDL) then
+@set %WOKTclTools_WOKUMake_EDL = "";
+
+@string %WOKSteps_XcppGroup += " xcpp.repl ";
+@set %WOKSteps_xcpp_repl = "*WOKTclTools_Replace(xcpp.header)";
+
+@endif;
diff --git a/src/WOKTclTools/WOKTclTools_WokCommand.hxx b/src/WOKTclTools/WOKTclTools_WokCommand.hxx
new file mode 100755 (executable)
index 0000000..6168f01
--- /dev/null
@@ -0,0 +1,17 @@
+// 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
+