* Fixed broken CodeConv semantics (missing length parameter).

* No longer writes to the message data from clipboard.
* some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15153 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2005-11-25 17:57:52 +00:00
parent 498cd44c3a
commit 8eb8269db6
6 changed files with 1339 additions and 1496 deletions
+64 -114
View File
@@ -1,34 +1,11 @@
/*
* Copyright (c) 2001-2005, Haiku, Inc.
* Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files or portions
* thereof (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject
* to the following conditions:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice
* in the binary, as well as this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with
* the distribution.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* Distributed under the terms of the MIT license.
*/
/************************************************************************
/*********************************************************************
MuTerminal Code Conversion class (MC3).
version 1.1 Internal coding system is UTF8.
@@ -52,89 +29,86 @@ UTF8
extern char utf8_width_table[]; /* define UTF8WidthTbl.c */
//////////////////////////////////////////////////////////////////////
// Constructor
//////////////////////////////////////////////////////////////////////
CodeConv::CodeConv (void)
{
}
//////////////////////////////////////////////////////////////////////
// Destructor
//////////////////////////////////////////////////////////////////////
CodeConv::~CodeConv (void)
CodeConv::CodeConv()
{
}
//////////////////////////////////////////////////////////////////////
// UTF8GetFontWidth (const uchar *string)
// get font width in coding.
//////////////////////////////////////////////////////////////////////
int
CodeConv::UTF8GetFontWidth (const uchar *string)
CodeConv::~CodeConv()
{
}
//! get font width in coding.
int32
CodeConv::UTF8GetFontWidth(const char *string)
{
uchar width, point;
ushort unicode, offset;
offset = unicode = UTF8toUnicode (string);
width = utf8_width_table [unicode >> 3];
offset = unicode = UTF8toUnicode(string);
width = utf8_width_table[unicode >> 3];
offset = offset & 0x07;
point = 0x80 >> offset;
return ((width & point) > 0 ) ? 2 : 1;
return (width & point) > 0 ? 2 : 1;
}
//////////////////////////////////////////////////////////////////////
// ConvertFromInternal (const uchar *src, uchar *dst, int coding)
// Convert internal coding from src coding.
//////////////////////////////////////////////////////////////////////
int
CodeConv::ConvertFromInternal (const uchar *src, uchar *dst, int coding)
//! Convert internal coding from src coding.
int32
CodeConv::ConvertFromInternal(const char *src, int32 srclen, char *dst, int coding)
{
const uchar *src_p = src;
long srclen = 0, dstlen = 0;
int32 dstlen = 0;
long state = 0;
int theCoding;
if (coding == M_UTF8) return 0;
if (srclen == -1)
srclen = strlen(src);
if (coding == M_UTF8) {
memcpy(dst, src, srclen);
dst[srclen] = '\0';
return srclen;
}
theCoding = coding_translation_table[coding];
while (*src_p++) srclen++;
dstlen = srclen * 256;
convert_from_utf8 (theCoding,
(char *)src, &srclen,
(char *)dst, &dstlen,
&state, '?');
convert_from_utf8(theCoding, (char *)src, &srclen,
(char *)dst, &dstlen, &state, '?');
if (coding == M_ISO_2022_JP && state != 0) {
const char *end_of_jis = "(B";
strncpy ((char *)dst+dstlen, end_of_jis, 3);
strncpy((char *)dst + dstlen, end_of_jis, 3);
dstlen += 3;
}
dst[dstlen] = '\0';
return dstlen;
}
//////////////////////////////////////////////////////////////////////
// ConvertToInternal (const uchar *src, uchar *dst, int coding)
// Convert internal coding to src coding.
//////////////////////////////////////////////////////////////////////
void
CodeConv::ConvertToInternal (const uchar *src, uchar *dst, int coding)
//! Convert internal coding to src coding.
int32
CodeConv::ConvertToInternal(const char *src, int32 srclen, char *dst, int coding)
{
const uchar *src_p = src;
long srclen = 0, dstlen = 4;
int32 dstlen = 4;
long state = 0;
int theCoding;
if (srclen == -1)
srclen = strlen(src);
if (coding == M_UTF8) return;
if (coding == M_UTF8) {
memcpy(dst, src, srclen);
dst[srclen] = '\0';
return srclen;
}
#if 0
#ifndef __INTEL__
@@ -149,34 +123,21 @@ CodeConv::ConvertToInternal (const uchar *src, uchar *dst, int coding)
dst[dstlen] = '\0';
return;
}
#endif
#endif
theCoding = coding_translation_table[coding];
while (*src_p++) srclen++;
convert_to_utf8 (theCoding,
(char *)src, &srclen,
(char *)dst, &dstlen,
&state, '?');
convert_to_utf8(theCoding, (char *)src, &srclen,
(char *)dst, &dstlen, &state, '?');
dst[dstlen] = '\0';
return;
return dstlen;
}
/*
* Private member functions.
*/
//////////////////////////////////////////////////////////////////////
// UTF8toUnicode (uchar *utf8)
//
//////////////////////////////////////////////////////////////////////
unsigned short
CodeConv::UTF8toUnicode (const uchar *utf8)
CodeConv::UTF8toUnicode(const char *utf8)
{
uchar tmp;
unsigned short unicode = 0x0000;
@@ -184,30 +145,25 @@ CodeConv::UTF8toUnicode (const uchar *utf8)
tmp = *utf8 & 0xe0;
if (tmp < 0x80) {
unicode = (unsigned short) *utf8;
}
else if (tmp < 0xe0) {
unicode = (unsigned short) *utf8++ & 0x1f;
unicode = (unsigned short)*utf8;
} else if (tmp < 0xe0) {
unicode = (unsigned short)*utf8++ & 0x1f;
unicode = unicode << 6;
unicode = unicode | ((unsigned short) *utf8 & 0x3f);
}
else if (tmp < 0xf0) {
unicode = (unsigned short) *utf8++ & 0x0f;
unicode = unicode | ((unsigned short)*utf8 & 0x3f);
} else if (tmp < 0xf0) {
unicode = (unsigned short)*utf8++ & 0x0f;
unicode = unicode << 6;
unicode = unicode | ((unsigned short) *utf8++ & 0x3f);
unicode = unicode | ((unsigned short)*utf8++ & 0x3f);
unicode = unicode << 6;
unicode = unicode | ((unsigned short) *utf8 & 0x3f);
unicode = unicode | ((unsigned short)*utf8 & 0x3f);
}
return unicode;
}
//////////////////////////////////////////////////////////////////////
// euc_to_sjis
//
//////////////////////////////////////////////////////////////////////
void
CodeConv::euc_to_sjis (uchar *buf)
CodeConv::euc_to_sjis(uchar *buf)
{
int gl, gr;
int p;
@@ -223,22 +179,16 @@ CodeConv::euc_to_sjis (uchar *buf)
c1 = p / 188;
c2 = p % 188;
if (c1 >= 31) {
if (c1 >= 31)
c1 = c1 - 31 + 0xE0;
}
else {
else
c1 += 0x81;
}
if (c2 >= 63) {
if (c2 >= 63)
c2 = c2 - 63 + 0x80;
}
else {
else
c2 += 0x40;
}
*buf++ = c1;
*buf = c2;
return;
}
+13 -59
View File
@@ -1,83 +1,37 @@
/*
* Copyright (c) 2001-2005, Haiku, Inc.
* Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files or portions
* thereof (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject
* to the following conditions:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice
* in the binary, as well as this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with
* the distribution.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* Distributed under the terms of the MIT license.
*/
#ifndef CODECONV_H
#define CODECONV_H
#include <SupportDefs.h>
#include "Coding.h"
#define BEGINS_CHAR(byte) ((byte & 0xc0) >= 0x80)
/*
* Coding system define.
*/
class CodeConv
{
/*
* Constructor and Destuructor.
*/
public:
CodeConv (void);
~CodeConv (void);
class CodeConv {
public:
CodeConv();
~CodeConv();
/*
* Public member functions.
*/
int UTF8GetFontWidth (const uchar *string);
int32 UTF8GetFontWidth(const char *string);
/* internal(UTF8) -> coding */
int ConvertFromInternal (const uchar *src, uchar *dst, int coding);
int32 ConvertFromInternal(const char *src, int32 bytes, char *dst, int coding);
/* coding -> internal(UTF8) */
void ConvertToInternal (const uchar *src, uchar *dst, int coding);
int32 ConvertToInternal(const char *src, int32 bytes, char *dst, int coding);
/*
* PRIVATE MEMBER.
*/
private:
void euc_to_sjis(uchar *buf);
private:
/*
* Private member functions.
*/
void euc_to_sjis (uchar *buf);
unsigned short UTF8toUnicode (const uchar *utf8);
/*
* DATA Member.
*/
unsigned short UTF8toUnicode(const char *utf8);
int fNowCoding;
};
#endif /* CODECONV_H */
+20 -12
View File
@@ -3,34 +3,42 @@
* Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
* Distributed under the terms of the MIT license.
*
* Authors:
* Kian Duffy <[email protected]>
*/
/*! This view is a shell for the TermView and makes sure it's always
resized in whole character sizes.
It doesn't serve any other purpose (and could possibly removed
with a tiny bit smarter programming).
*/
#include "TermBaseView.h"
#include "TermView.h"
TermBaseView::TermBaseView (BRect frame, TermView *inTermView)
:BView(frame, "baseview", B_FOLLOW_ALL_SIDES,
TermBaseView::TermBaseView(BRect frame, TermView *inTermView)
: BView(frame, "baseview", B_FOLLOW_ALL_SIDES,
B_WILL_DRAW | B_FRAME_EVENTS)
{
fTermView = inTermView;
}
TermBaseView::~TermBaseView ()
TermBaseView::~TermBaseView()
{
}
void
TermBaseView::FrameResized (float width, float height)
TermBaseView::FrameResized(float width, float height)
{
int font_width, font_height;
int fontWidth, fontHeight;
int cols, rows;
fTermView->GetFontInfo (&font_width, &font_height);
fTermView->GetFontInfo(&fontWidth, &fontHeight);
cols = (int)(width - VIEW_OFFSET * 2) / font_width;
rows = (int)(height - VIEW_OFFSET * 2)/ font_height;
cols = (int)(width - VIEW_OFFSET * 2) / fontWidth;
rows = (int)(height - VIEW_OFFSET * 2) / fontHeight;
fTermView->ResizeTo (cols * font_width - 1, rows * font_height - 1);
fTermView->ResizeTo(cols * fontWidth - 1, rows * fontHeight - 1);
}
+14 -43
View File
@@ -1,58 +1,29 @@
/*
* Copyright (c) 2001-2005, Haiku, Inc.
* Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files or portions
* thereof (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject
* to the following conditions:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice
* in the binary, as well as this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with
* the distribution.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* Distributed under the terms of the MIT license.
*/
#ifndef TERM_BASE_VIEW_H
#define TERM_BASE_VIEW_H
#ifndef TERMBASEVIEW_H_INCLUDED
#define TERMBASEVIEW_H_INCLUDED
#include <View.h>
class TermView;
class TermBaseView : public BView
{
public:
//
// Constructor and Desctructor
//
TermBaseView (BRect frame, TermView *);
~TermBaseView ();
private:
//
// Hook Functions.
//
void SetBaseColor (rgb_color);
class TermBaseView : public BView {
public:
TermBaseView(BRect frame, TermView *);
~TermBaseView();
void FrameResized (float, float);
private:
void SetBaseColor(rgb_color);
virtual void FrameResized(float newWidth, float newHeight);
TermView *fTermView;
};
#endif /* TERMBASEVIEW_H_INCLUDED */
#endif /* TERM_BASE_VIEW_H */
+83 -110
View File
@@ -1,33 +1,11 @@
/*
* Copyright (c) 2001-2005, Haiku, Inc.
* Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files or portions
* thereof (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject
* to the following conditions:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice
* in the binary, as well as this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with
* the distribution.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* Distributed under the terms of the MIT license.
*/
#include <errno.h>
#include <stdio.h>
#include <signal.h>
@@ -52,7 +30,7 @@ extern int pfd; // defined Muterminal.cpp
//
/////////////////////////////////////////////////////////////////////////////
int32
TermParse::PtyReader (void *data)
TermParse::PtyReader(void *data)
{
int nread;
uint read_p = 0;
@@ -253,15 +231,16 @@ int gNowCoding = M_UTF8;
#define DEFAULT -1
#define NPARAM 10 // Max parameters
int32
TermParse::EscParse (void *data)
TermParse::EscParse(void *data)
{
int tmp;
int top, bot;
int cs96;
uchar curess = 0;
TermParse *theObj = (TermParse *) data;
TermParse *theObj = (TermParse *)data;
TermView *viewObj = theObj->fViewObj;
CodeConv *convObj = theObj->fConvObj;
@@ -286,7 +265,7 @@ TermParse::EscParse (void *data)
parsestate = groundtable;
while (theObj->fQuitting) {
c = theObj->GetReaderBuf ();
c = theObj->GetReaderBuf();
if (now_coding != gNowCoding) {
/*
@@ -322,20 +301,18 @@ TermParse::EscParse (void *data)
}
switch (parsestate[c]) {
case CASE_PRINT:
cbuf[0] = (uchar) c;
cbuf[0] = c;
cbuf[1] = '\0';
width = HALF_WIDTH;
viewObj->PutChar (cbuf, attr, width);
viewObj->PutChar(cbuf, attr, width);
break;
case CASE_PRINT_GR:
/* case iso8859 gr character, or euc */
ptr = cbuf;
if (now_coding == M_EUC_JP || now_coding == M_EUC_KR ||
now_coding == M_ISO_2022_JP) {
if (now_coding == M_EUC_JP || now_coding == M_EUC_KR
|| now_coding == M_ISO_2022_JP) {
switch (parsestate[curess]) {
case CASE_SS2: /* JIS X 0201 */
*ptr++ = curess;
@@ -361,19 +338,19 @@ TermParse::EscParse (void *data)
width = 2;
break;
}
} else { /* ISO-8859-1...10 and MacRoman */
} else {
/* ISO-8859-1...10 and MacRoman */
*ptr++ = c;
*ptr = 0;
width = 1;
}
if (now_coding != M_ISO_2022_JP) {
convObj->ConvertToInternal (cbuf, dstbuf, now_coding);
}
else {
convObj->ConvertToInternal (cbuf, dstbuf, M_EUC_JP);
}
viewObj->PutChar (dstbuf, attr, width);
if (now_coding != M_ISO_2022_JP)
convObj->ConvertToInternal((char*)cbuf, -1, (char*)dstbuf, now_coding);
else
convObj->ConvertToInternal((char*)cbuf, -1, (char*)dstbuf, M_EUC_JP);
viewObj->PutChar(dstbuf, attr, width);
break;
case CASE_PRINT_CS96:
@@ -381,60 +358,59 @@ TermParse::EscParse (void *data)
cbuf[1] = theObj->GetReaderBuf() | 0x80;
cbuf[2] = 0;
width = 2;
convObj->ConvertToInternal (cbuf, dstbuf, M_EUC_JP);
viewObj->PutChar (dstbuf, attr, width);
convObj->ConvertToInternal((char*)cbuf, 2, (char*)dstbuf, M_EUC_JP);
viewObj->PutChar(dstbuf, attr, width);
break;
case CASE_LF:
viewObj->PutLF ();
viewObj->PutLF();
break;
case CASE_CR:
viewObj->PutCR ();
viewObj->PutCR();
break;
case CASE_SJIS_KANA:
cbuf[0] = (uchar) c;
cbuf[0] = (uchar)c;
cbuf[1] = '\0';
convObj->ConvertToInternal (cbuf, dstbuf, now_coding);
convObj->ConvertToInternal((char*)cbuf, 1, (char*)dstbuf, now_coding);
width = 1;
viewObj->PutChar (dstbuf, attr, width);
viewObj->PutChar(dstbuf, attr, width);
break;
case CASE_SJIS_INSTRING:
cbuf[0] = (uchar) c;
cbuf[1] = theObj->GetReaderBuf ();
cbuf[0] = (uchar)c;
cbuf[1] = theObj->GetReaderBuf();
cbuf[2] = '\0';
convObj->ConvertToInternal (cbuf, dstbuf, now_coding);
convObj->ConvertToInternal((char*)cbuf, 2, (char*)dstbuf, now_coding);
width = 2;
viewObj->PutChar (dstbuf, attr, width);
viewObj->PutChar(dstbuf, attr, width);
break;
case CASE_UTF8_2BYTE:
cbuf[0] = (uchar) c;
c =theObj->GetReaderBuf ();
cbuf[0] = (uchar)c;
c = theObj->GetReaderBuf();
if (groundtable[c] != CASE_UTF8_INSTRING)
break;
cbuf[1] = (uchar) c;
cbuf[1] = (uchar)c;
cbuf[2] = '\0';
width = convObj->UTF8GetFontWidth (cbuf);
viewObj->PutChar (cbuf, attr, width);
width = convObj->UTF8GetFontWidth((char*)cbuf);
viewObj->PutChar(cbuf, attr, width);
break;
case CASE_UTF8_3BYTE:
cbuf[0] = (uchar) c;
c =theObj->GetReaderBuf ();
cbuf[0] = c;
c = theObj->GetReaderBuf();
if (groundtable[c] != CASE_UTF8_INSTRING)
break;
cbuf[1] = (uchar) c;
cbuf[1] = c;
c =theObj->GetReaderBuf ();
c = theObj->GetReaderBuf();
if (groundtable[c] != CASE_UTF8_INSTRING)
break;
cbuf[2] = (uchar) c;
cbuf[2] = c;
cbuf[3] = '\0';
width = convObj->UTF8GetFontWidth (cbuf);
width = convObj->UTF8GetFontWidth((char*)cbuf);
viewObj->PutChar (cbuf, attr, width);
break;
@@ -465,13 +441,13 @@ TermParse::EscParse (void *data)
break;
case CASE_BS:
viewObj->MoveCurLeft (1);
viewObj->MoveCurLeft(1);
break;
case CASE_TAB:
tmp = viewObj->GetCurX ();
tmp = viewObj->GetCurX();
tmp %= 8;
viewObj->MoveCurRight (8-tmp);
viewObj->MoveCurRight(8 - tmp);
break;
case CASE_ESC:
@@ -511,7 +487,7 @@ TermParse::EscParse (void *data)
case CASE_ESC_DIGIT: // ESC [ number
/* digit in csi or dec mode */
if((row = param[nparam - 1]) == DEFAULT)
if ((row = param[nparam - 1]) == DEFAULT)
row = 0;
param[nparam - 1] = 10 * row + (c - '0');
break;
@@ -529,53 +505,52 @@ TermParse::EscParse (void *data)
case CASE_ICH: // ESC [@ insert charactor
/* ICH */
if((row = param[0]) < 1)
if ((row = param[0]) < 1)
row = 1;
viewObj->InsertSpace (row);
viewObj->InsertSpace(row);
parsestate = groundtable;
break;
case CASE_CUU: // ESC [A cursor up, up arrow key.
/* CUU */
if((row = param[0]) < 1)
if ((row = param[0]) < 1)
row = 1;
viewObj->MoveCurUp (row);
viewObj->MoveCurUp(row);
parsestate = groundtable;
break;
case CASE_CUD: // ESC [B cursor down, down arrow key.
/* CUD */
if((row = param[0]) < 1)
if ((row = param[0]) < 1)
row = 1;
viewObj->MoveCurDown (row);
viewObj->MoveCurDown(row);
parsestate = groundtable;
break;
case CASE_CUF: // ESC [C cursor forword
/* CUF */
if((row = param[0]) < 1)
if ((row = param[0]) < 1)
row = 1;
viewObj->MoveCurRight (row);
viewObj->MoveCurRight(row);
parsestate = groundtable;
break;
case CASE_CUB: // ESC [D cursor backword
/* CUB */
if((row = param[0]) < 1)
if ((row = param[0]) < 1)
row = 1;
viewObj->MoveCurLeft (row);
viewObj->MoveCurLeft(row);
parsestate = groundtable;
break;
case CASE_CUP: // ESC [...H move cursor
/* CUP | HVP */
if((row = param[0]) < 1)
if ((row = param[0]) < 1)
row = 1;
if(nparam < 2 || (col = param[1]) < 1)
if (nparam < 2 || (col = param[1]) < 1)
col = 1;
viewObj->SetCurPos (col - 1, row - 1 );
viewObj->SetCurPos(col - 1, row - 1 );
parsestate = groundtable;
break;
@@ -584,15 +559,15 @@ TermParse::EscParse (void *data)
switch (param[0]) {
case DEFAULT:
case 0:
viewObj->EraseBelow ();
viewObj->EraseBelow();
break;
case 1:
break;
case 2:
viewObj->SetCurPos (0, 0);
viewObj->EraseBelow ();
viewObj->SetCurPos(0, 0);
viewObj->EraseBelow();
break;
}
parsestate = groundtable;
@@ -600,29 +575,29 @@ TermParse::EscParse (void *data)
case CASE_EL: // delete line
/* EL */
viewObj->DeleteColumns ();
viewObj->DeleteColumns();
parsestate = groundtable;
break;
case CASE_IL:
/* IL */
if((row = param[0]) < 1)
if ((row = param[0]) < 1)
row = 1;
viewObj->PutNL (row);
viewObj->PutNL(row);
parsestate = groundtable;
break;
case CASE_DL:
/* DL */
if((row = param[0]) < 1)
if ((row = param[0]) < 1)
row = 1;
viewObj->DeleteLine (row);
viewObj->DeleteLine(row);
parsestate = groundtable;
break;
case CASE_DCH:
/* DCH */
if((row = param[0]) < 1)
if ((row = param[0]) < 1)
row = 1;
viewObj->DeleteChar(row);
parsestate = groundtable;
@@ -630,19 +605,19 @@ TermParse::EscParse (void *data)
case CASE_SET:
/* SET */
viewObj->SetInsertMode (MODE_INSERT);
viewObj->SetInsertMode(MODE_INSERT);
parsestate = groundtable;
break;
case CASE_RST:
/* RST */
viewObj->SetInsertMode (MODE_OVER);
viewObj->SetInsertMode(MODE_OVER);
parsestate = groundtable;
break;
case CASE_SGR:
/* SGR */
for (row=0; row<nparam; ++row) {
for (row = 0; row < nparam; ++row) {
switch (param[row]) {
case DEFAULT:
case 0: /* Reset attribute */
@@ -703,29 +678,27 @@ TermParse::EscParse (void *data)
case CASE_CPR:
// Q & D hack by Y.Hayakawa ([email protected])
// 21-JUL-99
viewObj->DeviceStatusReport(param[0]) ;
viewObj->DeviceStatusReport(param[0]);
parsestate = groundtable;
break;
case CASE_DECSTBM:
/* DECSTBM - set scrolling region */
if((top = param[0]) < 1)
if ((top = param[0]) < 1)
top = 1;
if(nparam < 2) {
if (nparam < 2)
bot = -1;
}
else {
else
bot = param[1];
}
top--;
bot --;
bot--;
if (bot > top)
viewObj->SetScrollRegion(top, bot);
if (bot > top) {
viewObj->SetScrollRegion (top, bot);
}
parsestate = groundtable;
break;
@@ -761,13 +734,13 @@ TermParse::EscParse (void *data)
case CASE_DECSC:
/* DECSC */
viewObj->SaveCursor ();
viewObj->SaveCursor();
parsestate = groundtable;
break;
case CASE_DECRC:
/* DECRC */
viewObj->RestoreCursor ();
viewObj->RestoreCursor();
parsestate = groundtable;
break;
@@ -779,7 +752,7 @@ TermParse::EscParse (void *data)
case CASE_RI:
/* RI */
viewObj->ScrollRegion (-1, -1, SCRDOWN, 1);
viewObj->ScrollRegion(-1, -1, SCRDOWN, 1);
parsestate = groundtable;
break;
@@ -846,7 +819,7 @@ TermParse::EscParse (void *data)
}
}
theObj->fParseThread = -1;
exit_thread (B_OK);
exit_thread(B_OK);
return B_OK;
}
File diff suppressed because it is too large Load Diff