BOOL C4Scenario::Decompile(char **ppOutput, int32_t *ipSize, bool fSaveSection) { try { // Decompile StdStrBuf Buf = DecompileToBuf<StdCompilerINIWrite>(mkParAdapt(*this, fSaveSection)); // Return *ppOutput = Buf.GrabPointer(); *ipSize = Buf.getSize(); } catch(StdCompiler::Exception *) { return FALSE; } return TRUE; }
bool C4ObjectInfoCore::Decompile(char **ppOutput, size_t *ipSize) { StdStrBuf Buf; if (!DecompileToBuf_Log<StdCompilerINIWrite>( mkNamingAdapt(*this, "ObjectInfo"), &Buf, "ObjectInfo")) { if (ppOutput) *ppOutput = NULL; if (ipSize) *ipSize = 0; return false; } if (ppOutput) *ppOutput = Buf.GrabPointer(); if (ipSize) *ipSize = Buf.getSize(); return true; }
bool GetLogSection(size_t iStart, size_t iLength, StdStrBuf &rsOut) { if (!iLength) { rsOut.Clear(); return true; } // read section from log file StdStrBuf BufOrig; if (!BufOrig.LoadFromFile(sLogFileName.getData())) return false; char *szBuf = BufOrig.getMData(); size_t iSize = BufOrig.getSize(); // size excluding terminator // reduce to desired buffer section if (iStart > iSize) iStart = iSize; if (iStart + iLength > iSize) iLength = iSize - iStart; szBuf += iStart; szBuf[iLength] = '\0'; // strip timestamps; convert linebreaks to Clonk-linebreaks '|' char *szPosWrite=szBuf; const char *szPosRead=szBuf; while (*szPosRead) { // skip timestamp if (*szPosRead == '[') while (*szPosRead && *szPosRead != ']') { --iSize; ++szPosRead; } // skip whitespace behind timestamp if (!*szPosRead) break; szPosRead++; // copy data until linebreak size_t iLen=0; while (*szPosRead && *szPosRead != 0x0d && *szPosRead != 0x0a) { ++szPosRead; ++iLen; } if (iLen && szPosRead-iLen != szPosWrite) memmove(szPosWrite, szPosRead-iLen, iLen); szPosWrite += iLen; // skip additional linebreaks while (*szPosRead == 0x0d || *szPosRead == 0x0a) ++szPosRead; // write a Clonk-linebreak if (*szPosRead) *szPosWrite++ = '|'; } // done; create string buffer from data rsOut.Copy(szBuf, szPosWrite - szBuf); // done, success return true; }
bool C4AulDebug::SendLine(const char *szType, const char *szData) { StdStrBuf Line = szData ? FormatString("%s %s", szType, szData) : StdStrBuf(szType); return Send(C4NetIOPacket(Line.getData(), Line.getSize(), false, PeerAddr)); }