Codebase list blockattack / upstream/1.3.1 ReadKeyboard.cpp
upstream/1.3.1

Tree @upstream/1.3.1 (Download .tar.gz)

ReadKeyboard.cpp @upstream/1.3.1raw · history · blame

/*
ReadKeyboard.cpp
Copyright (C) 2005 Poul Sander

    This program is free software; you can redistribute it and/or modify        
    it under the terms of the GNU General Public License as published by        
    the Free Software Foundation; either version 2 of the License, or           
    (at your option) any later version.                                         
                                                                                
    This program is distributed in the hope that it will be useful,       
    but WITHOUT ANY WARRANTY; without even the implied warranty of              
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               
    GNU General Public License for more details.                
                                                                               
    You should have received a copy of the GNU General Public License           
    along with this program; if not, write to the Free Software                 
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   
                                                                                
    Poul Sander
    Rævehøjvej 36, V. 1111                                                    
    2800 Kgs. Lyngby
    DENMARK
    poul.sander@tdcadsl.dk        
*/

#include "ReadKeyboard.h"

ReadKeyboard::ReadKeyboard(void)
{
	length = 0;
	maxLength = 16;
	position = 0;
	strcpy(textstring,"                              ");
}

ReadKeyboard::~ReadKeyboard(void)
{
}

Uint8 ReadKeyboard::CharsBeforeCursor()
{
    return position;
}

ReadKeyboard::ReadKeyboard(char *oldName)
{
	length = 0;
	maxLength = 16;
	position = 0;
	strcpy(textstring,"                              ");
	strcpy(textstring,oldName);
	char charecter = textstring[maxLength+1];
	int i = maxLength+1;
	while((charecter == ' ') && (i>0))
	{
		i--;
		charecter = textstring[i];
	}
	if(i>0)length = i+1;
	else
		if(charecter == ' ') length = 0;
		else length = 1;
	position = length;

}


void ReadKeyboard::putchar(char thing)
{
	if(length < maxLength)
	{
		for(int i = 28; i>position;i--)
		{
			textstring[i]=textstring[i-1];
		}
		textstring[position] = thing;
		length++;
		position++;
	}
}


void ReadKeyboard::removeChar()
{
	for(int i = position;i<28;i++)
	{
		textstring[i]=textstring[i+1];
	}
	textstring[28]=' ';
	if(length>0)length--;
}

bool ReadKeyboard::ReadKey(SDLKey keyPressed)
{
	if (keyPressed == SDLK_SPACE)
	{
		ReadKeyboard::putchar(' ');
		return true;
	}
	if (keyPressed == SDLK_DELETE)
	{
		if((length>0)&& (position<length))ReadKeyboard::removeChar();
		return true;
	}
	if (keyPressed == SDLK_BACKSPACE)
	{
		if(position>0)
		{
			position--;
			ReadKeyboard::removeChar();
			return true;
		}
		return false;
	}
	Uint8* keys;
	keys = SDL_GetKeyState(NULL);
	if (keyPressed == SDLK_HOME)
	{ position=0; return true;}
	if (keyPressed == SDLK_END)
	{ position=length; return true;}
	if ((keyPressed == SDLK_LEFT) && (position>0))
	{ position--; return true; }
	if ((keyPressed == SDLK_RIGHT) && (position<length))
	{ position++; return true; }
	char charToPut;
	switch(keyPressed)
	{
	case SDLK_a:	charToPut = 'a'; break;
	case SDLK_b:	charToPut = 'b'; break;
	case SDLK_c:	charToPut = 'c'; break;
	case SDLK_d:	charToPut = 'd'; break;
	case SDLK_e:	charToPut = 'e'; break;
	case SDLK_f:	charToPut = 'f'; break;
	case SDLK_g:	charToPut = 'g'; break;
	case SDLK_h:	charToPut = 'h'; break;
	case SDLK_i:	charToPut = 'i'; break;
	case SDLK_j:	charToPut = 'j'; break;
	case SDLK_k:	charToPut = 'k'; break;
	case SDLK_l:	charToPut = 'l'; break;
	case SDLK_m:	charToPut = 'm'; break;
	case SDLK_n:	charToPut = 'n'; break;
	case SDLK_o:	charToPut = 'o'; break;
	case SDLK_p:	charToPut = 'p'; break;
	case SDLK_q:	charToPut = 'q'; break;
	case SDLK_r:	charToPut = 'r'; break;
	case SDLK_s:	charToPut = 's'; break;
	case SDLK_t:	charToPut = 't'; break;
	case SDLK_u:	charToPut = 'u'; break;
	case SDLK_v:	charToPut = 'v'; break;
	case SDLK_w:	charToPut = 'w'; break;
	case SDLK_x:	charToPut = 'x'; break;
	case SDLK_y:	charToPut = 'y'; break;
	case SDLK_z:	charToPut = 'z'; break;
	case SDLK_0:	charToPut = '0'; break;
	case SDLK_1:	charToPut = '1'; break;
	case SDLK_2:	charToPut = '2'; break;
	case SDLK_3:	charToPut = '3'; break;
	case SDLK_4:	charToPut = '4'; break;
	case SDLK_5:	charToPut = '5'; break;
	case SDLK_6:	charToPut = '6'; break;
	case SDLK_7:	charToPut = '7'; break;
	case SDLK_8:	charToPut = '8'; break;
	case SDLK_9:	charToPut = '9'; break;
	case SDLK_KP0:	charToPut = '0'; break;
	case SDLK_KP1:	charToPut = '1'; break;
	case SDLK_KP2:	charToPut = '2'; break;
	case SDLK_KP3:	charToPut = '3'; break;
	case SDLK_KP4:	charToPut = '4'; break;
	case SDLK_KP5:	charToPut = '5'; break;
	case SDLK_KP6:	charToPut = '6'; break;
	case SDLK_KP7:	charToPut = '7'; break;
	case SDLK_KP8:	charToPut = '8'; break;
	case SDLK_KP9:	charToPut = '9'; break;
	case SDLK_KP_PERIOD:
	case SDLK_PERIOD: charToPut='.'; break;
	default: return false;
	}
	if((keys[SDLK_LSHIFT]) || (keys[SDLK_RSHIFT]))
	{
		switch(charToPut)
		{
		case 'a':	charToPut = 'A'; break;
		case 'b':	charToPut = 'B'; break;
		case 'c':	charToPut = 'C'; break;
		case 'd':	charToPut = 'D'; break;
		case 'e':	charToPut = 'E'; break;
		case 'f':	charToPut = 'F'; break;
		case 'g':	charToPut = 'G'; break;
		case 'h':	charToPut = 'H'; break;
		case 'i':	charToPut = 'I'; break;
		case 'j':	charToPut = 'J'; break;
		case 'k':	charToPut = 'K'; break;
		case 'l':	charToPut = 'L'; break;
		case 'm':	charToPut = 'M'; break;
		case 'n':	charToPut = 'N'; break;
		case 'o':	charToPut = 'O'; break;
		case 'p':	charToPut = 'P'; break;
		case 'q':	charToPut = 'Q'; break;
		case 'r':	charToPut = 'R'; break;
		case 's':	charToPut = 'S'; break;
		case 't':	charToPut = 'T'; break;
		case 'u':	charToPut = 'U'; break;
		case 'v':	charToPut = 'V'; break;
		case 'w':	charToPut = 'W'; break;
		case 'x':	charToPut = 'X'; break;
		case 'y':	charToPut = 'Y'; break;
		case 'z':	charToPut = 'Z'; break;

		default: charToPut = charToPut; 
		}
	}
	ReadKeyboard::putchar(charToPut);
	return true;
}

char* ReadKeyboard::GetString()
{
	textstring[29]='\0';
	return &textstring[0];
}