cog/Plugins/Dumb/archive/umx/umr.h

88 lines
2.1 KiB
C++

#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);
};
}
#endif // _UMR_H