X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=direct.c;h=607ad7c05926174d6ec20937c0ac345da09ef44b;hb=cbc8347d4ffea164ca05b03e4e3be39945be8777;hp=9070a4165ea8d88e64978f3c10b360141ab3fdf5;hpb=07781922aefc9551dfb3c9f3e957962dcaef92ff;p=rmac diff --git a/direct.c b/direct.c index 9070a41..607ad7c 100644 --- a/direct.c +++ b/direct.c @@ -1,7 +1,7 @@ // -// RMAC - Reboot's Macro Assembler for all Atari computers +// RMAC - Renamed Macro Assembler for all Atari computers // DIRECT.C - Directive Handling -// Copyright (C) 199x Landon Dyer, 2011-2020 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2021 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 // Source utilised with the kind permission of Landon Dyer // @@ -559,7 +559,7 @@ int d_noclear(void) // -// Include binary file +// Include binary file (can add addition size & position params, comma separated) // int d_incbin(void) { @@ -584,8 +584,9 @@ int d_incbin(void) // Attempt to open the include file in the current directory, then (if that // failed) try list of include files passed in the enviroment string or by - // the "-d" option. + // the "-i" option. TOKEN filename = tok[1]; + if ((fd = open(string[filename], _OPEN_INC)) < 0) { for(i=0; nthpath("RMACPATH", i, buf1)!=0; i++) @@ -608,6 +609,7 @@ int d_incbin(void) allright: tok += 2; + if (*tok != EOL) { // Check size parameter (can be omitted) @@ -637,6 +639,7 @@ allright: close(fd); return ERROR; } + lseek(fd, pos, SEEK_SET); size -= pos; } @@ -647,17 +650,18 @@ allright: } } else - return(comma_error); + return error(comma_error); } else pos = lseek(fd, 0L, SEEK_SET); } else { - //size_pos_fallthrough: + // size & pos not given, so assume offset of 0 and all of the binary size = lseek(fd, 0L, SEEK_END); pos = lseek(fd, 0L, SEEK_SET); } + chcheck(size); DEBUG { printf("INCBIN: File '%s' is %li bytes.\n", string[filename], size); }