#include /* * $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; }