summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-console/common.h10
-rw-r--r--noncore/apps/opie-console/emulation_layer.cpp48
-rw-r--r--noncore/apps/opie-console/emulation_layer.h6
-rw-r--r--noncore/apps/opie-console/screen.cpp22
-rw-r--r--noncore/apps/opie-console/screen.h6
-rw-r--r--noncore/apps/opie-console/vt102emulation.cpp18
-rw-r--r--noncore/apps/opie-console/vt102emulation.h2
-rw-r--r--noncore/apps/opie-console/widget_layer.h11
8 files changed, 68 insertions, 55 deletions
diff --git a/noncore/apps/opie-console/common.h b/noncore/apps/opie-console/common.h
index 979c2bd..a621ff5 100644
--- a/noncore/apps/opie-console/common.h
+++ b/noncore/apps/opie-console/common.h
@@ -1,36 +1,36 @@
1/* -------------------------------------------------------------------------- */ 1/* -------------------------------------------------------------------------- */
2/* */ 2/* */
3/* [TECommon.h] Common Definitions */ 3/* [Common.h] Common Definitions */
4/* */ 4/* */
5/* -------------------------------------------------------------------------- */ 5/* -------------------------------------------------------------------------- */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* */ 10/* */
11/* -------------------------------------------------------------------------- */ 11/* -------------------------------------------------------------------------- */
12/* */ 12/* */
13/* Ported Konsole to Qt/Embedded */ 13/* Ported Konsole to Qt/Embedded */
14/* */ 14/* */
15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
16/* */ 16/* */
17/* -------------------------------------------------------------------------- */ 17/* -------------------------------------------------------------------------- */
18 18
19/*! \file TECommon.h 19/*! \file Common.h
20 \brief Definitions shared between TEScreen and TEWidget. 20 \brief Definitions shared between TEScreen and TEWidget.
21*/ 21*/
22 22
23#ifndef TECOMMON_H 23#ifndef COMMON_H
24#define TECOMMON_H 24#define COMMON_H
25 25
26#include <qcolor.h> 26#include <qcolor.h>
27 27
28#ifndef BOOL 28#ifndef BOOL
29typedef bool BOOL; 29typedef bool BOOL;
30#endif 30#endif
31 31
32#ifndef FALSE 32#ifndef FALSE
33#define FALSE 0 33#define FALSE 0
34#endif 34#endif
35 35
36#ifndef TRUE 36#ifndef TRUE
@@ -102,13 +102,13 @@ struct ColorEntry
102 ColorEntry(QColor c, bool tr, bool b) : color(c), transparent(tr), bold(b) {} 102 ColorEntry(QColor c, bool tr, bool b) : color(c), transparent(tr), bold(b) {}
103 ColorEntry() : transparent(false), bold(false) {} // default constructors 103 ColorEntry() : transparent(false), bold(false) {} // default constructors
104 void operator=(const ColorEntry& rhs) { 104 void operator=(const ColorEntry& rhs) {
105 color = rhs.color; 105 color = rhs.color;
106 transparent = rhs.transparent; 106 transparent = rhs.transparent;
107 bold = rhs.bold; 107 bold = rhs.bold;
108 } 108 }
109 QColor color; 109 QColor color;
110 bool transparent; // if used on bg 110 bool transparent; // if used on bg
111 bool bold; // if used on fg 111 bool bold; // if used on fg
112}; 112};
113 113
114#endif // TECOMMON_H 114#endif // COMMON_H
diff --git a/noncore/apps/opie-console/emulation_layer.cpp b/noncore/apps/opie-console/emulation_layer.cpp
index 6c420e0..5baf05c 100644
--- a/noncore/apps/opie-console/emulation_layer.cpp
+++ b/noncore/apps/opie-console/emulation_layer.cpp
@@ -67,71 +67,71 @@
67 producing the illusion of a permanent and immediate display operation. 67 producing the illusion of a permanent and immediate display operation.
68 68
69 As a sort of catch-all needed for cases where none of the above 69 As a sort of catch-all needed for cases where none of the above
70 conditions catch, the screen refresh is also triggered by a count 70 conditions catch, the screen refresh is also triggered by a count
71 of incoming bulks (`bulk_incnt'). 71 of incoming bulks (`bulk_incnt').
72*/ 72*/
73 73
74/* FIXME 74/* FIXME
75 - evtl. the bulk operations could be made more transparent. 75 - evtl. the bulk operations could be made more transparent.
76*/ 76*/
77 77
78#include "emulation_layer.h" 78#include "emulation_layer.h"
79#include "widget.h" 79#include "widget_layer.h"
80#include "screen.h" 80#include "screen.h"
81#include <stdio.h> 81#include <stdio.h>
82#include <stdlib.h> 82#include <stdlib.h>
83#include <unistd.h> 83#include <unistd.h>
84#include <qkeycode.h> 84#include <qkeycode.h>
85 85
86 86
87/* ------------------------------------------------------------------------- */ 87/* ------------------------------------------------------------------------- */
88/* */ 88/* */
89/* EmulationLayer */ 89/* EmulationLayer */
90/* */ 90/* */
91/* ------------------------------------------------------------------------- */ 91/* ------------------------------------------------------------------------- */
92 92
93#define CNTL(c) ((c)-'@') 93#define CNTL(c) ((c)-'@')
94 94
95/*! 95/*!
96*/ 96*/
97 97
98EmulationLayer::EmulationLayer(Widget* gui) 98EmulationLayer::EmulationLayer( WidgetLayer* gui )
99: decoder((QTextDecoder*)NULL) 99: decoder((QTextDecoder*)NULL)
100{ 100{
101 this->gui = gui; 101 this->gui = gui;
102 102
103 screen[0] = new Screen(gui->Lines(),gui->Columns()); 103 screen[0] = new Screen(gui->lines(),gui->columns());
104 screen[1] = new Screen(gui->Lines(),gui->Columns()); 104 screen[1] = new Screen(gui->lines(),gui->columns());
105 scr = screen[0]; 105 scr = screen[0];
106 106
107 bulk_nlcnt = 0; // reset bulk newline counter 107 bulk_nlcnt = 0; // reset bulk newline counter
108 bulk_incnt = 0; // reset bulk counter 108 bulk_incnt = 0; // reset bulk counter
109 connected = FALSE; 109 connected = FALSE;
110 110
111 QObject::connect(&bulk_timer, SIGNAL(timeout()), this, SLOT(showBulk()) ); 111 QObject::connect(&bulk_timer, SIGNAL( timeout() ), this, SLOT( showBulk() ) );
112 QObject::connect(gui,SIGNAL(changedImageSizeSignal(int,int)), 112 QObject::connect(gui,SIGNAL( imageSizeChanged( int, int ) ),
113 this,SLOT(onImageSizeChange(int,int))); 113 this,SLOT( onImageSizeChange( int, int ) ) );
114 QObject::connect(gui,SIGNAL(changedHistoryCursor(int)), 114 QObject::connect(gui,SIGNAL( changedHistoryCursor( int ) ),
115 this,SLOT(onHistoryCursorChange(int))); 115 this,SLOT( historyCursorChange( int ) ) );
116 QObject::connect(gui,SIGNAL(keyPressedSignal(QKeyEvent*)), 116 QObject::connect(gui,SIGNAL( keyPressed( QKeyEvent* ) ),
117 this,SLOT(onKeyPress(QKeyEvent*))); 117 this,SLOT( onKeyPress( QKeyEvent* ) ) );
118 QObject::connect(gui,SIGNAL(beginSelectionSignal(const int,const int)), 118 QObject::connect(gui,SIGNAL( selectionBegin( const int, const int) ),
119 this,SLOT(onSelectionBegin(const int,const int)) ); 119 this,SLOT( onSelectionBegin( const int, const int ) ) );
120 QObject::connect(gui,SIGNAL(extendSelectionSignal(const int,const int)), 120 QObject::connect(gui,SIGNAL( selectionExtended( const int, const int ) ),
121 this,SLOT(onSelectionExtend(const int,const int)) ); 121 this,SLOT( onSelectionExtend( const int,const int ) ) );
122 QObject::connect(gui,SIGNAL(endSelectionSignal(const BOOL)), 122 QObject::connect(gui,SIGNAL( selectionEnd( const bool ) ),
123 this,SLOT(setSelection(const BOOL)) ); 123 this,SLOT( setSelection( const bool ) ) );
124 QObject::connect(gui,SIGNAL(clearSelectionSignal()), 124 QObject::connect(gui,SIGNAL( selectionCleared() ),
125 this,SLOT(clearSelection()) ); 125 this,SLOT( clearSelection() ) );
126} 126}
127 127
128/*! 128/*!
129*/ 129*/
130 130
131EmulationLayer::~EmulationLayer() 131EmulationLayer::~EmulationLayer()
132{ 132{
133 delete screen[0]; 133 delete screen[0];
134 delete screen[1]; 134 delete screen[1];
135 bulk_timer.stop(); 135 bulk_timer.stop();
136} 136}
137 137
@@ -188,25 +188,25 @@ void EmulationLayer::setKeytrans(const char * no)
188 188
189void EmulationLayer::onRcvChar(int c) 189void EmulationLayer::onRcvChar(int c)
190// process application unicode input to terminal 190// process application unicode input to terminal
191// this is a trivial scanner 191// this is a trivial scanner
192{ 192{
193 c &= 0xff; 193 c &= 0xff;
194 switch (c) 194 switch (c)
195 { 195 {
196 case '\b' : scr->BackSpace(); break; 196 case '\b' : scr->BackSpace(); break;
197 case '\t' : scr->Tabulate(); break; 197 case '\t' : scr->Tabulate(); break;
198 case '\n' : scr->NewLine(); break; 198 case '\n' : scr->NewLine(); break;
199 case '\r' : scr->Return(); break; 199 case '\r' : scr->Return(); break;
200 case 0x07 : gui->Bell(); break; 200 case 0x07 : gui->bell(); break;
201 default : scr->ShowCharacter(c); break; 201 default : scr->ShowCharacter(c); break;
202 }; 202 };
203} 203}
204 204
205/* ------------------------------------------------------------------------- */ 205/* ------------------------------------------------------------------------- */
206/* */ 206/* */
207/* Keyboard Handling */ 207/* Keyboard Handling */
208/* */ 208/* */
209/* ------------------------------------------------------------------------- */ 209/* ------------------------------------------------------------------------- */
210 210
211/*! 211/*!
212*/ 212*/
@@ -294,53 +294,53 @@ void EmulationLayer::bulkNewline()
294 bulk_incnt = 0; // reset bulk counter since `nl' rule applies 294 bulk_incnt = 0; // reset bulk counter since `nl' rule applies
295} 295}
296 296
297/*! 297/*!
298*/ 298*/
299 299
300void EmulationLayer::showBulk() 300void EmulationLayer::showBulk()
301{ 301{
302 bulk_nlcnt = 0; // reset bulk newline counter 302 bulk_nlcnt = 0; // reset bulk newline counter
303 bulk_incnt = 0; // reset bulk counter 303 bulk_incnt = 0; // reset bulk counter
304 if (connected) 304 if (connected)
305 { 305 {
306 Character* image = scr->getCookedImage(); // get the image 306 QArray<Character> image = scr->getCookedImage(); // get the image
307 gui->setImage(image, 307 gui->setImage(image,
308 scr->getLines(), 308 scr->getLines(),
309 scr->getColumns()); // actual refresh 309 scr->getColumns()); // actual refresh
310 free(image); 310 delete image;
311 //FIXME: check that we do not trigger other draw event here. 311 //FIXME: check that we do not trigger other draw event here.
312 gui->setScroll(scr->getHistCursor(),scr->getHistLines()); 312 gui->setScroll(scr->getHistCursor(),scr->getHistLines());
313 } 313 }
314} 314}
315 315
316void EmulationLayer::bulkStart() 316void EmulationLayer::bulkStart()
317{ 317{
318 if (bulk_timer.isActive()) bulk_timer.stop(); 318 if (bulk_timer.isActive()) bulk_timer.stop();
319} 319}
320 320
321void EmulationLayer::bulkEnd() 321void EmulationLayer::bulkEnd()
322{ 322{
323 if ( bulk_nlcnt > gui->Lines() || bulk_incnt > 20 ) 323 if ( bulk_nlcnt > gui->lines() || bulk_incnt > 20 )
324 showBulk(); // resets bulk_??cnt to 0, too. 324 showBulk(); // resets bulk_??cnt to 0, too.
325 else 325 else
326 bulk_timer.start(BULK_TIMEOUT,TRUE); 326 bulk_timer.start(BULK_TIMEOUT,TRUE);
327} 327}
328 328
329void EmulationLayer::setConnect(bool c) 329void EmulationLayer::setConnect(bool c)
330{ 330{
331 connected = c; 331 connected = c;
332 if ( connected) 332 if ( connected)
333 { 333 {
334 onImageSizeChange(gui->Lines(), gui->Columns()); 334 onImageSizeChange(gui->lines(), gui->columns());
335 showBulk(); 335 showBulk();
336 } 336 }
337 else 337 else
338 { 338 {
339 scr->clearSelection(); 339 scr->clearSelection();
340 } 340 }
341} 341}
342 342
343// --------------------------------------------------------------------------- 343// ---------------------------------------------------------------------------
344 344
345/*! triggered by image size change of the Widget `gui'. 345/*! triggered by image size change of the Widget `gui'.
346 346
diff --git a/noncore/apps/opie-console/emulation_layer.h b/noncore/apps/opie-console/emulation_layer.h
index 5781acc..91a4856 100644
--- a/noncore/apps/opie-console/emulation_layer.h
+++ b/noncore/apps/opie-console/emulation_layer.h
@@ -29,41 +29,41 @@
29#include "widget_layer.h" 29#include "widget_layer.h"
30#include "screen.h" 30#include "screen.h"
31#include <qtimer.h> 31#include <qtimer.h>
32#include <stdio.h> 32#include <stdio.h>
33#include <qtextcodec.h> 33#include <qtextcodec.h>
34#include "keytrans.h" 34#include "keytrans.h"
35 35
36class EmulationLayer : public QObject 36class EmulationLayer : public QObject
37{ Q_OBJECT 37{ Q_OBJECT
38 38
39public: 39public:
40 40
41 EmulationLayer(Widget* gui); 41 EmulationLayer( WidgetLayer* gui );
42 ~EmulationLayer(); 42 ~EmulationLayer();
43 43
44public: 44public:
45 virtual void setHistory(bool on); 45 virtual void setHistory(bool on);
46 virtual bool history(); 46 virtual bool history();
47 47
48public slots: // signals incoming from Widget 48public slots: // signals incoming from Widget
49 49
50 virtual void onImageSizeChange(int lines, int columns); 50 virtual void onImageSizeChange(int lines, int columns);
51 virtual void onHistoryCursorChange(int cursor); 51 virtual void onHistoryCursorChange(int cursor);
52 virtual void onKeyPress(QKeyEvent*); 52 virtual void onKeyPress(QKeyEvent*);
53 53
54 virtual void clearSelection(); 54 virtual void clearSelection();
55 virtual void onSelectionBegin(const int x, const int y); 55 virtual void onSelectionBegin(const int x, const int y);
56 virtual void onSelectionExtend(const int x, const int y); 56 virtual void onSelectionExtend(const int x, const int y);
57 virtual void setSelection(const BOOL preserve_line_breaks); 57 virtual void setSelection(const bool preserve_line_breaks);
58 58
59public slots: // signals incoming from data source 59public slots: // signals incoming from data source
60 60
61 /** 61 /**
62 * to be called, when new data arrives 62 * to be called, when new data arrives
63 */ 63 */
64 void onRcvBlock(const QByteArray&); 64 void onRcvBlock(const QByteArray&);
65 65
66signals: 66signals:
67 67
68 /** 68 /**
69 * will send data, encoded to suit emulation 69 * will send data, encoded to suit emulation
@@ -97,25 +97,25 @@ public:
97 * encodes to suit emulation before 97 * encodes to suit emulation before
98 */ 98 */
99 virtual void sendString(const QByteArray&) = 0; 99 virtual void sendString(const QByteArray&) = 0;
100 100
101 virtual void setConnect(bool r); 101 virtual void setConnect(bool r);
102 void setColumns(int columns); 102 void setColumns(int columns);
103 103
104 void setKeytrans(int no); 104 void setKeytrans(int no);
105 void setKeytrans(const char * no); 105 void setKeytrans(const char * no);
106 106
107protected: 107protected:
108 108
109 Widget* gui; 109 WidgetLayer* gui;
110 Screen* scr; // referes to one `screen' 110 Screen* scr; // referes to one `screen'
111 Screen* screen[2]; // 0 = primary, 1 = alternate 111 Screen* screen[2]; // 0 = primary, 1 = alternate
112 void setScreen(int n); // set `scr' to `screen[n]' 112 void setScreen(int n); // set `scr' to `screen[n]'
113 113
114 bool connected; // communicate with widget 114 bool connected; // communicate with widget
115 115
116 void setCodec(int c); // codec number, 0 = locale, 1=utf8 116 void setCodec(int c); // codec number, 0 = locale, 1=utf8
117 117
118 QTextCodec* codec; 118 QTextCodec* codec;
119 QTextCodec* localeCodec; 119 QTextCodec* localeCodec;
120 QTextDecoder* decoder; 120 QTextDecoder* decoder;
121 121
diff --git a/noncore/apps/opie-console/screen.cpp b/noncore/apps/opie-console/screen.cpp
index 8ebc47d..a796ba1 100644
--- a/noncore/apps/opie-console/screen.cpp
+++ b/noncore/apps/opie-console/screen.cpp
@@ -59,39 +59,39 @@
59#define BS_CLEARS FALSE 59#define BS_CLEARS FALSE
60 60
61#define loc(X,Y) ((Y)*columns+(X)) 61#define loc(X,Y) ((Y)*columns+(X))
62 62
63/*! creates a `Screen' of `lines' lines and `columns' columns. 63/*! creates a `Screen' of `lines' lines and `columns' columns.
64*/ 64*/
65 65
66Screen::Screen(int lines, int columns) 66Screen::Screen(int lines, int columns)
67{ 67{
68 this->lines = lines; 68 this->lines = lines;
69 this->columns = columns; 69 this->columns = columns;
70 70
71 image = (Character*) malloc(lines*columns*sizeof(Character)); 71 image = QArray<Character>( lines*columns );
72 tabstops = NULL; initTabStops(); 72 tabstops = NULL; initTabStops();
73 73
74 histCursor = 0; 74 histCursor = 0;
75 75
76 clearSelection(); 76 clearSelection();
77 reset(); 77 reset();
78} 78}
79 79
80/*! Destructor 80/*! Destructor
81*/ 81*/
82 82
83Screen::~Screen() 83Screen::~Screen()
84{ 84{
85 free(image); 85 delete image;
86 if (tabstops) free(tabstops); 86 if (tabstops) free(tabstops);
87} 87}
88 88
89/* ------------------------------------------------------------------------- */ 89/* ------------------------------------------------------------------------- */
90/* */ 90/* */
91/* Normalized Screen Operations */ 91/* Normalized Screen Operations */
92/* */ 92/* */
93/* ------------------------------------------------------------------------- */ 93/* ------------------------------------------------------------------------- */
94 94
95// Cursor Setting -------------------------------------------------------------- 95// Cursor Setting --------------------------------------------------------------
96 96
97/*! \section Cursor 97/*! \section Cursor
@@ -385,49 +385,49 @@ void Screen::resizeImage(int new_lines, int new_columns)
385{ 385{
386 386
387 if (cuY > new_lines-1) 387 if (cuY > new_lines-1)
388 { // attempt to preserve focus and lines 388 { // attempt to preserve focus and lines
389 bmargin = lines-1; //FIXME: margin lost 389 bmargin = lines-1; //FIXME: margin lost
390 for (int i = 0; i < cuY-(new_lines-1); i++) 390 for (int i = 0; i < cuY-(new_lines-1); i++)
391 { 391 {
392 addHistLine(); scrollUp(0,1); 392 addHistLine(); scrollUp(0,1);
393 } 393 }
394 } 394 }
395 395
396 // make new image 396 // make new image
397 Character* newimg = (Character*) malloc(new_lines*new_columns*sizeof(Character)); 397 QArray<Character> newimg = QArray<Character>( new_lines * new_columns );
398 398
399 clearSelection(); 399 clearSelection();
400 400
401 // clear new image 401 // clear new image
402 for (int y = 0; y < new_lines; y++) 402 for (int y = 0; y < new_lines; y++)
403 for (int x = 0; x < new_columns; x++) 403 for (int x = 0; x < new_columns; x++)
404 { 404 {
405 newimg[y*new_columns+x].c = ' '; 405 newimg[y*new_columns+x].c = ' ';
406 newimg[y*new_columns+x].f = DEFAULT_FORE_COLOR; 406 newimg[y*new_columns+x].f = DEFAULT_FORE_COLOR;
407 newimg[y*new_columns+x].b = DEFAULT_BACK_COLOR; 407 newimg[y*new_columns+x].b = DEFAULT_BACK_COLOR;
408 newimg[y*new_columns+x].r = DEFAULT_RENDITION; 408 newimg[y*new_columns+x].r = DEFAULT_RENDITION;
409 } 409 }
410 int cpy_lines = QMIN(new_lines, lines); 410 int cpy_lines = QMIN(new_lines, lines);
411 int cpy_columns = QMIN(new_columns,columns); 411 int cpy_columns = QMIN(new_columns,columns);
412 // copy to new image 412 // copy to new image
413 for (int y = 0; y < cpy_lines; y++) 413 for (int y = 0; y < cpy_lines; y++)
414 for (int x = 0; x < cpy_columns; x++) 414 for (int x = 0; x < cpy_columns; x++)
415 { 415 {
416 newimg[y*new_columns+x].c = image[loc(x,y)].c; 416 newimg[y*new_columns+x].c = image[loc(x,y)].c;
417 newimg[y*new_columns+x].f = image[loc(x,y)].f; 417 newimg[y*new_columns+x].f = image[loc(x,y)].f;
418 newimg[y*new_columns+x].b = image[loc(x,y)].b; 418 newimg[y*new_columns+x].b = image[loc(x,y)].b;
419 newimg[y*new_columns+x].r = image[loc(x,y)].r; 419 newimg[y*new_columns+x].r = image[loc(x,y)].r;
420 } 420 }
421 free(image); 421 delete image;
422 image = newimg; 422 image = newimg;
423 lines = new_lines; 423 lines = new_lines;
424 columns = new_columns; 424 columns = new_columns;
425 cuX = QMIN(cuX,columns-1); 425 cuX = QMIN(cuX,columns-1);
426 cuY = QMIN(cuY,lines-1); 426 cuY = QMIN(cuY,lines-1);
427 427
428 // FIXME: try to keep values, evtl. 428 // FIXME: try to keep values, evtl.
429 tmargin=0; 429 tmargin=0;
430 bmargin=lines-1; 430 bmargin=lines-1;
431 initTabStops(); 431 initTabStops();
432 clearSelection(); 432 clearSelection();
433} 433}
@@ -457,25 +457,25 @@ void Screen::resizeImage(int new_lines, int new_columns)
457 RE_TRANSPARENT XX -- affects background only 457 RE_TRANSPARENT XX -- affects background only
458 RE_INTENSIVE XX -- affects foreground only 458 RE_INTENSIVE XX -- affects foreground only
459 459
460 Note that RE_BOLD is used in both widget 460 Note that RE_BOLD is used in both widget
461 and screen rendition. Since xterm/vt102 461 and screen rendition. Since xterm/vt102
462 is to poor to distinguish between bold 462 is to poor to distinguish between bold
463 (which is a font attribute) and intensive 463 (which is a font attribute) and intensive
464 (which is a color attribute), we translate 464 (which is a color attribute), we translate
465 this and RE_BOLD in falls eventually appart 465 this and RE_BOLD in falls eventually appart
466 into RE_BOLD and RE_INTENSIVE. 466 into RE_BOLD and RE_INTENSIVE.
467*/ 467*/
468 468
469void Screen::reverseRendition(Character* p) 469void Screen::reverseRendition(Character *p)
470{ UINT8 f = p->f; UINT8 b = p->b; 470{ UINT8 f = p->f; UINT8 b = p->b;
471 p->f = b; p->b = f; //p->r &= ~RE_TRANSPARENT; 471 p->f = b; p->b = f; //p->r &= ~RE_TRANSPARENT;
472} 472}
473 473
474void Screen::effectiveRendition() 474void Screen::effectiveRendition()
475// calculate rendition 475// calculate rendition
476{ 476{
477 ef_re = cu_re & (RE_UNDERLINE | RE_BLINK); 477 ef_re = cu_re & (RE_UNDERLINE | RE_BLINK);
478 if (cu_re & RE_REVERSE) 478 if (cu_re & RE_REVERSE)
479 { 479 {
480 ef_fg = cu_bg; 480 ef_fg = cu_bg;
481 ef_bg = cu_fg; 481 ef_bg = cu_fg;
@@ -495,36 +495,36 @@ void Screen::effectiveRendition()
495} 495}
496 496
497/*! 497/*!
498 returns the image. 498 returns the image.
499 499
500 Get the size of the image by \sa getLines and \sa getColumns. 500 Get the size of the image by \sa getLines and \sa getColumns.
501 501
502 NOTE that the image returned by this function must later be 502 NOTE that the image returned by this function must later be
503 freed. 503 freed.
504 504
505*/ 505*/
506 506
507Character* Screen::getCookedImage() 507QArray<Character> Screen::getCookedImage()
508{ int x,y; 508{ int x,y;
509 Character* merged = (Character*) malloc(lines*columns*sizeof(Character)); 509 Character* merged = (Character*) malloc( lines * columns * sizeof( Character ) );
510 Character dft(' ',DEFAULT_FORE_COLOR,DEFAULT_BACK_COLOR,DEFAULT_RENDITION); 510 Character dft(' ',DEFAULT_FORE_COLOR,DEFAULT_BACK_COLOR,DEFAULT_RENDITION);
511 511
512 for (y = 0; (y < lines) && (y < (hist.getLines()-histCursor)); y++) 512 for (y = 0; (y < lines) && (y < (hist.getLines()-histCursor)); y++)
513 { 513 {
514 int len = QMIN(columns,hist.getLineLen(y+histCursor)); 514 int len = QMIN(columns,hist.getLineLen(y+histCursor));
515 int yp = y*columns; 515 int yp = y*columns;
516 int yq = (y+histCursor)*columns; 516 int yq = (y+histCursor)*columns;
517 517
518 hist.getCells(y+histCursor,0,len,merged+yp); 518 hist.getCells( y+histCursor, 0, len, merged+yp );
519 for (x = len; x < columns; x++) merged[yp+x] = dft; 519 for (x = len; x < columns; x++) merged[yp+x] = dft;
520 for (x = 0; x < columns; x++) 520 for (x = 0; x < columns; x++)
521 { int p=x + yp; int q=x + yq; 521 { int p=x + yp; int q=x + yq;
522 if ( ( q >= sel_TL ) && ( q <= sel_BR ) ) 522 if ( ( q >= sel_TL ) && ( q <= sel_BR ) )
523 reverseRendition(&merged[p]); // for selection 523 reverseRendition(&merged[p]); // for selection
524 } 524 }
525 } 525 }
526 if (lines >= hist.getLines()-histCursor) 526 if (lines >= hist.getLines()-histCursor)
527 { 527 {
528 for (y = (hist.getLines()-histCursor); y < lines ; y++) 528 for (y = (hist.getLines()-histCursor); y < lines ; y++)
529 { 529 {
530 int yp = y*columns; 530 int yp = y*columns;
@@ -538,25 +538,27 @@ Character* Screen::getCookedImage()
538 } 538 }
539 539
540 } 540 }
541 } 541 }
542 // evtl. inverse display 542 // evtl. inverse display
543 if (getMode(MODE_Screen)) 543 if (getMode(MODE_Screen))
544 { int i,n = lines*columns; 544 { int i,n = lines*columns;
545 for (i = 0; i < n; i++) 545 for (i = 0; i < n; i++)
546 reverseRendition(&merged[i]); // for reverse display 546 reverseRendition(&merged[i]); // for reverse display
547 } 547 }
548 if (getMode(MODE_Cursor) && (cuY+(hist.getLines()-histCursor) < lines)) // cursor visible 548 if (getMode(MODE_Cursor) && (cuY+(hist.getLines()-histCursor) < lines)) // cursor visible
549 reverseRendition(&merged[loc(cuX,cuY+(hist.getLines()-histCursor))]); 549 reverseRendition(&merged[loc(cuX,cuY+(hist.getLines()-histCursor))]);
550 return merged; 550 QArray<Character> res( sizeof( merged ) / sizeof( Character ) );
551 res.assign( merged, sizeof( merged ) / sizeof( Character ) );
552 return res;
551} 553}
552 554
553 555
554/*! 556/*!
555*/ 557*/
556 558
557void Screen::reset() 559void Screen::reset()
558{ 560{
559 setMode(MODE_Wrap ); saveMode(MODE_Wrap ); // wrap at end of margin 561 setMode(MODE_Wrap ); saveMode(MODE_Wrap ); // wrap at end of margin
560 resetMode(MODE_Origin); saveMode(MODE_Origin); // position refere to [1,1] 562 resetMode(MODE_Origin); saveMode(MODE_Origin); // position refere to [1,1]
561 resetMode(MODE_Insert); saveMode(MODE_Insert); // overstroke 563 resetMode(MODE_Insert); saveMode(MODE_Insert); // overstroke
562 setMode(MODE_Cursor); // cursor visible 564 setMode(MODE_Cursor); // cursor visible
@@ -1150,25 +1152,25 @@ void Screen::addHistLine()
1150 assert(hasScroll() || histCursor == 0); 1152 assert(hasScroll() || histCursor == 0);
1151 1153
1152 // add to hist buffer 1154 // add to hist buffer
1153 // we have to take care about scrolling, too... 1155 // we have to take care about scrolling, too...
1154 1156
1155 if (hasScroll()) 1157 if (hasScroll())
1156 { Character dft; 1158 { Character dft;
1157 1159
1158 int end = columns-1; 1160 int end = columns-1;
1159 while (end >= 0 && image[end] == dft) 1161 while (end >= 0 && image[end] == dft)
1160 end -= 1; 1162 end -= 1;
1161 1163
1162 hist.addCells(image,end+1); 1164 hist.addCells(image.data(), end+1);
1163 hist.addLine(); 1165 hist.addLine();
1164 1166
1165 // adjust history cursor 1167 // adjust history cursor
1166 histCursor += (hist.getLines()-1 == histCursor); 1168 histCursor += (hist.getLines()-1 == histCursor);
1167 } 1169 }
1168 1170
1169 if (!hasScroll()) histCursor = 0; //FIXME: a poor workaround 1171 if (!hasScroll()) histCursor = 0; //FIXME: a poor workaround
1170} 1172}
1171 1173
1172void Screen::setHistCursor(int cursor) 1174void Screen::setHistCursor(int cursor)
1173{ 1175{
1174 histCursor = cursor; //FIXME:rangecheck 1176 histCursor = cursor; //FIXME:rangecheck
diff --git a/noncore/apps/opie-console/screen.h b/noncore/apps/opie-console/screen.h
index cd7422a..38b84ab 100644
--- a/noncore/apps/opie-console/screen.h
+++ b/noncore/apps/opie-console/screen.h
@@ -127,25 +127,25 @@ public: // these are all `Screen' operations
127 int getCursorY(); 127 int getCursorY();
128 // 128 //
129 // ------------------------------------- 129 // -------------------------------------
130 // 130 //
131 void clear(); 131 void clear();
132 void home(); 132 void home();
133 void reset(); 133 void reset();
134 // 134 //
135 void ShowCharacter(unsigned short c); 135 void ShowCharacter(unsigned short c);
136 // 136 //
137 void resizeImage(int new_lines, int new_columns); 137 void resizeImage(int new_lines, int new_columns);
138 // 138 //
139 Character* getCookedImage(); 139 QArray<Character> getCookedImage();
140 140
141 /*! return the number of lines. */ 141 /*! return the number of lines. */
142 int getLines() { return lines; } 142 int getLines() { return lines; }
143 /*! return the number of columns. */ 143 /*! return the number of columns. */
144 int getColumns() { return columns; } 144 int getColumns() { return columns; }
145 145
146 /*! set the position of the history cursor. */ 146 /*! set the position of the history cursor. */
147 void setHistCursor(int cursor); 147 void setHistCursor(int cursor);
148 /*! return the position of the history cursor. */ 148 /*! return the position of the history cursor. */
149 int getHistCursor(); 149 int getHistCursor();
150 150
151 int getHistLines (); 151 int getHistLines ();
@@ -166,43 +166,43 @@ private: // helper
166 166
167 void clearImage(int loca, int loce, char c); 167 void clearImage(int loca, int loce, char c);
168 void moveImage(int dst, int loca, int loce); 168 void moveImage(int dst, int loca, int loce);
169 169
170 void scrollUp(int from, int i); 170 void scrollUp(int from, int i);
171 void scrollDown(int from, int i); 171 void scrollDown(int from, int i);
172 172
173 void addHistLine(); 173 void addHistLine();
174 174
175 void initTabStops(); 175 void initTabStops();
176 176
177 void effectiveRendition(); 177 void effectiveRendition();
178 void reverseRendition(Character* p); 178 void reverseRendition( Character *p );
179 179
180private: 180private:
181 181
182 /* 182 /*
183 The state of the screen is more complex as one would 183 The state of the screen is more complex as one would
184 expect first. The screem does really do part of the 184 expect first. The screem does really do part of the
185 emulation providing state informations in form of modes, 185 emulation providing state informations in form of modes,
186 margins, tabulators, cursor etc. 186 margins, tabulators, cursor etc.
187 187
188 Even more unexpected are variables to save and restore 188 Even more unexpected are variables to save and restore
189 parts of the state. 189 parts of the state.
190 */ 190 */
191 191
192 // screen image ---------------- 192 // screen image ----------------
193 193
194 int lines; 194 int lines;
195 int columns; 195 int columns;
196 Character *image; // [lines][columns] 196 QArray<Character> image; // [lines][columns]
197 197
198 // history buffer --------------- 198 // history buffer ---------------
199 199
200 int histCursor; // display position relative to start of the history buffer 200 int histCursor; // display position relative to start of the history buffer
201 HistoryScroll hist; 201 HistoryScroll hist;
202 202
203 // cursor location 203 // cursor location
204 204
205 int cuX; 205 int cuX;
206 int cuY; 206 int cuY;
207 207
208 // cursor color and rendition info 208 // cursor color and rendition info
diff --git a/noncore/apps/opie-console/vt102emulation.cpp b/noncore/apps/opie-console/vt102emulation.cpp
index 2220f4e..7eecef3 100644
--- a/noncore/apps/opie-console/vt102emulation.cpp
+++ b/noncore/apps/opie-console/vt102emulation.cpp
@@ -56,25 +56,25 @@
56/* */ 56/* */
57/* Constructor / Destructor */ 57/* Constructor / Destructor */
58/* */ 58/* */
59/* ------------------------------------------------------------------------- */ 59/* ------------------------------------------------------------------------- */
60 60
61/* 61/*
62 Nothing really intesting happens here. 62 Nothing really intesting happens here.
63*/ 63*/
64 64
65/*! 65/*!
66*/ 66*/
67 67
68Vt102Emulation::Vt102Emulation(Widget* gui) : EmulationLayer(gui) 68Vt102Emulation::Vt102Emulation(WidgetLayer* gui) : EmulationLayer(gui)
69{ 69{
70 QObject::connect(gui,SIGNAL(mouseSignal(int,int,int)), 70 QObject::connect(gui,SIGNAL(mouseSignal(int,int,int)),
71 this,SLOT(onMouse(int,int,int))); 71 this,SLOT(onMouse(int,int,int)));
72 initTokenizer(); 72 initTokenizer();
73 reset(); 73 reset();
74} 74}
75 75
76/*! 76/*!
77*/ 77*/
78 78
79Vt102Emulation::~Vt102Emulation() 79Vt102Emulation::~Vt102Emulation()
80{ 80{
@@ -340,25 +340,25 @@ void Vt102Emulation::tau( int token, int p, int q )
340 340
341 case TY_CHR___( ) : scr->ShowCharacter (p ); break; //UTF16 341 case TY_CHR___( ) : scr->ShowCharacter (p ); break; //UTF16
342 342
343 // 127 DEL : ignored on input 343 // 127 DEL : ignored on input
344 344
345 case TY_CTL___('@' ) : /* NUL: ignored */ break; 345 case TY_CTL___('@' ) : /* NUL: ignored */ break;
346 case TY_CTL___('A' ) : /* SOH: ignored */ break; 346 case TY_CTL___('A' ) : /* SOH: ignored */ break;
347 case TY_CTL___('B' ) : /* STX: ignored */ break; 347 case TY_CTL___('B' ) : /* STX: ignored */ break;
348 case TY_CTL___('C' ) : /* ETX: ignored */ break; 348 case TY_CTL___('C' ) : /* ETX: ignored */ break;
349 case TY_CTL___('D' ) : /* EOT: ignored */ break; 349 case TY_CTL___('D' ) : /* EOT: ignored */ break;
350 case TY_CTL___('E' ) : reportAnswerBack ( ); break; //VT100 350 case TY_CTL___('E' ) : reportAnswerBack ( ); break; //VT100
351 case TY_CTL___('F' ) : /* ACK: ignored */ break; 351 case TY_CTL___('F' ) : /* ACK: ignored */ break;
352 case TY_CTL___('G' ) : gui->Bell ( ); break; //VT100 352 case TY_CTL___('G' ) : gui->bell ( ); break; //VT100
353 case TY_CTL___('H' ) : scr->BackSpace ( ); break; //VT100 353 case TY_CTL___('H' ) : scr->BackSpace ( ); break; //VT100
354 case TY_CTL___('I' ) : scr->Tabulate ( ); break; //VT100 354 case TY_CTL___('I' ) : scr->Tabulate ( ); break; //VT100
355 case TY_CTL___('J' ) : scr->NewLine ( ); break; //VT100 355 case TY_CTL___('J' ) : scr->NewLine ( ); break; //VT100
356 case TY_CTL___('K' ) : scr->NewLine ( ); break; //VT100 356 case TY_CTL___('K' ) : scr->NewLine ( ); break; //VT100
357 case TY_CTL___('L' ) : scr->NewLine ( ); break; //VT100 357 case TY_CTL___('L' ) : scr->NewLine ( ); break; //VT100
358 case TY_CTL___('M' ) : scr->Return ( ); break; //VT100 358 case TY_CTL___('M' ) : scr->Return ( ); break; //VT100
359 359
360 case TY_CTL___('N' ) : useCharset ( 1); break; //VT100 360 case TY_CTL___('N' ) : useCharset ( 1); break; //VT100
361 case TY_CTL___('O' ) : useCharset ( 0); break; //VT100 361 case TY_CTL___('O' ) : useCharset ( 0); break; //VT100
362 362
363 case TY_CTL___('P' ) : /* DLE: ignored */ break; 363 case TY_CTL___('P' ) : /* DLE: ignored */ break;
364 case TY_CTL___('Q' ) : /* DC1: XON continue */ break; //VT100 364 case TY_CTL___('Q' ) : /* DC1: XON continue */ break; //VT100
@@ -728,29 +728,29 @@ void Vt102Emulation::onKeyPress( QKeyEvent* ev )
728 int cmd; const char* txt; int len; 728 int cmd; const char* txt; int len;
729 if (keytrans->findEntry(ev->key(), encodeMode(MODE_NewLine , BITS_NewLine ) + // OLD, 729 if (keytrans->findEntry(ev->key(), encodeMode(MODE_NewLine , BITS_NewLine ) + // OLD,
730 encodeMode(MODE_Ansi , BITS_Ansi ) + // OBSOLETE, 730 encodeMode(MODE_Ansi , BITS_Ansi ) + // OBSOLETE,
731 encodeMode(MODE_AppCuKeys, BITS_AppCuKeys ) + // VT100 stuff 731 encodeMode(MODE_AppCuKeys, BITS_AppCuKeys ) + // VT100 stuff
732 encodeStat(ControlButton , BITS_Control ) + 732 encodeStat(ControlButton , BITS_Control ) +
733 encodeStat(ShiftButton , BITS_Shift ) + 733 encodeStat(ShiftButton , BITS_Shift ) +
734 encodeStat(AltButton , BITS_Alt ), 734 encodeStat(AltButton , BITS_Alt ),
735 &cmd, &txt, &len )) 735 &cmd, &txt, &len ))
736//printf("cmd: %d, %s, %d\n",cmd,txt,len); 736//printf("cmd: %d, %s, %d\n",cmd,txt,len);
737 { 737 {
738 switch(cmd) // ... and execute if found. 738 switch(cmd) // ... and execute if found.
739 { 739 {
740 case CMD_emitSelection : gui->emitSelection(); return; 740 case CMD_emitSelection : gui->insertSelection(); return;
741 case CMD_scrollPageUp : gui->doScroll(-gui->Lines()/2); return; 741 case CMD_scrollPageUp : gui->scroll(-gui->lines()/2); return;
742 case CMD_scrollPageDown : gui->doScroll(+gui->Lines()/2); return; 742 case CMD_scrollPageDown : gui->scroll(+gui->lines()/2); return;
743 case CMD_scrollLineUp : gui->doScroll(-1 ); return; 743 case CMD_scrollLineUp : gui->scroll(-1 ); return;
744 case CMD_scrollLineDown : gui->doScroll(+1 ); return; 744 case CMD_scrollLineDown : gui->scroll(+1 ); return;
745 case CMD_send : sendString( txt ); return; 745 case CMD_send : sendString( txt ); return;
746 case CMD_prevSession : emit prevSession(); return; 746 case CMD_prevSession : emit prevSession(); return;
747 case CMD_nextSession : emit nextSession(); return; 747 case CMD_nextSession : emit nextSession(); return;
748 } 748 }
749 } 749 }
750 // fall back handling 750 // fall back handling
751 if (!ev->text().isEmpty()) 751 if (!ev->text().isEmpty())
752 { 752 {
753 if (ev->state() & AltButton) sendString("\033"); // ESC, this is the ALT prefix 753 if (ev->state() & AltButton) sendString("\033"); // ESC, this is the ALT prefix
754 /// very hacky 754 /// very hacky
755 if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='A')) sendString("\01"); 755 if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='A')) sendString("\01");
756 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='B')) sendString("\02"); 756 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='B')) sendString("\02");
@@ -915,44 +915,44 @@ void Vt102Emulation::resetModes()
915 resetMode(MODE_AppScreen); saveMode(MODE_AppScreen); 915 resetMode(MODE_AppScreen); saveMode(MODE_AppScreen);
916 // here come obsolete modes 916 // here come obsolete modes
917 resetMode(MODE_AppCuKeys); saveMode(MODE_AppCuKeys); 917 resetMode(MODE_AppCuKeys); saveMode(MODE_AppCuKeys);
918 resetMode(MODE_NewLine ); 918 resetMode(MODE_NewLine );
919 setMode(MODE_Ansi ); 919 setMode(MODE_Ansi );
920} 920}
921 921
922void Vt102Emulation::setMode(int m) 922void Vt102Emulation::setMode(int m)
923{ 923{
924 currParm.mode[m] = TRUE; 924 currParm.mode[m] = TRUE;
925 switch (m) 925 switch (m)
926 { 926 {
927 case MODE_Mouse1000 : gui->setMouseMarks(FALSE); 927 case MODE_Mouse1000 : //gui->setMouseMarks(FALSE);
928 break; 928 break;
929 case MODE_AppScreen : screen[1]->clearSelection(); 929 case MODE_AppScreen : screen[1]->clearSelection();
930 screen[1]->clearEntireScreen(); 930 screen[1]->clearEntireScreen();
931 setScreen(1); 931 setScreen(1);
932 break; 932 break;
933 } 933 }
934 if (m < MODES_SCREEN || m == MODE_NewLine) 934 if (m < MODES_SCREEN || m == MODE_NewLine)
935 { 935 {
936 screen[0]->setMode(m); 936 screen[0]->setMode(m);
937 screen[1]->setMode(m); 937 screen[1]->setMode(m);
938 } 938 }
939} 939}
940 940
941void Vt102Emulation::resetMode(int m) 941void Vt102Emulation::resetMode(int m)
942{ 942{
943 currParm.mode[m] = FALSE; 943 currParm.mode[m] = FALSE;
944 switch (m) 944 switch (m)
945 { 945 {
946 case MODE_Mouse1000 : gui->setMouseMarks(TRUE); 946 case MODE_Mouse1000 : //gui->setMouseMarks(TRUE);
947 break; 947 break;
948 case MODE_AppScreen : screen[0]->clearSelection(); 948 case MODE_AppScreen : screen[0]->clearSelection();
949 setScreen(0); 949 setScreen(0);
950 break; 950 break;
951 } 951 }
952 if (m < MODES_SCREEN || m == MODE_NewLine) 952 if (m < MODES_SCREEN || m == MODE_NewLine)
953 { 953 {
954 screen[0]->resetMode(m); 954 screen[0]->resetMode(m);
955 screen[1]->resetMode(m); 955 screen[1]->resetMode(m);
956 } 956 }
957} 957}
958 958
diff --git a/noncore/apps/opie-console/vt102emulation.h b/noncore/apps/opie-console/vt102emulation.h
index a3d0ae6..de4a62f 100644
--- a/noncore/apps/opie-console/vt102emulation.h
+++ b/noncore/apps/opie-console/vt102emulation.h
@@ -51,25 +51,25 @@ struct CharCodes
51 int cu_cs; // actual charset. 51 int cu_cs; // actual charset.
52 bool graphic; // Some VT100 tricks 52 bool graphic; // Some VT100 tricks
53 bool pound ; // Some VT100 tricks 53 bool pound ; // Some VT100 tricks
54 bool sa_graphic; // saved graphic 54 bool sa_graphic; // saved graphic
55 bool sa_pound; // saved pound 55 bool sa_pound; // saved pound
56}; 56};
57 57
58class Vt102Emulation: public EmulationLayer 58class Vt102Emulation: public EmulationLayer
59{ Q_OBJECT 59{ Q_OBJECT
60 60
61public: 61public:
62 62
63 Vt102Emulation(Widget* gui); 63 Vt102Emulation(WidgetLayer* gui);
64 ~Vt102Emulation(); 64 ~Vt102Emulation();
65 65
66public slots: // signals incoming from Widget 66public slots: // signals incoming from Widget
67 67
68 void onKeyPress(QKeyEvent*); 68 void onKeyPress(QKeyEvent*);
69 void onMouse(int cb, int cx, int cy); 69 void onMouse(int cb, int cx, int cy);
70 70
71signals: 71signals:
72 72
73 void changeTitle(int,const QString&); 73 void changeTitle(int,const QString&);
74 void prevSession(); 74 void prevSession();
75 void nextSession(); 75 void nextSession();
diff --git a/noncore/apps/opie-console/widget_layer.h b/noncore/apps/opie-console/widget_layer.h
index 6e2e61e..5bd2ef9 100644
--- a/noncore/apps/opie-console/widget_layer.h
+++ b/noncore/apps/opie-console/widget_layer.h
@@ -97,24 +97,35 @@ public:
97 /** 97 /**
98 * paste content of clipboard 98 * paste content of clipboard
99 */ 99 */
100 void pasteClipboard(); 100 void pasteClipboard();
101 101
102 102
103 /** 103 /**
104 * reload configuration 104 * reload configuration
105 */ 105 */
106 virtual void reloadConfig() = 0; 106 virtual void reloadConfig() = 0;
107 107
108 108
109 /**
110 * sets the scrollbar (if implemented by successor of this class)
111 */
112 virtual void setScroll( int cursor, int slines );
113
114 /**
115 * scrolls (if implemented, by successor of this class)
116 * @param int value, how much the widget should scroll up (positive value) or down (negative value)
117 */
118 virtual void scroll( int value );
119
109signals: 120signals:
110 121
111 /** 122 /**
112 * key was pressed 123 * key was pressed
113 */ 124 */
114 void keyPressed( QKeyEvent *e ); 125 void keyPressed( QKeyEvent *e );
115 126
116 /** 127 /**
117 * whenever Mouse selects something 128 * whenever Mouse selects something
118 * @param int button, the button that us pressed : 129 * @param int button, the button that us pressed :
119 * 0left Button 130 * 0left Button
120 * 3Button released 131 * 3Button released