diff --git a/CMakeLists.txt b/CMakeLists.txt index efa890c..bcb4639 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ option(ARCHEUS_STD_OPENGL "Build with OpenGL" OFF) set(ARCHEUS_STD_FLAGS "") if(ARCHEUS_STD_DEBUG) - string(APPEND ARCHEUS_STD_FLAGS "-Wall -Werror -g -ggdb ") + string(APPEND ARCHEUS_STD_FLAGS "-Wall -Werror -g -ggdb -DARC_DEBUG ") endif() if(ARCHEUS_STD_DEFAULT_CONFIG) diff --git a/include/arc/input/keyboard.h b/include/arc/input/keyboard.h index 6b35d75..849558c 100644 --- a/include/arc/input/keyboard.h +++ b/include/arc/input/keyboard.h @@ -51,6 +51,18 @@ typedef enum ARC_KeyboardKey { ARC_KEY_Y, ARC_KEY_Z, + ARC_KEY_0, + ARC_KEY_1, + ARC_KEY_2, + ARC_KEY_3, + ARC_KEY_4, + ARC_KEY_5, + ARC_KEY_6, + ARC_KEY_7, + ARC_KEY_8, + ARC_KEY_9, + + ARC_KEY_SPACE, ARC_KEY_ESC, } ARC_Keyboard_Key; diff --git a/include/arc/std/defaults/config.h b/include/arc/std/defaults/config.h index 5e8b0e7..d093dba 100644 --- a/include/arc/std/defaults/config.h +++ b/include/arc/std/defaults/config.h @@ -27,7 +27,7 @@ uint8_t ARC_ConfigKey_Read_Long (ARC_Config *config, ARC_String *string, v uint8_t ARC_ConfigKey_Read_Float (ARC_Config *config, ARC_String *string, void **value); uint8_t ARC_ConfigKey_Read_Double (ARC_Config *config, ARC_String *string, void **value); uint8_t ARC_ConfigKey_Read_String (ARC_Config *config, ARC_String *string, void **value); -// uint8_t ARC_ConfigKey_Read_StringArray(ARC_Config *config, ARC_String *string, void **value); +uint8_t ARC_ConfigKey_Read_StringArray(ARC_Config *config, ARC_String *string, void **value); void ARC_ConfigKey_Delete_Uint8_t (ARC_Config *config, ARC_String *string, void *value); void ARC_ConfigKey_Delete_Int8_t (ARC_Config *config, ARC_String *string, void *value); @@ -43,7 +43,7 @@ void ARC_ConfigKey_Delete_Long (ARC_Config *config, ARC_String *string, vo void ARC_ConfigKey_Delete_Float (ARC_Config *config, ARC_String *string, void *value); void ARC_ConfigKey_Delete_Double (ARC_Config *config, ARC_String *string, void *value); void ARC_ConfigKey_Delete_String (ARC_Config *config, ARC_String *string, void *value); -// void ARC_ConfigKey_Delete_StringArray(ARC_Config *config, ARC_String *string, void *value); +void ARC_ConfigKey_Delete_StringArray(ARC_Config *config, ARC_String *string, void *value); #ifdef __cplusplus } diff --git a/src/input/sdl/keyboard.c b/src/input/sdl/keyboard.c index 2a536fa..c120335 100644 --- a/src/input/sdl/keyboard.c +++ b/src/input/sdl/keyboard.c @@ -79,7 +79,19 @@ ARC_KeyboardState ARC_Keyboard_GetState(ARC_Keyboard *keyboard, enum ARC_Keyboar case ARC_KEY_Y: return keyboard->keys[SDLK_y]; case ARC_KEY_Z: return keyboard->keys[SDLK_z]; - case ARC_KEY_ESC: return keyboard->keys[SDLK_ESCAPE]; + case ARC_KEY_0: return keyboard->keys[SDLK_0]; + case ARC_KEY_1: return keyboard->keys[SDLK_1]; + case ARC_KEY_2: return keyboard->keys[SDLK_2]; + case ARC_KEY_3: return keyboard->keys[SDLK_3]; + case ARC_KEY_4: return keyboard->keys[SDLK_4]; + case ARC_KEY_5: return keyboard->keys[SDLK_5]; + case ARC_KEY_6: return keyboard->keys[SDLK_6]; + case ARC_KEY_7: return keyboard->keys[SDLK_7]; + case ARC_KEY_8: return keyboard->keys[SDLK_8]; + case ARC_KEY_9: return keyboard->keys[SDLK_9]; + + case ARC_KEY_SPACE: return keyboard->keys[SDLK_SPACE ]; + case ARC_KEY_ESC: return keyboard->keys[SDLK_ESCAPE]; default: return ARC_KEY_NONE; } diff --git a/src/std/config.c b/src/std/config.c index ade3198..b8c91c7 100644 --- a/src/std/config.c +++ b/src/std/config.c @@ -211,6 +211,7 @@ void ARC_Config_LoadFromKey(ARC_Config *config, ARC_String *keyType, ARC_String ARC_Hashtable_Get(config->keys, keyType->data, keyType->length, (void **)&key); if(key == NULL){ arc_errno = ARC_ERRNO_DATA; + ARC_DEBUG_LOG(arc_errno, "in ARC_Config_LoadFromKey(config, string, value); no matching key: %s", keyType->data); } if(arc_errno){ diff --git a/src/std/defaults/config.c b/src/std/defaults/config.c index 11838d3..403b18c 100644 --- a/src/std/defaults/config.c +++ b/src/std/defaults/config.c @@ -25,7 +25,7 @@ void ARC_Defaults_ConfigKey_Create(ARC_Config *config){ ARC_Config_AddKeyCString(config, "float" , 5, ARC_ConfigKey_Read_Float , ARC_ConfigKey_Delete_Float ); ARC_Config_AddKeyCString(config, "double" , 6, ARC_ConfigKey_Read_Double , ARC_ConfigKey_Delete_Double ); ARC_Config_AddKeyCString(config, "string" , 6, ARC_ConfigKey_Read_String , ARC_ConfigKey_Delete_String ); - // ARC_Config_AddKeyCString(config, "string[]", ARC_ConfigKey_Read_StringArray, ARC_ConfigKey_Delete_StringArray); + ARC_Config_AddKeyCString(config, "string[]", 8, ARC_ConfigKey_Read_StringArray, ARC_ConfigKey_Delete_StringArray); } uint8_t ARC_ConfigKey_Read_Uint8_t(ARC_Config* config, ARC_String *string, void **value){ @@ -183,79 +183,102 @@ uint8_t ARC_ConfigKey_Read_String(ARC_Config* config, ARC_String *string, void * return 1; } - ARC_String_Copy((ARC_String **)value, string); + if(string->data[0] != '"' || string->data[string->length - 1] != '"'){ + arc_errno = ARC_ERRNO_DATA; + ARC_DEBUG_LOG(arc_errno, "in ARC_ConfigKey_Read_String(config, string, value); no matching quotes: %s", string->data); + return 0; + } + + ARC_String_CopySubstring((ARC_String **)value, string, 1, string->length - 2); return 0; } -/* -void ARC_ConfigKey_Read_StringArray(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){ - ARC_StringSubstr_StripWhitespaceEnds((char *)data, subdata); - if(data[subdata->index] != '{' || data[subdata->index + subdata->length - 1] != '}'){ return ARC_ERRNO_DATA; } - subdata->index++; - subdata->length -= 2; - uint32_t arraySize = 1; - for(uint32_t i = subdata->index; i < subdata->index + subdata->length; i++){ - if(data[i] == ','){ +void ARC_ConfigKey_StringArray_ReadString(ARC_Config* config, ARC_String *stripped, uint64_t index, uint64_t length, uint64_t *arrayIndex, void **value){ + ARC_String *substr, *temp; + ARC_String_CopySubstring(&temp, stripped, index, length); + ARC_String_StripEndsWhitespace(temp, &substr); + ARC_String_Destroy(temp); + + // reading in reference + ARC_String *tempString; + // ARC_Config_Get(config, substr, (void **) &tempString); + // if(tempString){ + // ARC_String_Destroy(substr); + + // ((ARC_String *)((ARC_Array *) *value)->data)[*arrayIndex] = *tempString; + // ++*arrayIndex; + + // return; + // } + + //reading in value + ARC_ConfigKey_Read_String(config, substr, (void **) &tempString); + if(arc_errno){ + ARC_DEBUG_LOG(arc_errno, "in ARC_RectArray_ReadRect(config, string, index, length, arrayIndex, value); failed to read string: %s", substr->data); + ARC_String_Destroy(substr); + return; + } + + ((ARC_String **)((ARC_Array *) *value)->data)[*arrayIndex] = tempString; + ++*arrayIndex; + + ARC_String_Destroy(substr); +} + +uint8_t ARC_ConfigKey_Read_StringArray(ARC_Config* config, ARC_String *string, void **value){ + ARC_Config_Get(config, string, value); + if(*value){ + return 1; + } + + if(string->data[0] != '{' || string->data[string->length - 1] != '}'){ + arc_errno = ARC_ERRNO_DATA; + ARC_DEBUG_LOG(arc_errno, "in ARC_ConfigKey_Read_StringArray(config, string, value); no matching curly braces: %s", string->data); + return 0; + } + + ARC_String *temp, *stripped; + ARC_String_CopySubstring(&temp, string, 1, string->length - 2); + ARC_String_StripEndsWhitespace(temp, &stripped); + ARC_String_Destroy(temp); + + uint64_t arraySize = 1; + for(uint64_t i = 0; i < stripped->length; i++){ + if(stripped->data[i] == ','){ arraySize++; } } - - *value = malloc(sizeof(char *)); - ((ARC_Array *) *value)->data = malloc(sizeof(char *) * arraySize); + + *value = malloc(sizeof(ARC_Array)); + ((ARC_Array *) *value)->data = malloc(sizeof(ARC_String *) * arraySize); ((ARC_Array *) *value)->size = malloc(sizeof(uint32_t)); *((ARC_Array *) *value)->size = arraySize; - ARC_StringSubstr temp = { subdata->index, 0 }; + uint64_t index = 0; arraySize = 0; - for(uint64_t i = subdata->index; i < subdata->index + subdata->length; i++){ - if(data[i] != ','){ - continue; - } - - temp.length = i - temp.index; - - char *tempStr = (char *)ARC_Config_GetReference(config, (char *)data, &temp); - if(!tempStr){ - ARC_ConfigKey_Read_String(config, data, &temp, (void **) &tempStr); + for(uint64_t i = 0; i < stripped->length; i++){ + if(stripped->data[i] == ','){ + ARC_ConfigKey_StringArray_ReadString(config, stripped, index, i - index, &arraySize, value); if(arc_errno){ - return arc_errno; + return 0; + } + + index = i + 1; + + if(arraySize == *((ARC_Array *) *value)->size){ + break; } } - - ((char **)((ARC_Array *) *value)->data)[arraySize] = tempStr; - - // ARC_ConfigKey_Delete_String(config, data, &temp, (void *)tempStr); - // if(arc_errno){ - // return arc_errno; - // } - - arraySize++; - temp = (ARC_StringSubstr){ i + 1, 0 }; - - if(arraySize == *((ARC_Array *) *value)->size){ - break; - } } - temp.length = (subdata->index + subdata->length) - temp.index; - char *tempStr = (char *)ARC_Config_GetReference(config, (char *)data, &temp); - if(!tempStr){ - ARC_ConfigKey_Read_String(config, data, &temp, (void **) &tempStr); - if(arc_errno){ - return arc_errno; - } + if(arraySize != *((ARC_Array *) *value)->size){ + ARC_ConfigKey_StringArray_ReadString(config, stripped, index, stripped->length - index, &arraySize, value); } - - ((char **)((ARC_Array *) *value)->data)[arraySize] = tempStr; - - // ARC_ConfigKey_Delete_String(config, data, &temp, (void *)tempStr); - // if(arc_errno){ - // return arc_errno; - // } - + ARC_String_Destroy(stripped); return 0; } -*/ + + void ARC_ConfigKey_Delete_Uint8_t(ARC_Config *config, ARC_String *string, void *value){ free((uint8_t *)value); @@ -313,4 +336,11 @@ void ARC_ConfigKey_Delete_String(ARC_Config *config, ARC_String *string, void *v ARC_String_Destroy((ARC_String *)value); } +void ARC_ConfigKey_Delete_StringArray(ARC_Config *config, ARC_String *string, void *value){ + for(uint32_t i = 0; i < *((ARC_Array *)value)->size; i++){ + free(((ARC_String **)((ARC_Array *)value)->data)[i]); + } + free((ARC_Array *)value); +} + #endif //ARC_DEFAULT_CONFIG