rdfheaderrec *rdfgetheaderrec(rdffile *f) { static rdfheaderrec r; int i; if (!f->header_loc) { rdf_errno = 5; return NULL; } if (f->header_fp >= f->header_len) return 0; RI8(r.type); switch(r.type) { case 1: /* Relocation record */ RI8(r.r.segment); RI32(r.r.offset); RI8(r.r.length); RI16(r.r.refseg); break; case 2: /* Imported symbol record */ RI16(r.i.segment); RS(r.i.label,32); break; case 3: /* Exported symbol record */ RI8(r.e.segment); RI32(r.e.offset); RS(r.e.label,32); break; case 4: /* DLL record */ RS(r.d.libname,127); break; case 5: /* BSS reservation record */ RI32(r.b.amount); break; default: rdf_errno = 2; /* invalid file */ return NULL; } return &r; }
/* * Read a header record. * Returns the address of record, or NULL in case of error. */ rdfheaderrec *rdfgetheaderrec(rdffile * f) { static rdfheaderrec r; int i; if (!f->header_loc) { rdf_errno = RDF_ERR_HEADER; return NULL; } if (f->header_fp >= f->header_len) return 0; RI8(r.type); RI8(r.g.reclen); switch (r.type) { case RDFREC_RELOC: /* Relocation record */ case RDFREC_SEGRELOC: if (r.r.reclen != 8) { rdf_errno = RDF_ERR_RECLEN; return NULL; } RI8(r.r.segment); RI32(r.r.offset); RI8(r.r.length); RI16(r.r.refseg); break; case RDFREC_IMPORT: /* Imported symbol record */ case RDFREC_FARIMPORT: RI8(r.i.flags); RI16(r.i.segment); RS(r.i.label, EXIM_LABEL_MAX); break; case RDFREC_GLOBAL: /* Exported symbol record */ RI8(r.e.flags); RI8(r.e.segment); RI32(r.e.offset); RS(r.e.label, EXIM_LABEL_MAX); break; case RDFREC_DLL: /* DLL record */ RS(r.d.libname, MODLIB_NAME_MAX); break; case RDFREC_BSS: /* BSS reservation record */ if (r.r.reclen != 4) { rdf_errno = RDF_ERR_RECLEN; return NULL; } RI32(r.b.amount); break; case RDFREC_MODNAME: /* Module name record */ RS(r.m.modname, MODLIB_NAME_MAX); break; case RDFREC_COMMON: /* Common variable */ RI16(r.c.segment); RI32(r.c.size); RI16(r.c.align); RS(r.c.label, EXIM_LABEL_MAX); break; default: #ifdef STRICT_ERRORS rdf_errno = RDF_ERR_RECTYPE; /* unknown header record */ return NULL; #else for (i = 0; i < r.g.reclen; i++) RI8(r.g.data[i]); #endif } return &r; }
rdfheaderrec *rdfgetheaderrec(rdffile *f) { static rdfheaderrec r; int i; if (!f->header_loc) { rdf_errno = 5; return NULL; } if (f->header_fp >= f->header_len) return 0; RI8(r.type); RI8(r.g.reclen); switch(r.type) { case 1: /* Relocation record */ case 6: if (r.r.reclen != 8) { rdf_errno = 9; return NULL; } RI8(r.r.segment); RI32(r.r.offset); RI8(r.r.length); RI16(r.r.refseg); break; case 2: /* Imported symbol record */ case 7: RI16(r.i.segment); RS(r.i.label,32); break; case 3: /* Exported symbol record */ RI8(r.e.segment); RI32(r.e.offset); RS(r.e.label,32); break; case 4: /* DLL record */ RS(r.d.libname,127); break; case 5: /* BSS reservation record */ if (r.r.reclen != 4) { rdf_errno = 9; return NULL; } RI32(r.b.amount); break; default: #ifdef STRICT_ERRORS rdf_errno = 8; /* unknown header record */ return NULL; #else for (i = 0; i < r.g.reclen; i++) RI8(r.g.data[i]); #endif } return &r; }
void code3(int mode, LPSYMBOL s1, LPSYMBOL s2, LPSYMBOL s3) { switch (mode) { case AM_RR8: RR8(s1->instr, s2->val8, s3->val8); break; case AM_RI8: RI8(s1->instr, s2->val8, s3->val8); break; case AM_RM8: RM8(s1->instr, s2->val8, s3->val8); break; case AM_RA8: RA8(s1->instr, s2->val8, s3->val16); break; case AM_RR16: RR16(s1->instr, s2->val8, s3->val8); break; case AM_RI16: RI16(s1->instr, s2->val8, s3->val16); break; case AM_RM16: RM16(s1->instr, s2->val8, s3->val8); break; case AM_RA16: RA16(s1->instr, s2->val8, s3->val16); break; case AM_MR8: MR8(s1->instr, s2->val8, s3->val8); break; case AM_MR16: MR16(s1->instr, s2->val8, s3->val8); break; case AM_M8I8: M8I8(s1->instr, s2->val8, s3->val8); break; case AM_M16I8: M16I8(s1->instr, s2->val8, s3->val8); break; case AM_MI16: MI16(s1->instr, s2->val8, s3->val16); break; case AM_AR8: AR8(s1->instr, s2->val16, s3->val8); break; case AM_AR16: AR16(s1->instr, s2->val16, s3->val8); break; case AM_A8I8: A8I8(s1->instr, s2->val16, s3->val8); break; case AM_A16I8: A16I8(s1->instr, s2->val16, s3->val8); break; case AM_AI16: AI16(s1->instr, s2->val16, s3->val16); break; default: break; } }