static void MorkUnescape(const nsCSubstring &aString, nsCString &aResult) { PRUint32 len = aString.Length(); // We optimize for speed over space here -- size the result buffer to // the size of the source, which is an upper bound on the size of the // unescaped string. // FIXME: Mork assume there will never be errors if (!EnsureStringLength(aResult, len)) { aResult.Truncate(); return; // out of memory. } char *result = aResult.BeginWriting(); const char *source = aString.BeginReading(); const char *sourceEnd = source + len; const char *startPos = nsnull; PRUint32 bytes; for (; source < sourceEnd; ++source) { char c = *source; if (c == '\\') { if (startPos) { bytes = source - startPos; memcpy(result, startPos, bytes); result += bytes; startPos = nsnull; } if (source < sourceEnd - 1) { *(result++) = *(++source); } } else if (c == '$') { if (startPos) { bytes = source - startPos; memcpy(result, startPos, bytes); result += bytes; startPos = nsnull; } if (source < sourceEnd - 2) { // Would be nice to use ToInteger() here, but it currently // requires a null-terminated string. char c2 = *(++source); char c3 = *(++source); if (ConvertChar(&c2) && ConvertChar(&c3)) { *(result++) = ((c2 << 4) | c3); } } } else if (!startPos) { startPos = source; } } if (startPos) { bytes = source - startPos; memcpy(result, startPos, bytes); result += bytes; } aResult.SetLength(result - aResult.BeginReading()); }
void XLibraDIGI_SM::StrFormat(BYTE *buf, char *name) { BYTE *inp_buf[256]; BYTE *lp_name = name; BYTE *lp_buf = buf; int len = strlen(name); int len0 = min(len, 20); int len1 = max(len - len0, 0); BYTE *font_sz; if (len1 > 0) font_sz = "04"; else font_sz = "08"; sprintf(lp_buf, "%s%02X", font_sz, len0); lp_buf += 4; while (*lp_name) { if ((lp_name - name) == 20) { sprintf(lp_buf, "0D%s%02X", font_sz, len1); lp_buf += 6; } BYTE chr = ConvertChar(*lp_name); sprintf(lp_buf, "%02X", chr); lp_buf += 2; ++lp_name; } sprintf(lp_buf, "0C00"); lp_buf += 4; *lp_buf = '\0'; }
void FHTML5InputInterface::Tick(float DeltaTime, const SDL_Event& Event,TSharedRef < FGenericWindow>& ApplicationWindow ) { switch (Event.type) { case SDL_KEYDOWN: { SDL_KeyboardEvent KeyEvent = Event.key; const SDL_Keycode KeyCode = KeyEvent.keysym.scancode; const bool bIsRepeated = KeyEvent.repeat != 0; // First KeyDown, then KeyChar. This is important, as in-game console ignores first character otherwise MessageHandler->OnKeyDown(KeyCode, KeyEvent.keysym.sym, bIsRepeated); if (GeneratesKeyCharMessage(KeyEvent)) { const TCHAR Character = ConvertChar(KeyEvent.keysym); MessageHandler->OnKeyChar(Character, bIsRepeated); } UE_LOG(LogHTML5Input, Verbose, TEXT("KeyDown: Code:%d bIsRepeated:%s"), KeyCode, bIsRepeated ? TEXT("TRUE") : TEXT("FALSE")); } break; case SDL_KEYUP: { SDL_KeyboardEvent keyEvent = Event.key; const SDL_Keycode KeyCode = keyEvent.keysym.scancode; const TCHAR Character = ConvertChar( keyEvent.keysym ); const bool IsRepeat = keyEvent.repeat != 0; MessageHandler->OnKeyUp( KeyCode, keyEvent.keysym.sym, IsRepeat ); UE_LOG(LogHTML5Input, Verbose, TEXT("KeyUp Code:%d"), KeyCode); } break; case SDL_MOUSEBUTTONDOWN: { EMouseButtons::Type MouseButton = Event.button.button == 1 ? EMouseButtons::Left : Event.button.button == 2 ? EMouseButtons::Middle : EMouseButtons::Right; MessageHandler->OnMouseDown(ApplicationWindow, MouseButton ); UE_LOG(LogHTML5Input, Verbose, TEXT("MouseButtonDown ID:%d"), Event.button.button); } break; case SDL_MOUSEBUTTONUP: { EMouseButtons::Type MouseButton = Event.button.button == 1 ? EMouseButtons::Left : Event.button.button == 2 ? EMouseButtons::Middle : EMouseButtons::Right; MessageHandler->OnMouseUp(MouseButton ); UE_LOG(LogHTML5Input, Verbose, TEXT("MouseButtonUp ID:%d"), Event.button.button); } break; case SDL_MOUSEMOTION: { //Cursor->SetPosition(Event.motion.x, Event.motion.y); MessageHandler->OnRawMouseMove(Event.motion.xrel, Event.motion.yrel); MessageHandler->OnMouseMove(); UE_LOG(LogHTML5Input, Verbose, TEXT("MouseMotion Pos(%d, %d) XRel:%d YRel:%d"), Event.motion.x, Event.motion.y, Event.motion.xrel, Event.motion.yrel); } break; case SDL_MOUSEWHEEL: { SDL_MouseWheelEvent* w = (SDL_MouseWheelEvent*)&Event; const float SpinFactor = 1 / 120.0f; MessageHandler->OnMouseWheel(w->y * SpinFactor); UE_LOG(LogHTML5Input, Verbose, TEXT("MouseWheel %f"), SpinFactor); } break; default: // unhandled. break; } }