This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
magicka/deps/cdk-5.0-20161210/cdk_display.c

132 lines
2.5 KiB
C
Raw Permalink Normal View History

#include <cdk_int.h>
/*
* $Author: tom $
* $Date: 2012/03/20 09:54:37 $
* $Revision: 1.4 $
*/
/*
* Given a character pointer, returns the equivalent display type.
*/
EDisplayType char2DisplayType (const char *string)
{
/* *INDENT-OFF* */
static const struct {
const char *name;
EDisplayType code;
} table[] = {
{ "CHAR", vCHAR },
{ "HCHAR", vHCHAR },
{ "INT", vINT },
{ "HINT", vHINT },
{ "UCHAR", vUCHAR },
{ "LCHAR", vLCHAR },
{ "UHCHAR", vUHCHAR },
{ "LHCHAR", vLHCHAR },
{ "MIXED", vMIXED },
{ "HMIXED", vHMIXED },
{ "UMIXED", vUMIXED },
{ "LMIXED", vLMIXED },
{ "UHMIXED", vUHMIXED },
{ "LHMIXED", vLHMIXED },
{ "VIEWONLY", vVIEWONLY },
{ 0, vINVALID },
};
/* *INDENT-ON* */
if (string != 0)
{
int n;
for (n = 0; table[n].name != 0; n++)
{
if (!strcmp (string, table[n].name))
return table[n].code;
}
}
return (EDisplayType) vINVALID;
}
/*
* Tell if a display type is "hidden"
*/
boolean isHiddenDisplayType (EDisplayType type)
{
boolean result = FALSE;
switch (type)
{
case vHCHAR:
case vHINT:
case vHMIXED:
case vLHCHAR:
case vLHMIXED:
case vUHCHAR:
case vUHMIXED:
result = TRUE;
break;
case vCHAR:
case vINT:
case vINVALID:
case vLCHAR:
case vLMIXED:
case vMIXED:
case vUCHAR:
case vUMIXED:
case vVIEWONLY:
result = FALSE;
break;
}
return result;
}
/*
* Given a character input, check if it is allowed by the display type,
* and return the character to apply to the display, or ERR if not.
*/
int filterByDisplayType (EDisplayType type, chtype input)
{
int result = CharOf (input);
if (!isChar (input))
{
result = ERR;
}
else if ((type == vINT ||
type == vHINT) &&
!isdigit (CharOf (result)))
{
result = ERR;
}
else if ((type == vCHAR ||
type == vUCHAR ||
type == vLCHAR ||
type == vUHCHAR ||
type == vLHCHAR) &&
isdigit (CharOf (result)))
{
result = ERR;
}
else if (type == vVIEWONLY)
{
result = ERR;
}
else if ((type == vUCHAR ||
type == vUHCHAR ||
type == vUMIXED ||
type == vUHMIXED) &&
isalpha (CharOf (result)))
{
result = toupper (result);
}
else if ((type == vLCHAR ||
type == vLHCHAR ||
type == vLMIXED ||
type == vLHMIXED) &&
isalpha (CharOf (result)))
{
result = tolower (result);
}
return result;
}