• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision6946 (tree)
Time2017-10-17 18:38:20
Authordoda

Log Message

TFnHook へ渡すデータを WORD で分割せずに一つの long として扱うように変更。

Tera Term 2.3 の頃は Binary と Append の二つのフラグだけだったので
HIWORD / LOWORD で分けるのは簡略化の為有効だったが、現在は多数の
フラグが追加されてかえって分かりづらくなったので一つの値として
扱うようにした。

併せて、フラグのビット位置を変更しやすいようにマクロで隠すようにした。

Change Summary

Incremental Difference

--- trunk/teraterm/common/ttlib.h (revision 6945)
+++ trunk/teraterm/common/ttlib.h (revision 6946)
@@ -99,6 +99,8 @@
9999
100100 void split_buffer(char *buffer, int delimiter, char **head, char **body);
101101
102+#define CheckFlag(var, flag) (((var) & (flag)) != 0)
103+
102104 #ifdef __cplusplus
103105 }
104106 #endif
--- trunk/teraterm/common/tttypes.h (revision 6945)
+++ trunk/teraterm/common/tttypes.h (revision 6946)
@@ -217,6 +217,14 @@
217217 #define IdUtf8 5
218218 #define IdLangMax IdUtf8
219219
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+
220228 // log flags (used in ts.LogFlag)
221229 #define LOG_TEL 1
222230 #define LOG_KMT 2
--- trunk/teraterm/teraterm/filesys.cpp (revision 6945)
+++ trunk/teraterm/teraterm/filesys.cpp (revision 6946)
@@ -512,72 +512,51 @@
512512 logdir = ts.HomeDir;
513513 }
514514
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+ }
533535
534536 // ログのデフォルトファイル名を設定 (2006.8.28 maya)
535537 strncat_s(LogVar->FullName, sizeof(LogVar->FullName), ts.LogDefaultName, _TRUNCATE);
536-
537538 ParseStrftimeFileName(LogVar->FullName, sizeof(LogVar->FullName));
538-
539- // &h をホスト名に置換 (2007.5.14)
540539 ConvertLogname(LogVar->FullName, sizeof(LogVar->FullName));
541540
542541 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)) {
545543 FreeFileVar(&LogVar);
546544 FreeTTFILE();
547545 return FALSE;
548546 }
549- ts.LogBinary = LOWORD(Option);
550- ts.Append = HIWORD(Option);
551547
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);
581560 }
582561 else {
583562 // LogVar->DirLen = 0 だとここに来る
@@ -586,12 +565,11 @@
586565
587566 // フルパス化
588567 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));
590569
591570 ParseStrftimeFileName(LogVar->FullName, sizeof(LogVar->FullName));
571+ ConvertLogname(LogVar->FullName, sizeof(LogVar->FullName));
592572
593- // &h をホスト名に置換 (2007.5.14)
594- ConvertLogname(LogVar->FullName, sizeof(LogVar->FullName));
595573 (*SetFileVar)(LogVar);
596574
597575 FixLogOption();
@@ -1111,7 +1089,7 @@
11111089 extern "C" {
11121090 void FileSendStart()
11131091 {
1114- LONG Option;
1092+ LONG Option = 0;
11151093
11161094 if (! cv.Ready || FSend) return;
11171095 if (cv.ProtoFlag)
@@ -1131,16 +1109,15 @@
11311109
11321110 FSend = TRUE;
11331111
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;
11371115 SendVar->FullName[0] = 0;
1138- if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option))
1139- {
1116+ if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option)) {
11401117 FileTransEnd(OpSendFile);
11411118 return;
11421119 }
1143- ts.TransBin = LOWORD(Option);
1120+ ts.TransBin = CheckFlag(Option, LOGDLG_BINARY);
11441121 }
11451122 else
11461123 (*SetFileVar)(SendVar);
@@ -1850,7 +1827,7 @@
18501827 extern "C" {
18511828 void BPStart(int mode)
18521829 {
1853- LONG Option;
1830+ LONG Option = 0;
18541831
18551832 if (! ProtoStart())
18561833 return;
--- trunk/teraterm/ttpfile/ttfile.c (revision 6945)
+++ trunk/teraterm/ttpfile/ttfile.c (revision 6946)
@@ -169,12 +169,57 @@
169169 return Ok;
170170 }
171171
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+
172216 /* Hook function for file name dialog box */
173217 BOOL CALLBACK LogFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)
174218 {
175219 LPOPENFILENAME ofn;
176- WORD Lo, Hi;
220+ WORD BinFlag;
177221 LPLONG pl;
222+ long opt;
178223 LPOFNOTIFY notify;
179224 char uimsg[MAX_UIMSG], uimsg2[MAX_UIMSG];
180225 LOGFONT logfont;
@@ -184,6 +229,7 @@
184229 case WM_INITDIALOG:
185230 ofn = (LPOPENFILENAME)lParam;
186231 pl = (LPLONG)(ofn->lCustData);
232+ opt = *pl;
187233 SetWindowLong(Dialog, DWL_USER, (LONG)pl);
188234
189235 font = (HFONT)SendMessage(Dialog, WM_GETFONT, 0, 0);
@@ -223,42 +269,46 @@
223269 get_lang_msg("DLG_FOPT_ALLBUFFINFIRST", uimsg, sizeof(uimsg), uimsg2, UILanguageFile);
224270 SetDlgItemText(Dialog, IDC_ALLBUFF_INFIRST, uimsg);
225271
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);
231275
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) {
235285 // Binaryフラグが有効なときはチェックできない
236- DisableDlgItem(Dialog,IDC_PLAINTEXT,IDC_PLAINTEXT);
286+ DisableDlgItem(Dialog, IDC_PLAINTEXT, IDC_PLAINTEXT);
237287 }
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);
240290 }
241291
242292 // 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) {
245295 // Binaryフラグが有効なときはチェックできない
246- DisableDlgItem(Dialog,IDC_TIMESTAMP,IDC_TIMESTAMP);
296+ DisableDlgItem(Dialog, IDC_TIMESTAMP, IDC_TIMESTAMP);
247297 }
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);
250300 }
251301
252302 // 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);
256306 }
257307
258308 // 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);
262312 }
263313
264314 return TRUE;
@@ -266,24 +316,24 @@
266316 case WM_COMMAND: // for old style dialog
267317 switch (LOWORD(wParam)) {
268318 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);
276323 }
277324 break;
278325 case IDCANCEL:
326+ if (DlgFoptFont != NULL) {
327+ DeleteObject(DlgFoptFont);
328+ }
279329 break;
280330 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);
284334 }
285335 else {
286- EnableDlgItem(Dialog,IDC_PLAINTEXT,IDC_TIMESTAMP);
336+ EnableDlgItem(Dialog, IDC_PLAINTEXT, IDC_TIMESTAMP);
287337 }
288338 break;
289339 }
@@ -292,43 +342,8 @@
292342 notify = (LPOFNOTIFY)lParam;
293343 switch (notify->hdr.code) {
294344 case CDN_FILEOK:
295- pl = (LPLONG)GetWindowLong(Dialog,DWL_USER);
296- if (pl!=NULL)
297- {
298- WORD val = 0;
345+ SetLogFlags(Dialog);
299346
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- }
332347 if (DlgFoptFont != NULL) {
333348 DeleteObject(DlgFoptFont);
334349 }
@@ -477,8 +492,7 @@
477492
478493 fv->DirLen = ofn.nFileOffset;
479494
480- if (CurDir!=NULL)
481- {
495+ if (CurDir!=NULL) {
482496 memcpy(CurDir,fv->FullName,fv->DirLen-1);
483497 CurDir[fv->DirLen-1] = 0;
484498 }
Show on old repository browser