コード例 #1
0
ファイル: console.c プロジェクト: robfinch/Cores
void IncrementCursorRow()
{
     ACB *j;
     
     j = GetACBPtr();
     j->CursorRow++;
     if (j->CursorRow < j->VideoRows) {
         UpdateCursorPos();
         return;
     }
     j->CursorRow--;
     UpdateCursorPos();
     ScrollUp();
}
コード例 #2
0
ファイル: console.c プロジェクト: robfinch/Cores
void SetCursorCol(int col)
{
    ACB *j;

    j = GetACBPtr();
    j->CursorCol = col;
    UpdateCursorPos();
}
コード例 #3
0
ファイル: console.c プロジェクト: robfinch/Cores
void SetCursorPos(int row, int col)
{
    ACB *j;

    j = GetACBPtr();
    j->CursorCol = col;
    j->CursorRow = row;
    UpdateCursorPos();
}
コード例 #4
0
ファイル: console.c プロジェクト: robfinch/Cores
void HomeCursor()
{
    ACB *j;

    j = GetACBPtr();
    j->CursorCol = 0;
    j->CursorRow = 0;
    UpdateCursorPos();
}
コード例 #5
0
ファイル: edit_keys.cpp プロジェクト: HaikuArchives/Sisong
void EditView::ExtendSel()
{
	// required to ensure x is at correct spot if the key was the type
	// that sets CM_WANT_SCREEN_COORD.
	UpdateCursorPos(this);
	
	// extend selection
	selection_extend(this);
}
コード例 #6
0
ファイル: SDLInput.cpp プロジェクト: CeroOscura/ethanon
bool SDLInput::Update()
{
	const Uint8 *keystate = SDL_GetKeyboardState(NULL);
	for (std::size_t t = 0; t < GS_NUM_KEYS; t++)
	{
		m_keyStates[t].Update(IsKeyPressed((GS_KEY)t, keystate));
	}

	UpdateCursorPos();
	return SDLJoystick::Update();
}
コード例 #7
0
ファイル: console.c プロジェクト: robfinch/Cores
void IncrementCursorPos()
{
     ACB *j;
     
     j = GetACBPtr();
     j->CursorCol++;
     if (j->CursorCol < j->VideoCols) {
         UpdateCursorPos();
         return;
     }
     j->CursorCol = 0;
     IncrementCursorRow();
}
コード例 #8
0
ファイル: console.c プロジェクト: robfinch/Cores
void DisplayChar(char ch)
{
     int *p;
     int nn;
     ACB *j;

     j = GetACBPtr();
     switch(ch) {
     case '\r':  j->CursorCol = 0; UpdateCursorPos(); break;
     case '\n':  IncrementCursorRow(); break;
     case 0x91:
          if (j->CursorCol < j->VideoCols-1) {
             j->CursorCol++;
             UpdateCursorPos();
          }
          break;
     case 0x90:
          if (j->CursorRow > 0) {
               j->CursorRow--;
               UpdateCursorPos();
          }
          break;
     case 0x93:
          if (j->CursorCol > 0) {
               j->CursorCol--;
               UpdateCursorPos();
          }
          break;
     case 0x92:
          if (j->CursorRow < j->VideoRows-1) {
             j->CursorRow++;
             UpdateCursorPos();
          }
          break;
     case 0x94:
          if (j->CursorCol==0)
             j->CursorRow = 0;
          j->CursorCol = 0;
          UpdateCursorPos();
          break;
     case 0x99:  // delete
          p = CalcScreenLocation();
          for (nn = j->CursorCol; nn < j->VideoCols-1; nn++) {
              p[nn-j->CursorCol] = p[nn+1-j->CursorCol];
          }
          p[nn-j->CursorCol] = GetCurrAttr() | AsciiToScreen(' ');
          break;
     case 0x08: // backspace
          if (j->CursorCol > 0) {
              j->CursorCol--;
              p = CalcScreenLocation();
              for (nn = j->CursorCol; nn < j->VideoCols-1; nn++) {
                  p[nn-j->CursorCol] = p[nn+1-j->CursorCol];
              }
              p[nn-j->CursorCol] = GetCurrAttr() | AsciiToScreen(' ');
          }
          break;
     case 0x0C:   // CTRL-L
          ClearScreen();
          HomeCursor();
          break;
     case '\t':
          DisplayChar(' ');
          DisplayChar(' ');
          DisplayChar(' ');
          DisplayChar(' ');
          break;
     default:
          p = CalcScreenLocation();
          *p = GetCurrAttr() | AsciiToScreen(ch);
          IncrementCursorPos();
          break;
     }
}
コード例 #9
0
ファイル: AtmelProc.c プロジェクト: Veetiglik/train-project
void InitAtmelControlProc()
{
	//bind to this process' message queue
	Bind(ATMELMQNUM);

	//wait for synchronization message from keyboardProc to begin
	char dummyBlock[1];
	int syncSrc = KBMQNUM;
	Recv(&syncSrc, ATMELMQNUM, dummyBlock, 1);

	//local variables for message passing
	int src = -1;
	char recvBuffer[RECV_BUFFER_SIZE];
	char sendHallSensorBuffer[SEND_HS_BUFFER_SIZE];

	//initialize cursor position for hall sensor display output
	//UpdateCursorPos(&(GetRunning()->cursorPosState), 23, 2);
	int currentCursorRow = HS_CURSOR_UPPER_LIMIT;
	UpdateCursorPos(&(GetRunning()->cursorPosState), currentCursorRow, 2);


	bool initialized = false; //set to true once track hardware has been initialized

	while(true) //the main loop of the Atmel Communication Process
	{
		src = -1; //-1 means "accept messages from any source"

		//clean the receive buffer
		int j;
		for(j = 0; j < 6; j++)
		{
			recvBuffer[j] = 0;
		}

		//blocking recieve waiting for messages
		Recv(&src, ATMELMQNUM, recvBuffer, -1);//because the src is unknown, size is determined by the sender

		switch(src) //two sources are supported: HS Process and Loco process.
		{
			case HSMQNUM:
			{
				switch(recvBuffer[0])
				{
					case 0:	//reset sensors and set switches
					{
						//init HS queues of atmel 1
						SendPacket *out_packet = InitHallSensorQueueInit();
						RecvPacket *in_packet = (RecvPacket*)Allocate(sizeof(RecvPacket));
						SendAndReceivePacket(out_packet, in_packet, 1);

						//init HS queues of atmel 3
						SendPacket *out_packet2 = InitHallSensorQueueInit();
						RecvPacket *in_packet2 = (RecvPacket*)Allocate(sizeof(RecvPacket));
						SendAndReceivePacket(out_packet2, in_packet2, 3);

						if(GetRecvSuccess(in_packet) && GetRecvSuccess(in_packet2))
						{
							//reset all HS (atmel 1 only)
							SendPacket *out_packet3 = InitHallSensorAllReset();
							RecvPacket *in_packet3 = (RecvPacket*)Allocate(sizeof(RecvPacket));

							SendAndReceivePacket(out_packet3, in_packet3, 1);

							Deallocate((uint32_t)out_packet);
							Deallocate((uint32_t)in_packet);
							Deallocate((uint32_t)out_packet2);
							Deallocate((uint32_t)in_packet2);
							Deallocate((uint32_t)out_packet3);
							Deallocate((uint32_t)in_packet3);

							initialized = true;

							//send back to HS to acknowledge that HS queues were initialized
							Send(ATMELMQNUM, HSMQNUM, recvBuffer, sizeof(char));
						}
						else
						{
							char *failure = "FATAL ERROR initalizing HS queues\n\r\0";
							WriteString(failure);
						}
						break;
					}
					default://1 or 3
					{
						if(initialized) //do not act on other messages if we haven't initialized the queues yet
						{
							//query which hall sensor was triggered
							SendPacket *out_packet = InitHallSensorInput();
							RecvPacket *in_packet = (RecvPacket*)Allocate(sizeof(RecvPacket));

							SendAndReceivePacket(out_packet, in_packet, (int)recvBuffer[0]);

							//examine the rx'd packet to determine the hall sensor number
							int sensorNum = -1;
							bool successfulSPI = GetHallSensorNum(in_packet, &sensorNum);

							Deallocate((uint32_t)out_packet);
							Deallocate((uint32_t)in_packet);

							//send which hall sensor triggered to LocoProc
							if(successfulSPI)
							{
								//output the HS number to the console
								char testHSNum[4];
								testHSNum[0] = sensorNum/10 + 0x30;
								testHSNum[1] = sensorNum%10 + 0x30;
								testHSNum[2] = ' ';
								testHSNum[3] = '\0';

								UpdateCursorPos(&(GetRunning()->cursorPosState), currentCursorRow, 2);
								OutputCursorPositionSequence(&(GetRunning()->cursorPosState));
								WriteStringChar('+');
								WriteString(testHSNum);

								//make sure the stream of hall sensor printouts stays on the screen.
								currentCursorRow = (currentCursorRow == HS_CURSOR_LOWER_LIMIT)? HS_CURSOR_UPPER_LIMIT: currentCursorRow +1;

								//send reset acknowledgement to Atmel 1 for hall sensor triggering
								SendPacket *out_packet2 = InitHallSensorSingleReset(sensorNum);
								RecvPacket *in_packet2 = (RecvPacket*)Allocate(sizeof(RecvPacket));

								SendAndReceivePacket(out_packet2, in_packet2, 1);

								if(GetRecvSuccess(in_packet2))
								{
									Deallocate((uint32_t)out_packet2);
									Deallocate((uint32_t)in_packet2);
								}
								else
								{
									char *failure = "FATAL ERROR when acknowledging Hall Sensor event\n\r\0";
									WriteString(failure);
								}

								if(lastSensorTriggered != sensorNum) //Some hall sensors will double-trigger intermittently as a train passes, so ignore successive duplicates
								{
									sendHallSensorBuffer[0] = (char)sensorNum;
									//tell the LocoProc which hall sensor was just hit
									Send(ATMELMQNUM, LOCOMQNUM, sendHallSensorBuffer, SEND_HS_BUFFER_SIZE);
								}

								lastSensorTriggered = sensorNum;
							}
							else
							{
								char *failure = "FATAL ERROR when getting hall sensor number\n\r\0";
								WriteString(failure);
							}
						}
						break;
					}
				}
				break;
			}
			case LOCOMQNUM:
			{
				switch(recvBuffer[0])
				{
					case SPI_SEGMENT_SPEED_DIR://set segment speed and dir
					{
						SendPacket *out_packet = InitDirAndMagFor1Section(recvBuffer[1], recvBuffer[2], recvBuffer[3]);
						RecvPacket *in_packet = (RecvPacket*)Allocate(sizeof(RecvPacket));
						SendAndReceivePacket(out_packet, in_packet, 1);

						if(GetRecvSuccess(in_packet))
						{
							Deallocate((uint32_t)out_packet);
							Deallocate((uint32_t)in_packet);
						}
						else
						{
							char *failure = "FATAL ERROR when setting single segment speed\n\r\0";
							WriteString(failure);
						}

						break;
					}
					case SPI_SWITCH://set switch as thrown or straight
					{
						SendPacket *out_packet = InitSwitchControl(recvBuffer[1], recvBuffer[2]);
						RecvPacket *in_packet = (RecvPacket*)Allocate(sizeof(RecvPacket));
						SendAndReceivePacket(out_packet, in_packet, 2);

						if(GetRecvSuccess(in_packet))
						{
							Deallocate((uint32_t)out_packet);
							Deallocate((uint32_t)in_packet);
						}
						else
						{
							char *failure = "FATAL ERROR when using switch command\n\r\0";
							WriteString(failure);
						}
						break;
					}
					case SPI_ALL_SEGMENTS_SPEED_DIR: //and init the switches
					{
						SendPacket *out_packet = InitDirAndMagForAllSections(0, 1);//1 means CCW
						RecvPacket *in_packet = (RecvPacket*)Allocate(sizeof(RecvPacket));
						SendAndReceivePacket(out_packet, in_packet, 1);

						if(GetRecvSuccess(in_packet))
						{
							//straighten all switches
							int i;
							SendPacket *out_packet2 = InitSwitchControl(-1, 1);//1 means straight
							RecvPacket *in_packet2 = (RecvPacket*)Allocate(sizeof(RecvPacket));

							for(i = 1; i <= 9; i++)
							{
								out_packet2->arg1 = i;
								SendAndReceivePacket(out_packet2, in_packet2, 2);
							}

							Deallocate((uint32_t)out_packet);
							Deallocate((uint32_t)in_packet);
							Deallocate((uint32_t)out_packet2);
							Deallocate((uint32_t)in_packet2);

							//acknowledge to loco proc that track is initialized
							Send(ATMELMQNUM, LOCOMQNUM, recvBuffer, sizeof(char));
						}
						else
						{
							char *failure = "FATAL ERROR when setting all segments speed\n\r\0";
							WriteString(failure);
						}
						break;
					}
				}
				break;
			}
		}
	}
}
コード例 #10
0
ファイル: SDLInput.cpp プロジェクト: CeroOscura/ethanon
SDLInput::SDLInput(const bool showJoystickWarnings) :
	SDLJoystick(showJoystickWarnings),
	m_cursorPos(math::Vector2i(-1,-1)),
	m_lastCursorPos(math::Vector2i(0, 0)),
	m_mouseBits(0)
{
	m_sdlKeyID[GSK_UP] = SDL_SCANCODE_UP;
	m_sdlKeyID[GSK_DOWN] = SDL_SCANCODE_DOWN;
	m_sdlKeyID[GSK_LEFT] = SDL_SCANCODE_LEFT;
	m_sdlKeyID[GSK_RIGHT] = SDL_SCANCODE_RIGHT;
	m_sdlKeyID[GSK_CTRL] = SDL_SCANCODE_LCTRL;
	m_sdlKeyID[GSK_ALT] = SDL_SCANCODE_LALT;
	m_sdlKeyID[GSK_SHIFT] = SDL_SCANCODE_LSHIFT;
	m_sdlKeyID[GSK_PAGEDOWN] = SDL_SCANCODE_PAGEDOWN;
	m_sdlKeyID[GSK_PAGEUP] = SDL_SCANCODE_PAGEUP;
	m_sdlKeyID[GSK_SPACE] = SDL_SCANCODE_SPACE;
	m_sdlKeyID[GSK_ENTER] = SDL_SCANCODE_RETURN;
	m_sdlKeyID[GSK_DELETE] = SDL_SCANCODE_DELETE;
	m_sdlKeyID[GSK_HOME] = SDL_SCANCODE_HOME;
	m_sdlKeyID[GSK_END] = SDL_SCANCODE_END;
	m_sdlKeyID[GSK_INSERT] = SDL_SCANCODE_INSERT;
	m_sdlKeyID[GSK_PAUSE] = SDL_SCANCODE_PAUSE;
	m_sdlKeyID[GSK_ESC] = SDL_SCANCODE_ESCAPE;
	m_sdlKeyID[GSK_BACK] = SDL_SCANCODE_BACKSPACE;
	m_sdlKeyID[GSK_TAB] = SDL_SCANCODE_TAB;
	m_sdlKeyID[GSK_PRINTSCREEN] = SDL_SCANCODE_PRINTSCREEN;
	m_sdlKeyID[GSK_SUBTRACT] = SDL_SCANCODE_MINUS;
	m_sdlKeyID[GSK_ADD] = SDL_SCANCODE_KP_PLUS; // this is messed up
	m_sdlKeyID[GSK_F1] = SDL_SCANCODE_F1;
	m_sdlKeyID[GSK_F2] = SDL_SCANCODE_F2;
	m_sdlKeyID[GSK_F3] = SDL_SCANCODE_F3;
	m_sdlKeyID[GSK_F4] = SDL_SCANCODE_F4;
	m_sdlKeyID[GSK_F5] = SDL_SCANCODE_F5;
	m_sdlKeyID[GSK_F6] = SDL_SCANCODE_F6;
	m_sdlKeyID[GSK_F7] = SDL_SCANCODE_F7;
	m_sdlKeyID[GSK_F8] = SDL_SCANCODE_F8;
	m_sdlKeyID[GSK_F9] = SDL_SCANCODE_F9;
	m_sdlKeyID[GSK_F10] = SDL_SCANCODE_F10;
	m_sdlKeyID[GSK_F11] = SDL_SCANCODE_F11;
	m_sdlKeyID[GSK_F12] = SDL_SCANCODE_F12;
	m_sdlKeyID[GSK_F13] = SDL_SCANCODE_F13;
	m_sdlKeyID[GSK_F14] = SDL_SCANCODE_F14;
	m_sdlKeyID[GSK_F15] = SDL_SCANCODE_F15;
	m_sdlKeyID[GSK_F16] = SDL_SCANCODE_F16;
	m_sdlKeyID[GSK_F17] = SDL_SCANCODE_F17;
	m_sdlKeyID[GSK_F18] = SDL_SCANCODE_F18;
	m_sdlKeyID[GSK_F19] = SDL_SCANCODE_F19;
	m_sdlKeyID[GSK_F20] = SDL_SCANCODE_F20;
	m_sdlKeyID[GSK_F21] = SDL_SCANCODE_F21;
	m_sdlKeyID[GSK_F22] = SDL_SCANCODE_F22;
	m_sdlKeyID[GSK_F23] = SDL_SCANCODE_F23;
	m_sdlKeyID[GSK_F24] = SDL_SCANCODE_F24;
	m_sdlKeyID[GSK_A] = SDL_SCANCODE_A;
	m_sdlKeyID[GSK_B] = SDL_SCANCODE_B;
	m_sdlKeyID[GSK_C] = SDL_SCANCODE_C;
	m_sdlKeyID[GSK_D] = SDL_SCANCODE_D;
	m_sdlKeyID[GSK_E] = SDL_SCANCODE_E;
	m_sdlKeyID[GSK_F] = SDL_SCANCODE_F;
	m_sdlKeyID[GSK_G] = SDL_SCANCODE_G;
	m_sdlKeyID[GSK_H] = SDL_SCANCODE_H;
	m_sdlKeyID[GSK_I] = SDL_SCANCODE_I;
	m_sdlKeyID[GSK_J] = SDL_SCANCODE_J;
	m_sdlKeyID[GSK_K] = SDL_SCANCODE_K;
	m_sdlKeyID[GSK_L] = SDL_SCANCODE_L;
	m_sdlKeyID[GSK_M] = SDL_SCANCODE_M;
	m_sdlKeyID[GSK_N] = SDL_SCANCODE_N;
	m_sdlKeyID[GSK_O] = SDL_SCANCODE_O;
	m_sdlKeyID[GSK_P] = SDL_SCANCODE_P;
	m_sdlKeyID[GSK_Q] = SDL_SCANCODE_Q;
	m_sdlKeyID[GSK_R] = SDL_SCANCODE_R;
	m_sdlKeyID[GSK_S] = SDL_SCANCODE_S;
	m_sdlKeyID[GSK_T] = SDL_SCANCODE_T;
	m_sdlKeyID[GSK_U] = SDL_SCANCODE_U;
	m_sdlKeyID[GSK_V] = SDL_SCANCODE_V;
	m_sdlKeyID[GSK_W] = SDL_SCANCODE_W;
	m_sdlKeyID[GSK_X] = SDL_SCANCODE_X;
	m_sdlKeyID[GSK_Y] = SDL_SCANCODE_Y;
	m_sdlKeyID[GSK_Z] = SDL_SCANCODE_Z;
	m_sdlKeyID[GSK_1] = SDL_SCANCODE_1;
	m_sdlKeyID[GSK_2] = SDL_SCANCODE_2;
	m_sdlKeyID[GSK_3] = SDL_SCANCODE_3;
	m_sdlKeyID[GSK_4] = SDL_SCANCODE_4;
	m_sdlKeyID[GSK_5] = SDL_SCANCODE_5;
	m_sdlKeyID[GSK_6] = SDL_SCANCODE_6;
	m_sdlKeyID[GSK_7] = SDL_SCANCODE_7;
	m_sdlKeyID[GSK_8] = SDL_SCANCODE_8;
	m_sdlKeyID[GSK_9] = SDL_SCANCODE_9;
	m_sdlKeyID[GSK_0] = SDL_SCANCODE_0;
	m_sdlKeyID[GSK_NUMPAD0] = SDL_SCANCODE_KP_0;
	m_sdlKeyID[GSK_NUMPAD1] = SDL_SCANCODE_KP_1;
	m_sdlKeyID[GSK_NUMPAD2] = SDL_SCANCODE_KP_2;
	m_sdlKeyID[GSK_NUMPAD3] = SDL_SCANCODE_KP_3;
	m_sdlKeyID[GSK_NUMPAD4] = SDL_SCANCODE_KP_4;
	m_sdlKeyID[GSK_NUMPAD5] = SDL_SCANCODE_KP_5;
	m_sdlKeyID[GSK_NUMPAD6] = SDL_SCANCODE_KP_6;
	m_sdlKeyID[GSK_NUMPAD7] = SDL_SCANCODE_KP_7;
	m_sdlKeyID[GSK_NUMPAD8] = SDL_SCANCODE_KP_8;
	m_sdlKeyID[GSK_NUMPAD9] = SDL_SCANCODE_KP_9;
	m_sdlKeyID[GSK_MINUS] = SDL_SCANCODE_KP_MINUS;
	m_sdlKeyID[GSK_PLUS] = SDL_SCANCODE_KP_PLUS;
	m_sdlKeyID[GSK_COMMA] = SDL_SCANCODE_COMMA;
	m_sdlKeyID[GSK_DOT] = SDL_SCANCODE_PERIOD;
	m_sdlKeyID[GSK_META] = SDL_SCANCODE_LGUI;

	// not used:
	m_sdlKeyID[GSK_RMOUSE] = SDL_NUM_SCANCODES;
	m_sdlKeyID[GSK_LMOUSE] = SDL_NUM_SCANCODES;
	m_sdlKeyID[GSK_MMOUSE] = SDL_NUM_SCANCODES;

	UpdateCursorPos();
	m_lastCursorPos = m_cursorPos;
}
コード例 #11
0
ファイル: SDLInput.cpp プロジェクト: angeltown/ethanon
SDLInput::SDLInput(const bool showJoystickWarnings) :
	SDLJoystick(showJoystickWarnings),
	m_cursorPos(math::Vector2i(-1,-1)),
	m_lastCursorPos(math::Vector2i(0, 0)),
	m_mouseBits(0)
{
	m_sdlKeyID[GSK_UP] = SDLK_UP;
	m_sdlKeyID[GSK_DOWN] = SDLK_DOWN;
	m_sdlKeyID[GSK_LEFT] = SDLK_LEFT;
	m_sdlKeyID[GSK_RIGHT] = SDLK_RIGHT;
	m_sdlKeyID[GSK_CTRL] = SDLK_LCTRL;
	m_sdlKeyID[GSK_ALT] = SDLK_LALT;
	m_sdlKeyID[GSK_SHIFT] = SDLK_LSHIFT;
	m_sdlKeyID[GSK_PAGEDOWN] = SDLK_PAGEDOWN;
	m_sdlKeyID[GSK_PAGEUP] = SDLK_PAGEUP;
	m_sdlKeyID[GSK_SPACE] = SDLK_SPACE;
	m_sdlKeyID[GSK_ENTER] = SDLK_RETURN;
	m_sdlKeyID[GSK_DELETE] = SDLK_DELETE;
	m_sdlKeyID[GSK_HOME] = SDLK_HOME;
	m_sdlKeyID[GSK_END] = SDLK_END;
	m_sdlKeyID[GSK_INSERT] = SDLK_INSERT;
	m_sdlKeyID[GSK_PAUSE] = SDLK_PAUSE;
	m_sdlKeyID[GSK_ESC] = SDLK_ESCAPE;
	m_sdlKeyID[GSK_BACK] = SDLK_BACKSPACE;
	m_sdlKeyID[GSK_TAB] = SDLK_TAB;
	m_sdlKeyID[GSK_PRINTSCREEN] = SDLK_PRINT;
	m_sdlKeyID[GSK_SUBTRACT] = SDLK_MINUS;
	m_sdlKeyID[GSK_ADD] = SDLK_PLUS;
	m_sdlKeyID[GSK_F1] = SDLK_F1;
	m_sdlKeyID[GSK_F2] = SDLK_F2;
	m_sdlKeyID[GSK_F3] = SDLK_F3;
	m_sdlKeyID[GSK_F4] = SDLK_F4;
	m_sdlKeyID[GSK_F5] = SDLK_F5;
	m_sdlKeyID[GSK_F6] = SDLK_F6;
	m_sdlKeyID[GSK_F7] = SDLK_F7;
	m_sdlKeyID[GSK_F8] = SDLK_F8;
	m_sdlKeyID[GSK_F9] = SDLK_F9;
	m_sdlKeyID[GSK_F10] = SDLK_F10;
	m_sdlKeyID[GSK_F11] = SDLK_F11;
	m_sdlKeyID[GSK_F12] = SDLK_F12;
	m_sdlKeyID[GSK_F13] = SDLK_F13;
	m_sdlKeyID[GSK_F14] = SDLK_F14;
	m_sdlKeyID[GSK_F15] = SDLK_F15;
	m_sdlKeyID[GSK_F16] = SDLK_LAST;
	m_sdlKeyID[GSK_F17] = SDLK_LAST;
	m_sdlKeyID[GSK_F18] = SDLK_LAST;
	m_sdlKeyID[GSK_F19] = SDLK_LAST;
	m_sdlKeyID[GSK_F20] = SDLK_LAST;
	m_sdlKeyID[GSK_F21] = SDLK_LAST;
	m_sdlKeyID[GSK_F22] = SDLK_LAST;
	m_sdlKeyID[GSK_F23] = SDLK_LAST;
	m_sdlKeyID[GSK_F24] = SDLK_LAST;
	m_sdlKeyID[GSK_A] = SDLK_a;
	m_sdlKeyID[GSK_B] = SDLK_b;
	m_sdlKeyID[GSK_C] = SDLK_c;
	m_sdlKeyID[GSK_D] = SDLK_d;
	m_sdlKeyID[GSK_E] = SDLK_e;
	m_sdlKeyID[GSK_F] = SDLK_f;
	m_sdlKeyID[GSK_G] = SDLK_g;
	m_sdlKeyID[GSK_H] = SDLK_h;
	m_sdlKeyID[GSK_I] = SDLK_i;
	m_sdlKeyID[GSK_J] = SDLK_j;
	m_sdlKeyID[GSK_K] = SDLK_k;
	m_sdlKeyID[GSK_L] = SDLK_l;
	m_sdlKeyID[GSK_M] = SDLK_m;
	m_sdlKeyID[GSK_N] = SDLK_n;
	m_sdlKeyID[GSK_O] = SDLK_o;
	m_sdlKeyID[GSK_P] = SDLK_p;
	m_sdlKeyID[GSK_Q] = SDLK_q;
	m_sdlKeyID[GSK_R] = SDLK_r;
	m_sdlKeyID[GSK_S] = SDLK_s;
	m_sdlKeyID[GSK_T] = SDLK_t;
	m_sdlKeyID[GSK_U] = SDLK_u;
	m_sdlKeyID[GSK_V] = SDLK_v;
	m_sdlKeyID[GSK_W] = SDLK_w;
	m_sdlKeyID[GSK_X] = SDLK_x;
	m_sdlKeyID[GSK_Y] = SDLK_y;
	m_sdlKeyID[GSK_Z] = SDLK_z;
	m_sdlKeyID[GSK_1] = SDLK_1;
	m_sdlKeyID[GSK_2] = SDLK_2;
	m_sdlKeyID[GSK_3] = SDLK_3;
	m_sdlKeyID[GSK_4] = SDLK_4;
	m_sdlKeyID[GSK_5] = SDLK_5;
	m_sdlKeyID[GSK_6] = SDLK_6;
	m_sdlKeyID[GSK_7] = SDLK_7;
	m_sdlKeyID[GSK_8] = SDLK_8;
	m_sdlKeyID[GSK_9] = SDLK_9;
	m_sdlKeyID[GSK_0] = SDLK_0;
	m_sdlKeyID[GSK_NUMPAD0] = SDLK_KP0;
	m_sdlKeyID[GSK_NUMPAD1] = SDLK_KP1;
	m_sdlKeyID[GSK_NUMPAD2] = SDLK_KP2;
	m_sdlKeyID[GSK_NUMPAD3] = SDLK_KP3;
	m_sdlKeyID[GSK_NUMPAD4] = SDLK_KP4;
	m_sdlKeyID[GSK_NUMPAD5] = SDLK_KP5;
	m_sdlKeyID[GSK_NUMPAD6] = SDLK_KP6;
	m_sdlKeyID[GSK_NUMPAD7] = SDLK_KP7;
	m_sdlKeyID[GSK_NUMPAD8] = SDLK_KP8;
	m_sdlKeyID[GSK_NUMPAD9] = SDLK_KP9;
	m_sdlKeyID[GSK_MINUS] = SDLK_MINUS;
	m_sdlKeyID[GSK_PLUS] = SDLK_PLUS;
	m_sdlKeyID[GSK_COMMA] = SDLK_COMMA;
	m_sdlKeyID[GSK_DOT] = SDLK_PERIOD;
	m_sdlKeyID[GSK_META] = SDLK_LMETA;

	m_sdlKeyID[GSK_RMOUSE] = SDLK_LAST;
	m_sdlKeyID[GSK_LMOUSE] = SDLK_LAST;
	m_sdlKeyID[GSK_MMOUSE] = SDLK_LAST;

	UpdateCursorPos();
	m_lastCursorPos = m_cursorPos;
}