#ifndef MZ_H
#define MZ_H

#include <stdint.h>
#include <string.h>

typedef struct { // pointer into program data into which load segment is added
	uint16_t offset,
		 segment;
} __attribute__((packed)) reloc;

typedef struct { // no endian checks - this will only work on x86+vm anyway
	uint16_t mz,
		 bytes,
		 pages,
		 relsz,
		 len,
		 minalloc, // can easily ignore - we have 895k free
		 maxalloc,
		 ss,
		 sp,
		 sum,
		 ip,
		 cs,
		 rel, // pointer to 
		 overlay; // zero if main binary
	reloc	 r[];
} __attribute__((packed)) mz;

typedef struct {
	uint16_t ss, sp, ip, cs;
} mz_start;

uint32_t loadmz(mz*, uint8_t*, uint32_t, uint32_t, mz_start*);

#endif
