Ejemplo n.º 1
0
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());
}
Ejemplo n.º 2
0
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';
}
Ejemplo n.º 3
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; 
	}
}