int _isalnumub( int ch ) { int ret = 0; if (_isalnum(ch) || ch == '_') ret = ch; return ret; }
char *_costume_get_string(const pcostumestrx cxstrlist, const pcostumex cxlist, const CHAR *target, const CHAR *format) { char *ret = (char *) malloc (sizeof(char) * 1024); char *ptr = ret, *tmpptr, *tarptr; char tmp; char _temp[20] = {0,}; // find temp u32 inttmp; int count; pcostumex costmp; pcostumestrx cosstrtmp; BOOL not; #define CONDITION(x) ((x) && not) || (!(x) && !not) tarptr = target; _costume_ict = format; zeroset(ret, sizeof(char) * 1024); do { switch(*_costume_ict++) { case '+': // add variable to ret switch(*_costume_ict++) { case _COTM_VARIABLE: for (count = 0; _isalnumub((int)(*_costume_ict)); _costume_ict++, count++) _temp[count] = *_costume_ict; _temp[count] = 0; if (NULL == (costmp = _costume_find_variable(cxlist, _temp))) return -1; // error inttmp = costmp->data; tmpptr = __itoa(inttmp); for (; *tmpptr; tmpptr++) *ptr++ = *tmpptr; break; case _COTM_STRVARIABLE: for (count = 0; _isalnumub((int)(*_costume_ict)); _costume_ict++, count++) _temp[count] = *_costume_ict; _temp[count] = 0; if (NULL == (cosstrtmp = _costume_find_strvariable(cxstrlist, _temp))) return -1; // error tmpptr = cosstrtmp->data; for (; *tmpptr; tmpptr++) *ptr++ = *tmpptr; break; case '*': // *x, *@int, *$str, *!x RE1: switch(*_costume_ict++) { case '!': switch(*_costume_ict++) { case 's': while (CONDITION(_isspace(*tarptr))) *ptr++ = *tarptr++; break; case 'S': while (CONDITION(!_isspace(*tarptr))) *ptr++ = *tarptr++; break; case 'd': while (CONDITION(_isnumeric(*tarptr))) *ptr++ = *tarptr++; break; case 'D': while (CONDITION(!_isnumeric(*tarptr))) *ptr++ = *tarptr++; break; case 'w': while (CONDITION(_isalnumub(*tarptr))) *ptr++ = *tarptr++; break; case 'W': while (CONDITION(!_isalnumub(*tarptr))) *ptr++ = *tarptr++; break; case '\\': switch(*_costume_ict++) { case 'n': while (CONDITION(*tarptr == '\n')) *ptr++ = *tarptr++; break; case 'r': while (CONDITION(*tarptr == '\r')) *ptr++ = *tarptr++; break; case 't': while (CONDITION(*tarptr == '\t')) *ptr++ = *tarptr++; break; case 'f': while (CONDITION(*tarptr == '\f')) *ptr++ = *tarptr++; break; default: while(CONDITION(*tarptr == *(_costume_ict-1))) *ptr++ = *tarptr++; break; } break; } not = TRUE; break; case '\\': switch(*_costume_ict++) { case 'n': if(CONDITION(*tarptr == '\n')) *ptr++ = *tarptr++; break; case 'r': if(CONDITION(*tarptr == '\r')) *ptr++ = *tarptr++; break; case 't': if(CONDITION(*tarptr == '\t')) *ptr++ = *tarptr++; break; case 'f': if(CONDITION(*tarptr == '\f')) *ptr++ = *tarptr++; break; default: if(CONDITION(*tarptr == *(_costume_ict-1))) *ptr++ = *tarptr++; break; } not = TRUE; break; case '^': // not not = FALSE; goto RE1; break; default: if(_isalnumub((int)(*_costume_ict))) { if(CONDITION(*tarptr == *_costume_ict)) *ptr++ = *tarptr++; not = TRUE; } break; } break; } break; case '*': // *x, *@int, *$str, *!x RE2: switch(*_costume_ict++) { case '!': switch(*_costume_ict++) { case 's': while (CONDITION(_isspace(*tarptr))) tarptr++; break; case 'S': while (CONDITION(!_isspace(*tarptr))) tarptr++; break; case 'd': while (CONDITION(_isnumeric(*tarptr))) tarptr++; break; case 'D': while (CONDITION(!_isnumeric(*tarptr))) tarptr++; break; case 'w': while (CONDITION(_isalnumub(*tarptr))) tarptr++; break; case 'W': while (CONDITION(!_isalnumub(*tarptr))) tarptr++; break; case '\\': switch(*_costume_ict++) { case 'n': while (CONDITION(*tarptr == '\n')) tarptr++; break; case 'r': while (CONDITION(*tarptr == '\r')) tarptr++; break; case 't': while (CONDITION(*tarptr == '\t')) tarptr++; break; case 'f': while (CONDITION(*tarptr == '\f')) tarptr++; break; default: while(CONDITION(*tarptr == *(_costume_ict-1))) tarptr++; break; } break; } not = TRUE; break; case '\\': switch(*_costume_ict++) { case 'n': if(CONDITION(*tarptr == '\n')) tarptr++; break; case 'r': if(CONDITION(*tarptr == '\r')) tarptr++; break; case 't': if(CONDITION(*tarptr == '\t')) tarptr++; break; case 'f': if(CONDITION(*tarptr == '\f')) tarptr++; break; default: if(CONDITION(*tarptr == *(_costume_ict-1))) tarptr++; break; } not = TRUE; break; case '^': // not not = FALSE; goto RE2; break; default: if(_isalnumub((int)(*_costume_ict))) { if(CONDITION(*tarptr == *_costume_ict)) *tarptr++; not = TRUE; } break; } break; case '/': // Delimiter break; case '\\': switch(*_costume_ict++) { case 'n': *ptr++ = '\n'; break; case 'r': *ptr++ = '\r'; break; case 't': *ptr++ = '\t'; break; case 'f': *ptr++ = '\f'; break; default: *ptr++ = *(_costume_ict-1); break; } break; default: if (_isalnum((int)(tmp = *(_costume_ict - 1)))) { *ptr++ = tmp; for (; _isalnum((int)*_costume_ict); _costume_ict++) *ptr++ = *_costume_ict; } break; } } while (*_costume_ict && *_costume_ict != ']'); return ret; }
int _isnalnum( int ch ) { return !_isalnum(ch); }
int isalnum(int c) { return _isalnum(c); }
_CODE_ACCESS int isalnum(int c) { return(_isalnum(c)); }
/*------------------------------------------------------------------------*/ _CODE_ACCESS int iswalnum(wint_t c) { return (c == WEOF || (char)c != c) ? 0 : _isalnum((char)c); }