Some renaming and inlining of TerminalBuffer methods.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25892 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2008-06-09 21:09:02 +00:00
parent 8af7752eff
commit 5423f9c0ac
3 changed files with 133 additions and 141 deletions
+45 -42
View File
@@ -330,8 +330,8 @@ TermParse::EscParse()
int cs96 = 0; int cs96 = 0;
uchar curess = 0; uchar curess = 0;
uchar cbuf[4], dstbuf[4]; char cbuf[4], dstbuf[4];
uchar *ptr; char *ptr;
int now_coding = -1; int now_coding = -1;
@@ -393,9 +393,7 @@ TermParse::EscParse()
//debug_printf("TermParse: char: '%c' (%d), parse state: %d\n", c, c, parsestate[c]); //debug_printf("TermParse: char: '%c' (%d), parse state: %d\n", c, c, parsestate[c]);
switch (parsestate[c]) { switch (parsestate[c]) {
case CASE_PRINT: case CASE_PRINT:
cbuf[0] = c; fBuffer->InsertChar((char)c, attr);
cbuf[1] = '\0';
fBuffer->Insert(cbuf, attr);
break; break;
case CASE_PRINT_GR: case CASE_PRINT_GR:
@@ -414,14 +412,16 @@ TermParse::EscParse()
case CASE_SS3: /* JIS X 0212 */ case CASE_SS3: /* JIS X 0212 */
*ptr++ = curess; *ptr++ = curess;
*ptr++ = c; *ptr++ = c;
GetReaderBuf(*ptr++); GetReaderBuf(c);
*ptr++ = c;
*ptr = 0; *ptr = 0;
curess = 0; curess = 0;
break; break;
default: /* JIS X 0208 */ default: /* JIS X 0208 */
*ptr++ = c; *ptr++ = c;
GetReaderBuf(*ptr++); GetReaderBuf(c);
*ptr++ = c;
*ptr = 0; *ptr = 0;
break; break;
} }
@@ -431,21 +431,23 @@ TermParse::EscParse()
*ptr = 0; *ptr = 0;
} }
if (now_coding != B_JIS_CONVERSION) if (now_coding != B_JIS_CONVERSION) {
CodeConv::ConvertToInternal((char*)cbuf, -1, (char*)dstbuf, now_coding); CodeConv::ConvertToInternal(cbuf, -1, dstbuf, now_coding);
else } else {
CodeConv::ConvertToInternal((char*)cbuf, -1, (char*)dstbuf, B_EUC_CONVERSION); CodeConv::ConvertToInternal(cbuf, -1, dstbuf,
B_EUC_CONVERSION);
}
fBuffer->Insert(dstbuf, attr); fBuffer->InsertChar(dstbuf, 4, attr);
break; break;
case CASE_PRINT_CS96: case CASE_PRINT_CS96:
cbuf[0] = c | 0x80; cbuf[0] = c | 0x80;
GetReaderBuf(cbuf[1]); GetReaderBuf(c);
cbuf[1] |= 0x80; cbuf[1] = c | 0x80;
cbuf[2] = 0; cbuf[2] = 0;
CodeConv::ConvertToInternal((char*)cbuf, 2, (char*)dstbuf, B_EUC_CONVERSION); CodeConv::ConvertToInternal(cbuf, 2, dstbuf, B_EUC_CONVERSION);
fBuffer->Insert(dstbuf, attr); fBuffer->InsertChar(dstbuf, 4, attr);
break; break;
case CASE_LF: case CASE_LF:
@@ -457,29 +459,30 @@ TermParse::EscParse()
break; break;
case CASE_SJIS_KANA: case CASE_SJIS_KANA:
cbuf[0] = (uchar)c; cbuf[0] = c;
cbuf[1] = '\0'; cbuf[1] = '\0';
CodeConv::ConvertToInternal((char*)cbuf, 1, (char*)dstbuf, now_coding); CodeConv::ConvertToInternal(cbuf, 1, dstbuf, now_coding);
fBuffer->Insert(dstbuf, attr); fBuffer->InsertChar(dstbuf, 4, attr);
break; break;
case CASE_SJIS_INSTRING: case CASE_SJIS_INSTRING:
cbuf[0] = (uchar)c; cbuf[0] = c;
GetReaderBuf(cbuf[1]); GetReaderBuf(c);
cbuf[1] = c;
cbuf[2] = '\0'; cbuf[2] = '\0';
CodeConv::ConvertToInternal((char*)cbuf, 2, (char*)dstbuf, now_coding); CodeConv::ConvertToInternal(cbuf, 2, dstbuf, now_coding);
fBuffer->Insert(dstbuf, attr); fBuffer->InsertChar(dstbuf, 4, attr);
break; break;
case CASE_UTF8_2BYTE: case CASE_UTF8_2BYTE:
cbuf[0] = (uchar)c; cbuf[0] = c;
GetReaderBuf(c); GetReaderBuf(c);
if (groundtable[c] != CASE_UTF8_INSTRING) if (groundtable[c] != CASE_UTF8_INSTRING)
break; break;
cbuf[1] = (uchar)c; cbuf[1] = c;
cbuf[2] = '\0'; cbuf[2] = '\0';
fBuffer->Insert(cbuf, attr); fBuffer->InsertChar(cbuf, 2, attr);
break; break;
case CASE_UTF8_3BYTE: case CASE_UTF8_3BYTE:
@@ -494,7 +497,7 @@ TermParse::EscParse()
break; break;
cbuf[2] = c; cbuf[2] = c;
cbuf[3] = '\0'; cbuf[3] = '\0';
fBuffer->Insert(cbuf, attr); fBuffer->InsertChar(cbuf, 3, attr);
break; break;
case CASE_MBCS: case CASE_MBCS:
@@ -526,13 +529,13 @@ TermParse::EscParse()
break; break;
case CASE_BS: case CASE_BS:
fBuffer->MoveCurLeft(1); fBuffer->MoveCursorLeft(1);
break; break;
case CASE_TAB: case CASE_TAB:
tmp = fBuffer->GetCurX(); tmp = fBuffer->Cursor().x;
tmp %= 8; tmp %= 8;
fBuffer->MoveCurRight(8 - tmp); fBuffer->MoveCursorRight(8 - tmp);
break; break;
case CASE_ESC: case CASE_ESC:
@@ -600,7 +603,7 @@ TermParse::EscParse()
/* CUU */ /* CUU */
if ((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
fBuffer->MoveCurUp(row); fBuffer->MoveCursorUp(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -608,7 +611,7 @@ TermParse::EscParse()
/* CUD */ /* CUD */
if ((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
fBuffer->MoveCurDown(row); fBuffer->MoveCursorDown(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -616,7 +619,7 @@ TermParse::EscParse()
/* CUF */ /* CUF */
if ((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
fBuffer->MoveCurRight(row); fBuffer->MoveCursorRight(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -624,7 +627,7 @@ TermParse::EscParse()
/* CUB */ /* CUB */
if ((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
fBuffer->MoveCurLeft(row); fBuffer->MoveCursorLeft(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -635,7 +638,7 @@ TermParse::EscParse()
if (nparam < 2 || (col = param[1]) < 1) if (nparam < 2 || (col = param[1]) < 1)
col = 1; col = 1;
fBuffer->SetCurPos(col - 1, row - 1 ); fBuffer->SetCursor(col - 1, row - 1 );
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -651,7 +654,7 @@ TermParse::EscParse()
break; break;
case 2: case 2:
fBuffer->SetCurPos(0, 0); fBuffer->SetCursor(0, 0);
fBuffer->EraseBelow(); fBuffer->EraseBelow();
break; break;
} }
@@ -668,7 +671,7 @@ TermParse::EscParse()
/* IL */ /* IL */
if ((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
fBuffer->InsertNewLine(row); fBuffer->InsertLines(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -676,7 +679,7 @@ TermParse::EscParse()
/* DL */ /* DL */
if ((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
fBuffer->DeleteLine(row); fBuffer->DeleteLines(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -684,7 +687,7 @@ TermParse::EscParse()
/* DCH */ /* DCH */
if ((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
fBuffer->DeleteChar(row); fBuffer->DeleteChars(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -849,7 +852,7 @@ TermParse::EscParse()
case CASE_RI: case CASE_RI:
/* RI */ /* RI */
fBuffer->ScrollRegion(-1, -1, SCRDOWN, 1); fBuffer->ScrollBy(-1);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -948,7 +951,7 @@ TermParse::EscParse()
row = 1; row = 1;
// note beterm wants it 1-based unlike usual terminals // note beterm wants it 1-based unlike usual terminals
fBuffer->SetCurY(row - 1); fBuffer->SetCursorY(row - 1);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -958,7 +961,7 @@ TermParse::EscParse()
col = 1; col = 1;
// note beterm wants it 1-based unlike usual terminals // note beterm wants it 1-based unlike usual terminals
fBuffer->SetCurX(col - 1); fBuffer->SetCursorX(col - 1);
parsestate = groundtable; parsestate = groundtable;
break; break;
+9 -75
View File
@@ -680,15 +680,6 @@ TerminalBuffer::InsertChar(UTF8Char c, uint32 attributes)
} }
void
TerminalBuffer::Insert(uchar* string, ushort attr)
{
// TODO: Remove! Use InsertChar instead!
UTF8Char character((const char*)string, 4);
InsertChar(character, attr);
}
void void
TerminalBuffer::InsertCR() TerminalBuffer::InsertCR()
{ {
@@ -713,7 +704,7 @@ TerminalBuffer::InsertLF()
void void
TerminalBuffer::InsertNewLine(int numLines) TerminalBuffer::InsertLines(int32 numLines)
{ {
if (fCursor.y >= fScrollTop && fCursor.y < fScrollBottom) if (fCursor.y >= fScrollTop && fCursor.y < fScrollBottom)
_Scroll(fCursor.y, fScrollBottom, -numLines); _Scroll(fCursor.y, fScrollBottom, -numLines);
@@ -728,7 +719,7 @@ TerminalBuffer::SetInsertMode(int flag)
void void
TerminalBuffer::InsertSpace(int num) TerminalBuffer::InsertSpace(int32 num)
{ {
// TODO: Deal with full-width chars! // TODO: Deal with full-width chars!
if (fCursor.x + num > fWidth) if (fCursor.x + num > fWidth)
@@ -755,7 +746,7 @@ TerminalBuffer::EraseBelow()
void void
TerminalBuffer::DeleteChar(int numChars) TerminalBuffer::DeleteChars(int32 numChars)
{ {
Line* line = _LineAt(fCursor.y); Line* line = _LineAt(fCursor.y);
if (fCursor.x < line->length) { if (fCursor.x < line->length) {
@@ -786,7 +777,7 @@ TerminalBuffer::DeleteColumns()
void void
TerminalBuffer::DeleteLine(int numLines) TerminalBuffer::DeleteLines(int32 numLines)
{ {
if (fCursor.y >= fScrollTop && fCursor.y <= fScrollBottom) if (fCursor.y >= fScrollTop && fCursor.y <= fScrollBottom)
_Scroll(fCursor.y, fScrollBottom, numLines); _Scroll(fCursor.y, fScrollBottom, numLines);
@@ -794,9 +785,9 @@ TerminalBuffer::DeleteLine(int numLines)
void void
TerminalBuffer::SetCurPos(int x, int y) TerminalBuffer::SetCursor(int32 x, int32 y)
{ {
//debug_printf("TerminalBuffer::SetCurPos(%d, %d)\n", x, y); //debug_printf("TerminalBuffer::SetCursor(%d, %d)\n", x, y);
x = restrict_value(x, 0, fWidth - 1); x = restrict_value(x, 0, fWidth - 1);
y = restrict_value(y, fScrollTop, fScrollBottom); y = restrict_value(y, fScrollTop, fScrollBottom);
if (x != fCursor.x || y != fCursor.y) { if (x != fCursor.x || y != fCursor.y) {
@@ -807,27 +798,6 @@ TerminalBuffer::SetCurPos(int x, int y)
} }
void
TerminalBuffer::SetCurX(int x)
{
SetCurPos(x, fCursor.y);
}
void
TerminalBuffer::SetCurY(int y)
{
SetCurPos(fCursor.x, y);
}
int
TerminalBuffer::GetCurX()
{
return fCursor.x;
}
void void
TerminalBuffer::SaveCursor() TerminalBuffer::SaveCursor()
{ {
@@ -838,54 +808,18 @@ TerminalBuffer::SaveCursor()
void void
TerminalBuffer::RestoreCursor() TerminalBuffer::RestoreCursor()
{ {
SetCurPos(fSavedCursor.x, fSavedCursor.y); SetCursor(fSavedCursor.x, fSavedCursor.y);
} }
void void
TerminalBuffer::MoveCurRight(int num) TerminalBuffer::SetScrollRegion(int32 top, int32 bottom)
{
SetCurPos(fCursor.x + num, fCursor.y);
}
void
TerminalBuffer::MoveCurLeft(int num)
{
SetCurPos(fCursor.x - num, fCursor.y);
}
void
TerminalBuffer::MoveCurUp(int num)
{
SetCurPos(fCursor.x, fCursor.y - num);
}
void
TerminalBuffer::MoveCurDown(int num)
{
SetCurPos(fCursor.x, fCursor.y + num);
}
void
TerminalBuffer::ScrollRegion(int top, int bot, int dir, int numLines)
{
// TODO: Is only invoked with SCRDOWN and numLines = 1
_Scroll(fScrollTop, fScrollBottom, -1);
}
void
TerminalBuffer::SetScrollRegion(int top, int bottom)
{ {
fScrollTop = restrict_value(top, 0, fHeight - 1); fScrollTop = restrict_value(top, 0, fHeight - 1);
fScrollBottom = restrict_value(bottom, fScrollTop, fHeight - 1); fScrollBottom = restrict_value(bottom, fScrollTop, fHeight - 1);
// also sets the cursor position // also sets the cursor position
SetCurPos(0, 0); SetCursor(0, 0);
} }
+79 -24
View File
@@ -54,7 +54,6 @@ public:
int32 Width() const { return fWidth; } int32 Width() const { return fWidth; }
int32 Height() const { return fHeight; } int32 Height() const { return fHeight; }
TermPos Cursor() const { return fCursor; }
int32 HistorySize() const { return fHistorySize; } int32 HistorySize() const { return fHistorySize; }
TerminalBufferDirtyInfo& DirtyInfo() { return fDirtyInfo; } TerminalBufferDirtyInfo& DirtyInfo() { return fDirtyInfo; }
@@ -83,42 +82,41 @@ public:
bool matchWord, TermPos& matchStart, bool matchWord, TermPos& matchStart,
TermPos& matchEnd) const; TermPos& matchEnd) const;
// output character // insert chars/lines
void InsertChar(UTF8Char c, uint32 attributes); void InsertChar(UTF8Char c, uint32 attributes);
void Insert(uchar* string, ushort attr); inline void InsertChar(const char* c, int32 length,
uint32 attributes);
void InsertCR(); void InsertCR();
void InsertLF(); void InsertLF();
void InsertNewLine(int numLines);
void SetInsertMode(int flag); void SetInsertMode(int flag);
void InsertSpace(int num); void InsertSpace(int32 num);
void InsertLines(int32 numLines);
// delete character // delete chars/lines
void EraseBelow(); void EraseBelow();
void DeleteChar(int num); void DeleteChars(int32 numChars);
void DeleteColumns(); void DeleteColumns();
void DeleteLine(int num); void DeleteLines(int32 numLines);
// get and set cursor position // get and set cursor position
// TODO: Inline most of these! void SetCursor(int32 x, int32 y);
void SetCurPos(int x, int y); inline void SetCursorX(int32 x);
void SetCurX(int x); inline void SetCursorY(int32 y);
void SetCurY(int y); inline TermPos Cursor() const { return fCursor; }
int GetCurX();
void SaveCursor(); void SaveCursor();
void RestoreCursor(); void RestoreCursor();
// move cursor // move cursor
void MoveCurRight(int num); inline void MoveCursorRight(int32 num);
void MoveCurLeft(int num); inline void MoveCursorLeft(int32 num);
void MoveCurUp(int num); inline void MoveCursorUp(int32 num);
void MoveCurDown(int num); inline void MoveCursorDown(int32 num);
// scroll region // scroll region
void ScrollRegion(int top, int bot, int dir, inline void ScrollBy(int32 numLines);
int num); void SetScrollRegion(int32 top, int32 bot);
void SetScrollRegion(int top, int bot);
// other // other
void SetTitle(const char* title); void SetTitle(const char* title);
void NotifyQuit(int32 reason); void NotifyQuit(int32 reason);
@@ -190,4 +188,61 @@ private:
TerminalBufferDirtyInfo fDirtyInfo; TerminalBufferDirtyInfo fDirtyInfo;
}; };
void
TerminalBuffer::InsertChar(const char* c, int32 length, uint32 attributes)
{
return InsertChar(UTF8Char(c, length), attributes);
}
void
TerminalBuffer::SetCursorX(int32 x)
{
SetCursor(x, fCursor.y);
}
void
TerminalBuffer::SetCursorY(int32 y)
{
SetCursor(fCursor.x, y);
}
void
TerminalBuffer::MoveCursorRight(int32 num)
{
SetCursor(fCursor.x + num, fCursor.y);
}
void
TerminalBuffer::MoveCursorLeft(int32 num)
{
SetCursor(fCursor.x - num, fCursor.y);
}
void
TerminalBuffer::MoveCursorUp(int32 num)
{
SetCursor(fCursor.x, fCursor.y - num);
}
void
TerminalBuffer::MoveCursorDown(int32 num)
{
SetCursor(fCursor.x, fCursor.y + num);
}
void
TerminalBuffer::ScrollBy(int32 numLines)
{
_Scroll(fScrollTop, fScrollBottom, numLines);
}
#endif // TERMINAL_BUFFER_H #endif // TERMINAL_BUFFER_H