|
|
@ -58,9 +58,12 @@ |
|
|
|
#define LOG(...) |
|
|
|
#endif |
|
|
|
|
|
|
|
#define REXM_MAX_BUFFER_SIZE (2*1024*1024) // 2MB |
|
|
|
#define REXM_MAX_EXAMPLES 512 |
|
|
|
#define REXM_MAX_EXAMPLE_CATEGORIES 8 |
|
|
|
|
|
|
|
#define REXM_MAX_RESOURCE_PATHS 256 |
|
|
|
#define REXM_MAX_BUFFER_SIZE (2*1024*1024) // 2MB |
|
|
|
|
|
|
|
#define REXM_MAX_RESOURCE_PATHS 256 |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Types and Structures Definition |
|
|
@ -178,7 +181,7 @@ int main(int argc, char *argv[]) |
|
|
|
char cat[12] = { 0 }; |
|
|
|
strncpy(cat, argv[2], catIndex); |
|
|
|
bool catFound = false; |
|
|
|
for (int i = 0; i < MAX_EXAMPLE_CATEGORIES; i++) |
|
|
|
for (int i = 0; i < REXM_MAX_EXAMPLE_CATEGORIES; i++) |
|
|
|
{ |
|
|
|
if (TextIsEqual(cat, exCategories[i])) { catFound = true; break; } |
|
|
|
} |
|
|
@ -212,7 +215,7 @@ int main(int argc, char *argv[]) |
|
|
|
char cat[12] = { 0 }; |
|
|
|
strncpy(cat, argv[2], catIndex); |
|
|
|
bool catFound = false; |
|
|
|
for (int i = 0; i < MAX_EXAMPLE_CATEGORIES; i++) |
|
|
|
for (int i = 0; i < REXM_MAX_EXAMPLE_CATEGORIES; i++) |
|
|
|
{ |
|
|
|
if (TextIsEqual(cat, exCategories[i])) { catFound = true; break; } |
|
|
|
} |
|
|
@ -274,8 +277,8 @@ int main(int argc, char *argv[]) |
|
|
|
} |
|
|
|
else if (strcmp(argv[1], "validate") == 0) |
|
|
|
{ |
|
|
|
// Validate examples in collection |
|
|
|
// All examples in collection match all requirements on required files |
|
|
|
// Validate examples in collection (report results) |
|
|
|
// All examples in collection match all files requirements |
|
|
|
|
|
|
|
opCode = OP_VALIDATE; |
|
|
|
} |
|
|
@ -283,7 +286,7 @@ int main(int argc, char *argv[]) |
|
|
|
|
|
|
|
switch (opCode) |
|
|
|
{ |
|
|
|
case mi">1: // Create: New example from template |
|
|
|
case nl">OP_CREATE: // Create: New example from template |
|
|
|
{ |
|
|
|
// Create: raylib/examples/<category>/<category>_example_name.c |
|
|
|
char *exText = LoadFileText(exTemplateFilePath); |
|
|
@ -302,7 +305,7 @@ int main(int argc, char *argv[]) |
|
|
|
for (int i = 0; i < 6; i++) { MemFree(exTextUpdated[i]); exTextUpdated[i] = NULL; } |
|
|
|
UnloadFileText(exText); |
|
|
|
} |
|
|
|
case mi">2: // Add: Example from command-line input filename |
|
|
|
case nl">OP_ADD: // Add: Example from command-line input filename |
|
|
|
{ |
|
|
|
// Add: raylib/examples/<category>/<category>_example_name.c |
|
|
|
if (opCode != 1) FileCopy(inFileName, TextFormat("%s/%s/%s.c", exBasePath, exCategory, exName)); |
|
|
@ -531,7 +534,7 @@ int main(int argc, char *argv[]) |
|
|
|
//------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
} break; |
|
|
|
case mi">3: // Rename |
|
|
|
case nl">OP_RENAME: // Rename |
|
|
|
{ |
|
|
|
// NOTE: At this point provided values have been validated: |
|
|
|
// exName, exCategory, exRename, exRecategory |
|
|
@ -606,27 +609,27 @@ int main(int argc, char *argv[]) |
|
|
|
TextFormat("%s/%s/%s.js", exWebPath, exRecategory, exRename)); |
|
|
|
|
|
|
|
} break; |
|
|
|
case mi">4: // Remove |
|
|
|
case nl">OP_REMOVE: // Remove |
|
|
|
{ |
|
|
|
// Remove example from collection for files update |
|
|
|
//------------------------------------------------------------------------------------------------ |
|
|
|
char *exColInfo = LoadFileText(exCollectionFilePath); |
|
|
|
int exIndex = TextFindIndex(exColInfo, TextFormat("%s;%s", exCategory, exName)); |
|
|
|
char *exCollectionList = LoadFileText(exCollectionFilePath); |
|
|
|
int exIndex = TextFindIndex(exCollectionList, TextFormat("%s;%s", exCategory, exName)); |
|
|
|
if (exIndex > 0) // Example found |
|
|
|
{ |
|
|
|
char *exColInfoUpdated = (char *)RL_CALLOC(2*1024*1024, 1); // Updated list copy, 2MB |
|
|
|
char *exCollectionListUpdated = (char *)RL_CALLOC(2*1024*1024, 1); // Updated list copy, 2MB |
|
|
|
|
|
|
|
memcpy(exColInfoUpdated, exColInfo, exIndex); |
|
|
|
memcpy(exCollectionListUpdated, exCollectionList, exIndex); |
|
|
|
int lineLen = 0; |
|
|
|
for (int i = exIndex; (exColInfo[i] != '\n') && (exColInfo[i] != '\0'); i++) lineLen++; |
|
|
|
for (int i = exIndex; (exCollectionList[i] != '\n') && (exCollectionList[i] != '\0'); i++) lineLen++; |
|
|
|
// Remove line and copy the rest next |
|
|
|
memcpy(exColInfoUpdated + exIndex, exColInfo + exIndex + lineLen + 1, strlen(exColInfo) - exIndex - lineLen); |
|
|
|
memcpy(exCollectionListUpdated + exIndex, exCollectionList + exIndex + lineLen + 1, strlen(exCollectionList) - exIndex - lineLen); |
|
|
|
|
|
|
|
SaveFileText(exCollectionFilePath, exColInfoUpdated); |
|
|
|
RL_FREE(exColInfoUpdated); |
|
|
|
SaveFileText(exCollectionFilePath, exCollectionListUpdated); |
|
|
|
RL_FREE(exCollectionListUpdated); |
|
|
|
} |
|
|
|
else LOG("WARNING: REMOVE: Example not found in the collection\n"); |
|
|
|
UnloadFileText(exColInfo); |
|
|
|
UnloadFileText(exCollectionList); |
|
|
|
//------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
// Remove: raylib/examples/<category>/resources/.. |
|
|
@ -690,7 +693,7 @@ int main(int argc, char *argv[]) |
|
|
|
remove(TextFormat("%s/%s/%s.js", exWebPath, exCategory, exName)); |
|
|
|
|
|
|
|
} break; |
|
|
|
case mi">5: // Validate |
|
|
|
case nl">OP_VALIDATE: // l">Validate: report and actions |
|
|
|
{ |
|
|
|
// TODO: Validate examples in collection list [examples_list.txt] -> Source of truth! |
|
|
|
// Validate: raylib/examples/<category>/<category>_example_name.c -> File exists? |
|
|
@ -777,7 +780,7 @@ static int UpdateRequiredFiles(void) |
|
|
|
memcpy(mkTextUpdated, mkText, mkListStartIndex); |
|
|
|
mkIndex = sprintf(mkTextUpdated + mkListStartIndex, "#EXAMPLES_LIST_START\n"); |
|
|
|
|
|
|
|
for (int i = 0; i < MAX_EXAMPLE_CATEGORIES; i++) |
|
|
|
for (int i = 0; i < REXM_MAX_EXAMPLE_CATEGORIES; i++) |
|
|
|
{ |
|
|
|
mkIndex += sprintf(mkTextUpdated + mkListStartIndex + mkIndex, TextFormat("%s = \\\n", TextToUpper(exCategories[i]))); |
|
|
|
|
|
|
@ -813,7 +816,7 @@ static int UpdateRequiredFiles(void) |
|
|
|
mkwIndex = sprintf(mkwTextUpdated + mkwListStartIndex, "#EXAMPLES_LIST_START\n"); |
|
|
|
|
|
|
|
// NOTE: We avoid the "others" category on web building |
|
|
|
for (int i = 0; i < MAX_EXAMPLE_CATEGORIES - 1; i++) |
|
|
|
for (int i = 0; i < REXM_MAX_EXAMPLE_CATEGORIES - 1; i++) |
|
|
|
{ |
|
|
|
mkwIndex += sprintf(mkwTextUpdated + mkwListStartIndex + mkwIndex, TextFormat("%s = \\\n", TextToUpper(exCategories[i]))); |
|
|
|
|
|
|
@ -839,7 +842,7 @@ static int UpdateRequiredFiles(void) |
|
|
|
mkwIndex += sprintf(mkwTextUpdated + mkwListStartIndex + mkwIndex, "audio: $(AUDIO)\n\n"); |
|
|
|
|
|
|
|
// NOTE: We avoid the "others" category on web building |
|
|
|
for (int i = 0; i < MAX_EXAMPLE_CATEGORIES - 1; i++) |
|
|
|
for (int i = 0; i < REXM_MAX_EXAMPLE_CATEGORIES - 1; i++) |
|
|
|
{ |
|
|
|
mkwIndex += sprintf(mkwTextUpdated + mkwListStartIndex + mkwIndex, TextFormat("# Compile %s examples\n", TextToUpper(exCategories[i]))); |
|
|
|
|
|
|
@ -937,7 +940,7 @@ static int UpdateRequiredFiles(void) |
|
|
|
mdIndex += sprintf(mdTextUpdated + mdListStartIndex + mdIndex, TextFormat("## EXAMPLES COLLECTION [TOTAL: %i]\n\n", exCollectionFullCount)); |
|
|
|
|
|
|
|
// NOTE: We keep a global examples counter |
|
|
|
for (int i = 0; i < MAX_EXAMPLE_CATEGORIES; i++) |
|
|
|
for (int i = 0; i < REXM_MAX_EXAMPLE_CATEGORIES; i++) |
|
|
|
{ |
|
|
|
int exCollectionCount = 0; |
|
|
|
rlExampleInfo *exCollection = LoadExamplesData(exCollectionFilePath, exCategories[i], false, &exCollectionCount); |
|
|
@ -1040,7 +1043,7 @@ static int UpdateRequiredFiles(void) |
|
|
|
jsIndex += sprintf(jsTextUpdated + jsListStartIndex + jsIndex, " var exampleData = [\n"); |
|
|
|
|
|
|
|
// NOTE: We avoid "others" category |
|
|
|
for (int i = 0; i < MAX_EXAMPLE_CATEGORIES - 1; i++) |
|
|
|
for (int i = 0; i < REXM_MAX_EXAMPLE_CATEGORIES - 1; i++) |
|
|
|
{ |
|
|
|
int exCollectionCount = 0; |
|
|
|
rlExampleInfo *exCollection = LoadExamplesData(exCollectionFilePath, exCategories[i], false, &exCollectionCount); |
|
|
|