// Copyright (C) 2001 Jean-Marc Valin
#include <locale.h>
#include "UIDocument.h"
#include <string>
#include "ParameterSet.h"
#include "ObjectRef.h"
#include <pthread.h>
#include <gnome.h>
#include "Network.h"
#include <sstream>
#include "GRunContext.h"
#include "path.h"
#include <string>
#include <fstream>
#include "iextensions.h"
#include <unistd.h>
#include <signal.h>
#include <libxml/parser.h>
#include "object_param.h"
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
using namespace std;
using namespace FD;
namespace FD {
void quit()
{
gdk_threads_enter();
gtk_main_quit();
gdk_threads_leave();
}
void run2(GRunContext *ctx)
{
signal(11,SIG_DFL);
ctx->run();
//cerr << "End of run2()" << endl;
//gtk_main_quit();
}
}//namespace FD
int main(int argc, char **argv)
{
//xmlKeepBlanksDefault(0);
if (argc < 2) {
cout<<"Usage : "<<argv[0]<<" <document> [arguments]"<<endl;
return -1;
}
if (string(argv[1]) == "/dev/stdin")
{
if (fork())
_exit(0);
}
g_thread_init(NULL);
gdk_threads_init();
gnome_init ("GFlow", VERSION, argc, argv);
setlocale (LC_NUMERIC, "C");
signal(11,SIG_DFL);
try {
scanDL();
} catch (BaseException *e)
{
e->print();
delete e;
//exit(1);
}
UINodeRepository::Scan();
IExtensions::detect();
ParameterSet ¶ms = *new ParameterSet;
for (int arg = 2; arg<argc; arg++)
{
char arg_name[100];
sprintf (arg_name, "ARG%d", arg-1);
params.add(arg_name, ObjectRef (new String (argv[arg])));
sprintf (arg_name, "string:ARG%d", arg-1);
params.add(arg_name, ObjectRef (new String (argv[arg])));
sprintf (arg_name, "int:ARG%d", arg-1);
params.add(arg_name, ObjectRef (Int::alloc (atoi(argv[arg]))));
sprintf (arg_name, "float:ARG%d", arg-1);
params.add(arg_name, ObjectRef (Float::alloc (atof(argv[arg]))));
if (strlen(argv[arg]) > 2 && argv[arg][0]=='<' && argv[arg][strlen(argv[arg])-1]=='>') {
sprintf (arg_name, "object:ARG%d", arg-1);
try {
string val(argv[arg]);
ParameterSet p;
ObjectRef obj = ObjectParam::stringParam("object", val, p);
if (!obj.isNil())
params.add(arg_name, obj);
} catch (...) {}
}
}
UIDocument *doc;
/*if (string(argv[1]) == "/dev/stdin")
{
string docStr;
doc = new UIDocument("/dev/stdin");
while(1)
{
char buff[1025];
cin.read(buff, 1024);
buff[1024]=0;
if (cin.fail())
{
docStr.append(buff, cin.gcount());
break;
}
docStr.append(buff, 1024);
}
doc->loadFromMemory(docStr.c_str(), docStr.size());
} else*/ {
doc = new UIDocument(argv[1]);
doc->load();
}
GRunContext *ctx = new GRunContext(doc, params);
pthread_t runThread;
/*
pthread_attr_t tattr;
pthread_attr_init(&tattr);
pthread_attr_setdetachstate(&tattr,PTHREAD_CREATE_DETACHED);
*/
ctx->set_thread(&runThread);
//pthread_create(&runThread, &tattr, (void * (*)(void *))run2, (void *) ctx);
pthread_create(&runThread, NULL, (void * (*)(void *))run2, (void *) ctx);
gdk_threads_enter();
gtk_main ();
gdk_threads_leave();
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1