* VOID diag() assubr.c
* VOID err() assubr.c
* int fprintf() c-library
- * int getline() aslex.c
+ * int as_getline() aslex.c
* VOID list() aslist.c
* VOID lstsym() aslist.c
* VOID minit() ___mch.c
dot.s_area = &dca;
symp = ˙
minit();
- while (getline()) {
+ while (as_getline()) {
cp = cb;
cpt = cbt;
ep = eb;
if (i) {
// remove output file
printf ("removing %s\n", relFile);
- unlink(relFile);
+ remove(relFile);
}
exit(i);
}
goto loop;
}
/*
- * If the first character is a letter then assume a lable,
+ * If the first character is a letter then assume a label,
* symbol, assembler directive, or assembler mnemonic is
* being processed.
*/
lmode = SLIST;
break;
- case S_OPTSDCC:
+ case S_OPTSDCC:
p = optsdcc;
if ((c = getnb()) != 0) {
do {
- if (p < &tb[NINPUT-1])
+ if (p < &optsdcc[NINPUT-1])
*p++ = c;
} while ((c = get()) != 0);
}
break;
case S_DAREA:
- getid(id, -1);
+ getid(id, -1);
uaf = 0;
uf = A_CON|A_REL;
if ((c = getnb()) == '(') {
case S_ORG:
if (dot.s_area->a_flag & A_ABS) {
outall();
- laddr = dot.s_addr = absexpr();
+ dot.s_area->a_size += dot.s_addr - dot.s_org;
+ laddr = dot.s_addr = dot.s_org = absexpr();
} else {
err('o');
}
if (oap->a_size < dot.s_addr) {
oap->a_size = dot.s_addr;
}
+ } else if (oap->a_flag & A_ABS) {
+ oap->a_addr = dot.s_org;
+ oap->a_size += dot.s_addr - dot.s_org;
+ dot.s_addr = dot.s_org = 0;
} else {
+ oap->a_addr = 0;
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 if (nap->a_flag & A_ABS) {
+ // a new absolute starts at org, no fuzz
+ dot.s_addr = dot.s_org;
+ fuzz = 0;
} else {
dot.s_addr = nap->a_size;
fuzz = nap->a_fuzz;