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 2476 - (hide annotations) (download) (as text)
Mon Apr 14 17:35:50 2008 UTC (16 years ago) by maya
Original Path: teraterm/trunk/teraterm/ttplug.c
File MIME type: text/x-csrc
File size: 6077 byte(s)
ファイル移動に伴う修正

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

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