86 lines
1.7 KiB
C
86 lines
1.7 KiB
C
/*
|
|
* Interactive disassembler (IDA).
|
|
* Version 3.00
|
|
* Copyright (c) 1990-94 by Ilfak Guilfanov. (2:5020/209@fidonet)
|
|
* ALL RIGHTS RESERVED.
|
|
*
|
|
*/
|
|
|
|
#ifndef _DOS_OVR_H_
|
|
#define _DOS_OVR_H_
|
|
|
|
// the following structures are 1-byte aligned (!)
|
|
#pragma pack(push,1)
|
|
|
|
struct fbov_t
|
|
{
|
|
ushort fb;
|
|
#define FB_MAGIC 0x4246
|
|
ushort ov;
|
|
#define OV_MAGIC 0x564F
|
|
uint32 ovrsize;
|
|
uint32 exeinfo;
|
|
int32 segnum;
|
|
};
|
|
|
|
struct seginfo_t
|
|
{
|
|
ushort seg;
|
|
ushort maxoff; // FFFF - unknown
|
|
ushort flags;
|
|
#define SI_COD 0x0001
|
|
#define SI_OVR 0x0002
|
|
#define SI_DAT 0x0004
|
|
ushort minoff;
|
|
};
|
|
|
|
struct stub_t
|
|
{
|
|
uchar CDh; // 0
|
|
uchar intnum; // 1
|
|
ushort memswap; // 2
|
|
int32 fileoff; // 4
|
|
ushort codesize; // 8
|
|
ushort relsize; // 10
|
|
ushort nentries; // 12
|
|
ushort prevstub; // 14
|
|
#define STUBUNK_SIZE (0x20-0x10)
|
|
uchar unknown[STUBUNK_SIZE];
|
|
};
|
|
|
|
struct ovrentry_t
|
|
{
|
|
ushort int3f;
|
|
ushort off;
|
|
char segc;
|
|
};
|
|
|
|
CASSERT(sizeof(ovrentry_t) == 5);
|
|
|
|
struct ms_entry
|
|
{
|
|
uchar CDh;
|
|
uchar intnum; // normally 3Fh
|
|
ushort ovr_index;
|
|
ushort entry_off;
|
|
};
|
|
|
|
bool pos_read(linput_t *fp, uint32 pos, void *buf, size_t size);
|
|
int CheckCtrlBrk(void);
|
|
void add_segm_by_selector(sel_t base, const char *sclass);
|
|
extern const char e_exe[];
|
|
//
|
|
enum o_type { ovr_noexe, ovr_pascal, ovr_cpp, ovr_ms };
|
|
|
|
o_type PrepareOverlayType(linput_t *fp, exehdr *E);
|
|
linput_t *CheckExternOverlays(void);
|
|
sel_t LoadCppOverlays(linput_t *fp);
|
|
sel_t LoadMsOverlays(linput_t *fp, bool PossibleDynamic);
|
|
void LoadPascalOverlays(linput_t *fp);
|
|
|
|
NORETURN void errstruct(void);
|
|
|
|
#pragma pack(pop)
|
|
|
|
#endif
|