#include <string.h>
#include "asm.h"
+#include "strcmpi.h"
/*)Module asmain.c
*
struct expr e1;
char id[NCPS];
char opt[NCPS];
- char fn[FILENAME_MAX];
+ char fn[PATH_MAX];
char *p;
int d, n, uaf, uf;
break;
case S_MODUL:
- getst(id, -1);
+ getst(id, getnb()); // a module can start with a digit
if (pass == 0) {
if (module[0]) {
err('m');
if ((ap = alookup(id)) != NULL) {
if (uaf && uf != ap->a_flag)
err('m');
- if (ap->a_flag & A_OVR) {
- ap->a_size = 0;
- ap->a_fuzz=0;
- }
} else {
ap = (struct area *) new (sizeof(struct area));
ap->a_ap = areap;
d = getnb();
p = fn;
while ((c = get()) != d) {
- if (p < &fn[FILENAME_MAX-1]) {
+ if (p < &fn[PATH_MAX-1]) {
*p++ = c;
} else {
break;
{
getst(id, -1);
- if (!strcmpi(id, "on"))
+ if (!as_strcmpi(id, "on"))
{
/* Quick sanity check: size of
* Addr_T must be at least 24 bits.
flat24Mode = 1;
}
}
- else if (!strcmpi(id, "off"))
+ else if (!as_strcmpi(id, "off"))
{
flat24Mode = 0;
}
p2 = strrchr (afn, FSEPX); // search last '.'
if (!p2)
p2 = afn + strlen (afn);
- if (p2 > &afn[FILENAME_MAX-4]) // truncate filename, if it's too long
- p2 = &afn[FILENAME_MAX-4];
+ if (p2 > &afn[PATH_MAX-4]) // truncate filename, if it's too long
+ p2 = &afn[PATH_MAX-4];
*p2++ = FSEPX;
// choose a file-extension
}
while ((c = *p3++) != 0) { // strncpy
- if (p2 < &afn[FILENAME_MAX-1])
+ if (p2 < &afn[PATH_MAX-1])
*p2++ = c;
}
*p2++ = 0;
register struct area *oap;
oap = dot.s_area;
+ /* fprintf (stderr, "%s dot.s_area->a_size: %d dot.s_addr: %d\n",
+ oap->a_id, dot.s_area->a_size, dot.s_addr); */
oap->a_fuzz = fuzz;
- oap->a_size = dot.s_addr;
- fuzz = nap->a_fuzz;
+ if (oap->a_flag & A_OVR) {
+ // the size of an overlay is the biggest size encountered
+ if (oap->a_size < dot.s_addr) {
+ oap->a_size = dot.s_addr;
+ }
+ } else {
+ oap->a_size = dot.s_addr;
+ }
+ if (nap->a_flag & A_OVR) {
+ // a new overlay starts at 0, no fuzz
+ dot.s_addr = 0;
+ fuzz = 0;
+ } else {
+ dot.s_addr = nap->a_size;
+ fuzz = nap->a_fuzz;
+ }
dot.s_area = nap;
- dot.s_addr = nap->a_size;
outall();
}