Ejemplo n.º 1
0
//this function translates a passed in scan code to ascii (or maybe unicode?) character values that will be used to get the correct bitmaps for printing characters to the screen
extern uint8_t translateKeypress(uint8_t translate)
{
    uint8_t temp = 0;
    int i = 0;
    if(translate == 0x58) // caps lock
    {
        temp = 0x03;
    }
    else if(translate == 0x12) // left shift
    {
        ShiftPressed = 1;
        temp = 0;
    }
    else if(translate == 0x59) // right shift
    {
        ShiftPressed = 0;
        temp = 0;
    }
    else
    {
	switch(translate)
	{
		//start special key: enter
		case 0x5A: // enter
			temp = 0x01;
			break;
                //start special key: backspace
                case 0x66: // backspace
                    temp = 0x04;
                    break;
		//start special keys: page up and page down
		case 0x7D: // page up
		switch(ShiftPressed)
			{
			case 0:
				for(i = 0; i < 8; i++)
				{
					ShiftScreenUp();
				}
				temp = 0;
				break;
			case 1:
				ShiftScreenUp();
				temp = 0;
				break;
			}
			break;
		case 0x7A: // page down
		switch(ShiftPressed)
			{
			case 0:
				for(i = 0; i < 8; i++)
				{
					ShiftScreenDown();
				}
				temp = 0;
				break;
			case 1:
				ShiftScreenDown();
				temp = 0;
				break;
			}
			break;
		//start special keys: arrow keys
		case 0x6B: // left arrow
			switch(ShiftPressed)
			{
			case 0:
				MoveCursorLeft(); // left arrow
				BlinkCursor();
				temp = 0;
				break;
			case 1:
				ShiftScreenLeft();
				//MoveCursorLeft(); 
				//BlinkCursor();
				temp = 0;
				break;
			}
			break;
		case 0x74: // right arrow
			switch(ShiftPressed)
			{
			case 0:		
				//ShiftScreenRight();
				MoveCursorRight(); // right arrow
				BlinkCursor();
				//temp = 1; // quick way to make the right arrow print nothing but not get skipped over when incrementing
				temp = 0;
				break;
			case 1:
				ShiftScreenRight();
				//MoveCursorRight(); 
				//BlinkCursor();
				temp = 0;
				break;
			}
			break;
		case 0x75: // up arrow
			switch(ShiftPressed)
			{
			case 0:
				MoveCursorUp(); 
				BlinkCursor();
				temp = 0;
				break;
			case 1:
				for(i = 0; i < 8; i++)
				{
					ShiftScreenUp();
				}
				temp = 0;
				break;
			}
			break;
		case 0x72: // down arrow
			switch(ShiftPressed)
			{
			case 0:
				MoveCursorDown(); // down arrow
				BlinkCursor();
				temp = 0;
				break;
			case 1:			
				for(i = 0; i < 8; i++)
				{
					ShiftScreenDown();
				}
				temp = 0;
				break;
			}
			break;
		//start keyboard line: esc F1F2F3F4F5F6F7F8F9F10F11F12
		case 0x76: // esc
                    temp = 0x02; // temp number for commands will be in range 0x01 - 0x19
			break;
		case 0x05: // F1
			temp = 0;
                        //press_F1();
			break;
		case 0x06: // F2
			temp = 0;
			shiftTextLeft();
			break;
		//start keyboard line: `1234567890-=
		case 0x0E: //`
			switch(ShiftPressed)
			{
			case 0:		
				temp = 0x60; //`
				break;
			case 1:
				temp = 0x7E; //~
				break;
			}
			break;
		case 0x16: //1
			switch(ShiftPressed)
			{
			case 0:
				temp = 0x31; //1
				break;
			case 1:
				temp = 0x21; //!
				break;
			}
			break;
		case 0x1E: //2
			switch(ShiftPressed)
			{
			case 0:
				temp = 0x32; //2
				break;
			case 1:
				temp = 0x40; //@
				break;
			}
			break;
		case 0x26: //3
			switch(ShiftPressed)
			{
			case 0:		
				temp = 0x33; //3
				break;
			case 1:
				temp = 0x23; //#
				break;
			}
			break;
		case 0x25: //4
			switch(ShiftPressed)
			{
			case 0:
				temp = 0x34; //4
				break;
			case 1:
				temp = 0x24; //$
				break;
			}
			break;
		case 0x2E: //5
			switch(ShiftPressed)
			{
			case 0:
				temp = 0x35; //5
				break;
			case 1:
				temp = 0x25; //%
				break;
			}
			break;
		case 0x36: //6
			switch(ShiftPressed)
			{
			case 0:
				temp = 0x36; //6
				break;
			case 1:
				temp = 0x5E; //^
				break;
			}
			break;
		case 0x3D: //7
			switch(ShiftPressed)
			{
			case 0:
				temp = 0x37; //7
				break;
			case 1:
				temp = 0x26; //&
				break;
			}
			break;
		case 0x3E: //8
			switch(ShiftPressed)
			{
			case 0:
				temp = 0x38; //8
				break;
			case 1:
				temp = 0x2A; //*
				break;
			}
			break;
		case 0x46: //9
			switch(ShiftPressed)
			{
			case 0:
				temp = 0x39; //9
				break;
			case 1:
				temp = 0x28; //(
				break;
			}
			break;
		case 0x45: //0
			switch(ShiftPressed)	
			{
			case 0:
				temp = 0x30; //0
				break;
			case 1:
				temp = 0x29; //)
				break;
			}
			break;
		case 0x4E: //-
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x2D; //-
				break;
			case 1:
				temp = 0x5F; //_
				break;
			}
			break;
        case 0x55: //=
	   		switch(ShiftPressed)
			{
			case 0:
				temp = 0x3D; //=
				break;
			case 1:
				temp = 0x2B; //+
				break;
			}
			break;
		//start keyboard line: qwertyuiop[] and '\'
		case 0x15: //q
			switch(ShiftPressed)
			{
			case 0:
				temp = 0x71; //q
				break;
			case 1:
				temp = 0x51; //Q
				break;
			}
			break;
		case 0x1D: //w
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x77; //w
				break;
			case 1:
				temp = 0x57; //W
				break;
			}
			break;
		case 0x24: //e
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x65; //e
				break;
			case 1:
				temp = 0x45; //E
                break;
			}
			break;
		case 0x2D: //r
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x72; //r
				break;
			case 1:
				temp = 0x52; //R
				break;
			}
			break;
		case 0x2C: //t
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x74; //t
				break;
			case 1:
				temp = 0x54; //T
				break;
			}
			break;
		case 0x35: //y
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x79; //y
				break;
			case 1:
				temp = 0x59; //Y
				break;
			}
			break;
		case 0x3C: //u
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x75; //u
				break;
			case 1:
				temp = 0x55; //U
				break;
			}
			break;
		case 0x43: //i
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x69; //i
				break;
			case 1:
				temp = 0x49; //I
				break;
			}
			break;
		case 0x44: //o
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x6F; //o
				break;
			case 1:
				temp = 0x4F; //O
				break;
			}
			break;
		case 0x4D: //p
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x70; //p
				break;
			case 1:
				temp = 0x50; //P
				break;
			}
			break;
		case 0x54: //[
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x5B; //[
				break;
			case 1:
				temp = 0x7B; //{
				break;
			}
			break;
		case 0x5B: //]
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x5D;  //]
				break;
			case 1:
				temp = 0x7D;  //}
				break;
			}
			break;
		case 0x5D: //"\"
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x5C; //"\"
				break;
			case 1:
				temp = 0x7C; //|
				break;
			}
			break;
		//start keyboard line: asdfghjkl;'
		case 0x1C: //a
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x61; //a
				break;
			case 1:
				temp = 0x41; //A
				break;
			}
			break;
		case 0x1B: //s
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x73; //s
				break;
			case 1:
				temp = 0x53; //S
				break;
			}
			break;
		case 0x23: //d
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x64; //d
				break;
			case 1:
				temp = 0x44; //D
				break;
			}
			break;
		case 0x2B: //f
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x66; //f
				break;
			case 1:
				temp = 0x46; //F
				break;
			}
			break;
		case 0x34: //g
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x67; //g
				break;
			case 1:
				temp = 0x47; //G
				break;
			}
			break;
		case 0x33: //h
			switch(ShiftPressed)
			{		
			case 0:
				temp = 0x68; //h
				break;
			case 1:
				temp = 0x48; //H
				break;
			}
			break;
		case 0x3B: //j
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x6A; //j
				break;
			case 1:
				temp = 0x4A; //J
				break;
			}
			break;
		case 0x42: //k
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x6B; //k
				break;
			case 1:
				temp = 0x4B; //K
				break;
			}
			break;
		case 0x4B: //l
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x6C; //l
				break;
			case 1:
				temp = 0x4C; //L
				break;
			}
			break;
		case 0x4C:      //NOTE: this is actually a : not a ; but there is no bitmap for ;
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x3A; //;
				break;
			case 1:
				temp = 0x3A; //:
				break;
			}
			break;
		case 0x52: //'
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x27; //'
				break;
			case 1:
				temp = 0x22; //"
				break;
			}
			break;
		//start keyboard line: zxcvbnm,./
		case 0x1A: //z
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x7A; //z
				break;
			case 1:
				temp = 0x5A; //Z
				break;
			}
			break;
		case 0x22: //x
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x78; //x
				break;
			case 1:
				temp = 0x58; //X
				break;
			}
			break;
		case 0x21: //c
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x63; //c
				break;
			case 1:
				temp = 0x43; //C
				break;
			}
			break;
		case 0x2A: //v
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x76; //v
				break;
			case 1:
				temp = 0x56; //V
				break;
			}
			break;
		case 0x32: //b
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x62; //b
				break;
			case 1:
				temp = 0x42; //B
				break;
			}
			break;
		case 0x31: //n
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x6E; //n
				break;
			case 1:
				temp = 0x4E; //N
				break;
			}
			break;
		case 0x3A: //m
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x6D; //m
				break;
			case 1:
				temp = 0x4D; //M
				break;
			}
			break;
		case 0x41: //,
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x2C; //,
				break;
			case 1:
				temp = 0x3C; //<
				break;
			}
			break;
		case 0x49: //.
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x2E; //.
				break;
			case 1:
				temp = 0x3E; //>
				break;
			}
			break;
		case 0x4A: // "/"
		switch(ShiftPressed)
			{		
			case 0:
				temp = 0x2F; // "/"
				break;
			case 1:
				temp = 0x3F; //?
				break;
			}
			break;
		case 0x29: // space
			temp = 0x20;
			break;
		default:
			temp = 0x21;
            }
        }
    return temp;
}
Ejemplo n.º 2
0
void TextInputHandler::Update()
{
	if (!m_menu->IsOpen() || IsConsoleOpen())
		return;

	//find first key pressed since last time we checked
	UInt8 keyCode = 0;
	for (UInt32 idx = 0; idx <= 0x100; idx++)
	{
		if (DI_data.LastBytes[idx] && !m_prevKeyboardState[idx])
		{
			keyCode = idx; 
			break;
		}
	}

	bool bControlPressed = DI_data.LastBytes[DIK_LCONTROL] || DI_data.LastBytes[DIK_RCONTROL];
	bool bShifted = DI_data.LastBytes[DIK_LSHIFT] || DI_data.LastBytes[DIK_RSHIFT];
	bool bUpdateText = false;

	if (keyCode)
	{
		switch (keyCode)
		{
		case DIK_UP:
		case DIK_DOWN:
		case DIK_RETURN:
			{
				UInt32 cursorAdjust = m_menu->ResolveControlCode(keyCode, m_cursorPos);
				if (cursorAdjust != -1)
				{
					m_cursorPos = cursorAdjust;
					bUpdateText = true;
				}

				break;
			}
		case DIK_TAB:
			m_cursorPos = m_menu->InsertText(m_cursorPos, m_tabChars);
			bUpdateText = true;
			break;
		case DIK_BACK:
			m_cursorPos = m_menu->DeleteText(m_cursorPos, true, bControlPressed);
			bUpdateText = true;
			break;
		case DIK_DELETE:
			m_cursorPos = m_menu->DeleteText(m_cursorPos, false, bControlPressed);
			bUpdateText = true;
			break;
		case DIK_LEFT:
			m_cursorPos = m_menu->SeekPosition(m_cursorPos, true, bControlPressed);
			bUpdateText = true;
			break;
		case DIK_RIGHT:
			m_cursorPos = m_menu->SeekPosition(m_cursorPos, false, bControlPressed);
			bUpdateText = true;
			break;
		case DIK_HOME:
			m_cursorPos = m_menu->GetMinPos();
			bUpdateText = true;
			break;
		case DIK_END:
			if (m_menu->GetInputLength() > 0)
			{
				m_cursorPos = m_menu->GetInputLength();
				bUpdateText = true;
			}
			break;
		case DIK_GRAVE:		//Console key - don't include in input text
		case DIK_ESCAPE:
			break;
		default:
			if (bControlPressed)
			{
				UInt32 cursorAdjust = -1;
				if (!m_bControlKeysDisabled) {
					// give menu a chance to handle the control key
					cursorAdjust = m_menu->ResolveControlCode(keyCode, m_cursorPos);
				}

				if (cursorAdjust == -1) {
					// menu didn't handle it. Do we have a function script to try instead?
					if (m_controlHandler) {
						// invoke the function script, passing in the control key code
						InternalFunctionCaller caller(m_controlHandler);
						caller.SetArgs(1, (void*)((UInt32)keyCode));
						ScriptToken* result = UserFunctionManager::Call(caller);
						delete result;		// result unused
					}
					else {
						// store it for later retrieval via GetTextInputControlKeyPressed
						m_lastControlCharPressed = keyCode;
					}
				}
				else
				{
					// menu handled, update cursor position accordingly
					m_cursorPos = cursorAdjust;
					bUpdateText = true;
				}
			}
			else
			{
				char charToInsert = ScancodeToChar(keyCode, bShifted);
				if (charToInsert)
				{
					m_cursorPos = m_menu->InsertChar(m_cursorPos, charToInsert);
					bUpdateText = true;
				}
			}

			break;
		}
	}

	//store current state of keyboard for next update
	memcpy(m_prevKeyboardState, DI_data.LastBytes, 256);

	if (BlinkCursor())
		bUpdateText = true;

	if (bUpdateText)
		UpdateDisplay();
}
Ejemplo n.º 3
0
void NativePlayerWnd::CursorTimerFire()
{
#ifdef EDITTEXT
    BlinkCursor();
#endif
}