diff options
author | B. Watson <urchlay@slackware.uk> | 2024-05-16 04:53:00 -0400 |
---|---|---|
committer | B. Watson <urchlay@slackware.uk> | 2024-05-16 04:53:00 -0400 |
commit | 82538a0230ff580c1ba251e8756c881380585587 (patch) | |
tree | f300e927ee9c224d7465634527def417465feeaf /blob2xex.c | |
parent | a4cc3ad3504d634e379369862c9f9fd8eed379f3 (diff) | |
download | bw-atari8-tools-82538a0230ff580c1ba251e8756c881380585587.tar.gz |
blob2xex: 2nd and further segments load consecutively, if no -l options for them.
Diffstat (limited to 'blob2xex.c')
-rw-r--r-- | blob2xex.c | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -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 ": " |