musicmud-2.1.6/data/
musicmud-2.1.6/data/help/
musicmud-2.1.6/data/policy/
musicmud-2.1.6/data/wild/
musicmud-2.1.6/data/world/
musicmud-2.1.6/doc/
musicmud-2.1.6/src/ident/
musicmud-2.1.6/src/lua/
musicmud-2.1.6/src/lua/include/
musicmud-2.1.6/src/lua/src/lib/
musicmud-2.1.6/src/lua/src/lua/
musicmud-2.1.6/src/lua/src/luac/
#ifndef LIBRARY_H
#define LIBRARY_H

//! a void(void) function
typedef void (*procedure)();

//! a shared library
class Library : public Object {
	bool valid, exported;
	void * dlhandle;
 public:
	bool is_valid() const { return valid; }
	bool is_export() const { return exported; }

	//! grab timestamp from given file
	void stamp(const char *buffer);
	
	//! load a library from /filename/
	Library(const char *filename, bool exprt=false, bool trap=false);	

	//! obtain the symbol /name/ from the library
	void *find_symbol(const char *name) const;
	
	procedure get_sym(const char *name) const {
		return (procedure) find_symbol(name);
	}
	
	virtual ~Library();

	void cleanup();

	//! obtain the symbol /symbol/ from library /libname/
	static void *find_symbol(const char *libname, const char *symbol);

	void after_reset();
};

//! all the loaded library
extern World<Library> *libs;

#endif