void append_reloc(ALL_TABLES* tfinal, ALL_TABLES *t1, ALL_TABLES* t2){
/* appends t2->reloc[] to tfinal->reloc[],
updating the code addresses of the reloc items to the
value required in tfinal->reloc[], and editing
tfinal->code[] as necessary,
*/
// Local variable declarations
int i=0;
int tix=0;
reloc_fields r;
// Do some book-keeping before the loop begins
int t2_coffset = t1->last_code+1 - t2->first_code;
int t2_doffset = t1->last_dseg+1 - t2->first_dseg;
// Now we need to enter the loop
for(i=0; i<=t2->last_reloc; i++){
// Assign local r
r = t2->reloc[i];
// Check for different conditions
if(r.r.ref==CODEREF){
r.r.adr += t2_coffset;
tfinal->code[r.r.adr].u.y += t2_coffset; } // end CODEREF check
if(r.r.ref==EXTDSEGREF){
r.r.adr += t2_coffset;
if(tfinal->code[r.r.adr].u.y != 0xffff)
tfinal->code[r.r.adr].u.y += t2_doffset; } // end EXTDSEGREF check
if(r.r.ref==DSEGREF){
if(r.r.tabix == NO_MOD)
r.r.tabix = 0x00;
else{
r.r.adr += t2_coffset;
tfinal->code[r.r.adr].u.y += t2_doffset; } } // end else and DSEGREF check
if(r.r.ref==MARKSTACKREF){
tix=t2->code[r.r.adr].u.y;
tix=search_tab(tfinal, t2->tab[tix].name);
r.r.adr += t2_coffset;
tfinal->code[r.r.adr].u.y = tix; } // end MARKSTACKREF check
// Append to tfinal
tfinal->last_reloc++;
tfinal->reloc[tfinal->last_reloc]=r;
} // end for
} /* end append_reloc */