| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -55,7 +55,7 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <stdlib.h>         // Required for: malloc(), free() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <stdio.h>          // Required for: vsprintf() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <string.h>         // Required for: strcmp(), strstr(), strcpy(), strncpy(), strcat(), strncat(), sscanf() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <string.h>         // Required for: strcmp(), strstr(), strcpy(), strncpy() [Used in TextReplace()], sscanf() [Used in LoadBMFont()] | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <stdarg.h>         // Required for: va_list, va_start(), vsprintf(), va_end() [Used in TextFormat()] | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <ctype.h>          // Requried for: toupper(), tolower() [Used in TextToUpper(), TextToLower()] | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1287,29 +1287,32 @@ char *TextInsert(const char *text, const char *insert, int position) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Join text strings with delimiter | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// REQUIRES: strcat() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// REQUIRES: memset(), memcpy() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			const char *TextJoin(const char **textList, int count, const char *delimiter) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    static char text[MAX_TEXT_BUFFER_LENGTH] = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    memset(text, 0, MAX_TEXT_BUFFER_LENGTH); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char *textPtr = text; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    int totalLength = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    int delimiterLen = TextLength(delimiter); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0; i < count; i++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int textListLength = TextLength(textList[i]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int textLength = TextLength(textList[i]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Make sure joined text could fit inside MAX_TEXT_BUFFER_LENGTH | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if ((totalLength + textListLength) < MAX_TEXT_BUFFER_LENGTH) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if ((totalLength + textLength) < MAX_TEXT_BUFFER_LENGTH) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            strcat(text, textList[i]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            totalLength += textListLength; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            memcpy(textPtr, textList[i], textLength); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            totalLength += textLength; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            textPtr += textLength; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if ((delimiterLen > 0) && (i < (count - 1))) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                strcat(text, delimiter); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                memcpy(textPtr, delimiter, delimiterLen); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                totalLength += delimiterLen; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                textPtr += textLength; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1453,7 +1456,7 @@ char *TextToUtf8(int *codepoints, int length) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0, bytes = 0; i < length; i++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        utf8 = CodepointToUtf8(codepoints[i], &bytes); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        strncpy(text + size, utf8, bytes); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        memcpy(text + size, utf8, bytes); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        size += bytes; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1664,6 +1667,7 @@ int GetNextCodepoint(const char *text, int *bytesProcessed) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_FNT) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Read a line from memory | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: Returns the number of bytes read | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static int GetLine(const char *origin, char *buffer, int maxLength) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    int count = 0; | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1673,6 +1677,7 @@ static int GetLine(const char *origin, char *buffer, int maxLength) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Load a BMFont file (AngelCode font file) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// REQUIRES: strstr(), sscanf(), strrchr(), memcpy() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Font LoadBMFont(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #define MAX_BUFFER_SIZE     256 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1727,18 +1732,12 @@ static Font LoadBMFont(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char *lastSlash = NULL; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    lastSlash = strrchr(fileName, '/'); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (lastSlash == NULL) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        lastSlash = strrchr(fileName, '\\'); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (lastSlash == NULL) lastSlash = strrchr(fileName, '\\'); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: We need some extra space to avoid memory corruption on next allocations! | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    texPath = RL_MALLOC(TextLength(fileName) - TextLength(lastSlash) + TextLength(imFileName) + 4); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: strcat() and strncat() required a '\0' terminated string to work! | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    *texPath = '\0'; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    strncat(texPath, fileName, TextLength(fileName) - TextLength(lastSlash) + 1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    strncat(texPath, imFileName, TextLength(imFileName)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    texPath = RL_CALLOC(TextLength(fileName) - TextLength(lastSlash) + TextLength(imFileName) + 4, 1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    memcpy(texPath, fileName, TextLength(fileName) - TextLength(lastSlash) + 1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    memcpy(texPath + TextLength(fileName) - TextLength(lastSlash) + 1, imFileName, TextLength(imFileName)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TRACELOGD("    > Texture loading path: %s", texPath); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |