iphreeqc/class_main.cpp
David L Parkhurst d57af05353 OUTPUT_MESSAGE removed, need to check a bit.
sformatf now returns char *. Should be more efficient.

git-svn-id: svn://136.177.114.72/svn_GW/phreeqcpp/branches/ErrorHandling@5706 1feff8c3-07ed-0310-ac33-dd36852eb9cd
2011-10-20 13:41:03 +00:00

226 lines
5.0 KiB
C++
Raw Blame History

#include "Phreeqc.h"
#include "output.h"
#include "phrqproto.h"
#include "input.h"
#include "NameDouble.h"
#include "Solution.h"
#include "Reaction.h"
#include "PPassemblage.h"
#include "Exchange.h"
#include "Surface.h"
#include "GasPhase.h"
#include "SSassemblage.h"
#include "cxxKinetics.h"
/* ----------------------------------------------------------------------
* MAIN
* ---------------------------------------------------------------------- */
int
main(int argc, char *argv[])
/*
* Main program for PHREEQC
*/
{
//int errors;
#if defined(WIN32_MEMORY_DEBUG)
int tmpDbgFlag;
/*
* Set the debug-heap flag to keep freed blocks in the
* heap's linked list - This will allow us to catch any
* inadvertent use of freed memory
*/
tmpDbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
//tmpDbgFlag |= _CRTDBG_DELAY_FREE_MEM_DF;
tmpDbgFlag |= _CRTDBG_LEAK_CHECK_DF;
///tmpDbgFlag |= _CRTDBG_CHECK_ALWAYS_DF;
_CrtSetDbgFlag(tmpDbgFlag);
//_crtBreakAlloc = 9482;
#endif
/*if (svnid == NULL)
fprintf(stderr, " ");*/
Phreeqc phreeqc_instance;
phreeqc_instance.main_method(argc, argv);
#ifdef CHARTxxx
if (phreeqc_instance.u_g)
{
System::Diagnostics::Process^ currentProcess = System::Diagnostics::Process::GetCurrentProcess();
//System::Console::WriteLine(currentProcess->Threads->Count);
while (currentProcess->Threads->Count > 8)
{
currentProcess->Refresh();
//System::Console::WriteLine(currentProcess->Threads->Count);
System::Threading::Thread::CurrentThread->Sleep(100);
}
}
#endif
}
int CLASS_QUALIFIER
main_method(int argc, char *argv[])
/*
* Main program for PHREEQC
*/
{
int errors;
void *db_cookie = NULL;
void *input_cookie = NULL;
#if defined(WIN32_MEMORY_DEBUG)
int tmpDbgFlag;
/*
* Set the debug-heap flag to keep freed blocks in the
* heap's linked list - This will allow us to catch any
* inadvertent use of freed memory
*/
tmpDbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
//tmpDbgFlag |= _CRTDBG_DELAY_FREE_MEM_DF;
tmpDbgFlag |= _CRTDBG_LEAK_CHECK_DF;
///tmpDbgFlag |= _CRTDBG_CHECK_ALWAYS_DF;
_CrtSetDbgFlag(tmpDbgFlag);
//_crtBreakAlloc = 9482;
#endif
//if (svnid == NULL)
// fprintf(stderr, " ");
phast = FALSE;
/*
* Add callbacks for error_msg and warning_msg
*/
#ifdef USE_OLD_IO
if (add_output_callback(phreeqc_handler, this) != OK)
{
fprintf(stderr, "ERROR: %s\n",
"NULL pointer returned from malloc or realloc.");
fprintf(stderr, "ERROR: %s\n", "Program terminating.");
return -1;
}
#endif
/*
* Open input/output files
*/
errors = process_file_names(argc, argv, &db_cookie, &input_cookie, TRUE);
if (errors != 0)
{
//clean_up();
return errors;
}
#ifdef DOS
write_banner();
#endif
/*
* Initialize arrays
*/
errors = do_initialize();
if (errors != 0)
{
//clean_up();
return errors;
}
/*
* Load database into memory
*/
#if defined(MERGE_INCLUDE_FILES)
this->set_cookie((std::ifstream *) db_cookie);
errors = read_database(PHRQ_io::istream_getc, db_cookie);
this->clear_cookie();
#else
errors = read_database(getc_callback, db_cookie);
#endif
if (errors != 0)
{
//clean_up();
return errors;
}
/*
* Read input data for simulation
*/
#if defined(MERGE_INCLUDE_FILES)
this->set_cookie((std::ifstream *)input_cookie);
errors = run_simulations(PHRQ_io::istream_getc, input_cookie);
this->clear_cookie();
#else
errors = run_simulations(getc_callback, input_cookie);
#endif
if (errors != 0)
{
//clean_up();
return errors;
}
/*
* Display successful status
*/
errors = do_status();
if (errors != 0)
{
//clean_up();
return errors;
}
//clean_up();
//close_input_files();
//close_output_files();
return 0;
}
#ifdef DOS
/* ---------------------------------------------------------------------- */
int CLASS_QUALIFIER
write_banner(void)
/* ---------------------------------------------------------------------- */
{
char buffer[80];
int len, indent;
screen_msg(
" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
screen_msg(
" <20> <20>\n");
/* version */
len = sprintf(buffer, "* PHREEQC-%s *", "@VERSION@");
indent = (44 - len) / 2;
screen_msg(sformatf("%14c<34>%*c%s%*c<>\n", ' ', indent, ' ', buffer,
44 - indent - len, ' '));
screen_msg(
" <20> <20>\n");
screen_msg(
" <20> A hydrogeochemical transport model <20>\n");
screen_msg(
" <20> <20>\n");
screen_msg(
" <20> by <20>\n");
screen_msg(
" <20> D.L. Parkhurst and C.A.J. Appelo <20>\n");
screen_msg(
" <20> <20>\n");
/* date */
len = sprintf(buffer, "%s", "@VER_DATE@");
indent = (44 - len) / 2;
screen_msg(sformatf("%14c<34>%*c%s%*c<>\n", ' ', indent, ' ', buffer,
44 - indent - len, ' '));
screen_msg(
" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\n");
return 0;
}
#endif