Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/teraterm/teraterm/ttplug.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2577 - (hide annotations) (download) (as text)
Fri Aug 15 14:35:43 2008 UTC (15 years, 7 months ago) by doda
Original Path: teraterm/trunk/teraterm/ttplug.c
File MIME type: text/x-csrc
File size: 6552 byte(s)
シリアル接続/ログ再生時の入出力をフックするためのTTXインタフェースを追加。

1 maya 2476 #include "teraterm.h"
2     #include "tttypes.h"
3     #include "ttlib.h"
4    
5     // #include <windows.h>
6     #include <stdlib.h>
7     #include <stdio.h>
8     #include <string.h>
9     /* for _findXXXX() functions */
10     #include <io.h>
11     #include "ttwinman.h"
12     #include "ttplugin.h"
13     #include "ttplug.h"
14     #undef TTXOpenTCP
15     #undef TTXCloseTCP
16 doda 2577 #undef TTXOpenFile
17     #undef TTXCloseFile
18 maya 2476 #undef TTXGetUIHooks
19     #undef TTXGetSetupHooks
20    
21     #define MAXNUMEXTENSIONS 16
22     static HANDLE LibHandle[MAXNUMEXTENSIONS];
23     static int NumExtensions = 0;
24     static TTXExports * * Extensions;
25    
26     typedef struct _ExtensionList {
27     TTXExports * exports;
28     struct _ExtensionList * next;
29     } ExtensionList;
30    
31     static int compareOrder(const void * e1, const void * e2) {
32     TTXExports * * exports1 = (TTXExports * *)e1;
33     TTXExports * * exports2 = (TTXExports * *)e2;
34    
35     return (*exports1)->loadOrder - (*exports2)->loadOrder;
36     }
37    
38     static void loadExtension(ExtensionList * * extensions, char const * fileName) {
39     char buf[1024];
40     DWORD err;
41     char uimsg[MAX_UIMSG];
42    
43     if (NumExtensions>=MAXNUMEXTENSIONS) return;
44     LibHandle[NumExtensions] = LoadLibrary(fileName);
45     if (LibHandle[NumExtensions] != NULL) {
46     TTXBindProc bind = (TTXBindProc)GetProcAddress(LibHandle[NumExtensions], "_TTXBind@8");
47     if (bind==NULL)
48     bind = (TTXBindProc)GetProcAddress(LibHandle[NumExtensions], "TTXBind");
49     if (bind != NULL) {
50     ExtensionList * newExtension =
51     (ExtensionList *)malloc(sizeof(ExtensionList));
52    
53     newExtension->exports = (TTXExports *)malloc(sizeof(TTXExports));
54     memset(newExtension->exports, 0, sizeof(TTXExports));
55     newExtension->exports->size = sizeof(TTXExports);
56     if (bind(TTVERSION,(TTXExports FAR *)newExtension->exports)) {
57     newExtension->next = *extensions;
58     *extensions = newExtension;
59     NumExtensions++;
60     return;
61     } else {
62     free(newExtension->exports);
63     free(newExtension);
64     }
65     }
66     FreeLibrary(LibHandle[NumExtensions]);
67     }
68    
69     err = GetLastError();
70     get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts.UILanguageFile);
71     get_lang_msg("MSG_LOAD_EXT_ERROR", ts.UIMsg, sizeof(ts.UIMsg), "Cannot load extension %s (%d)", ts.UILanguageFile);
72     _snprintf_s(buf, sizeof(buf), _TRUNCATE, ts.UIMsg, fileName, err);
73     MessageBox(NULL, buf, uimsg, MB_OK | MB_ICONEXCLAMATION);
74     }
75    
76     void PASCAL FAR TTXInit(PTTSet ts, PComVar cv) {
77     ExtensionList * extensionList = NULL;
78     int i;
79    
80     // ���������������L�������������ATTX���L���������B
81     //if (getenv("TERATERM_EXTENSIONS") != NULL) {
82     if (1) {
83     char buf[1024];
84     int index;
85     struct _finddata_t searchData;
86     long searchHandle;
87    
88     GetModuleFileName(hInst, buf, sizeof(buf));
89     for (index = strlen(buf) - 1;
90     index >= 0 && buf[index] != '\\' && buf[index] != ':' && buf[index] != '/';
91     index--) {
92     }
93     index++;
94     strncpy_s(buf + index, sizeof(buf) - index, "TTX*.DLL", _TRUNCATE);
95    
96     searchHandle = _findfirst(buf,&searchData);
97     if (searchHandle != -1L) {
98     loadExtension(&extensionList, searchData.name);
99    
100     while (_findnext(searchHandle, &searchData)==0) {
101     loadExtension(&extensionList, searchData.name);
102     }
103     _findclose(searchHandle);
104     }
105    
106     if (NumExtensions==0) return;
107    
108     Extensions = (TTXExports * *)malloc(sizeof(TTXExports *)*NumExtensions);
109     for (i = 0; i < NumExtensions; i++) {
110     ExtensionList * old;
111    
112     Extensions[i] = extensionList->exports;
113     old = extensionList;
114     extensionList = extensionList->next;
115     free(old);
116     }
117    
118     qsort(Extensions, NumExtensions, sizeof(Extensions[0]), compareOrder);
119    
120     for (i = 0; i < NumExtensions; i++) {
121     if (Extensions[i]->TTXInit != NULL) {
122     Extensions[i]->TTXInit(ts, cv);
123     }
124     }
125     }
126     }
127    
128     void PASCAL FAR TTXInternalOpenTCP(TTXSockHooks FAR * hooks) {
129     int i;
130    
131     for (i = 0; i < NumExtensions; i++) {
132     if (Extensions[i]->TTXOpenTCP != NULL) {
133     Extensions[i]->TTXOpenTCP(hooks);
134     }
135     }
136     }
137    
138     void PASCAL FAR TTXInternalCloseTCP(TTXSockHooks FAR * hooks) {
139     int i;
140    
141     for (i = NumExtensions - 1; i >= 0; i--) {
142     if (Extensions[i]->TTXCloseTCP != NULL) {
143     Extensions[i]->TTXCloseTCP(hooks);
144     }
145     }
146     }
147    
148 doda 2577 void PASCAL FAR TTXInternalOpenFile(TTXFileHooks FAR * hooks) {
149     int i;
150    
151     for (i = 0; i < NumExtensions; i++) {
152     if (Extensions[i]->TTXOpenFile != NULL) {
153     Extensions[i]->TTXOpenFile(hooks);
154     }
155     }
156     }
157    
158     void PASCAL FAR TTXInternalCloseFile(TTXFileHooks FAR * hooks) {
159     int i;
160    
161     for (i = NumExtensions - 1; i >= 0; i--) {
162     if (Extensions[i]->TTXCloseFile != NULL) {
163     Extensions[i]->TTXCloseFile(hooks);
164     }
165     }
166     }
167    
168 maya 2476 void PASCAL FAR TTXInternalGetUIHooks(TTXUIHooks FAR * hooks) {
169     int i;
170    
171     for (i = 0; i < NumExtensions; i++) {
172     if (Extensions[i]->TTXGetUIHooks != NULL) {
173     Extensions[i]->TTXGetUIHooks(hooks);
174     }
175     }
176     }
177    
178     void PASCAL FAR TTXInternalGetSetupHooks(TTXSetupHooks FAR * hooks) {
179     int i;
180    
181     for (i = NumExtensions - 1; i >= 0; i--) {
182     if (Extensions[i]->TTXGetSetupHooks != NULL) {
183     Extensions[i]->TTXGetSetupHooks(hooks);
184     }
185     }
186     }
187    
188     void PASCAL FAR TTXSetWinSize(int rows, int cols) {
189     int i;
190    
191     for (i = 0; i < NumExtensions; i++) {
192     if (Extensions[i]->TTXSetWinSize != NULL) {
193     Extensions[i]->TTXSetWinSize(rows, cols);
194     }
195     }
196     }
197    
198     void PASCAL FAR TTXModifyMenu(HMENU menu) {
199     int i;
200    
201     for (i = 0; i < NumExtensions; i++) {
202     if (Extensions[i]->TTXModifyMenu != NULL) {
203     Extensions[i]->TTXModifyMenu(menu);
204     }
205     }
206     }
207    
208     void PASCAL FAR TTXModifyPopupMenu(HMENU menu) {
209     int i;
210    
211     for (i = 0; i < NumExtensions; i++) {
212     if (Extensions[i]->TTXModifyPopupMenu != NULL) {
213     Extensions[i]->TTXModifyPopupMenu(menu);
214     }
215     }
216     }
217    
218     BOOL PASCAL FAR TTXProcessCommand(HWND hWin, WORD cmd) {
219     int i;
220    
221     for (i = NumExtensions - 1; i >= 0; i--) {
222     if (Extensions[i]->TTXProcessCommand != NULL) {
223     if (Extensions[i]->TTXProcessCommand(hWin,cmd)) {
224     return TRUE;
225     }
226     }
227     }
228    
229     return FALSE;
230     }
231    
232     void PASCAL FAR TTXEnd(void) {
233     int i;
234    
235     if (NumExtensions==0) return;
236    
237     for (i = NumExtensions - 1; i >= 0; i--) {
238     if (Extensions[i]->TTXEnd != NULL) {
239     Extensions[i]->TTXEnd();
240     }
241     }
242    
243     for (i=0; i<NumExtensions; i++)
244     FreeLibrary(LibHandle[i]);
245    
246     for (i = 0; i < NumExtensions; i++) {
247     free(Extensions[i]);
248     }
249    
250     free(Extensions);
251     NumExtensions = 0;
252     }
253    
254     void PASCAL FAR TTXSetCommandLine(PCHAR cmd, int cmdlen, PGetHNRec rec) {
255     int i;
256    
257     for (i = 0; i < NumExtensions; i++) {
258     if (Extensions[i]->TTXSetCommandLine != NULL) {
259     Extensions[i]->TTXSetCommandLine(cmd, cmdlen, rec);
260     }
261     }
262     }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26