#ifndef GledCore_Gled_H
#define GledCore_Gled_H
#include <Gled/GledTypes.h>
#include <Gled/GMutex.h>
class Saturn;
class SaturnInfo;
class EyeInfo;
class ShellInfo;
class Forest;
class Mountain;
class Eye;
class ZMIR;
class GCondition;
class GThread;
class Fl_SWM_Manager;
class Fl_Window;
class Fl_Tile;
class Fl_Browser;
class TApplication;
class TRint;
class Gled
{
protected:
void next_arg_or_die(lStr_t& args, lStr_i& i, bool allow_single_minus=false);
TString mCmdName;
lStr_t mArgs;
SaturnInfo* mSaturnInfo;
Saturn* mSaturn;
Bool_t bIsSun;
Bool_t bQuit;
Bool_t bHasPrompt;
Bool_t bShowSplash;
Bool_t bPreExec;
TString mPreExecString;
Bool_t bAutoSpawn;
Bool_t bEarlySrvSock;
Bool_t bAllowMoons;
Bool_t bDaemon;
Bool_t bRootAppRunning;
TApplication *mRootApp;
GMutex mLoggingMutex;
TString mLogFileName;
FILE* mLogFile;
TString mOutFileName;
TString mErrFileName;
TString mLibDir;
TString mDataDir;
TString mHomeDir;
TString mAuthDir;
TString mDefEyeIdentity;
TString mRenderers;
GCondition* mExitCondVar;
GThread* mRootAppThread;
GThread* mExitThread;
list<ZMIR*> mAfterSetupMirs;
static Int_t sExitStatus;
public:
Gled();
void AddArgument(const char* arg);
void ReadArguments(int argc, char **argv);
virtual void ParseArguments(Bool_t allow_daemon);
virtual void InitLogging();
virtual void InitGledCore();
virtual void ProcessCmdLineMacros();
virtual void StopLogging();
virtual ~Gled();
void SetExitCondVar(GCondition* cond) { mExitCondVar = cond; }
void PreExec();
void SpawnSunOrSaturn();
void SpawnSun();
void SpawnSaturn();
void AfterSetup(ZMIR* mir);
void ShootAfterSetupMirs();
void CheckAuthDir();
const char* PubKeyFile(TString& id);
const char* PrivKeyFile(TString& id);
const char* GetPubKeyFile(TString& id, Bool_t use_exc=true);
const char* GetPrivKeyFile(TString& id, Bool_t use_exc=true);
Bool_t IsIdentityInGroup(const char* id, const char* group);
void WaitUntilQueensLoaded();
void AllowMoonConnections();
virtual void Run();
void Exit(Int_t status=0);
static void* Exit_tl(void*);
virtual void ExitVirtual();
virtual Int_t LoadLibSet(const Text_t* lib_set);
virtual Int_t LoadLibSet(LID_t lid);
virtual void SetDebugLevel(Int_t d=0);
virtual void info(const char* s);
virtual void message(const char* s);
virtual void warning(const char* s);
virtual void error(const char* s);
virtual Bool_t HasGUILibs() const { return false; }
virtual EyeInfo* SpawnEye(const TString& libset, const TString& eyector);
virtual EyeInfo* SpawnEye(EyeInfo* ei, ZGlass* ud,
const TString& libset, const TString& eyector)
{ return 0; }
static void AssertLibSet(const Text_t* lib_set);
static void AssertMacro(const Text_t* mac);
static void Macro(const Text_t* mac);
static void LoadMacro(const Text_t* mac);
GThread* SpawnRootAppThread(const TString& name_prefix);
static void* RootApp_runner_tl(void*);
static void RootApp_cleanup_tl(void*);
void SpawnTimeBeatThread();
static void* TimeBeat_tl(void*);
virtual void LockFltk() {}
virtual void UnlockFltk() {}
static Gled* theOne;
static Int_t GetExitStatus();
#include "Gled.h7"
ClassDef(Gled, 0);
};
#endif