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 6791 - (hide annotations) (download) (as text)
Fri Jun 9 14:32:31 2017 UTC (6 years, 10 months ago) by doda
Original Path: trunk/teraterm/teraterm/ttplug.c
File MIME type: text/x-csrc
File size: 6765 byte(s)
TTX をフルパスで LoadLibrary() するようにした。
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 doda 6787 // �����t�@�C�����������b�Z�[�W�����������s�����������A�������_����������
71     // �������������������������A���b�Z�[�W���p���������������B�v�����B
72 maya 3227 get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts.UILanguageFile);
73     get_lang_msg("MSG_LOAD_EXT_ERROR", ts.UIMsg, sizeof(ts.UIMsg), "Cannot load extension %s (%d)", ts.UILanguageFile);
74     _snprintf_s(buf, sizeof(buf), _TRUNCATE, ts.UIMsg, fileName, err);
75     MessageBox(NULL, buf, uimsg, MB_OK | MB_ICONEXCLAMATION);
76     }
77    
78     void PASCAL FAR TTXInit(PTTSet ts, PComVar cv) {
79     ExtensionList * extensionList = NULL;
80     int i;
81    
82     // ���������������L�������������ATTX���L���������B
83     //if (getenv("TERATERM_EXTENSIONS") != NULL) {
84     if (1) {
85     char buf[1024];
86     struct _finddata_t searchData;
87     long searchHandle;
88    
89 doda 6791 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s\\TTX*.DLL", ts->HomeDir);
90 maya 3227
91 doda 6791 searchHandle = _findfirst(buf, &searchData);
92 maya 3227 if (searchHandle != -1L) {
93 doda 6791 do {
94     _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s\\%s", ts->HomeDir, searchData.name);
95     loadExtension(&extensionList, buf);
96     } while (_findnext(searchHandle, &searchData)==0);
97 maya 3227 _findclose(searchHandle);
98     }
99    
100     if (NumExtensions==0) return;
101    
102     Extensions = (TTXExports * *)malloc(sizeof(TTXExports *)*NumExtensions);
103     for (i = 0; i < NumExtensions; i++) {
104     ExtensionList * old;
105    
106     Extensions[i] = extensionList->exports;
107     old = extensionList;
108     extensionList = extensionList->next;
109     free(old);
110     }
111    
112     qsort(Extensions, NumExtensions, sizeof(Extensions[0]), compareOrder);
113    
114     for (i = 0; i < NumExtensions; i++) {
115     if (Extensions[i]->TTXInit != NULL) {
116     Extensions[i]->TTXInit(ts, cv);
117     }
118     }
119     }
120     }
121    
122     void PASCAL FAR TTXInternalOpenTCP(TTXSockHooks FAR * hooks) {
123     int i;
124    
125     for (i = 0; i < NumExtensions; i++) {
126     if (Extensions[i]->TTXOpenTCP != NULL) {
127     Extensions[i]->TTXOpenTCP(hooks);
128     }
129     }
130     }
131    
132     void PASCAL FAR TTXInternalCloseTCP(TTXSockHooks FAR * hooks) {
133     int i;
134    
135     for (i = NumExtensions - 1; i >= 0; i--) {
136     if (Extensions[i]->TTXCloseTCP != NULL) {
137     Extensions[i]->TTXCloseTCP(hooks);
138     }
139     }
140     }
141    
142     void PASCAL FAR TTXInternalOpenFile(TTXFileHooks FAR * hooks) {
143     int i;
144    
145     for (i = 0; i < NumExtensions; i++) {
146     if (Extensions[i]->TTXOpenFile != NULL) {
147     Extensions[i]->TTXOpenFile(hooks);
148     }
149     }
150     }
151    
152     void PASCAL FAR TTXInternalCloseFile(TTXFileHooks FAR * hooks) {
153     int i;
154    
155     for (i = NumExtensions - 1; i >= 0; i--) {
156     if (Extensions[i]->TTXCloseFile != NULL) {
157     Extensions[i]->TTXCloseFile(hooks);
158     }
159     }
160     }
161    
162     void PASCAL FAR TTXInternalGetUIHooks(TTXUIHooks FAR * hooks) {
163     int i;
164    
165     for (i = 0; i < NumExtensions; i++) {
166     if (Extensions[i]->TTXGetUIHooks != NULL) {
167     Extensions[i]->TTXGetUIHooks(hooks);
168     }
169     }
170     }
171    
172     void PASCAL FAR TTXInternalGetSetupHooks(TTXSetupHooks FAR * hooks) {
173     int i;
174    
175     for (i = NumExtensions - 1; i >= 0; i--) {
176     if (Extensions[i]->TTXGetSetupHooks != NULL) {
177     Extensions[i]->TTXGetSetupHooks(hooks);
178     }
179     }
180     }
181    
182     void PASCAL FAR TTXSetWinSize(int rows, int cols) {
183     int i;
184    
185     for (i = 0; i < NumExtensions; i++) {
186     if (Extensions[i]->TTXSetWinSize != NULL) {
187     Extensions[i]->TTXSetWinSize(rows, cols);
188     }
189     }
190     }
191    
192     void PASCAL FAR TTXModifyMenu(HMENU menu) {
193     int i;
194    
195     for (i = 0; i < NumExtensions; i++) {
196     if (Extensions[i]->TTXModifyMenu != NULL) {
197     Extensions[i]->TTXModifyMenu(menu);
198     }
199     }
200     }
201    
202     void PASCAL FAR TTXModifyPopupMenu(HMENU menu) {
203     int i;
204    
205     for (i = 0; i < NumExtensions; i++) {
206     if (Extensions[i]->TTXModifyPopupMenu != NULL) {
207     Extensions[i]->TTXModifyPopupMenu(menu);
208     }
209     }
210     }
211    
212     BOOL PASCAL FAR TTXProcessCommand(HWND hWin, WORD cmd) {
213     int i;
214    
215     for (i = NumExtensions - 1; i >= 0; i--) {
216     if (Extensions[i]->TTXProcessCommand != NULL) {
217     if (Extensions[i]->TTXProcessCommand(hWin,cmd)) {
218     return TRUE;
219     }
220     }
221     }
222    
223     return FALSE;
224     }
225    
226     void PASCAL FAR TTXEnd(void) {
227     int i;
228    
229     if (NumExtensions==0) return;
230    
231     for (i = NumExtensions - 1; i >= 0; i--) {
232     if (Extensions[i]->TTXEnd != NULL) {
233     Extensions[i]->TTXEnd();
234     }
235     }
236    
237     for (i=0; i<NumExtensions; i++)
238     FreeLibrary(LibHandle[i]);
239    
240     for (i = 0; i < NumExtensions; i++) {
241     free(Extensions[i]);
242     }
243    
244     free(Extensions);
245     NumExtensions = 0;
246     }
247    
248     void PASCAL FAR TTXSetCommandLine(PCHAR cmd, int cmdlen, PGetHNRec rec) {
249     int i;
250    
251     for (i = 0; i < NumExtensions; i++) {
252     if (Extensions[i]->TTXSetCommandLine != NULL) {
253     Extensions[i]->TTXSetCommandLine(cmd, cmdlen, rec);
254     }
255     }
256     }

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