/* */
/* */
/* */
-/* (C) 1998-2001 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
+/* (C) 1998-2003 Ullrich von Bassewitz */
+/* Römerstraße 52 */
+/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
/* */
/* */
/* Header structure */
static ObjHeader Header = {
- OBJ_MAGIC,
- OBJ_VERSION,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ OBJ_MAGIC, /* 32: Magic number */
+ OBJ_VERSION, /* 16: Version number */
+ 0, /* 16: flags */
+ 0, /* 32: Offset to option table */
+ 0, /* 32: Size of options */
+ 0, /* 32: Offset to file table */
+ 0, /* 32: Size of files */
+ 0, /* 32: Offset to segment table */
+ 0, /* 32: Size of segment table */
+ 0, /* 32: Offset to import list */
+ 0, /* 32: Size of import list */
+ 0, /* 32: Offset to export list */
+ 0, /* 32: Size of export list */
+ 0, /* 32: Offset to list of debug symbols */
+ 0, /* 32: Size of debug symbols */
+ 0, /* 32: Offset to list of line infos */
+ 0, /* 32: Size of line infos */
+ 0, /* 32: Offset to string pool */
+ 0, /* 32: Size of string pool */
+ 0, /* 32: Offset to assertion table */
+ 0, /* 32: Size of assertion table */
+ 0, /* 32: Offset into scope table */
+ 0, /* 32: Size of scope table */
};
remove (OutFile);
/* Now abort with a fatal error */
- Fatal (FAT_CANNOT_WRITE_OUTPUT, OutFile, strerror (Error));
+ Fatal ("Cannot write to output file `%s': %s", OutFile, strerror (Error));
}
ObjWrite32 (Header.DbgSymSize);
ObjWrite32 (Header.LineInfoOffs);
ObjWrite32 (Header.LineInfoSize);
+ ObjWrite32 (Header.StrPoolOffs);
+ ObjWrite32 (Header.StrPoolSize);
+ ObjWrite32 (Header.AssertOffs);
+ ObjWrite32 (Header.AssertSize);
+ ObjWrite32 (Header.ScopeOffs);
+ ObjWrite32 (Header.ScopeSize);
}
/* Create the output file */
F = fopen (OutFile, "w+b");
if (F == 0) {
- Fatal (FAT_CANNOT_OPEN_OUTPUT, OutFile, strerror (errno));
+ Fatal ("Cannot open output file `%s': %s", OutFile, strerror (errno));
}
/* Write a dummy header */
+unsigned long ObjGetFilePos (void)
+/* Get the current file position */
+{
+ long Pos = ftell (F);
+ if (Pos < 0) {
+ ObjWriteError ();
+ }
+ return Pos;
+}
+
+
+
+void ObjSetFilePos (unsigned long Pos)
+/* Set the file position */
+{
+ if (fseek (F, Pos, SEEK_SET) != 0) {
+ ObjWriteError ();
+ }
+}
+
+
+
void ObjWrite8 (unsigned V)
/* Write an 8 bit value to the file */
{
+void ObjWriteBuf (const StrBuf* S)
+/* Write a string to the object file */
+{
+ /* Write the string with the length preceeded (this is easier for
+ * the reading routine than the C format since the length is known in
+ * advance).
+ */
+ ObjWriteVar (SB_GetLen (S));
+ ObjWriteData (SB_GetConstBuf (S), SB_GetLen (S));
+}
+
+
+
void ObjWriteData (const void* Data, unsigned Size)
/* Write literal data to the file */
{
+void ObjStartStrPool (void)
+/* Mark the start of the string pool section */
+{
+ Header.StrPoolOffs = ftell (F);
+}
+
+
+
+void ObjEndStrPool (void)
+/* Mark the end of the string pool section */
+{
+ Header.StrPoolSize = ftell (F) - Header.StrPoolOffs;
+}
+
+
+
+void ObjStartAssertions (void)
+/* Mark the start of the assertion table */
+{
+ Header.AssertOffs = ftell (F);
+}
+
+
+
+void ObjEndAssertions (void)
+/* Mark the end of the assertion table */
+{
+ Header.AssertSize = ftell (F) - Header.AssertOffs;
+}
+
+
+
+void ObjStartScopes (void)
+/* Mark the start of the scope table */
+{
+ Header.ScopeOffs = ftell (F);
+}
+
+
+
+void ObjEndScopes (void)
+/* Mark the end of the scope table */
+{
+ Header.ScopeSize = ftell (F) - Header.ScopeOffs;
+}
+
+
+