netgen/ng/ngappinit.cpp

394 lines
9.0 KiB
C++
Raw Normal View History

2009-01-13 04:40:13 +05:00
/*
The main function of netgen.
This file is a modification of tkAppInit.c from the Tcl/Tk package
*/
2014-10-29 16:09:10 +05:00
#include <mystdlib.h>
2014-10-08 18:46:25 +06:00
#include <inctcl.hpp>
2009-01-13 04:40:13 +05:00
#include <meshing.hpp>
#ifdef PARALLEL
#include <mpi.h>
2011-07-04 18:29:18 +06:00
extern void ParallelRun();
namespace netgen
{
MPI_Comm mesh_comm;
}
2009-01-13 04:40:13 +05:00
#endif
2016-07-10 21:07:36 +05:00
#include "../libsrc/interface/writeuser.hpp"
2009-01-13 04:40:13 +05:00
namespace netgen
{
GUI support from Python and some cleanup Squashed commit of the following: commit 5058ceb9351548937487aa94073e7f59236ae9fe Merge: d37f0af 2da1465 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 19:33:55 2017 +0200 Merge remote-tracking branch 'origin/master' into native_tcl_macos commit d37f0afcc1389c0c3ec0899da9c1af158c926ca5 Author: Matthias <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 19:27:12 2017 +0200 link gui to netgen, some fixes commit 297141455cd4fab81709c13d6253ad8114beee4a Author: Matthias <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 19:02:47 2017 +0200 windows fixes commit 9bf290a60835f29762b15ee3b722da132678f90c Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 18:59:53 2017 +0200 More cleanup, proper code separation ... between netgen exectuable and gui library commit f46d438d3c9dd32f9f94642b4ec00b85611ef1dd Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 14:03:53 2017 +0200 fix typos commit b3d301ff4e321189aef469bff77f7cffa7b69e98 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:32:57 2017 +0200 also link tk to togl on windows... commit c3519abee7b041e45c913a45999ed2d29d4ff325 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:30:16 2017 +0200 link TCL to togl on windows commit 80b607436b45f38f4bac2708a78ef03561ad44e5 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:26:45 2017 +0200 linkt TCL only to netgen executable commit 080139a431e949e14cb9f05194e19c5129aca3d3 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:20:36 2017 +0200 fix dll ex/import commit dd68efacb01fbbbe3f136168f12fed41fa3c3c8a Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:15:39 2017 +0200 fix dll export commit 9023b9ca49b4c2b99f228f64564990e2d0246b8c Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 12:06:14 2017 +0200 use system tcl/tk on MacOS, but download tcl/tk for windows commit 16eb4c1b01eb5229f93274791187b2c666bb8b8e Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 12:01:36 2017 +0200 more cleanup commit 6df5b82a7d9a1177a755446d563d6c4b98ff6329 Merge: af23786 2b0d3f0 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 11:45:42 2017 +0200 Merge remote-tracking branch 'origin/master' into native_tcl_macos commit af2378637a6513de3b50841ed6314cd7e12f7205 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 11:45:40 2017 +0200 some cleanup commit 81bbe117efe25df53c71f9ae603c50ee4557703a Author: Joachim Schöberl <joachim.schoeberl@tuwien.ac.at> Date: Tue May 9 20:14:46 2017 +0200 tk-gui commit 387e6da678661dd3b9d75d696733f46fe43d789a Merge: e658b5b e653d8e Author: Joachim Schöberl <joachim.schoeberl@tuwien.ac.at> Date: Tue May 9 18:49:20 2017 +0200 Merge remote-tracking branch 'origin/gui_from_python' into native_tcl_macos commit e658b5b2c1ac3264f4165b5f6d2b821b3b1b0926 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Tue May 9 18:30:35 2017 +0200 use native tcl on macos commit e653d8e6789d20e24b16a68bf760415940e881f8 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 8 16:37:23 2017 +0200 next fix commit f663c80b00754d141a02fa6abde2077c841bbafb Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 8 16:23:21 2017 +0200 Fix symbol export on windows commit 70d99782423d33d3fa6f80e758a7377d0cb52840 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 8 15:14:56 2017 +0200 GUI support from Python Enables experimental support for starting the Netgen GUI from Python directly. To use it, just import the gui module: > import netgen.gui
2017-05-10 22:34:42 +05:00
DLL_HEADER extern Flags parameters;
DLL_HEADER extern bool netgen_executable_started;
2009-01-13 04:40:13 +05:00
}
GUI support from Python and some cleanup Squashed commit of the following: commit 5058ceb9351548937487aa94073e7f59236ae9fe Merge: d37f0af 2da1465 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 19:33:55 2017 +0200 Merge remote-tracking branch 'origin/master' into native_tcl_macos commit d37f0afcc1389c0c3ec0899da9c1af158c926ca5 Author: Matthias <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 19:27:12 2017 +0200 link gui to netgen, some fixes commit 297141455cd4fab81709c13d6253ad8114beee4a Author: Matthias <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 19:02:47 2017 +0200 windows fixes commit 9bf290a60835f29762b15ee3b722da132678f90c Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 18:59:53 2017 +0200 More cleanup, proper code separation ... between netgen exectuable and gui library commit f46d438d3c9dd32f9f94642b4ec00b85611ef1dd Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 14:03:53 2017 +0200 fix typos commit b3d301ff4e321189aef469bff77f7cffa7b69e98 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:32:57 2017 +0200 also link tk to togl on windows... commit c3519abee7b041e45c913a45999ed2d29d4ff325 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:30:16 2017 +0200 link TCL to togl on windows commit 80b607436b45f38f4bac2708a78ef03561ad44e5 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:26:45 2017 +0200 linkt TCL only to netgen executable commit 080139a431e949e14cb9f05194e19c5129aca3d3 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:20:36 2017 +0200 fix dll ex/import commit dd68efacb01fbbbe3f136168f12fed41fa3c3c8a Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 13:15:39 2017 +0200 fix dll export commit 9023b9ca49b4c2b99f228f64564990e2d0246b8c Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 12:06:14 2017 +0200 use system tcl/tk on MacOS, but download tcl/tk for windows commit 16eb4c1b01eb5229f93274791187b2c666bb8b8e Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 12:01:36 2017 +0200 more cleanup commit 6df5b82a7d9a1177a755446d563d6c4b98ff6329 Merge: af23786 2b0d3f0 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 11:45:42 2017 +0200 Merge remote-tracking branch 'origin/master' into native_tcl_macos commit af2378637a6513de3b50841ed6314cd7e12f7205 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 10 11:45:40 2017 +0200 some cleanup commit 81bbe117efe25df53c71f9ae603c50ee4557703a Author: Joachim Schöberl <joachim.schoeberl@tuwien.ac.at> Date: Tue May 9 20:14:46 2017 +0200 tk-gui commit 387e6da678661dd3b9d75d696733f46fe43d789a Merge: e658b5b e653d8e Author: Joachim Schöberl <joachim.schoeberl@tuwien.ac.at> Date: Tue May 9 18:49:20 2017 +0200 Merge remote-tracking branch 'origin/gui_from_python' into native_tcl_macos commit e658b5b2c1ac3264f4165b5f6d2b821b3b1b0926 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Tue May 9 18:30:35 2017 +0200 use native tcl on macos commit e653d8e6789d20e24b16a68bf760415940e881f8 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 8 16:37:23 2017 +0200 next fix commit f663c80b00754d141a02fa6abde2077c841bbafb Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 8 16:23:21 2017 +0200 Fix symbol export on windows commit 70d99782423d33d3fa6f80e758a7377d0cb52840 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 8 15:14:56 2017 +0200 GUI support from Python Enables experimental support for starting the Netgen GUI from Python directly. To use it, just import the gui module: > import netgen.gui
2017-05-10 22:34:42 +05:00
DLL_HEADER extern bool nodisplay;
2009-01-13 04:40:13 +05:00
using netgen::parameters;
using netgen::ngdir;
using netgen::verbose;
2019-07-09 13:39:16 +05:00
using netgen::NgArray;
2009-01-13 04:40:13 +05:00
using netgen::RegisterUserFormats;
/*
* The following variable is a special hack that is needed in order for
* Sun shared libraries to be used for Tcl.
*/
2009-09-09 02:37:33 +06:00
2009-01-13 04:40:13 +05:00
// extern "C" int matherr();
2009-09-09 02:37:33 +06:00
// int *tclDummyMathPtr = (int *) matherr;
2009-01-13 04:40:13 +05:00
extern "C" int Ng_ServerSocketManagerInit (int port);
extern "C" int Ng_ServerSocketManagerRun (void);
2011-07-15 03:36:19 +06:00
2009-01-13 04:40:13 +05:00
bool shellmode = false;
2013-02-26 19:11:08 +06:00
2009-01-13 04:40:13 +05:00
/*
*
* The Netgen main function
*
*/
int main(int argc, char ** argv)
{
netgen::netgen_executable_started = true;
2012-02-12 08:25:26 +06:00
2009-01-13 04:40:13 +05:00
#ifdef PARALLEL
2012-06-16 18:09:38 +06:00
int mpi_required = MPI_THREAD_MULTIPLE;
#ifdef VTRACE
2012-06-16 18:59:03 +06:00
mpi_required = MPI_THREAD_SINGLE;
2012-06-16 18:09:38 +06:00
#endif
int mpi_provided;
2012-06-13 15:07:11 +06:00
MPI_Init_thread(&argc, &argv, mpi_required, &mpi_provided);
2011-07-15 03:36:19 +06:00
2009-01-13 04:40:13 +05:00
MPI_Comm_size(MPI_COMM_WORLD, &netgen::ntasks);
MPI_Comm_rank(MPI_COMM_WORLD, &netgen::id);
2011-07-15 03:36:19 +06:00
2019-02-12 19:01:34 +05:00
if(netgen::ntasks!=1)
throw ngcore::Exception("Netgen GUI cannot run MPI-parallel");
// MPI_COMM_WORLD is just a local communicator
2019-02-13 02:11:55 +05:00
// netgen::ng_comm = ngcore::NgMPI_Comm{MPI_COMM_WORLD, false};
2009-01-13 04:40:13 +05:00
#endif
if ( netgen::id == 0 )
{
2009-01-16 01:41:14 +05:00
cout << "NETGEN-" << PACKAGE_VERSION << endl;
2009-01-13 04:40:13 +05:00
2011-01-11 01:18:01 +05:00
cout << "Developed by Joachim Schoeberl at" << endl
2011-02-19 03:50:58 +05:00
<< "2010-xxxx Vienna University of Technology" << endl
2011-01-11 01:18:01 +05:00
<< "2006-2010 RWTH Aachen University" << endl
<< "1996-2006 Johannes Kepler University Linz" << endl;
2009-01-13 04:40:13 +05:00
#ifdef OCCGEOMETRY
cout << "Including OpenCascade geometry kernel" << endl;
#endif
#ifdef ACIS
cout << "Including ACIS geometry kernel" << endl;
#endif
#ifdef LINUX
//feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
//feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW);
//cout << "Handle Floating Point Exceptions: " << fegetexcept() << endl;
#endif
#ifdef DEBUG
cout << "You are running the debug version !" << endl;
#endif
#ifdef PARALLEL
2019-02-13 15:15:50 +05:00
cout << "Including MPI version " << MPI_VERSION << '.' << MPI_SUBVERSION << endl;
2009-01-13 04:40:13 +05:00
#endif
}
2011-07-04 18:29:18 +06:00
2009-01-13 04:40:13 +05:00
2012-07-06 13:49:05 +06:00
netgen::h_argc = argc;
netgen::h_argv = argv;
2009-01-13 04:40:13 +05:00
// command line arguments:
for (int i = 1; i < argc; i++)
{
if (argv[i][0] == '-')
parameters.SetCommandLineFlag (argv[i]);
else
{
if (strstr(argv[i], ".py"))
parameters.SetFlag ("py", argv[i]);
else
parameters.SetFlag ("geofile", argv[i]);
}
2009-01-13 04:40:13 +05:00
}
if (getenv ("NETGENDIR") && strlen (getenv ("NETGENDIR")))
ngdir = getenv ("NETGENDIR");
else
ngdir = ".";
verbose = parameters.GetDefineFlag ("V");
if (verbose)
cout << "NETGENDIR = " << ngdir << endl;
2012-02-12 08:25:26 +06:00
2009-01-13 04:40:13 +05:00
if ( netgen::id == 0 )
{
2019-05-28 16:51:53 +05:00
if (parameters.StringFlagDefined ("testout"))
{
delete ngcore::testout;
ngcore::testout = new ofstream (parameters.GetStringFlag ("testout", "test.out"));
}
2009-01-13 04:40:13 +05:00
#ifdef SOCKETS
Ng_ServerSocketManagerInit(static_cast<int>(parameters.GetNumFlag("serversocket",-1)));
if(parameters.GetNumFlag("serversocket",-1) > 0 && !parameters.GetDefineFlag("display"))
nodisplay = true;
#endif
if(parameters.GetDefineFlag("batchmode"))
nodisplay = true;
2011-06-16 22:48:54 +06:00
2009-01-13 04:40:13 +05:00
if(parameters.GetDefineFlag("shellmode"))
{
nodisplay = true;
shellmode = true;
}
Tcl_FindExecutable(NULL);
// initialize application
Tcl_Interp * myinterp = Tcl_CreateInterp ();
if (Tcl_AppInit (myinterp) == TCL_ERROR)
{
cerr << "Exit Netgen due to initialization problem" << endl;
exit (1);
}
// parse tcl-script
int errcode;
Cleanup CMake build system - Use CMAKE_INSTALL_PREFIX instead of INSTALL_DIR - Allow finer control of install directories - Use compiled TCL code by default - Fix RPATH usage on Linux and MacOSX ### Allow finer control of install directories The following variables can be set to either absolute or relative paths NG_INSTALL_DIR_PYTHON: Python files NG_INSTALL_DIR_BIN: Executables NG_INSTALL_DIR_LIB: Libraries NG_INSTALL_DIR_INCLUDE: header files NG_INSTALL_DIR_CMAKE: CMake files NG_INSTALL_DIR_RES: Resources ### Use compiled TCL code by default The tcl files contained in Netgen are stored in onetcl.cpp as c-string. This way it's not necessary to install tcl files or set NETGENDIR ### Fix RPATH usage on Linux and MacOSX The Netgen installation should be completely relocatable now. Squashed commit of the following: commit 201eda5e62726bd87d76beb13c3e5643cd4c7810 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 21:10:08 2017 +0200 cleanup commit b4cd46a9d2f390b40c5223c8d9971f576b979644 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 20:47:46 2017 +0200 fix commit 6506a834dbee2fd7b6df3b3f3709d0b27344356f Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 20:41:45 2017 +0200 allow gui test to fail commit 56c5fc131f61259e6fb67b60f7fff955d2e8d2da Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 20:26:18 2017 +0200 add python3-tk to docker images commit 4d1b5aac1d028867339819599708a08f2098bbd6 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 11:22:18 2017 -0700 windows fix commit 92b5f8a95491ba3508143d7f1b94359edc0655ce Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 11:08:08 2017 -0700 fix for windows commit 3f7bf51434ef3b637b3563930ddb61d04af645cb Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 19:28:13 2017 +0200 fixes, test for gui commit ef1d0164a50fadf374e3b1e43a745b5f69a16ad6 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 19:06:55 2017 +0200 fixes commit 67645bb896012149c23c851b03287199c21fa129 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 17:24:58 2017 +0200 netgen config commit b587b77a282768719cffc366c56d82a1746e0be0 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 16:53:47 2017 +0200 remove comments commit 2b34cc78818afa1cf21484bd0976413a91db0851 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 05:03:00 2017 -0700 fix windows commit 9e98efa54065624e264eaf1acf74b44ef022a68d Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 13:42:11 2017 +0200 fixes commit 394b470a07d73431079f80caa36c7c7042077f40 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 12:24:40 2017 +0200 fix rpath issue commit 6787eae384a8592f90598258ccd8207cd499d9fc Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 11:37:05 2017 +0200 some more fixes with install dir commit fcf22659c60300e8d39d12e14b21c58a062e739c Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 01:34:06 2017 -0700 some fixes commit ede1f0c462978bb70d3b4e2251cb555a592e82e3 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 29 10:16:34 2017 +0200 fixes commit b6a1259876a77f54e419a44f1b44d03d5bb49b82 Merge: c79f9a3 6627b0b Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Wed May 24 09:35:50 2017 +0200 Merge remote-tracking branch 'origin/master' into cmake_cleanup commit c79f9a3421d4d2937c31dab4a601ce09d52b0e54 Merge: 99c3550 030ad1d Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Mon May 22 17:52:24 2017 +0200 Merge remote-tracking branch 'origin/master' into cmake_cleanup commit 99c35500850e08fdc847013bb384169b1483acb4 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Fri May 19 14:37:28 2017 +0200 fix rpath commit 8215e9748d9ee225266bc941da1ca252aebd27de Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Thu May 18 13:29:41 2017 +0200 remove INSTALL_DIR, rename var to NETGEN_INSTALL_DIR_INCLUDE, install libngpy to python package folder commit 23d028c4cf7572de9e2e277cda8f6b07b6b1d9f9 Merge: 57027c8 f72a247 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Thu May 18 12:03:59 2017 +0200 Merge remote-tracking branch 'origin/master' into cmake_cleanup commit 57027c8c706ff755bdf26887884bbdeca129fe8f Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Fri May 12 17:32:05 2017 +0200 New CMake option: USE_INTERNAL_TCL (ON by default) This option uses the tcl code compiled in onetcl.cpp instead of separate tcl files by default. When set at configure time, no tcl files will be installed anymore. commit 27ce5b7edd66d64e2453f5045f5ac08c313f7608 Author: Matthias Hochsteger <matthias.hochsteger@tuwien.ac.at> Date: Fri May 12 17:16:52 2017 +0200 WIP: Cleanup of CMake files - Fix RPATH on Linux (TODO: other platforms) - New variables to specify install behaviour: NG_INSTALL_DIR_BIN NG_INSTALL_DIR_LIB NG_INSTALL_DIR_CMAKE NG_INSTALL_DIR_INCLUDE
2017-05-30 00:19:34 +05:00
bool internaltcl = INTERNAL_TCL_DEFAULT;
2009-01-13 04:40:13 +05:00
if (shellmode)
internaltcl = false;
if (verbose)
{
cout << "Tcl header version = " << TCL_PATCH_LEVEL << endl;
Tcl_Eval (myinterp, "puts \"Tcl runtime version = [info patchlevel] \";");
}
if (parameters.GetDefineFlag ("internaltcl"))
internaltcl=true;
if (parameters.GetDefineFlag ("externaltcl"))
internaltcl=false;
2009-01-18 00:37:57 +05:00
2009-01-13 04:40:13 +05:00
if (internaltcl)
{
if (verbose)
cout << "using internal Tcl-script" << endl;
// connect to one string
extern const char * ngscript[];
const char ** hcp = ngscript;
int len = 0;
while (*hcp)
len += strlen (*hcp++);
char * tr1 = new char[len+1];
*tr1 = 0;
hcp = ngscript;
char * tt1 = tr1;
while (*hcp)
{
strcat (tt1, *hcp);
tt1 += strlen (*hcp++);
}
errcode = Tcl_Eval (myinterp, tr1);
delete [] tr1;
}
else
{
string startfile = ngdir + "/ng.tcl";
if (verbose)
cout << "Load Tcl-script from " << startfile << endl;
errcode = Tcl_EvalFile (myinterp, (char*)startfile.c_str());
}
if (errcode)
{
cout << "Error in Tcl-Script:" << endl;
// cout << "result = " << myinterp->result << endl;
cout << "result = " << Tcl_GetStringResult (myinterp) << endl;
// cout << "in line " << myinterp->errorLine << endl;
2009-01-13 04:40:13 +05:00
cout << "\nMake sure to set environment variable NETGENDIR to directory containing ng.tcl" << endl;
2009-01-13 04:40:13 +05:00
exit (1);
}
/*
2009-01-13 04:40:13 +05:00
// lookup user file formats and insert into format list:
2019-07-09 13:39:16 +05:00
NgArray<const char*> userformats;
NgArray<const char*> extensions;
2009-09-22 13:12:00 +06:00
RegisterUserFormats (userformats, extensions);
2009-01-13 04:40:13 +05:00
ostringstream fstr;
2009-09-22 13:12:00 +06:00
tcl_const char * exportft = Tcl_GetVar (myinterp, "exportfiletype", 0);
2009-01-13 04:40:13 +05:00
for (int i = 1; i <= userformats.Size(); i++)
2009-09-22 13:12:00 +06:00
{
fstr << ".ngmenu.file.filetype add radio -label \""
<< userformats.Get(i) << "\" -variable exportfiletype -command { .ngmenu.file invoke \"Export Mesh...\" } \n";
2009-09-22 13:12:00 +06:00
fstr << "lappend meshexportformats { {" << userformats.Get(i) << "} {" << extensions.Get(i) << "} }\n";
}
2009-01-13 04:40:13 +05:00
Tcl_Eval (myinterp, (char*)fstr.str().c_str());
2009-09-22 13:12:00 +06:00
Tcl_SetVar (myinterp, "exportfiletype", exportft, 0);
*/
2009-01-13 04:40:13 +05:00
#ifdef SOCKETS
Ng_ServerSocketManagerRun();
#endif
// start event-loop
Tk_MainLoop();
Tcl_DeleteInterp (myinterp);
Tcl_Exit(0);
}
2011-07-04 18:29:18 +06:00
2009-01-13 04:40:13 +05:00
#ifdef PARALLEL
else
{
ParallelRun();
MPI_Finalize();
}
2011-07-04 18:29:18 +06:00
2009-01-13 04:40:13 +05:00
#endif
return 0;
}
2009-01-18 05:25:35 +05:00
/*
2009-01-13 04:40:13 +05:00
extern "C" int Tix_Init (Tcl_Interp * interp);
extern "C" int Itcl_Init (Tcl_Interp * interp);
extern "C" int Itk_Init (Tcl_Interp * interp);
2009-01-18 05:25:35 +05:00
*/
2009-01-13 04:40:13 +05:00
extern "C" int Ng_Init (Tcl_Interp * interp);
extern "C" int Ng_Vis_Init (Tcl_Interp * interp);
// extern Tcl_PackageInitProc * Tk_SafeInit;
/*
*
* Initialize packages
*
*/
2009-04-05 17:30:37 +06:00
// extern "C" int NGSolve_Init (Tcl_Interp * interp);
2009-01-13 04:40:13 +05:00
int Tcl_AppInit(Tcl_Interp * interp)
{
if (Tcl_Init(interp) == TCL_ERROR) {
cerr << "Problem in Tcl_Init: " << endl;
cout << "result = " << Tcl_GetStringResult (interp) << endl;
// cerr << interp->result << endl;
2009-01-13 04:40:13 +05:00
// return TCL_ERROR;
}
if (!nodisplay && Tk_Init(interp) == TCL_ERROR) {
cerr << "Problem in Tk_Init: " << endl;
cout << "result = " << Tcl_GetStringResult (interp) << endl;
// cerr << interp->result << endl;
2009-01-13 04:40:13 +05:00
// return TCL_ERROR;
}
#ifdef TRAFO
// extern int Trafo_Init (Tcl_Interp * interp);
// if (Trafo_Init(interp) == TCL_ERROR)
// {
// cerr << "Problem in Trafo_Init: " << endl;
// cerr << interp->result << endl;
// return TCL_ERROR;
// }
#endif
#ifdef EBGELAST
extern int EBGElast_Init (Tcl_Interp * interp);
if(EBGElast_Init(interp) == TCL_ERROR)
{
cerr << "Problem in EBGElast_Init: " << endl;
cerr << interp->result << endl;
return TCL_ERROR;
}
#endif
#ifdef SMALLTRAFO
extern int SmallModels_Init (Tcl_Interp * interp);
if(SmallModels_Init(interp) == TCL_ERROR)
{
cerr << "Problem in SmallModel_Init: " << endl;
cerr << interp->result << endl;
return TCL_ERROR;
}
#endif
#ifdef SOCKETS
extern int Ng_Socket_Init (Tcl_Interp * interp);
if ( Ng_Socket_Init(interp) == TCL_ERROR)
{
cerr << "Problem in Ng_Socket_Init: " << endl;
cerr << interp->result << endl;
return TCL_ERROR;
}
#endif
#ifdef ZUGSTANGE
extern int Zugstange_Init (Tcl_Interp * interp);
if (Zugstange_Init(interp) == TCL_ERROR)
{
cerr << "Problem in Zugstange_Init: " << endl;
cerr << interp->result << endl;
return TCL_ERROR;
}
#endif
Tcl_StaticPackage(interp, "Tk", Tk_Init, 0);
return TCL_OK;
}
2013-02-26 19:11:08 +06:00