diff --git a/console.c b/console.c index 4c38f0b..0398923 100644 --- a/console.c +++ b/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!"); } diff --git a/console.h b/console.h index 9933232..bacccab 100644 --- a/console.h +++ b/console.h @@ -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 diff --git a/context.c b/context.c index e79f3f3..849b753 100644 --- a/context.c +++ b/context.c @@ -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; } diff --git a/devcpp/Makefile.win b/devcpp/Makefile.win index 27334cf..06455b2 100644 --- a/devcpp/Makefile.win +++ b/devcpp/Makefile.win @@ -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) diff --git a/devcpp/timesynk-sdl.layout b/devcpp/timesynk-sdl.layout index 38d33aa..2630790 100644 --- a/devcpp/timesynk-sdl.layout +++ b/devcpp/timesynk-sdl.layout @@ -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 diff --git a/helper.c b/helper.c index e86b0ca..e41b287 100644 --- a/helper.c +++ b/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); diff --git a/helper.h b/helper.h index 9356b33..a764be5 100644 --- a/helper.h +++ b/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 diff --git a/interface/sdl.c b/interface/sdl.c index 96f22e3..3b7599f 100644 --- a/interface/sdl.c +++ b/interface/sdl.c @@ -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 { diff --git a/interface/sdl.h b/interface/sdl.h index ce11102..620f11b 100644 --- a/interface/sdl.h +++ b/interface/sdl.h @@ -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