Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ttcomtester/teraterm/teraterm/ttplug.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4087 - (hide annotations) (download) (as text)
Mon Sep 6 07:34:59 2010 UTC (13 years, 7 months ago) by doda
Original Path: trunk/teraterm/teraterm/ttplug.c
File MIME type: text/x-csrc
File size: 6847 byte(s)
TTX の数の上限を増やした。

1 maya 3227 #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     #undef TTXOpenFile
17     #undef TTXCloseFile
18     #undef TTXGetUIHooks
19     #undef TTXGetSetupHooks
20    
21 doda 4087 #define MAXNUMEXTENSIONS 32
22 maya 3227 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 maya 3623 if (GetModuleFileName(hInst, buf, sizeof(buf)) == 0) {
89     return;
90     }
91 maya 3227 for (index = strlen(buf) - 1;
92     index >= 0 && buf[index] != '\\' && buf[index] != ':' && buf[index] != '/';
93     index--) {
94     }
95     index++;
96     strncpy_s(buf + index, sizeof(buf) - index, "TTX*.DLL", _TRUNCATE);
97    
98     searchHandle = _findfirst(buf,&searchData);
99     if (searchHandle != -1L) {
100     loadExtension(&extensionList, searchData.name);
101    
102     while (_findnext(searchHandle, &searchData)==0) {
103     loadExtension(&extensionList, searchData.name);
104     }
105     _findclose(searchHandle);
106     }
107    
108     if (NumExtensions==0) return;
109    
110     Extensions = (TTXExports * *)malloc(sizeof(TTXExports *)*NumExtensions);
111     for (i = 0; i < NumExtensions; i++) {
112     ExtensionList * old;
113    
114     Extensions[i] = extensionList->exports;
115     old = extensionList;
116     extensionList = extensionList->next;
117     free(old);
118     }
119    
120     qsort(Extensions, NumExtensions, sizeof(Extensions[0]), compareOrder);
121    
122     for (i = 0; i < NumExtensions; i++) {
123     if (Extensions[i]->TTXInit != NULL) {
124     Extensions[i]->TTXInit(ts, cv);
125     }
126     }
127     }
128     }
129    
130     void PASCAL FAR TTXInternalOpenTCP(TTXSockHooks FAR * hooks) {
131     int i;
132    
133     for (i = 0; i < NumExtensions; i++) {
134     if (Extensions[i]->TTXOpenTCP != NULL) {
135     Extensions[i]->TTXOpenTCP(hooks);
136     }
137     }
138     }
139    
140     void PASCAL FAR TTXInternalCloseTCP(TTXSockHooks FAR * hooks) {
141     int i;
142    
143     for (i = NumExtensions - 1; i >= 0; i--) {
144     if (Extensions[i]->TTXCloseTCP != NULL) {
145     Extensions[i]->TTXCloseTCP(hooks);
146     }
147     }
148     }
149    
150     void PASCAL FAR TTXInternalOpenFile(TTXFileHooks FAR * hooks) {
151     int i;
152    
153     for (i = 0; i < NumExtensions; i++) {
154     if (Extensions[i]->TTXOpenFile != NULL) {
155     Extensions[i]->TTXOpenFile(hooks);
156     }
157     }
158     }
159    
160     void PASCAL FAR TTXInternalCloseFile(TTXFileHooks FAR * hooks) {
161     int i;
162    
163     for (i = NumExtensions - 1; i >= 0; i--) {
164     if (Extensions[i]->TTXCloseFile != NULL) {
165     Extensions[i]->TTXCloseFile(hooks);
166     }
167     }
168     }
169    
170     void PASCAL FAR TTXInternalGetUIHooks(TTXUIHooks FAR * hooks) {
171     int i;
172    
173     for (i = 0; i < NumExtensions; i++) {
174     if (Extensions[i]->TTXGetUIHooks != NULL) {
175     Extensions[i]->TTXGetUIHooks(hooks);
176     }
177     }
178     }
179    
180     void PASCAL FAR TTXInternalGetSetupHooks(TTXSetupHooks FAR * hooks) {
181     int i;
182    
183     for (i = NumExtensions - 1; i >= 0; i--) {
184     if (Extensions[i]->TTXGetSetupHooks != NULL) {
185     Extensions[i]->TTXGetSetupHooks(hooks);
186     }
187     }
188     }
189    
190     void PASCAL FAR TTXSetWinSize(int rows, int cols) {
191     int i;
192    
193     for (i = 0; i < NumExtensions; i++) {
194     if (Extensions[i]->TTXSetWinSize != NULL) {
195     Extensions[i]->TTXSetWinSize(rows, cols);
196     }
197     }
198     }
199    
200     void PASCAL FAR TTXModifyMenu(HMENU menu) {
201     int i;
202    
203     for (i = 0; i < NumExtensions; i++) {
204     if (Extensions[i]->TTXModifyMenu != NULL) {
205     Extensions[i]->TTXModifyMenu(menu);
206     }
207     }
208     }
209    
210     void PASCAL FAR TTXModifyPopupMenu(HMENU menu) {
211     int i;
212    
213     for (i = 0; i < NumExtensions; i++) {
214     if (Extensions[i]->TTXModifyPopupMenu != NULL) {
215     Extensions[i]->TTXModifyPopupMenu(menu);
216     }
217     }
218     }
219    
220     BOOL PASCAL FAR TTXProcessCommand(HWND hWin, WORD cmd) {
221     int i;
222    
223     for (i = NumExtensions - 1; i >= 0; i--) {
224     if (Extensions[i]->TTXProcessCommand != NULL) {
225     if (Extensions[i]->TTXProcessCommand(hWin,cmd)) {
226     return TRUE;
227     }
228     }
229     }
230    
231     return FALSE;
232     }
233    
234     void PASCAL FAR TTXEnd(void) {
235     int i;
236    
237     if (NumExtensions==0) return;
238    
239     for (i = NumExtensions - 1; i >= 0; i--) {
240     if (Extensions[i]->TTXEnd != NULL) {
241     Extensions[i]->TTXEnd();
242     }
243     }
244    
245     for (i=0; i<NumExtensions; i++)
246     FreeLibrary(LibHandle[i]);
247    
248     for (i = 0; i < NumExtensions; i++) {
249     free(Extensions[i]);
250     }
251    
252     free(Extensions);
253     NumExtensions = 0;
254     }
255    
256     void PASCAL FAR TTXSetCommandLine(PCHAR cmd, int cmdlen, PGetHNRec rec) {
257     int i;
258    
259     for (i = 0; i < NumExtensions; i++) {
260     if (Extensions[i]->TTXSetCommandLine != NULL) {
261     Extensions[i]->TTXSetCommandLine(cmd, cmdlen, rec);
262     }
263     }
264     }

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