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

88 lines
2.2 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);
};
} // namespace umr
#endif // _UMR_H