From: cas Date: Fri, 22 Oct 1999 18:05:40 +0000 (+0000) Subject: Initial revision X-Git-Tag: V6_7_1~231 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=83fb709773710ec2dd1ab5687f815498c51a73db;p=occt-wok.git Initial revision --- diff --git a/src/WOKTclTools/ENV.edl b/src/WOKTclTools/ENV.edl new file mode 100755 index 0000000..97a73b2 --- /dev/null +++ b/src/WOKTclTools/ENV.edl @@ -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 index 0000000..f95dfa0 --- /dev/null +++ b/src/WOKTclTools/EXTERNLIB @@ -0,0 +1 @@ +Tcl_Lib diff --git a/src/WOKTclTools/FILES b/src/WOKTclTools/FILES new file mode 100755 index 0000000..6d8baea --- /dev/null +++ b/src/WOKTclTools/FILES @@ -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 index 0000000..ec4899d --- /dev/null +++ b/src/WOKTclTools/WOKTclTools.cdl @@ -0,0 +1,36 @@ +-- File: WOKTclTools.cdl +-- Created: Fri Nov 24 13:59:07 1995 +-- Author: Jean GAUTIER +-- +---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 index 0000000..3be7221 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_CMPLRS.edl @@ -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 index 0000000..13b5c57 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_CommandFunction.hxx @@ -0,0 +1,15 @@ +// File: WOKTclTools_CommandFunction.hxx +// Created: Tue Aug 1 23:18:40 1995 +// Author: Jean GAUTIER +// + + +#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 index 0000000..9109b9f --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_ExitHandler.hxx @@ -0,0 +1,19 @@ +// File: WOKTclTools_ExitHandler.hxx +// Created: Wed Aug 21 16:16:26 1996 +// Author: Jean GAUTIER +// + + +#ifndef WOKTclTools_ExitHandler_HeaderFile +#define WOKTclTools_ExitHandler_HeaderFile + +#if defined( WNT ) && defined( TCL_VERSION_75 ) +# include +#endif // WNT + +#include + +typedef Tcl_ExitProc* WOKTclTools_ExitHandler; + + +#endif diff --git a/src/WOKTclTools/WOKTclTools_HandleTable.cdl b/src/WOKTclTools/WOKTclTools_HandleTable.cdl new file mode 100755 index 0000000..fafa737 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_HandleTable.cdl @@ -0,0 +1,51 @@ +-- File: WOKTclTools_HandleTable.cdl +-- Created: Wed Oct 9 13:22:07 1996 +-- Author: Jean GAUTIER +-- +---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 index 0000000..ccc363f --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_HandleTable.gxx @@ -0,0 +1,130 @@ +// File: WOKTclTools_HandleTable.gxx +// Created: Mon Oct 28 19:16:15 1996 +// Author: Jean GAUTIER +// + +// File: WOKTclTools_HandleTable.cxx +// Created: Wed Oct 9 13:27:57 1996 +// Author: Jean GAUTIER +// + + +#include + + +#include + + + +//======================================================================= +//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 index 0000000..354d848 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_Interpretor.cdl @@ -0,0 +1,156 @@ +-- File: WOKTclTools_Interpretor.cdl +-- Created: Fri Jul 28 21:52:33 1995 +-- Author: Jean GAUTIER +-- +---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 , help + -- string in group . + -- 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 , 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 index 0000000..a4ec975 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_Interpretor.cxx @@ -0,0 +1,760 @@ +// File: WOKTclTools_Interpretor.cxx +// Created: Fri Jul 28 22:00:34 1995 +// Author: Jean GAUTIER +// + +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifdef WNT +#include +#define WOKUtils_ProcessManager WOKUtils_ShellManager +# ifdef _DEBUG +# include +typedef void ( *FREE_FUNC ) ( void* ); +void Free ( void* ); +# endif // _DEBUG +#else +#include +#endif // WNT +#include + +#include +#include + +#ifdef WNT +# ifdef TCL_VERSION_75 +# pragma comment( lib, "tcl75.lib" ) +# pragma message( "Information: tcl75.lib is using as TCL library" ) +# include +# 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 + +// +// 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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +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 index 0000000..884192c --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_Messages.cxx @@ -0,0 +1,104 @@ +// File: WOKTCL_Messages.cxx +// Created: Wed Oct 18 13:08:16 1995 +// Author: Jean GAUTIER +// + +#if defined( WNT ) && defined( TCL_VERSION_75 ) +# include +#endif // WNT + +#include + +#include +#include + +#include + +#include + +#include +#include +#include + +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 << " []\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 index 0000000..1ec9eb0 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_Messages.hxx @@ -0,0 +1,29 @@ +// File: WOKTCL_Messages.hxx +// Created: Wed Oct 18 13:08:06 1995 +// Author: Jean GAUTIER +// + + +#ifndef WOKTCL_Messages_HeaderFile +#define WOKTCL_Messages_HeaderFile + +#include + +#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 index 0000000..e08fd4c --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_MsgAPI.cdl @@ -0,0 +1,54 @@ +-- File: WOKTclTools_MsgAPI.cdl +-- Created: Tue Nov 28 11:49:33 1995 +-- Author: Jean GAUTIER +-- +---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 index 0000000..d64587c --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_MsgAPI.cxx @@ -0,0 +1,640 @@ +// File: WOKTclTools_MsgAPI.cxx +// Created: Tue Nov 28 11:56:01 1995 +// Author: Jean GAUTIER +// + +#include + +#include + +#include + +#include + +#include +#include +#include +#include + +#include + +#include + +//======================================================================= +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 index 0000000..89008f4 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_PInterp.hxx @@ -0,0 +1,20 @@ +// File: WOKTclTools_PInterp.hxx +// Created: Tue Aug 1 23:21:29 1995 +// Author: Jean GAUTIER +// + + +#ifndef WOKTclTools_PInterp_HeaderFile +#define WOKTclTools_PInterp_HeaderFile + + +struct Tcl_Interp; + +typedef Tcl_Interp *WOKTclTools_PInterp; + + +#include + + + +#endif diff --git a/src/WOKTclTools/WOKTclTools_Package.cdl b/src/WOKTclTools/WOKTclTools_Package.cdl new file mode 100755 index 0000000..0c67046 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_Package.cdl @@ -0,0 +1,39 @@ +-- File: WOKTclTools_Package.cdl +-- Created: Wed Aug 21 13:20:32 1996 +-- Author: Jean GAUTIER +-- +---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 index 0000000..a3c95dc --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_Package.cxx @@ -0,0 +1,114 @@ +// File: WOKTclTools_Package.cxx +// Created: Wed Aug 21 13:47:00 1996 +// Author: Jean GAUTIER +// + +#if defined( WNT ) && defined( TCL_VERSION_75 ) +# include +#endif // WNT + +#include + +#include +#include + + +//======================================================================= +//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 index 0000000..2c3dbf5 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_Replace.tcl @@ -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 index 0000000..9bf7536 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_TriggerHandler.cxx @@ -0,0 +1,172 @@ +// File: WOKTclTools_TriggerHandler.cxx +// Created: Thu Nov 14 17:19:45 1996 +// Author: Jean GAUTIER +// + + + +#include +#include +#include +#include +#include + + + +#include + +#if defined( WNT ) && defined( TCL_VERSION_75 ) +# include +#endif // WNT + +#include + +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 index 0000000..15b3582 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_TriggerHandler.hxx @@ -0,0 +1,17 @@ +// File: WOKTclTools_TriggerHandler.hxx +// Created: Wed Nov 20 16:17:39 1996 +// Author: Jean GAUTIER +// + + +#ifndef WOKTCL_TriggerHandler_HeaderFile +#define WOKTCL_TriggerHandler_HeaderFile + + +class WOKUtils_Trigger; + +#include + +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 index 0000000..d5ed65c --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_WOKSteps.edl @@ -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 index 0000000..6168f01 --- /dev/null +++ b/src/WOKTclTools/WOKTclTools_WokCommand.hxx @@ -0,0 +1,17 @@ +// File: WOKTclTools_WokCommand.hxx +// Created: Tue Aug 13 11:00:12 1996 +// Author: Jean GAUTIER +// + + +#ifndef WOKTclTools_WokCommand_HeaderFile +#define WOKTclTools_WokCommand_HeaderFile + + +#include +#include + +typedef Standard_Integer (*WOKTclTools_WokCommand)(const Standard_Integer, const WOKTools_ArgTable& , WOKTools_Return &); + +#endif +