summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/TEmuVt102.cpp41
1 files changed, 35 insertions, 6 deletions
diff --git a/core/apps/embeddedkonsole/TEmuVt102.cpp b/core/apps/embeddedkonsole/TEmuVt102.cpp
index 752c49f..275c18d 100644
--- a/core/apps/embeddedkonsole/TEmuVt102.cpp
+++ b/core/apps/embeddedkonsole/TEmuVt102.cpp
@@ -1,40 +1,40 @@
1/* ------------------------------------------------------------------------- */ 1/* ------------------------------------------------------------------------- */
2/* */ 2/* */
3/* [TEmuVt102.C] VT102 Terminal Emulation */ 3/* [TEmuVt102.C] VT102 Terminal Emulation */
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/*! \class TEmuVt102 19/*! \class TEmuVt102
20 20
21 \brief Actual Emulation for Konsole 21 \brief Actual Emulation for Konsole
22 22
23 \sa TEWidget \sa TEScreen 23 \sa TEWidget \sa TEScreen
24*/ 24*/
25 25
26#include "TEmuVt102.h" 26#include "TEmuVt102.h"
27#include "TEWidget.h" 27#include "TEWidget.h"
28#include "TEScreen.h" 28#include "TEScreen.h"
29#include "keytrans.h" 29#include "keytrans.h"
30 30
31#include <stdio.h> 31#include <stdio.h>
32#include <unistd.h> 32#include <unistd.h>
33#include <qkeycode.h> 33#include <qkeycode.h>
34#include <qtextcodec.h> 34#include <qtextcodec.h>
35 35
36 36
37/* VT102 Terminal Emulation 37/* VT102 Terminal Emulation
38 38
39 This class puts together the screens, the pty and the widget to a 39 This class puts together the screens, the pty and the widget to a
40 complete terminal emulation. Beside combining it's componentes, it 40 complete terminal emulation. Beside combining it's componentes, it
@@ -722,50 +722,79 @@ void TEmuVt102::onKeyPress( QKeyEvent* ev )
722 if (keytrans->findEntry(ev->key(), encodeMode(MODE_NewLine , BITS_NewLine ) + // OLD, 722 if (keytrans->findEntry(ev->key(), encodeMode(MODE_NewLine , BITS_NewLine ) + // OLD,
723 encodeMode(MODE_Ansi , BITS_Ansi ) + // OBSOLETE, 723 encodeMode(MODE_Ansi , BITS_Ansi ) + // OBSOLETE,
724 encodeMode(MODE_AppCuKeys, BITS_AppCuKeys ) + // VT100 stuff 724 encodeMode(MODE_AppCuKeys, BITS_AppCuKeys ) + // VT100 stuff
725 encodeStat(ControlButton , BITS_Control ) + 725 encodeStat(ControlButton , BITS_Control ) +
726 encodeStat(ShiftButton , BITS_Shift ) + 726 encodeStat(ShiftButton , BITS_Shift ) +
727 encodeStat(AltButton , BITS_Alt ), 727 encodeStat(AltButton , BITS_Alt ),
728 &cmd, &txt, &len )) 728 &cmd, &txt, &len ))
729//printf("cmd: %d, %s, %d\n",cmd,txt,len); 729//printf("cmd: %d, %s, %d\n",cmd,txt,len);
730 switch(cmd) // ... and execute if found. 730 switch(cmd) // ... and execute if found.
731 { 731 {
732 case CMD_emitSelection : gui->emitSelection(); return; 732 case CMD_emitSelection : gui->emitSelection(); return;
733 case CMD_scrollPageUp : gui->doScroll(-gui->Lines()/2); return; 733 case CMD_scrollPageUp : gui->doScroll(-gui->Lines()/2); return;
734 case CMD_scrollPageDown : gui->doScroll(+gui->Lines()/2); return; 734 case CMD_scrollPageDown : gui->doScroll(+gui->Lines()/2); return;
735 case CMD_scrollLineUp : gui->doScroll(-1 ); return; 735 case CMD_scrollLineUp : gui->doScroll(-1 ); return;
736 case CMD_scrollLineDown : gui->doScroll(+1 ); return; 736 case CMD_scrollLineDown : gui->doScroll(+1 ); return;
737 case CMD_send : emit sndBlock(txt,len); return; 737 case CMD_send : emit sndBlock(txt,len); return;
738 case CMD_prevSession : emit prevSession(); return; 738 case CMD_prevSession : emit prevSession(); return;
739 case CMD_nextSession : emit nextSession(); return; 739 case CMD_nextSession : emit nextSession(); return;
740 } 740 }
741 741
742 // fall back handling 742 // fall back handling
743 if (!ev->text().isEmpty()) 743 if (!ev->text().isEmpty())
744 { 744 {
745 if (ev->state() & AltButton) sendString("\033"); // ESC, this is the ALT prefix 745 if (ev->state() & AltButton) sendString("\033"); // ESC, this is the ALT prefix
746 QCString s = codec->fromUnicode(ev->text()); // encode for application 746 /// very hacky
747 emit sndBlock(s.data(),s.length()); // we may well have s.length() > 1 747 if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='A')) sendString("\01");
748 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='B')) sendString("\02");
749 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='C')) sendString("\03");
750 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='D')) sendString("\04");
751 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='E')) sendString("\05");
752 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='F')) sendString("\06");
753 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='G')) sendString("\07");
754 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='H')) sendString("\010");
755 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='I')) sendString("\011");
756 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='J')) sendString("\012");
757 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='K')) sendString("\013");
758 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='L')) sendString("\014");
759 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='M')) sendString("\015");
760 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='N')) sendString("\016");
761 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='O')) sendString("\017");
762 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='P')) sendString("\020");
763 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='Q')) sendString("\021");
764 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='R')) sendString("\022");
765 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='S')) sendString("\023");
766 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='T')) sendString("\024");
767 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='U')) sendString("\025");
768 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='V')) sendString("\026");
769 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='W')) sendString("\027");
770 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='X')) sendString("\030");
771 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='Y')) sendString("\031");
772 else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='Z')) sendString("\032");
773 else {
774 QCString s = codec->fromUnicode(ev->text()); // encode for application
775 emit sndBlock(s.data(),s.length()); // we may well have s.length() > 1
776 }
748 return; 777 return;
749 } 778 }
750} 779}
751 780
752/* ------------------------------------------------------------------------- */ 781/* ------------------------------------------------------------------------- */
753/* */ 782/* */
754/* VT100 Charsets */ 783/* VT100 Charsets */
755/* */ 784/* */
756/* ------------------------------------------------------------------------- */ 785/* ------------------------------------------------------------------------- */
757 786
758// Character Set Conversion ------------------------------------------------ -- 787// Character Set Conversion ------------------------------------------------ --
759 788
760/* 789/*
761 The processing contains a VT100 specific code translation layer. 790 The processing contains a VT100 specific code translation layer.
762 It's still in use and mainly responsible for the line drawing graphics. 791 It's still in use and mainly responsible for the line drawing graphics.
763 792
764 These and some other glyphs are assigned to codes (0x5f-0xfe) 793 These and some other glyphs are assigned to codes (0x5f-0xfe)
765 normally occupied by the latin letters. Since this codes also 794 normally occupied by the latin letters. Since this codes also
766 appear within control sequences, the extra code conversion 795 appear within control sequences, the extra code conversion
767 does not permute with the tokenizer and is placed behind it 796 does not permute with the tokenizer and is placed behind it
768 in the pipeline. It only applies to tokens, which represent 797 in the pipeline. It only applies to tokens, which represent
769 plain characters. 798 plain characters.
770 799
771 This conversion it eventually continued in TEWidget.C, since 800 This conversion it eventually continued in TEWidget.C, since
@@ -870,49 +899,49 @@ void TEmuVt102::restoreCursor()
870*/ 899*/
871 900
872// "Mode" related part of the state. These are all booleans. 901// "Mode" related part of the state. These are all booleans.
873 902
874void TEmuVt102::resetModes() 903void TEmuVt102::resetModes()
875{ 904{
876 resetMode(MODE_Mouse1000); saveMode(MODE_Mouse1000); 905 resetMode(MODE_Mouse1000); saveMode(MODE_Mouse1000);
877 resetMode(MODE_AppScreen); saveMode(MODE_AppScreen); 906 resetMode(MODE_AppScreen); saveMode(MODE_AppScreen);
878 // here come obsolete modes 907 // here come obsolete modes
879 resetMode(MODE_AppCuKeys); saveMode(MODE_AppCuKeys); 908 resetMode(MODE_AppCuKeys); saveMode(MODE_AppCuKeys);
880 resetMode(MODE_NewLine ); 909 resetMode(MODE_NewLine );
881 setMode(MODE_Ansi ); 910 setMode(MODE_Ansi );
882} 911}
883 912
884void TEmuVt102::setMode(int m) 913void TEmuVt102::setMode(int m)
885{ 914{
886 currParm.mode[m] = TRUE; 915 currParm.mode[m] = TRUE;
887 switch (m) 916 switch (m)
888 { 917 {
889 case MODE_Mouse1000 : gui->setMouseMarks(FALSE); 918 case MODE_Mouse1000 : gui->setMouseMarks(FALSE);
890 break; 919 break;
891 case MODE_AppScreen : screen[1]->clearSelection(); 920 case MODE_AppScreen : screen[1]->clearSelection();
892 screen[1]->clearEntireScreen(); 921 screen[1]->clearEntireScreen();
893 setScreen(1); 922 setScreen(1);
894 break; 923 break;
895 } 924 }
896 if (m < MODES_SCREEN || m == MODE_NewLine) 925 if (m < MODES_SCREEN || m == MODE_NewLine)
897 { 926 {
898 screen[0]->setMode(m); 927 screen[0]->setMode(m);
899 screen[1]->setMode(m); 928 screen[1]->setMode(m);
900 } 929 }
901} 930}
902 931
903void TEmuVt102::resetMode(int m) 932void TEmuVt102::resetMode(int m)
904{ 933{
905 currParm.mode[m] = FALSE; 934 currParm.mode[m] = FALSE;
906 switch (m) 935 switch (m)
907 { 936 {
908 case MODE_Mouse1000 : gui->setMouseMarks(TRUE); 937 case MODE_Mouse1000 : gui->setMouseMarks(TRUE);
909 break; 938 break;
910 case MODE_AppScreen : screen[0]->clearSelection(); 939 case MODE_AppScreen : screen[0]->clearSelection();
911 setScreen(0); 940 setScreen(0);
912 break; 941 break;
913 } 942 }
914 if (m < MODES_SCREEN || m == MODE_NewLine) 943 if (m < MODES_SCREEN || m == MODE_NewLine)
915 { 944 {
916 screen[0]->resetMode(m); 945 screen[0]->resetMode(m);
917 screen[1]->resetMode(m); 946 screen[1]->resetMode(m);
918 } 947 }