From 82538a0230ff580c1ba251e8756c881380585587 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Thu, 16 May 2024 04:53:00 -0400 Subject: blob2xex: 2nd and further segments load consecutively, if no -l options for them. --- blob2xex.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'blob2xex.c') diff --git a/blob2xex.c b/blob2xex.c index ed2b60a..0f17371 100644 --- a/blob2xex.c +++ b/blob2xex.c @@ -134,7 +134,7 @@ int write_segment( } fclose(infh); - return(1); + return(seg.len); } void usage() { @@ -148,6 +148,7 @@ void usage() { int main(int argc, char **argv) { char *outfile = 0, *infile = 0; int i, loadaddr = -1, runaddr = -1, initaddr = -1, offset = 0, size = DEFAULT_SIZE, *param = 0; + int bytes = 0, was_file = 0; int segcount = 0, incount = 0; outfile = argv[1]; @@ -172,6 +173,7 @@ int main(int argc, char **argv) { if(!arg[0]) continue; /* skip empty args */ if(param) { /* previous option needs an argument */ + was_file = 0; if(param == &offset) { if( (offset = get_offset(arg) ) < 0 ) exit(1); @@ -181,6 +183,7 @@ int main(int argc, char **argv) { } param = 0; } else if(arg[0] == '-' && arg[1] != '\0') { + was_file = 0; infile = 0; switch(arg[1]) { case 'l': param = &loadaddr; break; @@ -196,26 +199,27 @@ int main(int argc, char **argv) { break; } } else { + was_file = 1; if(loadaddr == -1) { - fprintf(stderr, SELF ": input filename without load address (-l): %s\n", arg); - segcount = 0; - break; + fprintf(stderr, SELF ": at least one load address (-l) is required.\n"); + exit(1); } infile = arg; incount++; - if(write_segment(infile, outfile, loadaddr, initaddr, offset, size)) { + if( (bytes = write_segment(infile, outfile, loadaddr, initaddr, offset, size)) ) { segcount++; + loadaddr += bytes; } else { segcount = 0; break; } infile = 0; - loadaddr = -1; initaddr = -1; offset = 0; size = DEFAULT_SIZE; + initaddr = -1; offset = 0; size = DEFAULT_SIZE; } } if(incount) { - if(segcount && ((param || (loadaddr >= 0) || (initaddr >= 0)) || + if(segcount && ((param || !was_file || (initaddr >= 0)) || (offset != 0) || (size != DEFAULT_SIZE))) { fprintf(stderr, SELF ": " -- cgit v1.2.3