Due to various errors on windows, along with much rage, it was decided that it is far more sensible for consoleGetCommand to simply return command[0] as the command string and command[1] as the remainder, leaving the task of distinguishing one argument from another to the function that consoleProcessCommand passes it to. This is, of course, up for remodeling in the future (possibly by using a variable amount of arguments such as in printf), but for now it'll do. Also added C preprocessor conditions for strndup to allow on Win*.
parent
b567be76fd
commit
1f641bb92e
53
console.c
53
console.c
|
@ -45,59 +45,32 @@ void consoleAddCommand(const char *command_string, void(*function)) {
|
|||
}
|
||||
|
||||
char **consoleGetCommand(const char *string) {
|
||||
char** command_array = NULL;
|
||||
int i = 0;
|
||||
int j = 1;
|
||||
char last_pos = 0;
|
||||
|
||||
char current_char = string[i];
|
||||
short done = 0;
|
||||
|
||||
while (!done) {
|
||||
if (current_char == ' ') {
|
||||
command_array = realloc(command_array, sizeof(char*)*j+1);
|
||||
if (command_array == NULL) {
|
||||
consoleLog("ERROR, couldn't allocate memory for command_array");
|
||||
}
|
||||
command_array[j] = strndup(string+last_pos, i-last_pos);
|
||||
last_pos = i+1; // skip space
|
||||
j++;
|
||||
} else if (current_char == '\0') {
|
||||
command_array = realloc(command_array, sizeof(char*)*j+1);
|
||||
if (command_array == NULL) {
|
||||
consoleLog("ERROR, couldn't allocate memory for command_array\n");
|
||||
}
|
||||
command_array[j] = strndup(string+last_pos, i-last_pos);
|
||||
last_pos = i;
|
||||
done = 1;
|
||||
j++;
|
||||
}
|
||||
char** command_array;
|
||||
command_array = malloc(2 * sizeof(char*));
|
||||
while(string[i] != ' ' && string[i] != '\0') {
|
||||
i++;
|
||||
current_char = string[i];
|
||||
}
|
||||
command_array[0] = (void*)(size_t)(j-1);
|
||||
command_array[0] = malloc(i+1); // our command
|
||||
command_array[1] = malloc(console_cmd_size-i+1); // our argument string
|
||||
memcpy(command_array[0], string, i);
|
||||
memcpy(command_array[1], string+i+1, console_cmd_size-i);
|
||||
command_array[0][i] = '\0';
|
||||
command_array[1][console_cmd_size-i] = '\0';
|
||||
return command_array;
|
||||
}
|
||||
|
||||
void consoleFreeCommand(char **command_array) {
|
||||
int j;
|
||||
for (j = 1; j < (size_t)command_array[0]+1; j++) {
|
||||
free(command_array[j]);
|
||||
}
|
||||
free(command_array[0]);
|
||||
free(command_array[1]);
|
||||
free(command_array);
|
||||
}
|
||||
|
||||
void consoleProcessCommand(const char *command_string) {
|
||||
char **command = consoleGetCommand(command_string);
|
||||
int command_hash = consoleGenerateHash(command[1]);
|
||||
int command_hash = consoleGenerateHash(command[0]);
|
||||
if (console_commands_table[command_hash]) {
|
||||
if ((size_t)command[0] == 1) { // no arguments
|
||||
(*console_commands_table[command_hash])(NULL);
|
||||
} else if ((size_t)command[0] == 2) { // 1 arg
|
||||
(*console_commands_table[command_hash])(command[2]);
|
||||
} else if ((size_t)command[0] == 3) { // 2 args
|
||||
(*console_commands_table[command_hash])(command[2], command[3]);
|
||||
}
|
||||
(*console_commands_table[command_hash])(command[1]);
|
||||
} else {
|
||||
consoleLog("Command not found!");
|
||||
}
|
||||
|
|
|
@ -30,5 +30,6 @@ char** consoleGetCommand(const char* string);
|
|||
|
||||
char console_cmd[31];
|
||||
int console_cmd_offset;
|
||||
int console_cmd_size; // the size in chars of our command
|
||||
|
||||
#endif
|
||||
|
|
|
@ -29,6 +29,7 @@ void consoleContext(int key_press) {
|
|||
// TODO: run command via string here
|
||||
consoleProcessCommand(console_cmd);
|
||||
console_cmd_offset = 0;
|
||||
console_cmd_size = 0;
|
||||
console_cmd[console_cmd_offset] = '\0';
|
||||
break;
|
||||
case 8:
|
||||
|
@ -36,12 +37,14 @@ void consoleContext(int key_press) {
|
|||
console_cmd[console_cmd_offset-1] = '\0';
|
||||
if (console_cmd_offset > 0)
|
||||
console_cmd_offset--;
|
||||
console_cmd_size--;
|
||||
break;
|
||||
default:
|
||||
if (console_cmd_offset < 31) {
|
||||
console_cmd[console_cmd_offset] = key_press;
|
||||
console_cmd[console_cmd_offset+1] = '\0';
|
||||
console_cmd_offset++;
|
||||
console_cmd_size++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
# Project: timesynk-sdl
|
||||
# Project: timesynk-pdcurses
|
||||
# Makefile created by Dev-C++ 5.4.2
|
||||
|
||||
CPP = g++.exe
|
||||
CC = gcc.exe
|
||||
WINDRES = windres.exe
|
||||
OBJ = ../main.o ../interface/sdl.o ../net/sockets.o ../game.o ../player.o ../wall.o ../tiles/tiles.o ../console.o ../context.o ../helper.o ../map.o ../npc.o ../tile.o
|
||||
LINKOBJ = ../main.o ../interface/sdl.o ../net/sockets.o ../game.o ../player.o ../wall.o ../tiles/tiles.o ../console.o ../context.o ../helper.o ../map.o ../npc.o ../tile.o
|
||||
LIBS = -L"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib" -static-libstdc++ -static-libgcc -L"../../SDL-1.2.15/lib" -mwindows -lsdl -lSDL_image -lSDLmain -g3
|
||||
INCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"../../SDL-1.2.15/include"
|
||||
CXXINCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"../../SDL-1.2.15/include"
|
||||
BIN = timesynk-sdl.exe
|
||||
OBJ = ../main.o ../interface/curses.o ../net/sockets.o ../game.o ../player.o ../wall.o ../console.o ../context.o ../helper.o ../map.o ../npc.o ../tile.o ../tiles/curses_tiles.o
|
||||
LINKOBJ = ../main.o ../interface/curses.o ../net/sockets.o ../game.o ../player.o ../wall.o ../console.o ../context.o ../helper.o ../map.o ../npc.o ../tile.o ../tiles/curses_tiles.o
|
||||
LIBS = -L"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib" -static-libstdc++ -static-libgcc ../../PDCurses/pdcurses.lib -g3
|
||||
INCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"../../PDCurses"
|
||||
CXXINCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"../../PDCurses"
|
||||
BIN = timesynk-pdcurses.exe
|
||||
CXXFLAGS = $(CXXINCS) -g3
|
||||
CFLAGS = $(INCS) -g3
|
||||
RM = rm -f
|
||||
|
@ -28,8 +28,8 @@ $(BIN): $(OBJ)
|
|||
../main.o: ../main.c
|
||||
$(CC) -c ../main.c -o ../main.o $(CFLAGS)
|
||||
|
||||
../interface/sdl.o: ../interface/sdl.c
|
||||
$(CC) -c ../interface/sdl.c -o ../interface/sdl.o $(CFLAGS)
|
||||
../interface/curses.o: ../interface/curses.c
|
||||
$(CC) -c ../interface/curses.c -o ../interface/curses.o $(CFLAGS)
|
||||
|
||||
../net/sockets.o: ../net/sockets.c
|
||||
$(CC) -c ../net/sockets.c -o ../net/sockets.o $(CFLAGS)
|
||||
|
@ -43,9 +43,6 @@ $(BIN): $(OBJ)
|
|||
../wall.o: ../wall.c
|
||||
$(CC) -c ../wall.c -o ../wall.o $(CFLAGS)
|
||||
|
||||
../tiles/tiles.o: ../tiles/tiles.c
|
||||
$(CC) -c ../tiles/tiles.c -o ../tiles/tiles.o $(CFLAGS)
|
||||
|
||||
../console.o: ../console.c
|
||||
$(CC) -c ../console.c -o ../console.o $(CFLAGS)
|
||||
|
||||
|
@ -63,3 +60,6 @@ $(BIN): $(OBJ)
|
|||
|
||||
../tile.o: ../tile.c
|
||||
$(CC) -c ../tile.c -o ../tile.o $(CFLAGS)
|
||||
|
||||
../tiles/curses_tiles.o: ../tiles/curses_tiles.c
|
||||
$(CC) -c ../tiles/curses_tiles.c -o ../tiles/curses_tiles.o $(CFLAGS)
|
||||
|
|
|
@ -3,10 +3,10 @@ CursorCol=7
|
|||
CursorRow=13
|
||||
TopLine=1
|
||||
LeftChar=1
|
||||
Open=0
|
||||
Open=1
|
||||
Top=0
|
||||
[Editors]
|
||||
Order=
|
||||
Order=-1
|
||||
Focused=-1
|
||||
[Editor_1]
|
||||
Open=0
|
||||
|
@ -30,17 +30,17 @@ CursorRow=1
|
|||
TopLine=1
|
||||
LeftChar=1
|
||||
[Editor_4]
|
||||
Open=0
|
||||
Open=1
|
||||
Top=0
|
||||
CursorCol=34
|
||||
CursorRow=67
|
||||
TopLine=54
|
||||
CursorCol=24
|
||||
CursorRow=48
|
||||
TopLine=16
|
||||
LeftChar=1
|
||||
[Editor_5]
|
||||
Open=0
|
||||
Open=1
|
||||
Top=0
|
||||
CursorCol=1
|
||||
CursorRow=1
|
||||
CursorRow=26
|
||||
TopLine=1
|
||||
LeftChar=1
|
||||
[Editor_6]
|
||||
|
@ -93,23 +93,43 @@ Top=0
|
|||
Open=0
|
||||
Top=0
|
||||
[Editor_17]
|
||||
Open=0
|
||||
Open=1
|
||||
Top=0
|
||||
CursorCol=30
|
||||
CursorRow=58
|
||||
TopLine=35
|
||||
LeftChar=1
|
||||
[Editor_18]
|
||||
Open=0
|
||||
Open=1
|
||||
Top=0
|
||||
CursorCol=21
|
||||
CursorRow=33
|
||||
TopLine=1
|
||||
LeftChar=1
|
||||
[Editor_19]
|
||||
Open=0
|
||||
Top=0
|
||||
Open=1
|
||||
Top=1
|
||||
CursorCol=28
|
||||
CursorRow=32
|
||||
TopLine=13
|
||||
LeftChar=1
|
||||
[Editor_20]
|
||||
Open=0
|
||||
Top=0
|
||||
[Editor_21]
|
||||
Open=0
|
||||
Open=1
|
||||
Top=0
|
||||
CursorCol=32
|
||||
CursorRow=31
|
||||
TopLine=4
|
||||
LeftChar=1
|
||||
[Editor_22]
|
||||
Open=0
|
||||
Open=1
|
||||
Top=0
|
||||
CursorCol=1
|
||||
CursorRow=11
|
||||
TopLine=1
|
||||
LeftChar=1
|
||||
[Editor_23]
|
||||
Open=0
|
||||
Top=0
|
||||
|
|
2
helper.c
2
helper.c
|
@ -28,7 +28,7 @@ do {
|
|||
return result;
|
||||
}
|
||||
|
||||
#if __APPLE__
|
||||
#if __APPLE__ | _WIN32 | _WIN64
|
||||
char * strndup (const char *s, size_t n) {
|
||||
char *result;
|
||||
size_t len = strlen (s);
|
||||
|
|
2
helper.h
2
helper.h
|
@ -8,7 +8,7 @@
|
|||
* Released under GPLv3.
|
||||
*/
|
||||
char* itoa(int value, char* result, int base);
|
||||
#if __APPLE__
|
||||
#if __APPLE__ | _WIN32 | _WIN64
|
||||
char * strndup (const char *s, size_t n);
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -298,46 +298,53 @@ if(!Surface || !Width || !Height)
|
|||
}
|
||||
|
||||
int interfaceVideoSet() {
|
||||
if ((screen = SDL_SetVideoMode(video_width, video_height, 32, SDL_SWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE|video_mode)) == NULL) {
|
||||
if ((screen = SDL_SetVideoMode(video_width, video_height, 32, SDL_SWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE|video_fullscreen)) == NULL) {
|
||||
return ERROR;
|
||||
}
|
||||
free(camera_surface);
|
||||
camera_surface = SDL_CreateRGBSurface(screen->flags, screen->w, screen->h, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
void interfaceVideoSetSize(const char *size_string, const char *fullscreen_string) {
|
||||
if (size_string) {
|
||||
void interfaceVideoSetSize(const char *input_string) {
|
||||
if (input_string) {
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
char height[15];
|
||||
char width[15];
|
||||
char fullscreen[1];
|
||||
int position = 0;
|
||||
while(size_string[i] != '\0') {
|
||||
if (size_string[i] == 'x') {
|
||||
position++;
|
||||
j = 0; // reset for height
|
||||
} else {
|
||||
if (position == 0) { // width
|
||||
width[j] = size_string[i];
|
||||
} else if (position == 1) { // height
|
||||
height[j] = size_string[i];
|
||||
}
|
||||
j++;
|
||||
|
||||
while(input_string[i] != '\0') {
|
||||
if (input_string[i] == 'x') {
|
||||
width[j] = '\0';
|
||||
position = 1;
|
||||
i++; // skip the x
|
||||
j = 0;
|
||||
} else if (input_string[i] == ' ') {
|
||||
height[j] = '\0';
|
||||
position = 2;
|
||||
i++; // skip the space
|
||||
j = 0;
|
||||
}
|
||||
if (position == 0) {
|
||||
width[j] = input_string[i];
|
||||
} else if (position == 1) {
|
||||
height[j] = input_string[i];
|
||||
} else if (position == 2) {
|
||||
fullscreen[j] = input_string[i];
|
||||
break; // just a boolean, so let's break
|
||||
}
|
||||
j++;
|
||||
i++;
|
||||
}
|
||||
if (position < 1) {
|
||||
consoleLog("Syntax: widthxheight 0|1");
|
||||
return;
|
||||
}
|
||||
width[5] = '\0';
|
||||
height[5] = '\0';
|
||||
video_height = atoi(height); // ... had to reverse order for it to work on win...
|
||||
video_width = atoi(width);
|
||||
video_height = atoi(height);
|
||||
if (fullscreen_string[0] == '1') { // fullscreen
|
||||
video_mode = SDL_FULLSCREEN;
|
||||
} else if (fullscreen_string[0] == '0') { // windowed
|
||||
video_mode = 0;
|
||||
|
||||
if (fullscreen[0] == '1') { // fullscreen
|
||||
video_fullscreen = SDL_FULLSCREEN;
|
||||
} else if (fullscreen[0] == '0') { // windowed
|
||||
video_fullscreen = 0;
|
||||
}
|
||||
interfaceVideoSet();
|
||||
} else {
|
||||
|
|
|
@ -16,11 +16,12 @@
|
|||
int video_width;
|
||||
int video_height;
|
||||
int video_mode;
|
||||
int video_fullscreen; // 0=windowed, 1=fullscreen
|
||||
|
||||
void interfaceDrawString(const char *string, int start_x, int start_y);
|
||||
void interfaceDrawChar(char ch, int start_x, int start_y);
|
||||
|
||||
void interfaceVideoSetSize(const char *size_string, const char *fullscreen_string);
|
||||
void interfaceVideoSetSize(const char *input_string);
|
||||
SDL_Surface *interfaceScaleSurface(SDL_Surface *Surface, Uint16 Width, Uint16 Height);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue