/* */
/* */
/* */
-/* (C) 2000-2001 Ullrich von Bassewitz */
+/* (C) 2000-2002 Ullrich von Bassewitz */
/* Wacholderweg 14 */
/* D-70597 Stuttgart */
/* EMail: uz@cc65.org */
/* common */
#include "attrib.h"
+/* cc65 */
+#include "opcodes.h"
/*****************************************************************************/
-/* Forwards */
+/* Forwards */
/*****************************************************************************/
+struct CodeEntry;
+struct CodeLabel;
struct CodeSeg;
struct DataSeg;
+struct TextSeg;
struct SymEntry;
/*****************************************************************************/
-/* Data */
+/* Data */
/*****************************************************************************/
/* A list of all segments used when generating code */
typedef struct Segments Segments;
struct Segments {
+ struct TextSeg* Text; /* Text segment */
struct CodeSeg* Code; /* Code segment */
struct DataSeg* Data; /* Data segment */
struct DataSeg* ROData; /* Readonly data segment */
/* Pointer to the current segment list. Output goes here. */
extern Segments* CS;
+/* Pointer to the global segment list */
+extern Segments* GS;
+
/*****************************************************************************/
void NewSegName (segment_t Seg, const char* Name);
/* Set a new name for a segment */
-int ValidSegName (const char* Name);
-/* Return true if the given segment name is valid, return false otherwise */
-
Segments* PushSegments (struct SymEntry* Func);
/* Make the new segment list current but remember the old one */
struct DataSeg* GetDataSeg (void);
/* Return the current data segment */
+void AddTextLine (const char* Format, ...) attribute ((format (printf, 1, 2)));
+/* Add a line to the current text segment */
+
void AddCodeLine (const char* Format, ...) attribute ((format (printf, 1, 2)));
/* Add a line of code to the current code segment */
+void AddCode (opc_t OPC, am_t AM, const char* Arg, struct CodeLabel* JumpTo);
+/* Add a code entry to the current code segment */
+
void AddDataLine (const char* Format, ...) attribute ((format (printf, 1, 2)));
/* Add a line of data to the current data segment */
+int HaveGlobalCode (void);
+/* Return true if the global code segment contains entries (which is an error) */
+
+void RemoveGlobalCode (void);
+/* Remove all code from the global code segment. Used for error recovery. */
+
void OutputSegments (const Segments* S, FILE* F);
/* Output the given segments to the file */