|
|
@ -1102,24 +1102,26 @@ unsigned int TextLength(const char *text) |
|
|
|
} |
|
|
|
|
|
|
|
// Formatting of text with variables to 'embed' |
|
|
|
// WARNING: the string returned will expire after this function is called MAX_TEXT_BUFFERS times |
|
|
|
// WARNING: String returned will expire after this function is called MAX_TEXTFORMAT_BUFFERS times |
|
|
|
const char *TextFormat(const char *text, ...) |
|
|
|
{ |
|
|
|
#define MAX_TEXT_BUFFERS 8 |
|
|
|
// We create an array of buffers so strings don't expire until MAX_TEXT_BUFFERS invocations |
|
|
|
static char cache[MAX_TEXT_BUFFERS][MAX_TEXT_BUFFER_LENGTH] = { 0 }; |
|
|
|
#define MAX_TEXTFORMAT_BUFFERS 4 |
|
|
|
|
|
|
|
// We create an array of buffers so strings don't expire until MAX_TEXTFORMAT_BUFFERS invocations |
|
|
|
static char buffers[MAX_TEXTFORMAT_BUFFERS][MAX_TEXT_BUFFER_LENGTH] = { 0 }; |
|
|
|
static int index = 0; |
|
|
|
char *buffer = cache[index]; |
|
|
|
index += 1; |
|
|
|
index %= MAX_TEXT_BUFFERS; |
|
|
|
|
|
|
|
char *currentBuffer = buffers[index]; |
|
|
|
|
|
|
|
va_list args; |
|
|
|
va_start(args, text); |
|
|
|
vsprintf(buffer, text, args); |
|
|
|
vsprintf(currentBuffer, text, args); |
|
|
|
va_end(args); |
|
|
|
|
|
|
|
index += 1; // Move to next buffer for next function call |
|
|
|
if (index >= MAX_TEXTFORMAT_BUFFERS) index = 0; |
|
|
|
|
|
|
|
return buffer; |
|
|
|
#undef MAX_TEXT_BUFFERS |
|
|
|
return currentBuffer; |
|
|
|
} |
|
|
|
|
|
|
|
// Get a piece of a text string |
|
|
|