From 34f42ce6308d7a5e1dac31f8ce9f9ddcfb935a2a Mon Sep 17 00:00:00 2001 From: cuz Date: Thu, 28 Nov 2002 17:34:16 +0000 Subject: [PATCH] Added SegDef struct and a few functions to the segdefs module git-svn-id: svn://svn.cc65.org/cc65/trunk@1668 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/common/make/gcc.mak | 1 + src/common/make/watcom.mak | 1 + src/common/segdefs.c | 106 +++++++++++++++++++++++++++++++++++++ src/common/segdefs.h | 35 +++++++++++- 4 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 src/common/segdefs.c diff --git a/src/common/make/gcc.mak b/src/common/make/gcc.mak index 24dec8946..beec9ebd1 100644 --- a/src/common/make/gcc.mak +++ b/src/common/make/gcc.mak @@ -21,6 +21,7 @@ OBJS = abend.o \ hashstr.o \ matchpat.o \ print.o \ + segdefs.o \ strbuf.o \ strutil.o \ target.o \ diff --git a/src/common/make/watcom.mak b/src/common/make/watcom.mak index e72d7cec1..ce59f72d5 100644 --- a/src/common/make/watcom.mak +++ b/src/common/make/watcom.mak @@ -77,6 +77,7 @@ OBJS = abend.obj \ hashstr.obj \ matchpat.obj \ print.obj \ + segdefs.obj \ strbuf.obj \ strutil.obj \ target.obj \ diff --git a/src/common/segdefs.c b/src/common/segdefs.c new file mode 100644 index 000000000..907fccb64 --- /dev/null +++ b/src/common/segdefs.c @@ -0,0 +1,106 @@ +/*****************************************************************************/ +/* */ +/* segdefs.c */ +/* */ +/* Segment definitions for the bin65 binary utils */ +/* */ +/* */ +/* */ +/* (C) 2002 Ullrich von Bassewitz */ +/* Wacholderweg 14 */ +/* D-70597 Stuttgart */ +/* EMail: uz@musoftware.de */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include + +/* common */ +#include "chartype.h" +#include "xmalloc.h" +#include "segdefs.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +SegDef* NewSegDef (const char* Name, unsigned Type) +/* Create a new segment definition and return it */ +{ + /* Allocate memory */ + SegDef* D = xmalloc (sizeof (SegDef)); + + /* Initialize it */ + if (D) { + D->Name = xstrdup (Name); + D->Type = Type; + } + + /* Return the result */ + return D; +} + + + +void FreeSegDef (SegDef* D) +/* Free a segment definition */ +{ + xfree (D->Name); + xfree (D); +} + + + +SegDef* DupSegDef (const SegDef* Def) +/* Duplicate a segment definition and return it */ +{ + return NewSegDef (Def->Name, Def->Type); +} + + + +int ValidSegName (const char* Name) +/* Return true if the given segment name is valid, return false otherwise */ +{ + /* Must start with '_' or a letter */ + if ((*Name != '_' && !IsAlpha(*Name)) || strlen(Name) > 80) { + return 0; + } + + /* Can have letters, digits or the underline */ + while (*++Name) { + if (*Name != '_' && !IsAlNum(*Name)) { + return 0; + } + } + + /* Name is ok */ + return 1; +} + + + diff --git a/src/common/segdefs.h b/src/common/segdefs.h index 0a0b8c065..9fe2f0d2b 100644 --- a/src/common/segdefs.h +++ b/src/common/segdefs.h @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 1998-2000 Ullrich von Bassewitz */ +/* (C) 1998-2002 Ullrich von Bassewitz */ /* Wacholderweg 14 */ /* D-70597 Stuttgart */ /* EMail: uz@musoftware.de */ @@ -71,6 +71,39 @@ #define FRAG_FILL 0x20 /* Fill bytes */ + +/* Segment definition */ +typedef struct SegDef SegDef; +struct SegDef { + const char* Name; /* Segment name */ + unsigned Type; /* Segment type, see above */ +}; + +/* Initializer for static SegDefs */ +#define STATIC_SEGDEF_INITIALIZER(name, type) { (name), (type) } + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +SegDef* NewSegDef (const char* Name, unsigned Type); +/* Create a new segment definition and return it */ + +void FreeSegDef (SegDef* D); +/* Free a segment definition */ + +SegDef* DupSegDef (const SegDef* D); +/* Duplicate a segment definition and return it */ + +int ValidSegName (const char* Name); +/* Return true if the given segment name is valid, return false otherwise */ + + + /* End of segdefs.h */ #endif