aboutsummaryrefslogtreecommitdiff
path: root/xex.c
diff options
context:
space:
mode:
Diffstat (limited to 'xex.c')
-rw-r--r--xex.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/xex.c b/xex.c
index e4b66ce..8584286 100644
--- a/xex.c
+++ b/xex.c
@@ -114,6 +114,10 @@ int xex_fread_seg_header(xex_segment *seg, FILE *file) {
if(d == EOF) return 0;
addr = XEX_ADDR(c, d);
+ if(addr == 0x0984) {
+ fprintf(stderr, "xex_fread_seg_header(): warning: this might be a DOS 1.0 file (not supported)\n");
+ }
+
if(addr == 0xffff) {
seg->has_ff_header = 1;
c = read_char(file);
@@ -289,6 +293,24 @@ int xex_check_seg(xex_segment *seg) {
return ret;
}
+static int xex_get_addr_from(xex_segment *seg, int location) {
+ int i;
+
+ if(seg->start_addr > location) return -1;
+ if(seg->end_addr <= location) return -1;
+
+ i = location - seg->start_addr;
+ return XEX_ADDR(seg->object[i], seg->object[i + 1]);
+}
+
+int xex_get_run_addr(xex_segment *seg) {
+ return xex_get_addr_from(seg, XEX_RUNAD);
+}
+
+int xex_get_init_addr(xex_segment *seg) {
+ return xex_get_addr_from(seg, XEX_INITAD);
+}
+
char *xex_strerror(int err) {
if(err < 0 || err >= XERR_MAXERR)
err = XERR_MAXERR;