/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at
golgotha_source@usa.net (Subject should have "GOLG" in it)
***********************************************************************/
//{{{ Global Initializers Class
//
// all classes that need initialization at the begining of main should derive themselves from
// this no class should allocate memory or interact with other classes before the "init stage"
// which follows the "construction stage"
//
//$Id: init.hh,v 1.10 1998/06/22 17:44:16 jc Exp $
#ifndef __i4INIT_HPP_
#define __i4INIT_HPP_
#include "arch.hh"
// these type numbers determine the order i4_init_class'es are initialized in
// deinitialization occurs in the reverse order
enum {
I4_INIT_TYPE_MEMORY_MANAGER, // main i4 memory manager
I4_INIT_TYPE_THREADS, // initialized thread info
I4_INIT_TYPE_LISP_MEMORY, // for lisp object allocations - uses i4 memory manager,
I4_INIT_TYPE_LISP_BASE_TYPES, // adds lisp types into the system (li_int.. etc)
I4_INIT_TYPE_LISP_FUNCTIONS, // adds lisp fuinctions (li_load & any user li_automatic..
I4_INIT_TYPE_STRING_MANAGER,
I4_INIT_TYPE_FILE_MANAGER,
I4_INIT_TYPE_DLLS,
I4_INIT_TYPE_OTHER
};
class i4_init_class
{
public:
static i4_init_class *first_init;
i4_init_class *next_init;
virtual int init_type() { return I4_INIT_TYPE_OTHER; }
virtual void init() {}
virtual void uninit() {}
i4_init_class();
virtual ~i4_init_class();
};
// should be called at the begining of main (after memory manager is initialized)
void i4_init();
// should be called at the end of main (after memory manager is deinitialized)
void i4_uninit();
// used to report errors when things should be executed only when i4 is initialized
i4_bool i4_is_initialized();
#endif