aboutsummaryrefslogtreecommitdiff
path: root/blob2xex.c
diff options
context:
space:
mode:
Diffstat (limited to 'blob2xex.c')
-rw-r--r--blob2xex.c18
1 files changed, 11 insertions, 7 deletions
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 ": "