TFnHook へ渡すデータを WORD で分割せずに一つの long として扱うように変更。
Tera Term 2.3 の頃は Binary と Append の二つのフラグだけだったので
HIWORD / LOWORD で分けるのは簡略化の為有効だったが、現在は多数の
フラグが追加されてかえって分かりづらくなったので一つの値として
扱うようにした。
併せて、フラグのビット位置を変更しやすいようにマクロで隠すようにした。
@@ -99,6 +99,8 @@ | ||
99 | 99 | |
100 | 100 | void split_buffer(char *buffer, int delimiter, char **head, char **body); |
101 | 101 | |
102 | +#define CheckFlag(var, flag) (((var) & (flag)) != 0) | |
103 | + | |
102 | 104 | #ifdef __cplusplus |
103 | 105 | } |
104 | 106 | #endif |
@@ -217,6 +217,14 @@ | ||
217 | 217 | #define IdUtf8 5 |
218 | 218 | #define IdLangMax IdUtf8 |
219 | 219 | |
220 | +// LogDialog Option | |
221 | +#define LOGDLG_BINARY 1 | |
222 | +#define LOGDLG_APPEND (1 << 1) | |
223 | +#define LOGDLG_PLAINTEXT (1 << 2) | |
224 | +#define LOGDLG_TIMESTAMP (1 << 3) | |
225 | +#define LOGDLG_HIDEDIALOG (1 << 4) | |
226 | +#define LOGDLG_INCSCRBUFF (1 << 5) | |
227 | + | |
220 | 228 | // log flags (used in ts.LogFlag) |
221 | 229 | #define LOG_TEL 1 |
222 | 230 | #define LOG_KMT 2 |
@@ -512,72 +512,51 @@ | ||
512 | 512 | logdir = ts.HomeDir; |
513 | 513 | } |
514 | 514 | |
515 | - if (strlen(&(LogVar->FullName[LogVar->DirLen]))==0) | |
516 | - { | |
517 | - // LOWORD | |
518 | - // 0x0001 = Binary | |
519 | - // HIWORD | |
520 | - // 0x0001 = Append | |
521 | - // 0x1000 = plain text (2005.2.20 yutaka) | |
522 | - // 0x2000 = timestamp (2006.7.23 maya) | |
523 | - // 0x4000 = hide file transfer dialog (2008.1.30 maya) | |
524 | - // 0x8000 = Include screen buffer (2013.9.29 yutaka) | |
525 | - // teraterm.iniの設定を見てからデフォルトオプションを決める。(2005.5.7 yutaka) | |
526 | - Option = MAKELONG(ts.LogBinary, | |
527 | - ts.Append | | |
528 | - (0x1000 * ts.LogTypePlainText) | | |
529 | - (0x2000 * ts.LogTimestamp) | | |
530 | - (0x4000 * ts.LogHideDialog) | | |
531 | - (0x8000 * ts.LogAllBuffIncludedInFirst) | |
532 | - ); | |
515 | + if (strlen(&(LogVar->FullName[LogVar->DirLen]))==0) { | |
516 | + Option = 0; | |
517 | + if (ts.LogBinary) { | |
518 | + Option |= LOGDLG_BINARY; | |
519 | + } | |
520 | + if (ts.Append) { | |
521 | + Option |= LOGDLG_APPEND; | |
522 | + } | |
523 | + if (ts.LogTypePlainText) { | |
524 | + Option |= LOGDLG_PLAINTEXT; | |
525 | + } | |
526 | + if (ts.LogTimestamp) { | |
527 | + Option |= LOGDLG_TIMESTAMP; | |
528 | + } | |
529 | + if (ts.LogHideDialog) { | |
530 | + Option |= LOGDLG_HIDEDIALOG; | |
531 | + } | |
532 | + if (ts.LogAllBuffIncludedInFirst) { | |
533 | + Option |= LOGDLG_INCSCRBUFF; | |
534 | + } | |
533 | 535 | |
534 | 536 | // ログのデフォルトファイル名を設定 (2006.8.28 maya) |
535 | 537 | strncat_s(LogVar->FullName, sizeof(LogVar->FullName), ts.LogDefaultName, _TRUNCATE); |
536 | - | |
537 | 538 | ParseStrftimeFileName(LogVar->FullName, sizeof(LogVar->FullName)); |
538 | - | |
539 | - // &h をホスト名に置換 (2007.5.14) | |
540 | 539 | ConvertLogname(LogVar->FullName, sizeof(LogVar->FullName)); |
541 | 540 | |
542 | 541 | strncpy_s(LogVar->LogDefaultPath, sizeof(LogVar->LogDefaultPath), ts.LogDefaultPath, _TRUNCATE); |
543 | - if (! (*GetTransFname)(LogVar, logdir, GTF_LOG, &Option)) | |
544 | - { | |
542 | + if (! (*GetTransFname)(LogVar, logdir, GTF_LOG, &Option)) { | |
545 | 543 | FreeFileVar(&LogVar); |
546 | 544 | FreeTTFILE(); |
547 | 545 | return FALSE; |
548 | 546 | } |
549 | - ts.LogBinary = LOWORD(Option); | |
550 | - ts.Append = HIWORD(Option); | |
551 | 547 | |
552 | - if (ts.Append & 0x1000) { | |
553 | - ts.LogTypePlainText = 1; | |
554 | - } else { | |
555 | - ts.LogTypePlainText = 0; | |
556 | - } | |
557 | - | |
558 | - if (ts.Append & 0x2000) { | |
559 | - ts.LogTimestamp = 1; | |
560 | - } | |
561 | - else { | |
562 | - ts.LogTimestamp = 0; | |
563 | - } | |
564 | - | |
565 | - if (ts.Append & 0x4000) { | |
566 | - ts.LogHideDialog = 1; | |
567 | - } | |
568 | - else { | |
569 | - ts.LogHideDialog = 0; | |
570 | - } | |
571 | - | |
572 | - if (ts.Append & 0x8000) { | |
573 | - ts.LogAllBuffIncludedInFirst = 1; | |
574 | - } | |
575 | - else { | |
576 | - ts.LogAllBuffIncludedInFirst = 0; | |
577 | - } | |
578 | - | |
579 | - ts.Append &= 0x1; // 1bitにマスクする | |
580 | - | |
548 | + ts.LogBinary = CheckFlag(Option, LOGDLG_BINARY); | |
549 | + CheckFlag(Option, LOGDLG_BINARY); | |
550 | + ts.Append = | |
551 | + CheckFlag(Option, LOGDLG_APPEND); | |
552 | + ts.LogTypePlainText = | |
553 | + CheckFlag(Option, LOGDLG_PLAINTEXT); | |
554 | + ts.LogTimestamp = | |
555 | + CheckFlag(Option, LOGDLG_TIMESTAMP); | |
556 | + ts.LogHideDialog = | |
557 | + CheckFlag(Option, LOGDLG_HIDEDIALOG); | |
558 | + ts.LogAllBuffIncludedInFirst = | |
559 | + CheckFlag(Option, LOGDLG_INCSCRBUFF); | |
581 | 560 | } |
582 | 561 | else { |
583 | 562 | // LogVar->DirLen = 0 だとここに来る |
@@ -586,12 +565,11 @@ | ||
586 | 565 | |
587 | 566 | // フルパス化 |
588 | 567 | strncpy_s(FileName, sizeof(FileName), LogVar->FullName, _TRUNCATE); |
589 | - ConvFName(logdir,FileName,sizeof(FileName),"",LogVar->FullName,sizeof(LogVar->FullName)); | |
568 | + ConvFName(logdir, FileName, sizeof(FileName), "", LogVar->FullName, sizeof(LogVar->FullName)); | |
590 | 569 | |
591 | 570 | ParseStrftimeFileName(LogVar->FullName, sizeof(LogVar->FullName)); |
571 | + ConvertLogname(LogVar->FullName, sizeof(LogVar->FullName)); | |
592 | 572 | |
593 | - // &h をホスト名に置換 (2007.5.14) | |
594 | - ConvertLogname(LogVar->FullName, sizeof(LogVar->FullName)); | |
595 | 573 | (*SetFileVar)(LogVar); |
596 | 574 | |
597 | 575 | FixLogOption(); |
@@ -1111,7 +1089,7 @@ | ||
1111 | 1089 | extern "C" { |
1112 | 1090 | void FileSendStart() |
1113 | 1091 | { |
1114 | - LONG Option; | |
1092 | + LONG Option = 0; | |
1115 | 1093 | |
1116 | 1094 | if (! cv.Ready || FSend) return; |
1117 | 1095 | if (cv.ProtoFlag) |
@@ -1131,16 +1109,15 @@ | ||
1131 | 1109 | |
1132 | 1110 | FSend = TRUE; |
1133 | 1111 | |
1134 | - if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0) | |
1135 | - { | |
1136 | - Option = MAKELONG(ts.TransBin,0); | |
1112 | + if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0) { | |
1113 | + if (ts.TransBin) | |
1114 | + Option |= LOGDLG_BINARY; | |
1137 | 1115 | SendVar->FullName[0] = 0; |
1138 | - if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option)) | |
1139 | - { | |
1116 | + if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option)) { | |
1140 | 1117 | FileTransEnd(OpSendFile); |
1141 | 1118 | return; |
1142 | 1119 | } |
1143 | - ts.TransBin = LOWORD(Option); | |
1120 | + ts.TransBin = CheckFlag(Option, LOGDLG_BINARY); | |
1144 | 1121 | } |
1145 | 1122 | else |
1146 | 1123 | (*SetFileVar)(SendVar); |
@@ -1850,7 +1827,7 @@ | ||
1850 | 1827 | extern "C" { |
1851 | 1828 | void BPStart(int mode) |
1852 | 1829 | { |
1853 | - LONG Option; | |
1830 | + LONG Option = 0; | |
1854 | 1831 | |
1855 | 1832 | if (! ProtoStart()) |
1856 | 1833 | return; |
@@ -169,12 +169,57 @@ | ||
169 | 169 | return Ok; |
170 | 170 | } |
171 | 171 | |
172 | +void SetLogFlags(HWND Dialog) | |
173 | +{ | |
174 | + LPLONG pl; | |
175 | + WORD BinFlag, val; | |
176 | + long opt = 0; | |
177 | + | |
178 | + pl = (LPLONG)GetWindowLong(Dialog, DWL_USER); | |
179 | + if (pl) { | |
180 | + GetRB(Dialog, &BinFlag, IDC_FOPTBIN, IDC_FOPTBIN); | |
181 | + if (BinFlag) { | |
182 | + opt |= LOGDLG_BINARY; | |
183 | + } | |
184 | + | |
185 | + GetRB(Dialog, &val, IDC_FOPTAPPEND, IDC_FOPTAPPEND); | |
186 | + if (val) { | |
187 | + opt |= LOGDLG_APPEND; | |
188 | + } | |
189 | + | |
190 | + if (!BinFlag) { | |
191 | + GetRB(Dialog, &val, IDC_PLAINTEXT, IDC_PLAINTEXT); | |
192 | + if (val) { | |
193 | + opt |= LOGDLG_PLAINTEXT; | |
194 | + } | |
195 | + | |
196 | + GetRB(Dialog, &val, IDC_TIMESTAMP, IDC_TIMESTAMP); | |
197 | + if (val) { | |
198 | + opt |= LOGDLG_TIMESTAMP; | |
199 | + } | |
200 | + } | |
201 | + | |
202 | + GetRB(Dialog, &val, IDC_HIDEDIALOG, IDC_HIDEDIALOG); | |
203 | + if (val) { | |
204 | + opt |= LOGDLG_HIDEDIALOG; | |
205 | + } | |
206 | + | |
207 | + GetRB(Dialog, &val, IDC_ALLBUFF_INFIRST, IDC_ALLBUFF_INFIRST); | |
208 | + if (val) { | |
209 | + opt |= LOGDLG_INCSCRBUFF; | |
210 | + } | |
211 | + | |
212 | + *pl = opt; | |
213 | + } | |
214 | +} | |
215 | + | |
172 | 216 | /* Hook function for file name dialog box */ |
173 | 217 | BOOL CALLBACK LogFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam) |
174 | 218 | { |
175 | 219 | LPOPENFILENAME ofn; |
176 | - WORD Lo, Hi; | |
220 | + WORD BinFlag; | |
177 | 221 | LPLONG pl; |
222 | + long opt; | |
178 | 223 | LPOFNOTIFY notify; |
179 | 224 | char uimsg[MAX_UIMSG], uimsg2[MAX_UIMSG]; |
180 | 225 | LOGFONT logfont; |
@@ -184,6 +229,7 @@ | ||
184 | 229 | case WM_INITDIALOG: |
185 | 230 | ofn = (LPOPENFILENAME)lParam; |
186 | 231 | pl = (LPLONG)(ofn->lCustData); |
232 | + opt = *pl; | |
187 | 233 | SetWindowLong(Dialog, DWL_USER, (LONG)pl); |
188 | 234 | |
189 | 235 | font = (HFONT)SendMessage(Dialog, WM_GETFONT, 0, 0); |
@@ -223,42 +269,46 @@ | ||
223 | 269 | get_lang_msg("DLG_FOPT_ALLBUFFINFIRST", uimsg, sizeof(uimsg), uimsg2, UILanguageFile); |
224 | 270 | SetDlgItemText(Dialog, IDC_ALLBUFF_INFIRST, uimsg); |
225 | 271 | |
226 | - Lo = LOWORD(*pl) & 1; | |
227 | - Hi = HIWORD(*pl); | |
228 | - SetRB(Dialog,Lo,IDC_FOPTBIN,IDC_FOPTBIN); | |
229 | - ShowDlgItem(Dialog,IDC_FOPTAPPEND,IDC_FOPTAPPEND); | |
230 | - SetRB(Dialog,Hi & 1,IDC_FOPTAPPEND,IDC_FOPTAPPEND); | |
272 | + // Binary チェックボックス | |
273 | + BinFlag = CheckFlag(opt, LOGDLG_BINARY); | |
274 | + SetRB(Dialog, BinFlag, IDC_FOPTBIN, IDC_FOPTBIN); | |
231 | 275 | |
232 | - // plain textチェックボックスはデフォルトでON (2005.2.20 yutaka) | |
233 | - ShowDlgItem(Dialog,IDC_PLAINTEXT,IDC_PLAINTEXT); | |
234 | - if (Lo) { | |
276 | + // Append チェックボックス | |
277 | + ShowDlgItem(Dialog, IDC_FOPTAPPEND, IDC_FOPTAPPEND); | |
278 | + if (opt & LOGDLG_APPEND) { | |
279 | + SetRB(Dialog, 1, IDC_FOPTAPPEND, IDC_FOPTAPPEND); | |
280 | + } | |
281 | + | |
282 | + // Plain Text チェックボックス | |
283 | + ShowDlgItem(Dialog, IDC_PLAINTEXT, IDC_PLAINTEXT); | |
284 | + if (BinFlag) { | |
235 | 285 | // Binaryフラグが有効なときはチェックできない |
236 | - DisableDlgItem(Dialog,IDC_PLAINTEXT,IDC_PLAINTEXT); | |
286 | + DisableDlgItem(Dialog, IDC_PLAINTEXT, IDC_PLAINTEXT); | |
237 | 287 | } |
238 | - else if (Hi & 0x1000) { | |
239 | - SetRB(Dialog,1,IDC_PLAINTEXT,IDC_PLAINTEXT); | |
288 | + else if (opt & LOGDLG_PLAINTEXT) { | |
289 | + SetRB(Dialog, 1, IDC_PLAINTEXT, IDC_PLAINTEXT); | |
240 | 290 | } |
241 | 291 | |
242 | 292 | // timestampチェックボックス (2006.7.23 maya) |
243 | - ShowDlgItem(Dialog,IDC_TIMESTAMP,IDC_TIMESTAMP); | |
244 | - if (Lo) { | |
293 | + ShowDlgItem(Dialog, IDC_TIMESTAMP, IDC_TIMESTAMP); | |
294 | + if (BinFlag) { | |
245 | 295 | // Binaryフラグが有効なときはチェックできない |
246 | - DisableDlgItem(Dialog,IDC_TIMESTAMP,IDC_TIMESTAMP); | |
296 | + DisableDlgItem(Dialog, IDC_TIMESTAMP, IDC_TIMESTAMP); | |
247 | 297 | } |
248 | - else if (Hi & 0x2000) { | |
249 | - SetRB(Dialog,1,IDC_TIMESTAMP,IDC_TIMESTAMP); | |
298 | + else if (opt & LOGDLG_TIMESTAMP) { | |
299 | + SetRB(Dialog, 1, IDC_TIMESTAMP, IDC_TIMESTAMP); | |
250 | 300 | } |
251 | 301 | |
252 | 302 | // Hide dialogチェックボックス (2008.1.30 maya) |
253 | - ShowDlgItem(Dialog,IDC_HIDEDIALOG,IDC_HIDEDIALOG); | |
254 | - if (Hi & 0x4000) { | |
255 | - SetRB(Dialog,1,IDC_HIDEDIALOG,IDC_HIDEDIALOG); | |
303 | + ShowDlgItem(Dialog, IDC_HIDEDIALOG, IDC_HIDEDIALOG); | |
304 | + if (opt & LOGDLG_HIDEDIALOG) { | |
305 | + SetRB(Dialog, 1, IDC_HIDEDIALOG, IDC_HIDEDIALOG); | |
256 | 306 | } |
257 | 307 | |
258 | 308 | // Include screen bufferチェックボックス (2013.9.29 yutaka) |
259 | - ShowDlgItem(Dialog,IDC_ALLBUFF_INFIRST,IDC_ALLBUFF_INFIRST); | |
260 | - if (Hi & 0x8000) { | |
261 | - SetRB(Dialog,1,IDC_ALLBUFF_INFIRST,IDC_ALLBUFF_INFIRST); | |
309 | + ShowDlgItem(Dialog, IDC_ALLBUFF_INFIRST, IDC_ALLBUFF_INFIRST); | |
310 | + if (opt & LOGDLG_INCSCRBUFF) { | |
311 | + SetRB(Dialog, 1, IDC_ALLBUFF_INFIRST, IDC_ALLBUFF_INFIRST); | |
262 | 312 | } |
263 | 313 | |
264 | 314 | return TRUE; |
@@ -266,24 +316,24 @@ | ||
266 | 316 | case WM_COMMAND: // for old style dialog |
267 | 317 | switch (LOWORD(wParam)) { |
268 | 318 | case IDOK: |
269 | - pl = (LPLONG)GetWindowLong(Dialog,DWL_USER); | |
270 | - if (pl!=NULL) | |
271 | - { | |
272 | - GetRB(Dialog,&Lo,IDC_FOPTBIN,IDC_FOPTBIN); | |
273 | - Hi = HIWORD(*pl); | |
274 | - GetRB(Dialog,&Hi,IDC_FOPTAPPEND,IDC_FOPTAPPEND); | |
275 | - *pl = MAKELONG(Lo,Hi); | |
319 | + SetLogFlags(Dialog); | |
320 | + | |
321 | + if (DlgFoptFont != NULL) { | |
322 | + DeleteObject(DlgFoptFont); | |
276 | 323 | } |
277 | 324 | break; |
278 | 325 | case IDCANCEL: |
326 | + if (DlgFoptFont != NULL) { | |
327 | + DeleteObject(DlgFoptFont); | |
328 | + } | |
279 | 329 | break; |
280 | 330 | case IDC_FOPTBIN: |
281 | - GetRB(Dialog,&Lo,IDC_FOPTBIN,IDC_FOPTBIN); | |
282 | - if (Lo) { | |
283 | - DisableDlgItem(Dialog,IDC_PLAINTEXT,IDC_TIMESTAMP); | |
331 | + GetRB(Dialog, &BinFlag, IDC_FOPTBIN, IDC_FOPTBIN); | |
332 | + if (BinFlag) { | |
333 | + DisableDlgItem(Dialog, IDC_PLAINTEXT, IDC_TIMESTAMP); | |
284 | 334 | } |
285 | 335 | else { |
286 | - EnableDlgItem(Dialog,IDC_PLAINTEXT,IDC_TIMESTAMP); | |
336 | + EnableDlgItem(Dialog, IDC_PLAINTEXT, IDC_TIMESTAMP); | |
287 | 337 | } |
288 | 338 | break; |
289 | 339 | } |
@@ -292,43 +342,8 @@ | ||
292 | 342 | notify = (LPOFNOTIFY)lParam; |
293 | 343 | switch (notify->hdr.code) { |
294 | 344 | case CDN_FILEOK: |
295 | - pl = (LPLONG)GetWindowLong(Dialog,DWL_USER); | |
296 | - if (pl!=NULL) | |
297 | - { | |
298 | - WORD val = 0; | |
345 | + SetLogFlags(Dialog); | |
299 | 346 | |
300 | - GetRB(Dialog,&Lo,IDC_FOPTBIN,IDC_FOPTBIN); | |
301 | - Hi = HIWORD(*pl); | |
302 | - GetRB(Dialog,&Hi,IDC_FOPTAPPEND,IDC_FOPTAPPEND); | |
303 | - | |
304 | - if (!Lo) { | |
305 | - // plain text check-box | |
306 | - GetRB(Dialog,&val,IDC_PLAINTEXT,IDC_PLAINTEXT); | |
307 | - if (val > 0) { // checked | |
308 | - Hi |= 0x1000; | |
309 | - } | |
310 | - | |
311 | - // timestampチェックボックス (2006.7.23 maya) | |
312 | - GetRB(Dialog,&val,IDC_TIMESTAMP,IDC_TIMESTAMP); | |
313 | - if (val > 0) { | |
314 | - Hi |= 0x2000; | |
315 | - } | |
316 | - } | |
317 | - | |
318 | - // Hide dialogチェックボックス (2008.1.30 maya) | |
319 | - GetRB(Dialog,&val,IDC_HIDEDIALOG,IDC_HIDEDIALOG); | |
320 | - if (val > 0) { | |
321 | - Hi |= 0x4000; | |
322 | - } | |
323 | - | |
324 | - // Include screen bufferチェックボックス (2013.9.29 yutaka) | |
325 | - GetRB(Dialog,&val,IDC_ALLBUFF_INFIRST,IDC_ALLBUFF_INFIRST); | |
326 | - if (val > 0) { | |
327 | - Hi |= 0x8000; | |
328 | - } | |
329 | - | |
330 | - *pl = MAKELONG(Lo,Hi); | |
331 | - } | |
332 | 347 | if (DlgFoptFont != NULL) { |
333 | 348 | DeleteObject(DlgFoptFont); |
334 | 349 | } |
@@ -477,8 +492,7 @@ | ||
477 | 492 | |
478 | 493 | fv->DirLen = ofn.nFileOffset; |
479 | 494 | |
480 | - if (CurDir!=NULL) | |
481 | - { | |
495 | + if (CurDir!=NULL) { | |
482 | 496 | memcpy(CurDir,fv->FullName,fv->DirLen-1); |
483 | 497 | CurDir[fv->DirLen-1] = 0; |
484 | 498 | } |