Got rid of the global gPfd variable. Big time cleanup, made TermParse a

bit more robust with error checks and likes. Removed unused 
TermPrint.cpp file. I hope I didn't get on your 
way, Vasilis :)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20333 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini
2007-03-05 12:48:36 +00:00
parent 570ab00aa7
commit 63dc9cc262
8 changed files with 312 additions and 438 deletions
+23 -22
View File
@@ -63,8 +63,9 @@ const static rgb_color kTermColorTable[16] = {
};
TermView::TermView(BRect frame, CodeConv *inCodeConv)
TermView::TermView(BRect frame, CodeConv *inCodeConv, int fd)
: BView(frame, "termview", B_FOLLOW_NONE, B_WILL_DRAW | B_FRAME_EVENTS),
fTerminalFd(fd),
fFontWidth(0),
fFontHeight(0),
fFontAscent(0),
@@ -1119,7 +1120,7 @@ TermView::UpdateSIGWINCH()
struct winsize ws;
ws.ws_row = fTermRows;
ws.ws_col = fTermColumns;
ioctl(gPfd, TIOCSWINSZ, &ws);
ioctl(fTerminalFd, TIOCSWINSZ, &ws);
kill(-sh_pid, SIGWINCH);
fFrameResized = 0;
@@ -1139,11 +1140,11 @@ TermView::DeviceStatusReport(int n)
switch (n) {
case 5:
len = sprintf(sbuf,"\033[0n") ;
write(gPfd, sbuf, len);
write(fTerminalFd, sbuf, len);
break ;
case 6:
len = sprintf(sbuf,"\033[%d;%dR", fTermRows, fTermColumns) ;
write(gPfd, sbuf, len);
write(fTerminalFd, sbuf, len);
break ;
default:
return;
@@ -1316,7 +1317,7 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
// If bytes[0] equal intr charactor,
// send signal to shell process group.
tcgetattr(gPfd, &tio);
tcgetattr(fTerminalFd, &tio);
if (*bytes == tio.c_cc[VINTR]) {
if (tio.c_lflag & ISIG)
kill(-sh_pid, SIGINT);
@@ -1330,24 +1331,24 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
case B_RETURN:
c = 0x0d;
if (key == RETURN_KEY || key == ENTER_KEY) {
write(gPfd, &c, 1);
write(fTerminalFd, &c, 1);
return;
} else {
write(gPfd, bytes, numBytes);
write(fTerminalFd, bytes, numBytes);
return;
}
break;
case B_LEFT_ARROW:
if (key == LEFT_ARROW_KEY) {
write(gPfd, LEFT_ARROW_KEY_CODE, sizeof(LEFT_ARROW_KEY_CODE)-1);
write(fTerminalFd, LEFT_ARROW_KEY_CODE, sizeof(LEFT_ARROW_KEY_CODE)-1);
return;
}
break;
case B_RIGHT_ARROW:
if (key == RIGHT_ARROW_KEY) {
write(gPfd, RIGHT_ARROW_KEY_CODE, sizeof(RIGHT_ARROW_KEY_CODE)-1);
write(fTerminalFd, RIGHT_ARROW_KEY_CODE, sizeof(RIGHT_ARROW_KEY_CODE)-1);
return;
}
break;
@@ -1362,7 +1363,7 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
}
if (key == UP_ARROW_KEY) {
write(gPfd, UP_ARROW_KEY_CODE, sizeof(UP_ARROW_KEY_CODE)-1);
write(fTerminalFd, UP_ARROW_KEY_CODE, sizeof(UP_ARROW_KEY_CODE)-1);
return;
}
break;
@@ -1375,21 +1376,21 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
}
if (key == DOWN_ARROW_KEY) {
write(gPfd, DOWN_ARROW_KEY_CODE, sizeof(DOWN_ARROW_KEY_CODE)-1);
write(fTerminalFd, DOWN_ARROW_KEY_CODE, sizeof(DOWN_ARROW_KEY_CODE)-1);
return;
}
break;
case B_INSERT:
if (key == INSERT_KEY) {
write(gPfd, INSERT_KEY_CODE, sizeof(INSERT_KEY_CODE)-1);
write(fTerminalFd, INSERT_KEY_CODE, sizeof(INSERT_KEY_CODE)-1);
return;
}
break;
case B_HOME:
if (key == HOME_KEY) {
write(gPfd, HOME_KEY_CODE, sizeof(HOME_KEY_CODE)-1);
write(fTerminalFd, HOME_KEY_CODE, sizeof(HOME_KEY_CODE)-1);
return;
}
break;
@@ -1404,7 +1405,7 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
}
if (key == PAGE_UP_KEY) {
write(gPfd, PAGE_UP_KEY_CODE, sizeof(PAGE_UP_KEY_CODE)-1);
write(fTerminalFd, PAGE_UP_KEY_CODE, sizeof(PAGE_UP_KEY_CODE)-1);
return;
}
break;
@@ -1417,14 +1418,14 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
}
if (key == PAGE_DOWN_KEY) {
write(gPfd, PAGE_DOWN_KEY_CODE, sizeof(PAGE_DOWN_KEY_CODE)-1);
write(fTerminalFd, PAGE_DOWN_KEY_CODE, sizeof(PAGE_DOWN_KEY_CODE)-1);
return;
}
break;
case B_END:
if (key == END_KEY) {
write(gPfd, END_KEY_CODE, sizeof(END_KEY_CODE)-1);
write(fTerminalFd, END_KEY_CODE, sizeof(END_KEY_CODE)-1);
return;
}
break;
@@ -1432,7 +1433,7 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
case B_FUNCTION_KEY:
for (c = 0; c < 12; c++) {
if (key == function_keycode_table[c]) {
write(gPfd, function_key_char_table[c], 5);
write(fTerminalFd, function_key_char_table[c], 5);
return;
}
}
@@ -1447,12 +1448,12 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
if (gNowCoding != M_UTF8) {
int cnum = fCodeConv->ConvertFromInternal(bytes, numBytes,
(char *)dstbuf, gNowCoding);
write(gPfd, dstbuf, cnum);
write(fTerminalFd, dstbuf, cnum);
return;
}
}
write(gPfd, bytes, numBytes);
write(fTerminalFd, bytes, numBytes);
}
@@ -1534,7 +1535,7 @@ TermView::MessageReceived(BMessage *msg)
case MENU_CLEAR_ALL:
DoClearAll();
write(gPfd, ctrl_l, 1);
write(fTerminalFd, ctrl_l, 1);
break;
case MSGRUN_CURSOR:
@@ -1726,10 +1727,10 @@ TermView::WritePTY(const uchar *text, int numBytes)
uchar *destBuffer = (uchar *)malloc(numBytes * 3);
numBytes = fCodeConv->ConvertFromInternal((char*)text, numBytes,
(char*)destBuffer, gNowCoding);
write(gPfd, destBuffer, numBytes);
write(fTerminalFd, destBuffer, numBytes);
free(destBuffer);
} else {
write(gPfd, text, numBytes);
write(fTerminalFd, text, numBytes);
}
}