static LPTSTR StripPath(LPTSTR pszFileName) { LPTSTR szPos; if((szPos = wcschr(pszFileName, '\\')) != NULL) DeleteChars(pszFileName, 0, szPos - pszFileName + 1); return pszFileName; }
void CScreenDevice::Write (char chChar) { switch (m_nState) { case ScreenStateStart: switch (chChar) { case '\b': CursorLeft (); break; case '\t': Tabulator (); break; case '\n': NewLine (); break; case '\r': CarriageReturn (); break; case '\x1b': m_nState = ScreenStateEscape; break; default: DisplayChar (chChar); break; } break; case ScreenStateEscape: switch (chChar) { case 'M': ReverseScroll (); m_nState = ScreenStateStart; break; case '[': m_nState = ScreenStateBracket; break; default: m_nState = ScreenStateStart; break; } break; case ScreenStateBracket: switch (chChar) { case '?': m_nState = ScreenStateQuestionMark; break; case 'A': CursorUp (); m_nState = ScreenStateStart; break; case 'B': CursorDown (); m_nState = ScreenStateStart; break; case 'C': CursorRight (); m_nState = ScreenStateStart; break; case 'H': CursorHome (); m_nState = ScreenStateStart; break; case 'J': ClearDisplayEnd (); m_nState = ScreenStateStart; break; case 'K': ClearLineEnd (); m_nState = ScreenStateStart; break; case 'L': InsertLines (1); m_nState = ScreenStateStart; break; case 'M': DeleteLines (1); m_nState = ScreenStateStart; break; case 'P': DeleteChars (1); m_nState = ScreenStateStart; break; default: if ('0' <= chChar && chChar <= '9') { m_nParam1 = chChar - '0'; m_nState = ScreenStateNumber1; } else { m_nState = ScreenStateStart; } break; } break; case ScreenStateNumber1: switch (chChar) { case ';': m_nState = ScreenStateSemicolon; break; case 'L': InsertLines (m_nParam1); m_nState = ScreenStateStart; break; case 'M': DeleteLines (m_nParam1); m_nState = ScreenStateStart; break; case 'P': DeleteChars (m_nParam1); m_nState = ScreenStateStart; break; case 'X': EraseChars (m_nParam1); m_nState = ScreenStateStart; break; case 'h': case 'l': if (m_nParam1 == 4) { InsertMode (chChar == 'h'); } m_nState = ScreenStateStart; break; case 'm': SetStandoutMode (m_nParam1); m_nState = ScreenStateStart; break; default: if ('0' <= chChar && chChar <= '9') { m_nParam1 *= 10; m_nParam1 += chChar - '0'; if (m_nParam1 > 99) { m_nState = ScreenStateStart; } } else { m_nState = ScreenStateStart; } break; } break; case ScreenStateSemicolon: if ('0' <= chChar && chChar <= '9') { m_nParam2 = chChar - '0'; m_nState = ScreenStateNumber2; } else { m_nState = ScreenStateStart; } break; case ScreenStateQuestionMark: if ('0' <= chChar && chChar <= '9') { m_nParam1 = chChar - '0'; m_nState = ScreenStateNumber3; } else { m_nState = ScreenStateStart; } break; case ScreenStateNumber2: switch (chChar) { case 'H': CursorMove (m_nParam1, m_nParam2); m_nState = ScreenStateStart; break; case 'r': SetScrollRegion (m_nParam1, m_nParam2); m_nState = ScreenStateStart; break; default: if ('0' <= chChar && chChar <= '9') { m_nParam2 *= 10; m_nParam2 += chChar - '0'; if (m_nParam2 > 199) { m_nState = ScreenStateStart; } } else { m_nState = ScreenStateStart; } break; } break; case ScreenStateNumber3: switch (chChar) { case 'h': case 'l': if (m_nParam1 == 25) { SetCursorMode (chChar == 'h'); } m_nState = ScreenStateStart; break; default: if ('0' <= chChar && chChar <= '9') { m_nParam1 *= 10; m_nParam1 += chChar - '0'; if (m_nParam1 > 99) { m_nState = ScreenStateStart; } } else { m_nState = ScreenStateStart; } break; } break; default: m_nState = ScreenStateStart; break; } }
bool CUIEdit::HandleKeypress(SDL_Event *event) { bool Handled = false; if (event->type == SDL_KEYDOWN) { switch (event->key.keysym.sym) { case SDLK_ESCAPE: case SDLK_TAB: case SDLK_RETURN: return false; // ctrl+A case SDLK_a: if (CBKeyboardState::IsControlDown()) { m_SelStart = 0; m_SelEnd = strlen(m_Text); Handled = true; } break; case SDLK_BACKSPACE: if (m_SelStart == m_SelEnd) { if (Game->m_TextRTL) DeleteChars(m_SelStart, m_SelStart + 1); else DeleteChars(m_SelStart - 1, m_SelStart); } else DeleteChars(m_SelStart, m_SelEnd); if (m_SelEnd >= m_SelStart) m_SelEnd -= std::max(1, m_SelEnd - m_SelStart); m_SelStart = m_SelEnd; Handled = true; break; case SDLK_LEFT: case SDLK_UP: m_SelEnd--; if (!CBKeyboardState::IsShiftDown()) m_SelStart = m_SelEnd; Handled = true; break; case SDLK_RIGHT: case SDLK_DOWN: m_SelEnd++; if (!CBKeyboardState::IsShiftDown()) m_SelStart = m_SelEnd; Handled = true; break; case SDLK_HOME: if (Game->m_TextRTL) { m_SelEnd = strlen(m_Text); if (!CBKeyboardState::IsShiftDown()) m_SelStart = m_SelEnd; } else { m_SelEnd = 0; if (!CBKeyboardState::IsShiftDown()) m_SelStart = m_SelEnd; } Handled = true; break; case SDLK_END: if (Game->m_TextRTL) { m_SelEnd = 0; if (!CBKeyboardState::IsShiftDown()) m_SelStart = m_SelEnd; } else { m_SelEnd = strlen(m_Text); if (!CBKeyboardState::IsShiftDown()) m_SelStart = m_SelEnd; } Handled = true; break; case SDLK_DELETE: if (m_SelStart == m_SelEnd) { if (Game->m_TextRTL) { DeleteChars(m_SelStart - 1, m_SelStart); m_SelEnd--; if (m_SelEnd < 0) m_SelEnd = 0; } else DeleteChars(m_SelStart, m_SelStart + 1); } else DeleteChars(m_SelStart, m_SelEnd); if (m_SelEnd > m_SelStart) m_SelEnd -= (m_SelEnd - m_SelStart); m_SelStart = m_SelEnd; Handled = true; break; } return Handled; } else if (event->type == SDL_TEXTINPUT) { if (m_SelStart != m_SelEnd) DeleteChars(m_SelStart, m_SelEnd); WideString wstr = StringUtil::Utf8ToWide(event->text.text); m_SelEnd += InsertChars(m_SelEnd, (byte *)StringUtil::WideToAnsi(wstr).c_str(), 1); if (Game->m_TextRTL) m_SelEnd = m_SelStart; else m_SelStart = m_SelEnd; return true; } return false; }