• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision3327 (tree)
Time2009-04-18 20:30:54
Authordoda

Log Message

サンプルTTX追加
・TTXOutputBuffering -- データ送信をバッファリングし、擬似的にline at a timeモードを実現する。

Change Summary

Incremental Difference

--- trunk/TTXSamples/TTXOutputBuffering/ReadMe-ja.txt (nonexistent)
+++ trunk/TTXSamples/TTXOutputBuffering/ReadMe-ja.txt (revision 3327)
@@ -0,0 +1,15 @@
1+TTXOutputBuffering -- データ送信の行毎のバッファリング
2+
3+機能:
4+ データ送信をバッファリングし、行単位でデータ送信を行うようにします。
5+
6+解説:
7+ 現在のTera Termでは、常に"一文字毎に送信(character at a time)"しており、
8+ "行毎に送信(line at a time)"モードには対応していません。
9+ このTTXを入れると、データ送信をバッファリングする事によって擬似的に
10+ line at a timeモードを実現します。
11+
12+バグ:
13+ 常に行毎に送信する。
14+ その他いっぱいあり。
15+ 試しに作ってみたというレベルで、常用には耐えないでしょう。
--- trunk/TTXSamples/TTXOutputBuffering/TTXOutputBuffering.c (nonexistent)
+++ trunk/TTXSamples/TTXOutputBuffering/TTXOutputBuffering.c (revision 3327)
@@ -0,0 +1,149 @@
1+#include "teraterm.h"
2+#include "tttypes.h"
3+#include "ttplugin.h"
4+#include "ttlib.h"
5+//#include "tt_res.h"
6+
7+#include "compat_w95.h"
8+
9+#define ORDER 4000
10+#define BUFF_SIZE 4096
11+
12+static HANDLE hInst;
13+
14+typedef struct {
15+ PTTSet ts;
16+ PComVar cv;
17+ Tsend origPsend;
18+ char buff[BUFF_SIZE];
19+ int buff_used;
20+} TInstVar;
21+
22+typedef TInstVar FAR * PTInstVar;
23+PTInstVar pvar;
24+static TInstVar InstVar;
25+
26+//
27+// TTXInit -- 起動時処理
28+//
29+static void PASCAL FAR TTXInit(PTTSet ts, PComVar cv) {
30+ pvar->ts = ts;
31+ pvar->cv = cv;
32+ pvar->origPsend = NULL;
33+ pvar->buff_used = 0;
34+}
35+
36+//
37+// TTXSend -- キー入力処理
38+//
39+static int PASCAL FAR TTXsend(SOCKET s, const char FAR *buf, int len, int flags) {
40+ int i, wlen;
41+
42+ if (len > 0) {
43+ for (i=0; i<len; i++) {
44+ switch (buf[i]) {
45+ case '\n':
46+ if (pvar->buff_used < BUFF_SIZE)
47+ pvar->buff[pvar->buff_used++] = '\n';
48+ wlen = pvar->origPsend(s, pvar->buff, pvar->buff_used, flags);
49+ if (wlen > 0 && wlen < pvar->buff_used) {
50+ pvar->buff_used -= wlen;
51+ memmove(pvar->buff, &(pvar->buff[wlen]), pvar->buff_used);
52+ }
53+ else {
54+ pvar->buff_used = 0;
55+ }
56+ break;
57+ case 0x08: // ^H
58+ if (pvar->buff_used > 0)
59+ pvar->buff_used--;
60+ break;
61+ case 0x15: // ^U
62+ pvar->buff_used = 0;
63+ break;
64+ default:
65+ if (pvar->buff_used < BUFF_SIZE)
66+ pvar->buff[pvar->buff_used++] = buf[i];
67+ break;
68+ }
69+ }
70+ }
71+
72+ return len;
73+}
74+
75+//
76+// TTXOpen -- セッション開始処理
77+// Psend をフックする。
78+//
79+static void PASCAL FAR TTXOpenTCP(TTXSockHooks FAR * hooks) {
80+ pvar->origPsend = *hooks->Psend;
81+ *hooks->Psend = TTXsend;
82+ pvar->buff_used = 0;
83+}
84+
85+//
86+// TTXCloseTCP -- セッション終了時処理
87+// Psend のフックを解除する。
88+//
89+static void PASCAL FAR TTXCloseTCP(TTXSockHooks FAR * hooks) {
90+ if (pvar->origPsend) {
91+ *hooks->Psend = pvar->origPsend;
92+ }
93+}
94+
95+static TTXExports Exports = {
96+ sizeof(TTXExports),
97+ ORDER,
98+
99+ TTXInit,
100+ NULL, // TTXGetUIHooks,
101+ NULL, // TTXGetSetupHooks,
102+ TTXOpenTCP,
103+ TTXCloseTCP,
104+ NULL, // TTXSetWinSize,
105+ NULL, // TTXModifyMenu,
106+ NULL, // TTXModifyPopupMenu,
107+ NULL, // TTXProcessCommand,
108+ NULL, // TTXEnd,
109+ NULL, // TTXSetCommandLine,
110+ NULL, // TTXOpenFile,
111+ NULL, // TTXCloseFile
112+};
113+
114+BOOL __declspec(dllexport) PASCAL FAR TTXBind(WORD Version, TTXExports FAR * exports) {
115+ int size = sizeof(Exports) - sizeof(exports->size);
116+ /* do version checking if necessary */
117+ /* if (Version!=TTVERSION) return FALSE; */
118+
119+ if (size > exports->size) {
120+ size = exports->size;
121+ }
122+ memcpy((char FAR *)exports + sizeof(exports->size),
123+ (char FAR *)&Exports + sizeof(exports->size), size);
124+ return TRUE;
125+}
126+
127+BOOL WINAPI DllMain(HANDLE hInstance,
128+ ULONG ul_reason_for_call,
129+ LPVOID lpReserved)
130+{
131+ switch( ul_reason_for_call ) {
132+ case DLL_THREAD_ATTACH:
133+ /* do thread initialization */
134+ break;
135+ case DLL_THREAD_DETACH:
136+ /* do thread cleanup */
137+ break;
138+ case DLL_PROCESS_ATTACH:
139+ /* do process initialization */
140+ DoCover_IsDebuggerPresent();
141+ hInst = hInstance;
142+ pvar = &InstVar;
143+ break;
144+ case DLL_PROCESS_DETACH:
145+ /* do process cleanup */
146+ break;
147+ }
148+ return TRUE;
149+}
Show on old repository browser