#ifndef _UMR_H #define _UMR_H namespace umr { class file_reader { public: virtual long read(void *ptr, long howmany) = 0; virtual void seek(long where) = 0; }; class file_writer { public: virtual void write(void *ptr, long howmany) = 0; }; #include "urf.h" class upkg { upkg_hdr *hdr; // read the urf.h for these 4... upkg_exports *exports; upkg_imports *imports; upkg_names *names; file_reader *reader; int data_size, // a way to standardize some freaky parts of the format pkg_opened; // sanity check char header[4096], // we load the header into this buffer buf[256]; // temp buf for get_string() public: upkg() { pkg_opened = 0; } ~upkg() { close(); } bool open(file_reader *reader); // open a upkg format file. void close(void); signed int ocount(void); // returns the number of exports char *oname(signed int); // returns the name of the export char *oclassname(signed int); // returns the name of the export's class char *opackagename(signed int); // returns the name of the export's package char *otype(signed int); // returns the name of the type of object signed int export_size(signed int); // return the size of the export described signed int object_size(signed int); // return the size of the object described signed int export_offset(signed int); // return the offset to said export signed int object_offset(signed int); // same int read(void *, signed int, signed int); // read data from the upkg file int export_dump(file_writer *, signed int); // dump an export int object_dump(file_writer *, signed int); // dump an object private: signed long get_fci(char *in); unsigned long get_u32(void *addr); signed long get_s32(void *addr); signed long get_s16(void *addr); signed long get_s8(void *addr); char *get_string(char *addr, int count); int set_classname(int idx, int c_idx); int set_pkgname(int idx, int c_idx); int load_upkg(void); void get_names(void); void get_exports_cpnames(int idx); void get_exports(void); void get_imports(void); void get_type(char *buf, int e, int d); int get_types_isgood(int idx); void check_type(int e, int d); void get_types(void); }; } // namespace umr #endif // _UMR_H