1 /* 2 ** consolebuffer.h 3 ** 4 ** manages the text for the console 5 ** 6 **--------------------------------------------------------------------------- 7 ** Copyright 2014 Christoph Oelckers 8 ** All rights reserved. 9 ** 10 ** Redistribution and use in source and binary forms, with or without 11 ** modification, are permitted provided that the following conditions 12 ** are met: 13 ** 14 ** 1. Redistributions of source code must retain the above copyright 15 ** notice, this list of conditions and the following disclaimer. 16 ** 2. Redistributions in binary form must reproduce the above copyright 17 ** notice, this list of conditions and the following disclaimer in the 18 ** documentation and/or other materials provided with the distribution. 19 ** 3. The name of the author may not be used to endorse or promote products 20 ** derived from this software without specific prior written permission. 21 ** 22 ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31 ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 **--------------------------------------------------------------------------- 33 ** 34 */ 35 36 #include <limits.h> 37 #include <stdio.h> 38 #include "zstring.h" 39 #include "tarray.h" 40 #include "v_text.h" 41 42 enum EAddType 43 { 44 NEWLINE, 45 APPENDLINE, 46 REPLACELINE 47 }; 48 49 class FConsoleBuffer 50 { 51 TArray<FString> mConsoleText; 52 TArray<FBrokenLines *> mBrokenConsoleText; // This holds the structures returned by V_BreakLines and is used for memory management. 53 TArray<unsigned int> mBrokenStart; 54 TArray<FBrokenLines *> mBrokenLines; // This holds the single lines, indexed by mBrokenStart and is used for printing. 55 FILE * mLogFile; 56 EAddType mAddType; 57 int mTextLines; 58 bool mBufferWasCleared; 59 60 FFont *mLastFont; 61 int mLastDisplayWidth; 62 bool mLastLineNeedsUpdate; 63 64 void WriteLineToLog(FILE *LogFile, const char *outline); 65 void FreeBrokenText(unsigned int start = 0, unsigned int end = INT_MAX); 66 67 void Linefeed(FILE *Logfile); 68 69 public: 70 FConsoleBuffer(); 71 ~FConsoleBuffer(); 72 void AddText(int printlevel, const char *string, FILE *logfile = NULL); 73 void AddMidText(const char *string, bool bold, FILE *logfile); 74 void FormatText(FFont *formatfont, int displaywidth); 75 void ResizeBuffer(unsigned newsize); 76 void WriteContentToLog(FILE *logfile); Clear()77 void Clear() 78 { 79 mBufferWasCleared = true; 80 mConsoleText.Clear(); 81 } GetFormattedLineCount()82 int GetFormattedLineCount() { return mTextLines; } GetLines()83 FBrokenLines **GetLines() { return &mBrokenLines[0]; } 84 }; 85 86