* 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]> * Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai. * Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
* * Distributed under the terms of the MIT license.
* 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.
*
*/ */
/************************************************************************ /*********************************************************************
MuTerminal Code Conversion class (MC3). MuTerminal Code Conversion class (MC3).
version 1.1 Internal coding system is UTF8. version 1.1 Internal coding system is UTF8.
@@ -52,89 +29,86 @@ UTF8
extern char utf8_width_table[]; /* define UTF8WidthTbl.c */ extern char utf8_width_table[]; /* define UTF8WidthTbl.c */
//////////////////////////////////////////////////////////////////////
// Constructor
//////////////////////////////////////////////////////////////////////
CodeConv::CodeConv (void)
{
} CodeConv::CodeConv()
//////////////////////////////////////////////////////////////////////
// Destructor
//////////////////////////////////////////////////////////////////////
CodeConv::~CodeConv (void)
{ {
} }
//////////////////////////////////////////////////////////////////////
// UTF8GetFontWidth (const uchar *string)
// get font width in coding. CodeConv::~CodeConv()
////////////////////////////////////////////////////////////////////// {
int }
CodeConv::UTF8GetFontWidth (const uchar *string)
//! get font width in coding.
int32
CodeConv::UTF8GetFontWidth(const char *string)
{ {
uchar width, point; uchar width, point;
ushort unicode, offset; ushort unicode, offset;
offset = unicode = UTF8toUnicode (string); offset = unicode = UTF8toUnicode(string);
width = utf8_width_table [unicode >> 3]; width = utf8_width_table[unicode >> 3];
offset = offset & 0x07; offset = offset & 0x07;
point = 0x80 >> offset; 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.
// Convert internal coding from src coding. int32
////////////////////////////////////////////////////////////////////// CodeConv::ConvertFromInternal(const char *src, int32 srclen, char *dst, int coding)
int
CodeConv::ConvertFromInternal (const uchar *src, uchar *dst, int coding)
{ {
const uchar *src_p = src; int32 dstlen = 0;
long srclen = 0, dstlen = 0;
long state = 0; long state = 0;
int theCoding; 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]; theCoding = coding_translation_table[coding];
while (*src_p++) srclen++;
dstlen = srclen * 256; dstlen = srclen * 256;
convert_from_utf8 (theCoding, convert_from_utf8(theCoding, (char *)src, &srclen,
(char *)src, &srclen, (char *)dst, &dstlen, &state, '?');
(char *)dst, &dstlen,
&state, '?');
if (coding == M_ISO_2022_JP && state != 0) { if (coding == M_ISO_2022_JP && state != 0) {
const char *end_of_jis = "(B"; const char *end_of_jis = "(B";
strncpy ((char *)dst+dstlen, end_of_jis, 3); strncpy((char *)dst + dstlen, end_of_jis, 3);
dstlen += 3; dstlen += 3;
} }
dst[dstlen] = '\0'; dst[dstlen] = '\0';
return dstlen; return dstlen;
} }
//////////////////////////////////////////////////////////////////////
// ConvertToInternal (const uchar *src, uchar *dst, int coding)
// Convert internal coding to src coding. //! Convert internal coding to src coding.
////////////////////////////////////////////////////////////////////// int32
void CodeConv::ConvertToInternal(const char *src, int32 srclen, char *dst, int coding)
CodeConv::ConvertToInternal (const uchar *src, uchar *dst, int coding)
{ {
const uchar *src_p = src; int32 dstlen = 4;
long srclen = 0, dstlen = 4;
long state = 0; long state = 0;
int theCoding; 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 #if 0
#ifndef __INTEL__ #ifndef __INTEL__
@@ -149,34 +123,21 @@ CodeConv::ConvertToInternal (const uchar *src, uchar *dst, int coding)
dst[dstlen] = '\0'; dst[dstlen] = '\0';
return; return;
} }
#endif #endif
#endif #endif
theCoding = coding_translation_table[coding]; 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'; dst[dstlen] = '\0';
return dstlen;
return;
} }
/*
* Private member functions.
*/
//////////////////////////////////////////////////////////////////////
// UTF8toUnicode (uchar *utf8)
//
//////////////////////////////////////////////////////////////////////
unsigned short unsigned short
CodeConv::UTF8toUnicode (const uchar *utf8) CodeConv::UTF8toUnicode(const char *utf8)
{ {
uchar tmp; uchar tmp;
unsigned short unicode = 0x0000; unsigned short unicode = 0x0000;
@@ -184,30 +145,25 @@ CodeConv::UTF8toUnicode (const uchar *utf8)
tmp = *utf8 & 0xe0; tmp = *utf8 & 0xe0;
if (tmp < 0x80) { if (tmp < 0x80) {
unicode = (unsigned short) *utf8; unicode = (unsigned short)*utf8;
} } else if (tmp < 0xe0) {
else if (tmp < 0xe0) { unicode = (unsigned short)*utf8++ & 0x1f;
unicode = (unsigned short) *utf8++ & 0x1f;
unicode = unicode << 6; unicode = unicode << 6;
unicode = unicode | ((unsigned short) *utf8 & 0x3f); unicode = unicode | ((unsigned short)*utf8 & 0x3f);
} } else if (tmp < 0xf0) {
else if (tmp < 0xf0) { unicode = (unsigned short)*utf8++ & 0x0f;
unicode = (unsigned short) *utf8++ & 0x0f;
unicode = unicode << 6; unicode = unicode << 6;
unicode = unicode | ((unsigned short) *utf8++ & 0x3f); unicode = unicode | ((unsigned short)*utf8++ & 0x3f);
unicode = unicode << 6; unicode = unicode << 6;
unicode = unicode | ((unsigned short) *utf8 & 0x3f); unicode = unicode | ((unsigned short)*utf8 & 0x3f);
} }
return unicode; return unicode;
} }
//////////////////////////////////////////////////////////////////////
// euc_to_sjis
//
//////////////////////////////////////////////////////////////////////
void void
CodeConv::euc_to_sjis (uchar *buf) CodeConv::euc_to_sjis(uchar *buf)
{ {
int gl, gr; int gl, gr;
int p; int p;
@@ -223,22 +179,16 @@ CodeConv::euc_to_sjis (uchar *buf)
c1 = p / 188; c1 = p / 188;
c2 = p % 188; c2 = p % 188;
if (c1 >= 31) { if (c1 >= 31)
c1 = c1 - 31 + 0xE0; c1 = c1 - 31 + 0xE0;
} else
else {
c1 += 0x81; c1 += 0x81;
}
if (c2 >= 63) { if (c2 >= 63)
c2 = c2 - 63 + 0x80; c2 = c2 - 63 + 0x80;
} else
else {
c2 += 0x40; c2 += 0x40;
}
*buf++ = c1; *buf++ = c1;
*buf = c2; *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]> * Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai. * Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
* * Distributed under the terms of the MIT license.
* 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.
*
*/ */
#ifndef CODECONV_H #ifndef CODECONV_H
#define CODECONV_H #define CODECONV_H
#include <SupportDefs.h> #include <SupportDefs.h>
#include "Coding.h" #include "Coding.h"
#define BEGINS_CHAR(byte) ((byte & 0xc0) >= 0x80) #define BEGINS_CHAR(byte) ((byte & 0xc0) >= 0x80)
/* class CodeConv {
* Coding system define. public:
*/ CodeConv();
class CodeConv ~CodeConv();
{
/*
* Constructor and Destuructor.
*/
public:
CodeConv (void);
~CodeConv (void);
/* int32 UTF8GetFontWidth(const char *string);
* Public member functions.
*/
int UTF8GetFontWidth (const uchar *string);
/* internal(UTF8) -> coding */ /* 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) */ /* coding -> internal(UTF8) */
void ConvertToInternal (const uchar *src, uchar *dst, int coding); int32 ConvertToInternal(const char *src, int32 bytes, char *dst, int coding);
/* private:
* PRIVATE MEMBER. void euc_to_sjis(uchar *buf);
*/
private: unsigned short UTF8toUnicode(const char *utf8);
/*
* Private member functions.
*/
void euc_to_sjis (uchar *buf);
unsigned short UTF8toUnicode (const uchar *utf8);
/*
* DATA Member.
*/
int fNowCoding; int fNowCoding;
}; };
#endif /* CODECONV_H */ #endif /* CODECONV_H */
+20 -12
View File
@@ -3,34 +3,42 @@
* Copyright (c) 2003-4 Kian Duffy <[email protected]> * Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai. * Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
* Distributed under the terms of the MIT license. * 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 "TermBaseView.h"
#include "TermView.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) B_WILL_DRAW | B_FRAME_EVENTS)
{ {
fTermView = inTermView; fTermView = inTermView;
} }
TermBaseView::~TermBaseView ()
TermBaseView::~TermBaseView()
{ {
} }
void void
TermBaseView::FrameResized (float width, float height) TermBaseView::FrameResized(float width, float height)
{ {
int font_width, font_height; int fontWidth, fontHeight;
int cols, rows; int cols, rows;
fTermView->GetFontInfo (&font_width, &font_height); fTermView->GetFontInfo(&fontWidth, &fontHeight);
cols = (int)(width - VIEW_OFFSET * 2) / font_width; cols = (int)(width - VIEW_OFFSET * 2) / fontWidth;
rows = (int)(height - VIEW_OFFSET * 2)/ font_height; 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]> * Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai. * Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
* * Distributed under the terms of the MIT license.
* 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.
*
*/ */
#ifndef TERM_BASE_VIEW_H
#define TERM_BASE_VIEW_H
#ifndef TERMBASEVIEW_H_INCLUDED
#define TERMBASEVIEW_H_INCLUDED
#include <View.h> #include <View.h>
class TermView; class TermView;
class TermBaseView : public BView
{
public:
//
// Constructor and Desctructor
//
TermBaseView (BRect frame, TermView *);
~TermBaseView ();
private: class TermBaseView : public BView {
// public:
// Hook Functions. TermBaseView(BRect frame, TermView *);
// ~TermBaseView();
void SetBaseColor (rgb_color);
void FrameResized (float, float); private:
void SetBaseColor(rgb_color);
virtual void FrameResized(float newWidth, float newHeight);
TermView *fTermView; 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]> * Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai. * Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
* * Distributed under the terms of the MIT license.
* 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.
*
*/ */
#include <errno.h> #include <errno.h>
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
@@ -52,7 +30,7 @@ extern int pfd; // defined Muterminal.cpp
// //
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
int32 int32
TermParse::PtyReader (void *data) TermParse::PtyReader(void *data)
{ {
int nread; int nread;
uint read_p = 0; uint read_p = 0;
@@ -253,15 +231,16 @@ int gNowCoding = M_UTF8;
#define DEFAULT -1 #define DEFAULT -1
#define NPARAM 10 // Max parameters #define NPARAM 10 // Max parameters
int32 int32
TermParse::EscParse (void *data) TermParse::EscParse(void *data)
{ {
int tmp; int tmp;
int top, bot; int top, bot;
int cs96; int cs96;
uchar curess = 0; uchar curess = 0;
TermParse *theObj = (TermParse *) data; TermParse *theObj = (TermParse *)data;
TermView *viewObj = theObj->fViewObj; TermView *viewObj = theObj->fViewObj;
CodeConv *convObj = theObj->fConvObj; CodeConv *convObj = theObj->fConvObj;
@@ -286,7 +265,7 @@ TermParse::EscParse (void *data)
parsestate = groundtable; parsestate = groundtable;
while (theObj->fQuitting) { while (theObj->fQuitting) {
c = theObj->GetReaderBuf (); c = theObj->GetReaderBuf();
if (now_coding != gNowCoding) { if (now_coding != gNowCoding) {
/* /*
@@ -322,20 +301,18 @@ TermParse::EscParse (void *data)
} }
switch (parsestate[c]) { switch (parsestate[c]) {
case CASE_PRINT: case CASE_PRINT:
cbuf[0] = (uchar) c; cbuf[0] = c;
cbuf[1] = '\0'; cbuf[1] = '\0';
width = HALF_WIDTH; width = HALF_WIDTH;
viewObj->PutChar (cbuf, attr, width); viewObj->PutChar(cbuf, attr, width);
break; break;
case CASE_PRINT_GR: case CASE_PRINT_GR:
/* case iso8859 gr character, or euc */ /* case iso8859 gr character, or euc */
ptr = cbuf; ptr = cbuf;
if (now_coding == M_EUC_JP || now_coding == M_EUC_KR || if (now_coding == M_EUC_JP || now_coding == M_EUC_KR
now_coding == M_ISO_2022_JP) { || now_coding == M_ISO_2022_JP) {
switch (parsestate[curess]) { switch (parsestate[curess]) {
case CASE_SS2: /* JIS X 0201 */ case CASE_SS2: /* JIS X 0201 */
*ptr++ = curess; *ptr++ = curess;
@@ -361,19 +338,19 @@ TermParse::EscParse (void *data)
width = 2; width = 2;
break; break;
} }
} else { /* ISO-8859-1...10 and MacRoman */ } else {
/* ISO-8859-1...10 and MacRoman */
*ptr++ = c; *ptr++ = c;
*ptr = 0; *ptr = 0;
width = 1; 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; break;
case CASE_PRINT_CS96: case CASE_PRINT_CS96:
@@ -381,60 +358,59 @@ TermParse::EscParse (void *data)
cbuf[1] = theObj->GetReaderBuf() | 0x80; cbuf[1] = theObj->GetReaderBuf() | 0x80;
cbuf[2] = 0; cbuf[2] = 0;
width = 2; width = 2;
convObj->ConvertToInternal (cbuf, dstbuf, M_EUC_JP); convObj->ConvertToInternal((char*)cbuf, 2, (char*)dstbuf, M_EUC_JP);
viewObj->PutChar (dstbuf, attr, width); viewObj->PutChar(dstbuf, attr, width);
break; break;
case CASE_LF: case CASE_LF:
viewObj->PutLF (); viewObj->PutLF();
break; break;
case CASE_CR: case CASE_CR:
viewObj->PutCR (); viewObj->PutCR();
break; break;
case CASE_SJIS_KANA: case CASE_SJIS_KANA:
cbuf[0] = (uchar) c; cbuf[0] = (uchar)c;
cbuf[1] = '\0'; cbuf[1] = '\0';
convObj->ConvertToInternal (cbuf, dstbuf, now_coding); convObj->ConvertToInternal((char*)cbuf, 1, (char*)dstbuf, now_coding);
width = 1; width = 1;
viewObj->PutChar (dstbuf, attr, width); viewObj->PutChar(dstbuf, attr, width);
break; break;
case CASE_SJIS_INSTRING: case CASE_SJIS_INSTRING:
cbuf[0] = (uchar) c; cbuf[0] = (uchar)c;
cbuf[1] = theObj->GetReaderBuf (); cbuf[1] = theObj->GetReaderBuf();
cbuf[2] = '\0'; cbuf[2] = '\0';
convObj->ConvertToInternal (cbuf, dstbuf, now_coding); convObj->ConvertToInternal((char*)cbuf, 2, (char*)dstbuf, now_coding);
width = 2; width = 2;
viewObj->PutChar (dstbuf, attr, width); viewObj->PutChar(dstbuf, attr, width);
break; break;
case CASE_UTF8_2BYTE: case CASE_UTF8_2BYTE:
cbuf[0] = (uchar) c; cbuf[0] = (uchar)c;
c =theObj->GetReaderBuf (); c = theObj->GetReaderBuf();
if (groundtable[c] != CASE_UTF8_INSTRING) if (groundtable[c] != CASE_UTF8_INSTRING)
break; break;
cbuf[1] = (uchar) c; cbuf[1] = (uchar)c;
cbuf[2] = '\0'; cbuf[2] = '\0';
width = convObj->UTF8GetFontWidth (cbuf); width = convObj->UTF8GetFontWidth((char*)cbuf);
viewObj->PutChar (cbuf, attr, width); viewObj->PutChar(cbuf, attr, width);
break; break;
case CASE_UTF8_3BYTE: case CASE_UTF8_3BYTE:
cbuf[0] = (uchar) c; cbuf[0] = c;
c =theObj->GetReaderBuf (); c = theObj->GetReaderBuf();
if (groundtable[c] != CASE_UTF8_INSTRING) if (groundtable[c] != CASE_UTF8_INSTRING)
break; break;
cbuf[1] = (uchar) c; cbuf[1] = c;
c =theObj->GetReaderBuf (); c = theObj->GetReaderBuf();
if (groundtable[c] != CASE_UTF8_INSTRING) if (groundtable[c] != CASE_UTF8_INSTRING)
break; break;
cbuf[2] = (uchar) c; cbuf[2] = c;
cbuf[3] = '\0'; cbuf[3] = '\0';
width = convObj->UTF8GetFontWidth (cbuf); width = convObj->UTF8GetFontWidth((char*)cbuf);
viewObj->PutChar (cbuf, attr, width); viewObj->PutChar (cbuf, attr, width);
break; break;
@@ -465,13 +441,13 @@ TermParse::EscParse (void *data)
break; break;
case CASE_BS: case CASE_BS:
viewObj->MoveCurLeft (1); viewObj->MoveCurLeft(1);
break; break;
case CASE_TAB: case CASE_TAB:
tmp = viewObj->GetCurX (); tmp = viewObj->GetCurX();
tmp %= 8; tmp %= 8;
viewObj->MoveCurRight (8-tmp); viewObj->MoveCurRight(8 - tmp);
break; break;
case CASE_ESC: case CASE_ESC:
@@ -511,7 +487,7 @@ TermParse::EscParse (void *data)
case CASE_ESC_DIGIT: // ESC [ number case CASE_ESC_DIGIT: // ESC [ number
/* digit in csi or dec mode */ /* digit in csi or dec mode */
if((row = param[nparam - 1]) == DEFAULT) if ((row = param[nparam - 1]) == DEFAULT)
row = 0; row = 0;
param[nparam - 1] = 10 * row + (c - '0'); param[nparam - 1] = 10 * row + (c - '0');
break; break;
@@ -529,53 +505,52 @@ TermParse::EscParse (void *data)
case CASE_ICH: // ESC [@ insert charactor case CASE_ICH: // ESC [@ insert charactor
/* ICH */ /* ICH */
if((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
viewObj->InsertSpace (row); viewObj->InsertSpace(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_CUU: // ESC [A cursor up, up arrow key. case CASE_CUU: // ESC [A cursor up, up arrow key.
/* CUU */ /* CUU */
if((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
viewObj->MoveCurUp (row); viewObj->MoveCurUp(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_CUD: // ESC [B cursor down, down arrow key. case CASE_CUD: // ESC [B cursor down, down arrow key.
/* CUD */ /* CUD */
if((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
viewObj->MoveCurDown (row); viewObj->MoveCurDown(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_CUF: // ESC [C cursor forword case CASE_CUF: // ESC [C cursor forword
/* CUF */ /* CUF */
if((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
viewObj->MoveCurRight (row); viewObj->MoveCurRight(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_CUB: // ESC [D cursor backword case CASE_CUB: // ESC [D cursor backword
/* CUB */ /* CUB */
if((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
viewObj->MoveCurLeft (row); viewObj->MoveCurLeft(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_CUP: // ESC [...H move cursor case CASE_CUP: // ESC [...H move cursor
/* CUP | HVP */ /* CUP | HVP */
if((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
if(nparam < 2 || (col = param[1]) < 1) if (nparam < 2 || (col = param[1]) < 1)
col = 1; col = 1;
viewObj->SetCurPos (col - 1, row - 1 ); viewObj->SetCurPos(col - 1, row - 1 );
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -584,15 +559,15 @@ TermParse::EscParse (void *data)
switch (param[0]) { switch (param[0]) {
case DEFAULT: case DEFAULT:
case 0: case 0:
viewObj->EraseBelow (); viewObj->EraseBelow();
break; break;
case 1: case 1:
break; break;
case 2: case 2:
viewObj->SetCurPos (0, 0); viewObj->SetCurPos(0, 0);
viewObj->EraseBelow (); viewObj->EraseBelow();
break; break;
} }
parsestate = groundtable; parsestate = groundtable;
@@ -600,29 +575,29 @@ TermParse::EscParse (void *data)
case CASE_EL: // delete line case CASE_EL: // delete line
/* EL */ /* EL */
viewObj->DeleteColumns (); viewObj->DeleteColumns();
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_IL: case CASE_IL:
/* IL */ /* IL */
if((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
viewObj->PutNL (row); viewObj->PutNL(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_DL: case CASE_DL:
/* DL */ /* DL */
if((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
viewObj->DeleteLine (row); viewObj->DeleteLine(row);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_DCH: case CASE_DCH:
/* DCH */ /* DCH */
if((row = param[0]) < 1) if ((row = param[0]) < 1)
row = 1; row = 1;
viewObj->DeleteChar(row); viewObj->DeleteChar(row);
parsestate = groundtable; parsestate = groundtable;
@@ -630,19 +605,19 @@ TermParse::EscParse (void *data)
case CASE_SET: case CASE_SET:
/* SET */ /* SET */
viewObj->SetInsertMode (MODE_INSERT); viewObj->SetInsertMode(MODE_INSERT);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_RST: case CASE_RST:
/* RST */ /* RST */
viewObj->SetInsertMode (MODE_OVER); viewObj->SetInsertMode(MODE_OVER);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_SGR: case CASE_SGR:
/* SGR */ /* SGR */
for (row=0; row<nparam; ++row) { for (row = 0; row < nparam; ++row) {
switch (param[row]) { switch (param[row]) {
case DEFAULT: case DEFAULT:
case 0: /* Reset attribute */ case 0: /* Reset attribute */
@@ -703,29 +678,27 @@ TermParse::EscParse (void *data)
case CASE_CPR: case CASE_CPR:
// Q & D hack by Y.Hayakawa ([email protected]) // Q & D hack by Y.Hayakawa ([email protected])
// 21-JUL-99 // 21-JUL-99
viewObj->DeviceStatusReport(param[0]) ; viewObj->DeviceStatusReport(param[0]);
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_DECSTBM: case CASE_DECSTBM:
/* DECSTBM - set scrolling region */ /* DECSTBM - set scrolling region */
if((top = param[0]) < 1) if ((top = param[0]) < 1)
top = 1; top = 1;
if(nparam < 2) { if (nparam < 2)
bot = -1; bot = -1;
} else
else {
bot = param[1]; bot = param[1];
}
top--; top--;
bot --; bot--;
if (bot > top)
viewObj->SetScrollRegion(top, bot);
if (bot > top) {
viewObj->SetScrollRegion (top, bot);
}
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -761,13 +734,13 @@ TermParse::EscParse (void *data)
case CASE_DECSC: case CASE_DECSC:
/* DECSC */ /* DECSC */
viewObj->SaveCursor (); viewObj->SaveCursor();
parsestate = groundtable; parsestate = groundtable;
break; break;
case CASE_DECRC: case CASE_DECRC:
/* DECRC */ /* DECRC */
viewObj->RestoreCursor (); viewObj->RestoreCursor();
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -779,7 +752,7 @@ TermParse::EscParse (void *data)
case CASE_RI: case CASE_RI:
/* RI */ /* RI */
viewObj->ScrollRegion (-1, -1, SCRDOWN, 1); viewObj->ScrollRegion(-1, -1, SCRDOWN, 1);
parsestate = groundtable; parsestate = groundtable;
break; break;
@@ -846,7 +819,7 @@ TermParse::EscParse (void *data)
} }
} }
theObj->fParseThread = -1; theObj->fParseThread = -1;
exit_thread (B_OK); exit_thread(B_OK);
return B_OK; return B_OK;
} }
File diff suppressed because it is too large Load Diff