Develop and Download Open Source Software

Browse CVS Repository

Diff of /ttssh2/teraterm/source/teraterm/filesys.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.4 by maya, Sat Jul 22 16:15:54 2006 UTC revision 1.14 by maya, Thu May 31 14:39:05 2007 UTC
# Line 64  PProtoCancel ProtoCancel; Line 64  PProtoCancel ProtoCancel;
64  #define IdProtoTimeOutProc 9  #define IdProtoTimeOutProc 9
65  #define IdProtoCancel    10  #define IdProtoCancel    10
66    
67    /*
68       Line Head flag for timestamping
69       2007.05.24 Gentaro
70    */
71    enum enumLineEnd {
72            Line_Other = 0,
73            Line_LineHead = 1,
74            Line_FileHead = 2,
75    };
76    
77    enum enumLineEnd eLineEnd = Line_LineHead;
78    
79  BOOL LoadTTFILE()  BOOL LoadTTFILE()
80  {  {
81    BOOL Err;    BOOL Err;
# Line 165  static PProtoDlg PtDlg = NULL; Line 177  static PProtoDlg PtDlg = NULL;
177  BOOL OpenFTDlg(PFileVar fv)  BOOL OpenFTDlg(PFileVar fv)
178  {  {
179    PFileTransDlg FTDlg;    PFileTransDlg FTDlg;
180    #ifdef I18N
181      HWND HFTDlg;
182    #endif
183    
184    FTDlg = new CFileTransDlg();    FTDlg = new CFileTransDlg();
185        
186    if (FTDlg!=NULL)    if (FTDlg!=NULL)
187    {    {
188    #ifdef I18N
189        FTDlg->Create(fv, &cv, &ts);
190    #else
191      FTDlg->Create(fv, &cv);      FTDlg->Create(fv, &cv);
192    #endif
193      FTDlg->RefreshNum();      FTDlg->RefreshNum();
194      if (fv->OpId == OpLog)      if (fv->OpId == OpLog)
195        FTDlg->ShowWindow(SW_MINIMIZE);        FTDlg->ShowWindow(SW_MINIMIZE);
# Line 181  BOOL OpenFTDlg(PFileVar fv) Line 200  BOOL OpenFTDlg(PFileVar fv)
200    else    else
201      SendDlg = FTDlg; /* File send */      SendDlg = FTDlg; /* File send */
202    
203    #ifdef I18N
204      HFTDlg=FTDlg->GetSafeHwnd();
205    
206      GetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, ts.UIMsg, sizeof(ts.UIMsg));
207      get_lang_msg("DLG_FILETRANS_FILENAME", ts.UIMsg, ts.UILanguageFile);
208      SetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, ts.UIMsg);
209      GetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, ts.UIMsg, sizeof(ts.UIMsg));
210      get_lang_msg("DLG_FILETRANS_FULLPATH", ts.UIMsg, ts.UILanguageFile);
211      SetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, ts.UIMsg);
212      GetDlgItemText(HFTDlg, IDC_TRANS_TRANS, ts.UIMsg, sizeof(ts.UIMsg));
213      get_lang_msg("DLG_FILETRANS_TRNAS", ts.UIMsg, ts.UILanguageFile);
214      SetDlgItemText(HFTDlg, IDC_TRANS_TRANS, ts.UIMsg);
215      GetDlgItemText(HFTDlg, IDCANCEL, ts.UIMsg, sizeof(ts.UIMsg));
216      get_lang_msg("BTN_CANCEL", ts.UIMsg, ts.UILanguageFile);
217      SetDlgItemText(HFTDlg, IDCANCEL, ts.UIMsg);
218      GetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, ts.UIMsg, sizeof(ts.UIMsg));
219      get_lang_msg("DLG_FILETRANS_PAUSE", ts.UIMsg, ts.UILanguageFile);
220      SetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, ts.UIMsg);
221      GetDlgItemText(HFTDlg, IDC_TRANSHELP, ts.UIMsg, sizeof(ts.UIMsg));
222      get_lang_msg("BTN_HELP", ts.UIMsg, ts.UILanguageFile);
223      SetDlgItemText(HFTDlg, IDC_TRANSHELP, ts.UIMsg);
224    #endif
225    
226    return (FTDlg!=NULL);    return (FTDlg!=NULL);
227  }  }
228    
# Line 221  void FreeFileVar(PFileVar *fv) Line 263  void FreeFileVar(PFileVar *fv)
263    }    }
264  }  }
265    
266    // &h をホスト名に置換 (2007.5.14)
267    void ConvertLogname(char *c)
268    {
269      char buf[MAXPATHLEN], buf2[MAXPATHLEN], *p = c;
270    
271      memset(buf, 0, sizeof(buf));
272    
273      while(*p != '\0') {
274        if (*p == '&' && *(p+1) != '\0') {
275          switch (*(p+1)) {
276            case 'h':
277              if (cv.Open) {
278                if (cv.PortType == IdTCPIP) {
279                  _snprintf(buf2, sizeof(buf2), "%s%s", buf, ts.HostName);
280                  strncpy(buf, buf2, sizeof(buf)-strlen(buf)-1);
281                }
282                else if (cv.PortType == IdSerial) {
283                  _snprintf(buf2, sizeof(buf2), "%sCOM%d", buf, ts.ComPort);
284                  strncpy(buf, buf2, sizeof(buf)-strlen(buf)-1);
285                }
286              }
287              break;
288            default:
289              if (strlen(buf) < sizeof(buf)-3) {
290                strncat(buf, p, 2);
291              }
292          }
293          p++;
294        }
295        else {
296              if (strlen(buf) < sizeof(buf)-2) {
297                strncat(buf, p, 1);
298              }
299        }
300        p++;
301      }
302      strcpy(c, buf);
303    }
304    
305  extern "C" {  extern "C" {
306  void LogStart()  void LogStart()
307  {  {
308          LONG Option;          LONG Option;
309            char *logdir;
310    
311          if ((FileLog) || (BinLog)) return;          if ((FileLog) || (BinLog)) return;
312    
# Line 236  void LogStart() Line 318  void LogStart()
318          }          }
319          LogVar->OpId = OpLog;          LogVar->OpId = OpLog;
320    
321            if (strlen(ts.LogDefaultPath) > 0) {
322                    logdir = ts.LogDefaultPath;
323            }
324            else if (strlen(ts.FileDir) > 0) {
325                    logdir = ts.FileDir;
326            }
327            else {
328                    logdir = ts.HomeDir;
329            }
330    
331          if (strlen(&(LogVar->FullName[LogVar->DirLen]))==0)          if (strlen(&(LogVar->FullName[LogVar->DirLen]))==0)
332          {          {
333                  // LOWORD                  // LOWORD
# Line 248  void LogStart() Line 340  void LogStart()
340                  Option = MAKELONG(ts.TransBin,ts.Append |                  Option = MAKELONG(ts.TransBin,ts.Append |
341                                                    (0x1000 * ts.LogTypePlainText) |                                                    (0x1000 * ts.LogTypePlainText) |
342                                                    (0x2000 * ts.LogTimestamp));                                                    (0x2000 * ts.LogTimestamp));
343                  if (! (*GetTransFname)(LogVar, ts.FileDir, GTF_LOG, &Option))  
344                    // ログのデフォルトファイル名を設定 (2006.8.28 maya)
345                    strncat(LogVar->FullName, ts.LogDefaultName, sizeof(LogVar->FullName)-1);
346                    LogVar->FullName[sizeof(LogVar->FullName)-1] = '\0';
347    
348                    ParseStrftimeFileName(LogVar->FullName);
349    
350                    // &h をホスト名に置換 (2007.5.14)
351                    ConvertLogname(LogVar->FullName);
352    
353                    if (! (*GetTransFname)(LogVar, logdir, GTF_LOG, &Option))
354                  {                  {
355                          FreeFileVar(&LogVar);                          FreeFileVar(&LogVar);
356                          FreeTTFILE();                          FreeTTFILE();
# Line 273  void LogStart() Line 375  void LogStart()
375                  ts.Append &= 0x1; // 1bitにマスクする                  ts.Append &= 0x1; // 1bitにマスクする
376    
377          }          }
378          else          else {
379                    // LogVar->DirLen = 0 だとここに来る
380                    // フルパス・相対パスともに LogVar->FullName に入れておく必要がある
381                    char FileName[MAX_PATH];
382    
383                    // フルパス化
384                    strncpy(FileName, LogVar->FullName, sizeof(FileName)-1);
385                    FileName[sizeof(FileName)-1] = '\0';
386                    ConvFName(logdir,FileName,"",LogVar->FullName);
387    
388                    ParseStrftimeFileName(LogVar->FullName);
389    
390                    // &h をホスト名に置換 (2007.5.14)
391                    ConvertLogname(LogVar->FullName);
392                  (*SetFileVar)(LogVar);                  (*SetFileVar)(LogVar);
393            }
394    
395          if (ts.TransBin > 0)          if (ts.TransBin > 0)
396          {          {
# Line 299  void LogStart() Line 415  void LogStart()
415          cv.LCount = 0;          cv.LCount = 0;
416    
417          HelpId = HlpFileLog;          HelpId = HlpFileLog;
418            /* 2007.05.24 Gentaro */
419            eLineEnd = Line_LineHead;
420    
421          if (ts.Append > 0)          if (ts.Append > 0)
422          {          {
423                  LogVar->FileHandle = _lopen(LogVar->FullName,OF_WRITE);                  LogVar->FileHandle = _lopen(LogVar->FullName,OF_WRITE);
424                  if (LogVar->FileHandle>0)                  if (LogVar->FileHandle>0){
425                          _llseek(LogVar->FileHandle,0,2);                          _llseek(LogVar->FileHandle,0,2);
426                            /* 2007.05.24 Gentaro
427                                    If log file already exists,
428                                    a newline is inserted before the first timestamp.
429                            */
430                            eLineEnd = Line_FileHead;
431                    }
432                  else                  else
433                          LogVar->FileHandle = _lcreat(LogVar->FullName,0);                          LogVar->FileHandle = _lcreat(LogVar->FullName,0);
434          }          }
# Line 351  void LogPut1(BYTE b) Line 476  void LogPut1(BYTE b)
476      }      }
477      else cv.DCount++;      else cv.DCount++;
478    }    }
479    else    else {
480      cv.DCount = 0;      cv.DCount = 0;
481            // ログ採取中にマクロがストールする問題への修正。
482            // ログ採取中に一度マクロを止めると、バッファのインデックスが同期取れなくなり、
483            // 再度マクロを流しても正しいデータが送れないのが原因。
484            // マクロを停止させた状態でもインデックスの同期を取るようにした。
485            // (2006.12.26 yutaka)
486        cv.DStart = cv.LogPtr;
487      }
488  }  }
489    
490  void Log1Byte(BYTE b)  void Log1Byte(BYTE b)
# Line 403  void CommentLogToFile(char *buf, int siz Line 535  void CommentLogToFile(char *buf, int siz
535          DWORD wrote;          DWORD wrote;
536    
537          if (LogVar == NULL || !LogVar->FileOpen) {          if (LogVar == NULL || !LogVar->FileOpen) {
538    #ifdef I18N
539                    char uimsg[MAX_UIMSG];
540                    strcpy(uimsg, "ERROR");
541                    get_lang_msg("MSG_ERROR", uimsg, ts.UILanguageFile);
542                    strcpy(ts.UIMsg, "It is not opened by the log file yet.");
543                    get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, ts.UILanguageFile);
544                    ::MessageBox(NULL, ts.UIMsg, uimsg, MB_OK|MB_ICONEXCLAMATION);
545    #else
546                  ::MessageBox(NULL, "It is not opened by the log file yet.", "ERROR", MB_OK|MB_ICONEXCLAMATION);                  ::MessageBox(NULL, "It is not opened by the log file yet.", "ERROR", MB_OK|MB_ICONEXCLAMATION);
547    #endif
548                  return;                  return;
549          }          }
550    
551          logfile_lock();          logfile_lock();
552          WriteFile((HANDLE)LogVar->FileHandle, buf, size, &wrote, NULL);          WriteFile((HANDLE)LogVar->FileHandle, buf, size, &wrote, NULL);
553          WriteFile((HANDLE)LogVar->FileHandle, "\r\n", 2, &wrote, NULL); // 改行          WriteFile((HANDLE)LogVar->FileHandle, "\r\n", 2, &wrote, NULL); // 改行
554            /* Set Line End Flag
555                    2007.05.24 Gentaro
556            */
557            eLineEnd = Line_LineHead;
558          logfile_unlock();          logfile_unlock();
559  }  }
560    
# Line 446  void LogToFile() Line 591  void LogToFile()
591                  if (((cv.FilePause & OpLog)==0) && (! cv.ProtoFlag))                  if (((cv.FilePause & OpLog)==0) && (! cv.ProtoFlag))
592                  {                  {
593                          // 時刻を書き出す(2006.7.23 maya)                          // 時刻を書き出す(2006.7.23 maya)
594                          if (ts.LogTimestamp &&                          // 日付フォーマットを日本ではなく世界標準に変更した (2006.7.23 yutaka)
595                                  (Start == 1 || Buf[Start-2] == 0x0a)) {                          /* 2007.05.24 Gentaro */
596                            if ( ts.LogTimestamp && eLineEnd ) {
597    #if 0
598                                  SYSTEMTIME      LocalTime;                                  SYSTEMTIME      LocalTime;
599                                  GetLocalTime(&LocalTime);                                  GetLocalTime(&LocalTime);
600                                  char strtime[27];                                  char strtime[27];
# Line 457  void LogToFile() Line 604  void LogToFile()
604                                                  LocalTime.wYear, LocalTime.wMonth,LocalTime.wDay,                                                  LocalTime.wYear, LocalTime.wMonth,LocalTime.wDay,
605                                                  LocalTime.wHour, LocalTime.wMinute, LocalTime.wSecond,                                                  LocalTime.wHour, LocalTime.wMinute, LocalTime.wSecond,
606                                                  LocalTime.wMilliseconds);                                                  LocalTime.wMilliseconds);
607    #else
608                                  // write to file                                          time_t tick = time(NULL);
609                                  if (Start == 1 && ts.Append) {                                          char *strtime = ctime(&tick);
610                                          _lwrite(LogVar->FileHandle,"\r\n",strlen("\r\n"));  #endif
611                                    /* 2007.05.24 Gentaro */
612                                    if( eLineEnd == Line_FileHead ){
613                                            _lwrite(LogVar->FileHandle,"\r\n",2);
614                                  }                                  }
615                                  _lwrite(LogVar->FileHandle,strtime,strlen(strtime));                                  _lwrite(LogVar->FileHandle,"[",1);
616                                    // 変換した文字列の終端に \n が含まれているので取り除く。
617                                    _lwrite(LogVar->FileHandle, strtime, strlen(strtime) - 1);
618                                    _lwrite(LogVar->FileHandle,"] ",2);
619                            }
620                            
621                            /* 2007.05.24 Gentaro */
622                            if( b == 0x0a ){
623                                    eLineEnd = Line_LineHead; /* set endmark*/
624                            }
625                            else {
626                                    eLineEnd = Line_Other; /* clear endmark*/
627                          }                          }
628    
629                          _lwrite(LogVar->FileHandle,(PCHAR)&b,1);                          _lwrite(LogVar->FileHandle,(PCHAR)&b,1);
# Line 565  void FileSendStart() Line 726  void FileSendStart()
726    if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0)    if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0)
727    {    {
728      Option = MAKELONG(ts.TransBin,0);      Option = MAKELONG(ts.TransBin,0);
729            SendVar->FullName[0] = 0;
730      if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option))      if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option))
731      {          {
732        FileTransEnd(OpSendFile);        FileTransEnd(OpSendFile);
733        return;        return;
734      }      }
# Line 739  BOOL OpenProtoDlg(PFileVar fv, int IdPro Line 901  BOOL OpenProtoDlg(PFileVar fv, int IdPro
901  {  {
902    int vsize;    int vsize;
903    PProtoDlg pd;    PProtoDlg pd;
904    #ifdef I18N
905      HWND Hpd;
906    #endif
907    
908    ProtoId = IdProto;    ProtoId = IdProto;
909    
# Line 790  BOOL OpenProtoDlg(PFileVar fv, int IdPro Line 955  BOOL OpenProtoDlg(PFileVar fv, int IdPro
955      ProtoVar = NULL;      ProtoVar = NULL;
956      return FALSE;      return FALSE;
957    }    }
958    #ifdef I18N
959      pd->Create(fv,&ts);
960    #else
961    pd->Create(fv);    pd->Create(fv);
962    #endif
963    
964    #ifdef I18N
965      Hpd=pd->GetSafeHwnd();
966    
967      GetDlgItemText(Hpd, IDC_PROT_FILENAME, ts.UIMsg, sizeof(ts.UIMsg));
968      get_lang_msg("DLG_PROT_FIELNAME", ts.UIMsg, ts.UILanguageFile);
969      SetDlgItemText(Hpd, IDC_PROT_FILENAME, ts.UIMsg);
970      GetDlgItemText(Hpd, IDC_PROT_PROT, ts.UIMsg, sizeof(ts.UIMsg));
971      get_lang_msg("DLG_PROT_PROTO", ts.UIMsg, ts.UILanguageFile);
972      SetDlgItemText(Hpd, IDC_PROT_PROT, ts.UIMsg);
973      GetDlgItemText(Hpd, IDC_PROT_PACKET, ts.UIMsg, sizeof(ts.UIMsg));
974      get_lang_msg("DLG_PROT_PACKET", ts.UIMsg, ts.UILanguageFile);
975      SetDlgItemText(Hpd, IDC_PROT_PACKET, ts.UIMsg);
976      GetDlgItemText(Hpd, IDC_PROT_TRANS, ts.UIMsg, sizeof(ts.UIMsg));
977      get_lang_msg("DLG_PROT_TRANS", ts.UIMsg, ts.UILanguageFile);
978      SetDlgItemText(Hpd, IDC_PROT_TRANS, ts.UIMsg);
979      GetDlgItemText(Hpd, IDCANCEL, ts.UIMsg, sizeof(ts.UIMsg));
980      get_lang_msg("BTN_CANCEL", ts.UIMsg, ts.UILanguageFile);
981      SetDlgItemText(Hpd, IDCANCEL, ts.UIMsg);
982    #endif
983        
984    (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);    (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
985    
# Line 919  void KermitStart(int mode) Line 1108  void KermitStart(int mode)
1108        }        }
1109        else        else
1110          (*SetFileVar)(FileVar);          (*SetFileVar)(FileVar);
1111        break;            break;
1112      case IdKmtReceive:      case IdKmtReceive:
1113        FileVar->OpId = OpKmtRcv;        FileVar->OpId = OpKmtRcv;
1114        break;        break;
# Line 936  void KermitStart(int mode) Line 1125  void KermitStart(int mode)
1125        }        }
1126        else        else
1127          (*SetFileVar)(FileVar);          (*SetFileVar)(FileVar);
1128        break;            break;
1129      case IdKmtFinish:      case IdKmtFinish:
1130        FileVar->OpId = OpKmtFin;        FileVar->OpId = OpKmtFin;
1131        break;        break;
# Line 1051  void BPStart(int mode) Line 1240  void BPStart(int mode)
1240      FileVar->OpId = OpBPSend;      FileVar->OpId = OpBPSend;
1241      if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)      if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1242      {      {
1243              FileVar->FullName[0] = 0;
1244        if (! (*GetTransFname)(FileVar, ts.FileDir, GTF_BP, &Option))        if (! (*GetTransFname)(FileVar, ts.FileDir, GTF_BP, &Option))
1245        {            {
1246          ProtoEnd();          ProtoEnd();
1247          return;          return;
1248        }        }
1249      }      }
1250      else      else
1251        (*SetFileVar)(FileVar);        (*SetFileVar)(FileVar);
   
1252    }    }
1253    else /* IdBPReceive or IdBPAuto */    else /* IdBPReceive or IdBPAuto */
1254      FileVar->OpId = OpBPRcv;      FileVar->OpId = OpBPRcv;
# Line 1111  void QVStart(int mode) Line 1300  void QVStart(int mode)
1300    
1301  /*  /*
1302   * $Log$   * $Log$
1303     * Revision 1.14  2007/05/31 14:39:05  maya
1304     * 接続時に自動的にログ採取を開始できるようにした。
1305     *
1306     * Revision 1.13  2007/05/30 16:04:27  maya
1307     * 標準のログ保存先を指定できるようにした。
1308     *
1309     * Revision 1.12  2007/05/25 09:56:05  yutakapon
1310     * タイムスタンプ付きログで1KBごとに不要な改行が入るバグを修正。
1311     *
1312     * Revision 1.11  2007/05/14 14:07:14  maya
1313     * バッファをクリアしていないので落ちる問題を修正した。
1314     *
1315     * Revision 1.10  2007/05/14 13:29:58  maya
1316     * ログファイル名中の &h を、接続中のホスト名に変換する機能を追加した。
1317     *
1318     * Revision 1.9  2007/01/21 16:18:35  maya
1319     * 表示メッセージの読み込み対応
1320     *
1321     * Revision 1.8  2007/01/04 15:11:44  maya
1322     * 表示メッセージの読み込み対応
1323     *
1324     * Revision 1.7  2006/12/25 16:13:54  yutakapon
1325     * ログ採取中にマクロがストールする問題への修正。
1326     * ログ採取中に一度マクロを止めると、バッファのインデックスが同期取れなくなり、
1327     * 再度マクロを流しても正しいデータが送れないのが原因。
1328     * マクロを停止させた状態でもインデックスの同期を取るようにした。
1329     *
1330     * Revision 1.6  2006/08/28 12:27:16  maya
1331     * デフォルトのログファイル名を指定できるようにした。
1332     *   エディットコントロールを "Additional settings" ダイアログに追加した。
1333     *   teraterm.ini ファイルに LogDefaultName エントリを追加した。
1334     *   ファイル名に strftime のフォーマットを使えるようにした。
1335     *
1336     * Revision 1.5  2006/07/23 14:12:26  yutakakn
1337     * ログに含める日付フォーマットを世界標準書式に変更した。
1338     *
1339   * Revision 1.4  2006/07/22 16:15:54  maya   * Revision 1.4  2006/07/22 16:15:54  maya
1340   * ログ記録時に時刻も書き込む機能を追加した。   * ログ記録時に時刻も書き込む機能を追加した。
1341   *   *

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.14

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