void Common_Format(char *buffer, int bufferSize, const char *formatString...) { va_list args; va_start(args, formatString); Common_vsnprintf(buffer, bufferSize, formatString, args); va_end(args); buffer[bufferSize-1] = '\0'; }
void Common_Draw(const char *format, ...) { char string[1024]; char *stringPtr = string; va_list args; va_start(args, format); Common_vsnprintf(string, 1024, format, args); va_end(args); string[1023] = '\0'; unsigned int length = (unsigned int)strlen(string); do { bool consumeNewLine = false; unsigned int copyLength = length; // Search for new line characters char *newLinePtr = strchr(stringPtr, '\n'); if (newLinePtr) { consumeNewLine = true; copyLength = (unsigned int)(newLinePtr - stringPtr); } if (copyLength > NUM_COLUMNS) { // Hard wrap by default copyLength = NUM_COLUMNS; // Loop for a soft wrap for (int i = NUM_COLUMNS - 1; i >= 0; i--) { if (stringPtr[i] == ' ') { copyLength = i + 1; break; } } } // Null terminate the sub string temporarily by swapping out a char char tempChar = stringPtr[copyLength]; stringPtr[copyLength] = 0; Common_DrawText(stringPtr); stringPtr[copyLength] = tempChar; copyLength += (consumeNewLine ? 1 : 0); length -= copyLength; stringPtr += copyLength; } while (length > 0); }
// Obtain a lock and add a string entry to our list void markerAddString(CallbackInfo* info, const char* format, ...) { char buf[256]; va_list args; va_start(args, format); Common_vsnprintf(buf, 256, format, args); va_end(args); buf[255] = '\0'; Common_Mutex_Enter(&info->mMutex); if (info->mEntries.size() >= MAX_ENTRIES) { info->mEntries.erase(info->mEntries.begin()); } info->mEntries.push_back(std::string(buf)); Common_Mutex_Leave(&info->mMutex); }
void Common_TTY(const char *format, ...) { char string[1024] = { 0 }; va_list args; va_start(args, format); Common_vsnprintf(string, 1023, format, args); va_end(args); if (Common_Private_Print) { (*Common_Private_Print)(string); } else { OutputDebugStringA(string); } }
void Common_Fatal(const char *format, ...) { char error[1024]; va_list args; va_start(args, format); Common_vsnprintf(error, 1024, format, args); va_end(args); error[1023] = '\0'; do { Common_Draw("A fatal error has occurred..."); Common_Draw(""); Common_Draw("%s", error); Common_Draw(""); Common_Draw("Press %s to quit", Common_BtnStr(BTN_QUIT)); Common_Update(); Common_Sleep(50); } while (!Common_BtnPress(BTN_QUIT)); Common_Exit(-1); }