newlib/winsup/mingw/mingwex/wctrans.c
Danny Smith 7e9439a0eb * mingwex/wctype.c: New file.
* mingwex/wctrans.c: New file.
	* mingwex/Makefile.in (DISTFILES): Add wctype.c, wctrans.c.
	* mingwex/Makefile.in (Q8_OBJS): Add wctype.o, wctrans.o.
2005-02-25 01:43:43 +00:00

61 lines
1.3 KiB
C
Executable File

/*
wctrans.c
7.25.3.2 Extensible wide-character case mapping functions
Contributed by: Danny Smith <dannysmith@usesr.sourcefoge.net>
2005-02-24
This source code is placed in the PUBLIC DOMAIN. It is modified
from the Q8 package created by Doug Gwyn <gwyn@arl.mil>
*/
#include <string.h>
#include <wctype.h>
/*
This differs from the MS implementation of wctrans which
returns 0 for tolower and 1 for toupper. According to
C99, a 0 return value indicates invalid input.
These two function go in the same translation unit so that we
can ensure that
towctrans(wc, wctrans("tolower")) == towlower(wc)
towctrans(wc, wctrans("toupper")) == towupper(wc)
It also ensures that
towctrans(wc, wctrans("")) == wc
which is not required by standard.
*/
static const struct {
const char *name;
wctrans_t val; } tmap[] = {
{"tolower", _LOWER},
{"toupper", _UPPER}
};
#define NTMAP (sizeof tmap / sizeof tmap[0])
wctrans_t
wctrans (const char* property)
{
int i;
for ( i = 0; i < NTMAP; ++i )
if (strcmp (property, tmap[i].name) == 0)
return tmap[i].val;
return 0;
}
wint_t towctrans (wint_t wc, wctrans_t desc)
{
switch (desc)
{
case _LOWER:
return towlower (wc);
case _UPPER:
return towupper (wc);
default:
return wc;
}
}