Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Contents of /trunk/teraterm/teraterm/ttwinman.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3227 - (show annotations) (download) (as text)
Tue Mar 24 15:10:33 2009 UTC (15 years, 1 month ago) by maya
File MIME type: text/x-csrc
File size: 8255 byte(s)
CVS から SVN へ移行: 改行コードを LF から CR+LF へ変換
1 /* Tera Term
2 Copyright(C) 1994-1998 T. Teranishi
3 All rights reserved. */
4
5 /* TERATERM.EXE, variables, flags related to VT win and TEK win */
6
7 #include "teraterm.h"
8 #include "tttypes.h"
9 #include <stdio.h>
10 #include <string.h>
11 #include <malloc.h>
12 #include "ttlib.h"
13 #include "helpid.h"
14 #include "htmlhelp.h"
15 #include "i18n.h"
16 #include "commlib.h"
17
18 /* help file names */
19 #define HTML_HELP "teraterm.chm"
20
21 HWND HVTWin = NULL;
22 HWND HTEKWin = NULL;
23
24 int ActiveWin = IdVT; /* IdVT, IdTEK */
25 int TalkStatus = IdTalkKeyb; /* IdTalkKeyb, IdTalkCB, IdTalkTextFile */
26 BOOL KeybEnabled = TRUE; /* keyboard switch */
27 BOOL Connecting = FALSE;
28
29 /* 'help' button on dialog box */
30 WORD MsgDlgHelp;
31 LONG HelpId;
32
33 TTTSet ts;
34 TComVar cv;
35
36 /* pointers to window objects */
37 void* pVTWin = NULL;
38 void* pTEKWin = NULL;
39 /* instance handle */
40 HINSTANCE hInst;
41
42 int SerialNo;
43
44 void VTActivate()
45 {
46 ActiveWin = IdVT;
47 ShowWindow(HVTWin, SW_SHOWNORMAL);
48 SetFocus(HVTWin);
49 }
50
51
52 // タイトルバーのCP932への変換を行う
53 // 現在、SJIS、EUCのみに対応。
54 // (2005.3.13 yutaka)
55 void ConvertToCP932(char *str, int destlen)
56 {
57 #define IS_SJIS(n) (ts.KanjiCode == IdSJIS && IsDBCSLeadByte(n))
58 #define IS_EUC(n) (ts.KanjiCode == IdEUC && (n & 0x80))
59 extern WORD FAR PASCAL JIS2SJIS(WORD KCode);
60 int len = strlen(str);
61 char *cc = _alloca(len + 1);
62 char *c = cc;
63 int i;
64 unsigned char b;
65 WORD word;
66
67 if (strcmp(ts.Locale, DEFAULT_LOCALE) == 0) {
68 for (i = 0 ; i < len ; i++) {
69 b = str[i];
70 if (IS_SJIS(b) || IS_EUC(b)) {
71 word = b<<8;
72
73 if (i == len - 1) {
74 *c++ = b;
75 continue;
76 }
77
78 b = str[i + 1];
79 word |= b;
80 i++;
81
82 if (ts.KanjiCode == IdSJIS) {
83 // SJISはそのままCP932として出力する
84
85 } else if (ts.KanjiCode == IdEUC) {
86 // EUC -> SJIS
87 word &= ~0x8080;
88 word = JIS2SJIS(word);
89
90 } else if (ts.KanjiCode == IdJIS) {
91
92 } else if (ts.KanjiCode == IdUTF8) {
93
94 } else if (ts.KanjiCode == IdUTF8m) {
95
96 } else {
97
98 }
99
100 *c++ = word >> 8;
101 *c++ = word & 0xff;
102
103 } else {
104 *c++ = b;
105 }
106 }
107
108 *c = '\0';
109 strncpy_s(str, destlen, cc, _TRUNCATE);
110 }
111 }
112
113 // キャプションの変更
114 //
115 // (2005.2.19 yutaka) format ID=13の新規追加、COM5以上の表示に対応
116 // (2005.3.13 yutaka) タイトルのSJISへの変換(日本語)を追加
117 // (2006.6.15 maya) ts.KanjiCodeがEUCだと、SJISでもEUCとして
118 // 変換してしまうので、ここでは変換しない
119 // (2007.7.19 maya) TCP ポート番号 と シリアルポートのボーレートの表示に対応
120 /*
121 * TitleFormat
122 * 0 0 0 0 0 0 (2)
123 * | | | | | +----- displays TCP host/serial port
124 * | | | | +------- displays session no
125 * | | | +--------- displays VT/TEK
126 * | | +----------- displays TCP host/serial port first
127 * | +------------- displays TCP port number
128 * +--------------- displays baud rate of serial port
129 */
130 void ChangeTitle()
131 {
132 char TempTitle[HostNameMaxLength + TitleBuffSize * 2 + 1]; // バッファ拡張
133 char TempTitleWithRemote[TitleBuffSize * 2];
134
135 if (Connecting || !cv.Ready || strlen(cv.TitleRemote) == 0) {
136 strncpy_s(TempTitleWithRemote, sizeof(TempTitleWithRemote), ts.Title, _TRUNCATE);
137 strncpy_s(TempTitle, sizeof(TempTitle), ts.Title, _TRUNCATE);
138 }
139 else {
140 // リモートからのタイトルを別に扱う (2008.11.1 maya)
141 if (ts.AcceptTitleChangeRequest == IdTitleChangeRequestOff) {
142 strncpy_s(TempTitleWithRemote, sizeof(TempTitleWithRemote), ts.Title, _TRUNCATE);
143 }
144 else if (ts.AcceptTitleChangeRequest == IdTitleChangeRequestAhead) {
145 _snprintf_s(TempTitleWithRemote, sizeof(TempTitleWithRemote), _TRUNCATE,
146 "%s %s", cv.TitleRemote, ts.Title);
147 }
148 else if (ts.AcceptTitleChangeRequest == IdTitleChangeRequestLast) {
149 _snprintf_s(TempTitleWithRemote, sizeof(TempTitleWithRemote), _TRUNCATE,
150 "%s %s", ts.Title, cv.TitleRemote);
151 }
152 else {
153 strncpy_s(TempTitleWithRemote, sizeof(TempTitleWithRemote), cv.TitleRemote, _TRUNCATE);
154 }
155 strncpy_s(TempTitle, sizeof(TempTitle), TempTitleWithRemote, _TRUNCATE);
156 }
157
158 if ((ts.TitleFormat & 1)!=0)
159 { // host name
160 strncat_s(TempTitle,sizeof(TempTitle), " - ",_TRUNCATE);
161 if (Connecting) {
162 get_lang_msg("DLG_MAIN_TITLE_CONNECTING", ts.UIMsg, sizeof(ts.UIMsg), "[connecting...]", ts.UILanguageFile);
163 strncat_s(TempTitle,sizeof(TempTitle),ts.UIMsg,_TRUNCATE);
164 }
165 else if (! cv.Ready) {
166 get_lang_msg("DLG_MAIN_TITLE_DISCONNECTED", ts.UIMsg, sizeof(ts.UIMsg), "[disconnected]", ts.UILanguageFile);
167 strncat_s(TempTitle,sizeof(TempTitle),ts.UIMsg,_TRUNCATE);
168 }
169 else if (cv.PortType==IdSerial)
170 {
171 // COM5 overに対応
172 char str[20]; // COMxx:xxxxxxbaud
173 if (ts.TitleFormat & 32) {
174 _snprintf_s(str, sizeof(str), _TRUNCATE, "COM%d:%dbaud", ts.ComPort, GetCommSerialBaudRate(ts.Baud));
175 }
176 else {
177 _snprintf_s(str, sizeof(str), _TRUNCATE, "COM%d", ts.ComPort);
178 }
179
180 if (ts.TitleFormat & 8) {
181 _snprintf_s(TempTitle, sizeof(TempTitle), _TRUNCATE, "%s - %s", str, TempTitleWithRemote);
182 } else {
183 strncat_s(TempTitle, sizeof(TempTitle), str, _TRUNCATE);
184 }
185 }
186 else {
187 char str[sizeof(TempTitle)];
188 if (ts.TitleFormat & 16) {
189 _snprintf_s(str, sizeof(str), _TRUNCATE, "%s:%d", ts.HostName, ts.TCPPort);
190 }
191 else {
192 strncpy_s(str, sizeof(str), ts.HostName, _TRUNCATE);
193 }
194
195 if (ts.TitleFormat & 8) {
196 // format ID = 13(8 + 5): <hots/port> - <title>
197 _snprintf_s(TempTitle, sizeof(TempTitle), _TRUNCATE, "%s - %s", str, TempTitleWithRemote);
198 }
199 else {
200 strncat_s(TempTitle, sizeof(TempTitle), ts.HostName, _TRUNCATE);
201 }
202 }
203 }
204
205 if ((ts.TitleFormat & 2)!=0)
206 { // serial no.
207 char Num[11];
208 strncat_s(TempTitle,sizeof(TempTitle)," (",_TRUNCATE);
209 _snprintf_s(Num,sizeof(Num),_TRUNCATE,"%u",SerialNo);
210 strncat_s(TempTitle,sizeof(TempTitle),Num,_TRUNCATE);
211 strncat_s(TempTitle,sizeof(TempTitle),")",_TRUNCATE);
212 }
213
214 if ((ts.TitleFormat & 4)!=0) // VT
215 strncat_s(TempTitle,sizeof(TempTitle)," VT",_TRUNCATE);
216
217 SetWindowText(HVTWin,TempTitle);
218
219 if (HTEKWin!=0)
220 {
221 if ((ts.TitleFormat & 4)!=0) // TEK
222 {
223 strncat_s(TempTitle,sizeof(TempTitle)," TEK",_TRUNCATE);
224 }
225 SetWindowText(HTEKWin,TempTitle);
226 }
227 }
228
229 void SwitchMenu()
230 {
231 HWND H1, H2;
232
233 if (ActiveWin==IdVT)
234 {
235 H1 = HTEKWin;
236 H2 = HVTWin;
237 }
238 else {
239 H1 = HVTWin;
240 H2 = HTEKWin;
241 }
242
243 if (H1!=0)
244 PostMessage(H1,WM_USER_CHANGEMENU,0,0);
245 if (H2!=0)
246 PostMessage(H2,WM_USER_CHANGEMENU,0,0);
247 }
248
249 void SwitchTitleBar()
250 {
251 HWND H1, H2;
252
253 if (ActiveWin==IdVT)
254 {
255 H1 = HTEKWin;
256 H2 = HVTWin;
257 }
258 else {
259 H1 = HVTWin;
260 H2 = HTEKWin;
261 }
262
263 if (H1!=0)
264 PostMessage(H1,WM_USER_CHANGETBAR,0,0);
265 if (H2!=0)
266 PostMessage(H2,WM_USER_CHANGETBAR,0,0);
267 }
268
269 void OpenHelp(HWND HWin, UINT Command, DWORD Data)
270 {
271 char HelpFN[MAXPATHLEN];
272
273 get_lang_msg("HELPFILE", ts.UIMsg, sizeof(ts.UIMsg), HTML_HELP, ts.UILanguageFile);
274
275 // ヘルプのオーナーは常にデスクトップになる (2007.5.12 maya)
276 HWin = GetDesktopWindow();
277 _snprintf_s(HelpFN, sizeof(HelpFN), _TRUNCATE, "%s\\%s", ts.HomeDir, ts.UIMsg);
278 if (HtmlHelp(HWin, HelpFN, Command, Data) == NULL && Command != HH_CLOSE_ALL) {
279 char buf[MAXPATHLEN];
280 get_lang_msg("MSG_OPENHELP_ERROR", ts.UIMsg, sizeof(ts.UIMsg), "Can't open HTML help file(%s).", ts.UILanguageFile);
281 _snprintf_s(buf, sizeof(buf), _TRUNCATE, ts.UIMsg, HelpFN);
282 MessageBox(HWin, buf, "Tera Term: HTML help", MB_OK | MB_ICONERROR);
283 }
284 }
285
286 // HTML help を開く
287 // HTML Help workshopに含まれる htmlhelp.h と htmlhelp.lib の2つのファイルが、ビルド時に必要。
288 // (2006.3.11 yutaka)
289 #if 0
290 void OpenHtmlHelp(HWND HWin, char *filename)
291 {
292 char HelpFN[MAXPATHLEN];
293
294 _snprintf(HelpFN, sizeof(HelpFN), "%s\\%s", ts.HomeDir, filename);
295 // HTMLヘルプのオーナーをTera Termからデスクトップへ変更 (2006.4.7 yutaka)
296 if (HtmlHelp(GetDesktopWindow(), HelpFN, HH_DISPLAY_TOPIC, 0) == NULL) {
297 char buf[MAXPATHLEN];
298 _snprintf(buf, sizeof(buf), "Can't open HTML help file(%s).", HelpFN);
299 MessageBox(HWin, buf, "Tera Term: HTML help", MB_OK | MB_ICONERROR);
300 }
301 }
302 #endif

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