Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/TTXSamples/TTXResizeMenu/TTXResizeMenu.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3221 - (show annotations) (download) (as text)
Tue Mar 24 09:37:20 2009 UTC (4 years, 2 months ago) by maya
File MIME type: text/x-csrc
File size: 5768 byte(s)
CVS から SVN へ移行: trunk に集約
1 #include "teraterm.h"
2 #include "tttypes.h"
3 #include "ttplugin.h"
4 #include "tt_res.h"
5 #include <stdlib.h>
6 #include <stdio.h>
7 #include <string.h>
8
9 #include "compat_w95.h"
10
11 #define ORDER 5900
12 #define SECTION "Resize Menu"
13
14 int def_resize_list[][2] = {
15 {80, 37},
16 {120, 52},
17 {80, 24},
18 {110, 37}
19 };
20
21 #define ID_MENUID_BASE 55101
22 #define MAX_MENU_ITEMS 20
23
24 static HANDLE hInst; /* Instance handle of TTX*.DLL */
25
26 typedef struct {
27 PTTSet ts;
28 PComVar cv;
29 HMENU ResizeMenu;
30 BOOL ReplaceTermDlg;
31 PReadIniFile origReadIniFile;
32 int MenuItems;
33 int ResizeList[MAX_MENU_ITEMS][2];
34 } TInstVar;
35
36 static TInstVar FAR * pvar;
37
38 /* WIN32 allows multiple instances of a DLL */
39 static TInstVar InstVar;
40
41 void InitMenu() {
42 int i, x, y;
43 char tmp[20];
44
45 if (pvar->ResizeMenu != NULL) {
46 DestroyMenu(pvar->ResizeMenu);
47 }
48
49 pvar->ResizeMenu = CreateMenu();
50
51 for (i=0; i < pvar->MenuItems; i++) {
52 x = pvar->ResizeList[i][0];
53 y = pvar->ResizeList[i][1];
54 if (i < 15) {
55 if (x == 0)
56 _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "height: %d(&%x)", y, i+1);
57 else if (y == 0)
58 _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "width: %d(&%x)", x, i+1);
59 else
60 _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%dx%d(&%x)", x, y, i+1);
61 }
62 else if (i < 35) {
63 if (x == 0)
64 _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "height: %d(&%c)", y, 'a' + i - 9);
65 else if (y == 0)
66 _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "width: %d(&%c)", x, 'a' + i - 9);
67 else
68 _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%dx%d(&%c)", x, y, 'a' + i - 9);
69 }
70 else {
71 if (x == 0)
72 _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "height: %d", y);
73 else if (y == 0)
74 _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "width: %d", x);
75 else
76 _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%dx%d", x, y);
77 }
78 InsertMenu(pvar->ResizeMenu, -1, MF_BYPOSITION, ID_MENUID_BASE+i, tmp);
79 }
80 }
81
82 static void PASCAL FAR TTXInit(PTTSet ts, PComVar cv) {
83 int i;
84
85 pvar->ts = ts;
86 pvar->cv = cv;
87 pvar->ReplaceTermDlg = FALSE;
88 pvar->ResizeMenu = NULL;
89
90 pvar->MenuItems = sizeof(def_resize_list)/sizeof(def_resize_list[0]);
91
92 for (i=0; i < pvar->MenuItems; i++) {
93 pvar->ResizeList[i][0] = def_resize_list[i][0];
94 pvar->ResizeList[i][1] = def_resize_list[i][1];
95 }
96
97 InitMenu();
98 }
99
100 static BOOL FAR PASCAL TTXSetupTerminal(HWND parent, PTTSet ts) {
101 pvar->ReplaceTermDlg = FALSE;
102 return (TRUE);
103 }
104
105 static void PASCAL FAR TTXGetUIHooks(TTXUIHooks FAR * hooks) {
106 if (pvar->ReplaceTermDlg) {
107 *hooks->SetupTerminal = TTXSetupTerminal;
108 }
109 return;
110 }
111
112 static void PASCAL FAR ResizeMenuReadIniFile(PCHAR fn, PTTSet ts) {
113 int i, x, y;
114 char Key[20], Buff[100];
115
116 (pvar->origReadIniFile)(fn, ts);
117
118 for (i=0; i<MAX_MENU_ITEMS; i++) {
119 _snprintf_s(Key, sizeof(Key), _TRUNCATE, "ResizeMenu%d", i+1);
120 GetPrivateProfileString(SECTION, Key, "\n", Buff, sizeof(Buff), fn);
121
122 if (sscanf_s(Buff, "%d , %d", &x, &y) == 2) {
123 if (x < 0 ) {
124 x = 0;
125 }
126
127 if (y < 0 ) {
128 y = 0;
129 }
130
131 if (x > TermWidthMax ) {
132 x = TermWidthMax;
133 }
134
135 if (y > TermHeightMax ) {
136 y = TermHeightMax;
137 }
138
139 if (x == 0 && y == 0) {
140 break;
141 }
142
143 pvar->ResizeList[i][0] = x;
144 pvar->ResizeList[i][1] = y;
145 }
146 else {
147 break;
148 }
149 }
150
151 if (i == 0) {
152 pvar->MenuItems = sizeof(def_resize_list)/sizeof(def_resize_list[0]);
153
154 for (i=0; i < pvar->MenuItems; i++) {
155 pvar->ResizeList[i][0] = def_resize_list[i][0];
156 pvar->ResizeList[i][1] = def_resize_list[i][1];
157 }
158 }
159 else {
160 pvar->MenuItems = i;
161 }
162 }
163
164 static void PASCAL FAR TTXGetSetupHooks(TTXSetupHooks FAR * hooks) {
165 pvar->origReadIniFile = *hooks->ReadIniFile;
166 *hooks->ReadIniFile = ResizeMenuReadIniFile;
167 }
168
169 static void PASCAL FAR TTXModifyMenu(HMENU menu) {
170 MENUITEMINFO mi;
171
172 InitMenu();
173
174 memset(&mi, 0, sizeof(mi));
175 mi.cbSize = sizeof(mi);
176 mi.fMask = MIIM_TYPE | MIIM_SUBMENU;
177 mi.fType = MFT_STRING;
178 mi.hSubMenu = pvar->ResizeMenu;
179 mi.dwTypeData = "Resi&ze";
180 InsertMenuItem(menu, ID_HELPMENU, FALSE, &mi);
181 }
182
183 static int PASCAL FAR TTXProcessCommand(HWND hWin, WORD cmd) {
184 int num;
185 if (cmd >= ID_MENUID_BASE && cmd < ID_MENUID_BASE + pvar->MenuItems) {
186 num = cmd - ID_MENUID_BASE;
187 if (pvar->ResizeList[num][0] > 0)
188 pvar->ts->TerminalWidth = pvar->ResizeList[num][0];
189 if (pvar->ResizeList[num][1] > 0)
190 pvar->ts->TerminalHeight = pvar->ResizeList[num][1];
191 pvar->ReplaceTermDlg = TRUE;
192
193 // Call Setup-Terminal dialog
194 SendMessage(hWin, WM_COMMAND, MAKELONG(ID_SETUP_TERMINAL, 0), 0);
195 return 1;
196 }
197 return 0;
198 }
199
200 static TTXExports Exports = {
201 sizeof(TTXExports),
202 ORDER,
203
204 TTXInit,
205 TTXGetUIHooks,
206 TTXGetSetupHooks,
207 NULL, // TTXOpenTCP,
208 NULL, // TTXCloseTCP,
209 NULL, // TTXSetWinSize,
210 TTXModifyMenu,
211 NULL, // TTXModifyPopupMenu,
212 TTXProcessCommand,
213 NULL, // TTXEnd
214 };
215
216 BOOL __declspec(dllexport) PASCAL FAR TTXBind(WORD Version, TTXExports FAR * exports) {
217 int size = sizeof(Exports) - sizeof(exports->size);
218
219 if (size > exports->size) {
220 size = exports->size;
221 }
222 memcpy((char FAR *)exports + sizeof(exports->size),
223 (char FAR *)&Exports + sizeof(exports->size),
224 size);
225 return TRUE;
226 }
227
228 BOOL WINAPI DllMain(HANDLE hInstance, ULONG ul_reason, LPVOID lpReserved)
229 {
230 switch (ul_reason) {
231 case DLL_THREAD_ATTACH:
232 /* do thread initialization */
233 break;
234 case DLL_THREAD_DETACH:
235 /* do thread cleanup */
236 break;
237 case DLL_PROCESS_ATTACH:
238 /* do process initialization */
239 DoCover_IsDebuggerPresent();
240 hInst = hInstance;
241 pvar = &InstVar;
242 break;
243 case DLL_PROCESS_DETACH:
244 /* do process cleanup */
245 break;
246 }
247 return TRUE;
248 }

Properties

Name Value
svn:executable *

SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.