From: cuz Date: Fri, 5 Jan 2001 19:06:20 +0000 (+0000) Subject: Add a new chartype module for character classification. Use the new X-Git-Tag: V2.12.0~2954 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=37da7dff987fc53058e4bb8cabb5880ebeb45af0;p=cc65 Add a new chartype module for character classification. Use the new function IsDigit in target.c. git-svn-id: svn://svn.cc65.org/cc65/trunk@592 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/src/common/chartype.c b/src/common/chartype.c new file mode 100644 index 000000000..31412948e --- /dev/null +++ b/src/common/chartype.c @@ -0,0 +1,128 @@ +/*****************************************************************************/ +/* */ +/* chartype.c */ +/* */ +/* Character classification functions */ +/* */ +/* */ +/* */ +/* (C) 2000 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 "chartype.h" + + + +/* This module contains replacements for functions in ctype.h besides other + * functions. There is a problem with using ctype.h directly: + * The parameter must have a value of "unsigned char" or EOF. + * So on platforms where a char is signed, this may give problems or at + * least warnings. The wrapper functions below will have an "char" parameter + * but handle it correctly. They will NOT work for EOF, but this is not a + * problem, since EOF is always handled separately. + */ + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +int IsAlpha (char C) +/* Check for a letter */ +{ + return (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z'); +} + + + +int IsAlNum (char C) +/* Check for letter or digit */ +{ + return (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z') || (C >= '0' && C <= '9'); +} + + + +int IsAscii (char C) +/* Check for an ASCII character */ +{ + return (C & ~0x7F) == 0; +} + + + +int IsBlank (char C) +/* Check for a space, tab or newline */ +{ + return (C == ' ' || C == '\t' || C == '\n'); +} + + + +int IsDigit (char C) +/* Check for a digit */ +{ + return (C >= '0' && C <= '9'); +} + + + +int IsLower (char C) +/* Check for a lower case char */ +{ + return (C >= 'a' && C <= 'z'); +} + + + +int IsUpper (char C) +/* Check for upper case characters */ +{ + return (C >= 'A' && C <= 'Z'); +} + + + +int IsXDigit (char C) +/* Check for hexadecimal digits */ +{ + return (C >= 'a' && C <= 'f') || (C >= 'A' && C <= 'F') || (C >= '0' && C <= '9'); +} + + + +int IsQuote (char C) +/* Check for a single or double quote */ +{ + return (C == '"' || C == '\''); +} + + + diff --git a/src/common/chartype.h b/src/common/chartype.h new file mode 100644 index 000000000..3f895e4d0 --- /dev/null +++ b/src/common/chartype.h @@ -0,0 +1,95 @@ +/*****************************************************************************/ +/* */ +/* chartype.h */ +/* */ +/* Character classification functions */ +/* */ +/* */ +/* */ +/* (C) 2000 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. */ +/* */ +/*****************************************************************************/ + + + +#ifndef CHARTYPE_H +#define CHARTYPE_H + + + +/* This module contains replacements for functions in ctype.h besides other + * functions. There is a problem with using ctype.h directly: + * The parameter must have a value of "unsigned char" or EOF. + * So on platforms where a char is signed, this may give problems or at + * least warnings. The wrapper functions below will have an "char" parameter + * but handle it correctly. They will NOT work for EOF, but this is not a + * problem, since EOF is always handled separately. + */ + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +int IsAlpha (char C); +/* Check for a letter */ + +int IsAlNum (char C); +/* Check for letter or digit */ + +int IsAscii (char C); +/* Check for an ASCII character */ + +int IsBlank (char C); +/* Check for a space, tab or newline */ + +int IsDigit (char C); +/* Check for a digit */ + +int IsLower (char C); +/* Check for a lower case char */ + +int IsSpace (char C); +/* Check for white space characters */ + +int IsUpper (char C); +/* Check for upper case characters */ + +int IsXDigit (char C); +/* Check for hexadecimal digits */ + +int IsQuote (char C); +/* Check for a single or double quote */ + + + +/* End of chartype.h */ + +#endif + + + diff --git a/src/common/make/gcc.mak b/src/common/make/gcc.mak index f2bd0336e..7ae5818b3 100644 --- a/src/common/make/gcc.mak +++ b/src/common/make/gcc.mak @@ -11,6 +11,7 @@ LIB = common.a OBJS = abend.o \ bitops.o \ + chartype.o \ check.o \ cmdline.o \ coll.o \ diff --git a/src/common/make/watcom.mak b/src/common/make/watcom.mak index 11dddb0a9..65b18eff8 100644 --- a/src/common/make/watcom.mak +++ b/src/common/make/watcom.mak @@ -61,12 +61,13 @@ CCCFG = -bt=$(TARGET) -d1 -onatx -zp4 -5 -zq -w2 .c.obj: $(CC) $(CCCFG) $< - + # ------------------------------------------------------------------------------ # All library OBJ files - + OBJS = abend.obj \ bitops.obj \ + chartype.obj \ check.obj \ cmdline.obj \ coll.obj \ diff --git a/src/common/target.c b/src/common/target.c index a5f31654d..4955ad57a 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -35,8 +35,8 @@ #include #include -#include +#include "chartype.h" #include "target.h" @@ -81,7 +81,7 @@ target_t FindTarget (const char* Name) unsigned I; /* Check for a numeric target */ - if (isdigit (*Name)) { + if (IsDigit (*Name)) { int Target = atoi (Name); if (Target >= 0 && Target < TGT_COUNT) { return (target_t)Target;