unsigned int MeowPinyin::Solute(WCHAR * _input) { if (_input == NULL) { return 0; } unsigned int len = wcslen(_input); if (len < MEOW_MAXLENGTH) { wcsncpy_s(input, _input, len); inputlength = len; } else { wcsncpy_s(input, _input, MEOW_MAXLENGTH - 1); inputlength = MEOW_MAXLENGTH - 1; input[MEOW_MAXLENGTH - 1] = L'\0'; } segments.clear(); solution.clear(); results.clear(); DoSplitIntoSegments(); ParseSegments(); GenerateResult(); return 1; }
static void ParseConfig (void) /* Parse the config file */ { static const IdentTok BlockNames [] = { { "MEMORY", CFGTOK_MEMORY }, { "FILES", CFGTOK_FILES }, { "SEGMENTS", CFGTOK_SEGMENTS }, { "FORMATS", CFGTOK_FORMATS }, { "FEATURES", CFGTOK_FEATURES }, { "SYMBOLS", CFGTOK_SYMBOLS }, }; cfgtok_t BlockTok; do { /* Read the block ident */ CfgSpecialToken (BlockNames, ENTRY_COUNT (BlockNames), "Block identifier"); BlockTok = CfgTok; CfgNextTok (); /* Expected a curly brace */ CfgConsume (CFGTOK_LCURLY, "`{' expected"); /* Read the block */ switch (BlockTok) { case CFGTOK_MEMORY: ParseMemory (); break; case CFGTOK_FILES: ParseFiles (); break; case CFGTOK_SEGMENTS: ParseSegments (); break; case CFGTOK_FORMATS: ParseFormats (); break; case CFGTOK_FEATURES: ParseFeatures (); break; case CFGTOK_SYMBOLS: ParseSymbols (); break; default: FAIL ("Unexpected block token"); } /* Skip closing brace */ CfgConsume (CFGTOK_RCURLY, "`}' expected"); } while (CfgTok != CFGTOK_EOF); }