Пример #1
0
static void _printf(LogEntry::Level level, LogEntry::Type type, const char* fmt, va_list argptr)
{
   if (!active)
	   return;
   Log::active = false;
   
   char buffer[8192];
   U32 offset = 0;
   
   if (useTimestamp)
   {
      static U32 startTime = Platform::getRealMilliseconds();
      U32 curTime = Platform::getRealMilliseconds() - startTime;
      offset += dSprintf(buffer + offset, sizeof(buffer) - offset, "[+%4d.%03d]", U32(curTime * 0.001), curTime % 1000);
   }
   dVsprintf(buffer + offset, sizeof(buffer) - offset, fmt, argptr);
   
   LogEntry entry;
   entry.mData = buffer;
   entry.mLevel = level;
   entry.mType = type;
   for(S32 i = 0; i < gConsumers.size(); i++)
      gConsumers[i](level, &entry);
   
   Log::active = true;
}
void Platform::outputDebugString( const char *string, ... )
{
   // Expand string.

   char buffer[ 2048 ];
   
   va_list args;
   va_start( args, string );
   
   dVsprintf( buffer, sizeof( buffer ), string, args );
   va_end( args );

   // Append a newline to buffer.  This is better than calling OutputDebugStringA
   // twice as in a multi-threaded environment, some other thread may output some
   // stuff in between the two calls.

   U32 length = strlen( buffer );
   if( length == ( sizeof( buffer ) - 1 ) )
      length --;

   buffer[ length ]     = '\n';
   buffer[ length + 1 ] = '\0';

   OutputDebugStringA( buffer );
}
Пример #3
0
//--------------------------------------
const char* avar(const char *message, ...)
{
   static char buffer[4096];
   va_list args;
   va_start(args, message);
   dVsprintf(buffer, sizeof(buffer), message, args);
   return( buffer );
}
Пример #4
0
//------------------------------------------------------------------------------
const char *evaluatef(const char* string, ...)
{
   char buffer[4096];
   va_list args;
   va_start(args, string);
   dVsprintf(buffer, sizeof(buffer), string, args);
   CodeBlock *newCodeBlock = new CodeBlock();
   return newCodeBlock->compileExec(NULL, buffer, false, 0);
}
Пример #5
0
void CDomiServer::showToConsole(const char* pFormat, ...){
	if (!pFormat || !*pFormat)
		return;

	char szStrint[2048] = { 0 };
	va_list	argptr;
	va_start(argptr, pFormat);
	dVsprintf(szStrint, sizeof(szStrint), pFormat, argptr);
	va_end(argptr);

	CConsoleColor clColor(_BIT32(CConsoleColor::color_green) | _BIT32(CConsoleColor::color_intensity));
	dPrintf("%s\n", szStrint);
}
Пример #6
0
void TypeValidator::consoleError(SimObject *object, const char *format, ...)
{
    char buffer[1024];
    va_list argptr;
    va_start(argptr, format);
    dVsprintf(buffer, sizeof(buffer), format, argptr);
    va_end(argptr);

    AbstractClassRep *rep = object->getClassRep();
    AbstractClassRep::Field &fld = rep->mFieldList[fieldIndex];
    const char *objectName = object->getName();
    if(!objectName)
        objectName = "unnamed";


    Con::warnf("%s - %s(%d) - invalid value for %s: %s",
               rep->getClassName(), objectName, object->getId(), fld.pFieldname, buffer);
}
Пример #7
0
//////////////////////////////////////////////////////////////////////////
// static
// windows 的messagebox
void CServerRoot::messageBoxOK(const char* pCaption,const char* pText,...)
{
	char szStrint[2048] = {0};
	if (pText)
	{
		va_list	argptr;
		va_start(argptr,pText);
		dVsprintf(szStrint,sizeof(szStrint),pText,argptr);
		va_end(argptr);
	}
	CConsoleColor clColor(_BIT32(CConsoleColor::color_blue)|_BIT32(CConsoleColor::color_intensity));
	dPrintf("message>%s:%s\n",pCaption ? pCaption : "",szStrint);

#ifdef WIN32
	::ShowCursor(true);
	::MessageBox(nullptr,szStrint,pCaption, MB_ICONINFORMATION | MB_SETFOREGROUND | MB_TASKMODAL | MB_OK);
#endif
}
//-----------------------------------------------------------------------------
void Platform::outputDebugString(const char *string, ...)
{
   char buffer[2048];

   va_list args;
   va_start( args, string );

   dVsprintf( buffer, sizeof(buffer), string, args );
   va_end( args );

   U32 length = dStrlen(buffer);
   if( length == (sizeof(buffer) - 1 ) )
      length--;

   buffer[length++]  = '\n';
   buffer[length]    = '\0';

   fwrite(buffer, sizeof(char), length, stderr);
}
Пример #9
0
void logprintf(const char *format, ...)
{
   char buffer[4096];
   size_t bufferStart = 0;
   if(LogType::current)
   {
      strcpy(buffer, LogType::current->typeName);
      bufferStart = strlen(buffer);

      buffer[bufferStart] = ':';
      buffer[bufferStart+1] = ' ';
      bufferStart += 2;
   }
   va_list s;
   va_start( s, format );
   dVsprintf(buffer + bufferStart, sizeof(buffer) - bufferStart, format, s);
   for(LogConsumer *walk = LogConsumer::getLinkedList(); walk; walk = walk->getNext())
      walk->logString(buffer);
   va_end(s);
   Platform::outputDebugString(buffer);
   Platform::outputDebugString("\n");
}
Пример #10
0
void CDomiServer::setServicesTitle(const char* pTitle, ...){
#ifdef WIN32 // 设置控制台标题
	if (!pTitle && m_szTitle[0])
		return;

	char szTitle[256] = { 0 };
	if (pTitle) {
		va_list	argptr;
		va_start(argptr, pTitle);
		dVsprintf(szTitle, sizeof(szTitle), pTitle, argptr);
		va_end(argptr);
	}

	if (!m_tmStartTime)
		m_tmStartTime = getTime();

	tm	tmTime;
	getLocalTime(&tmTime, &m_tmStartTime);
	dSprintf(m_szTitle, sizeof(m_szTitle), "%s StartTime: %02d-%02d %02d:%02d:%02d", szTitle, tmTime.tm_mon + 1, tmTime.tm_mday, tmTime.tm_hour, tmTime.tm_min, tmTime.tm_sec);
	::SetConsoleTitle(m_szTitle);
#endif
}
Пример #11
0
static void _printf(ConsoleLogEntry::Level level, ConsoleLogEntry::Type type, const char* fmt, va_list argptr)
{
   if (!active)
	   return;
   Con::active = false; 

   char buffer[8192];
   U32 offset = 0;
   if( gEvalState.traceOn && gEvalState.getStackDepth() > 0 )
   {
      offset = gEvalState.getStackDepth() * 3;
      for(U32 i = 0; i < offset; i++)
         buffer[i] = ' ';
   }

   if (useTimestamp)
   {
      static U32 startTime = Platform::getRealMilliseconds();
      U32 curTime = Platform::getRealMilliseconds() - startTime;
      offset += dSprintf(buffer + offset, sizeof(buffer) - offset, "[+%4d.%03d]", U32(curTime * 0.001), curTime % 1000);
   }
   dVsprintf(buffer + offset, sizeof(buffer) - offset, fmt, argptr);

   for(S32 i = 0; i < gConsumers.size(); i++)
      gConsumers[i](level, buffer);

   if(logBufferEnabled || consoleLogMode)
   {
      char *pos = buffer;
      while(*pos)
      {
         if(*pos == '\t')
            *pos = '^';
         pos++;
      }
      pos = buffer;

      for(;;)
      {
         char *eofPos = dStrchr(pos, '\n');
         if(eofPos)
            *eofPos = 0;

         log(pos);
         if(logBufferEnabled && !consoleLogLocked)
         {
            ConsoleLogEntry entry;
            entry.mLevel  = level;
            entry.mType   = type;
#ifndef TORQUE_SHIPPING // this is equivalent to a memory leak, turn it off in ship build            
            entry.mString = (const char *)consoleLogChunker.alloc(dStrlen(pos) + 1);
            dStrcpy(const_cast<char*>(entry.mString), pos);
            
            // This prevents infinite recursion if the console itself needs to
            // re-allocate memory to accommodate the new console log entry, and 
            // LOG_PAGE_ALLOCS is defined. It is kind of a dirty hack, but the
            // uses for LOG_PAGE_ALLOCS are limited, and it is not worth writing
            // a lot of special case code to support this situation. -patw
            const bool save = Con::active;
            Con::active = false;
            consoleLog.push_back(entry);
            Con::active = save;
#endif
         }
         if(!eofPos)
            break;
         pos = eofPos + 1;
      }
   }

   Con::active = true;
}