00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef VT102EMU_H
00022 #define VT102EMU_H
00023
00024 #include "TEWidget.h"
00025 #include "TEScreen.h"
00026 #include "TEmulation.h"
00027 #include <stdio.h>
00028
00029
00030
00031 #define MODE_AppScreen (MODES_SCREEN+0)
00032 #define MODE_AppCuKeys (MODES_SCREEN+1)
00033 #define MODE_AppKeyPad (MODES_SCREEN+2)
00034 #define MODE_Mouse1000 (MODES_SCREEN+3)
00035 #define MODE_Ansi (MODES_SCREEN+4)
00036 #define MODE_total (MODES_SCREEN+5)
00037
00038 struct DECpar
00039 {
00040 bool mode[MODE_total];
00041 };
00042
00043 struct CharCodes
00044 {
00045
00046 char charset[4];
00047 int cu_cs;
00048 bool graphic;
00049 bool pound ;
00050 bool sa_graphic;
00051 bool sa_pound;
00052 };
00053
00054 class TEmuVt102 : public TEmulation
00055 { Q_OBJECT
00056
00057 public:
00058
00059 TEmuVt102(TEWidget* gui);
00060 void changeGUI(TEWidget* newgui);
00061 ~TEmuVt102();
00062
00063 virtual void onKeyPress(TQKeyEvent*);
00064 public slots:
00065
00066 void onMouse(int cb, int cx, int cy);
00067
00068 signals:
00069
00070 void changeTitle(int,const TQString&);
00071
00072 public:
00073
00074 void clearEntireScreen();
00075 void reset();
00076
00077 void onRcvChar(int cc);
00078 public slots:
00079 void sendString(const char *);
00080
00081 public:
00082
00083 bool getMode (int m);
00084
00085 void setMode (int m);
00086 void resetMode (int m);
00087 void saveMode (int m);
00088 void restoreMode(int m);
00089 void resetModes();
00090
00091 void setConnect(bool r);
00092
00093 char getErase();
00094
00095 private:
00096
00097 void resetToken();
00098 #define MAXPBUF 80
00099 void pushToToken(int cc);
00100 int pbuf[MAXPBUF];
00101 int ppos;
00102 #define MAXARGS 15
00103 void addDigit(int dig);
00104 void addArgument();
00105 int argv[MAXARGS];
00106 int argc;
00107 void initTokenizer();
00108 int tbl[256];
00109
00110 void scan_buffer_report();
00111 void ReportErrorToken();
00112
00113 void tau(int code, int p, int q);
00114 void XtermHack();
00115
00116
00117
00118 void reportTerminalType();
00119 void reportSecondaryAttributes();
00120 void reportStatus();
00121 void reportAnswerBack();
00122 void reportCursorPosition();
00123 void reportTerminalParms(int p);
00124
00125 void onScrollLock();
00126 void scrollLock(const bool lock);
00127
00128 protected:
00129
00130 unsigned short applyCharset(unsigned short c);
00131 void setCharset(int n, int cs);
00132 void useCharset(int n);
00133 void setAndUseCharset(int n, int cs);
00134 void saveCursor();
00135 void restoreCursor();
00136 void resetCharset(int scrno);
00137 void setMargins(int t, int b);
00138
00139 CharCodes charset[2];
00140
00141 DECpar currParm;
00142 DECpar saveParm;
00143 bool holdScreen;
00144 };
00145
00146 #endif // ifndef ANSIEMU_H