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.1.1.1 by yutakakn, Mon Nov 15 14:43:41 2004 UTC revision 1.11 by maya, Mon May 14 14:07:14 2007 UTC
# Line 165  static PProtoDlg PtDlg = NULL; Line 165  static PProtoDlg PtDlg = NULL;
165  BOOL OpenFTDlg(PFileVar fv)  BOOL OpenFTDlg(PFileVar fv)
166  {  {
167    PFileTransDlg FTDlg;    PFileTransDlg FTDlg;
168    #ifdef I18N
169      HWND HFTDlg;
170    #endif
171    
172    FTDlg = new CFileTransDlg();    FTDlg = new CFileTransDlg();
173        
174    if (FTDlg!=NULL)    if (FTDlg!=NULL)
175    {    {
176    #ifdef I18N
177        FTDlg->Create(fv, &cv, &ts);
178    #else
179      FTDlg->Create(fv, &cv);      FTDlg->Create(fv, &cv);
180    #endif
181      FTDlg->RefreshNum();      FTDlg->RefreshNum();
182      if (fv->OpId == OpLog)      if (fv->OpId == OpLog)
183        FTDlg->ShowWindow(SW_MINIMIZE);        FTDlg->ShowWindow(SW_MINIMIZE);
# Line 181  BOOL OpenFTDlg(PFileVar fv) Line 188  BOOL OpenFTDlg(PFileVar fv)
188    else    else
189      SendDlg = FTDlg; /* File send */      SendDlg = FTDlg; /* File send */
190    
191    #ifdef I18N
192      HFTDlg=FTDlg->GetSafeHwnd();
193    
194      GetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, ts.UIMsg, sizeof(ts.UIMsg));
195      get_lang_msg("DLG_FILETRANS_FILENAME", ts.UIMsg, ts.UILanguageFile);
196      SetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, ts.UIMsg);
197      GetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, ts.UIMsg, sizeof(ts.UIMsg));
198      get_lang_msg("DLG_FILETRANS_FULLPATH", ts.UIMsg, ts.UILanguageFile);
199      SetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, ts.UIMsg);
200      GetDlgItemText(HFTDlg, IDC_TRANS_TRANS, ts.UIMsg, sizeof(ts.UIMsg));
201      get_lang_msg("DLG_FILETRANS_TRNAS", ts.UIMsg, ts.UILanguageFile);
202      SetDlgItemText(HFTDlg, IDC_TRANS_TRANS, ts.UIMsg);
203      GetDlgItemText(HFTDlg, IDCANCEL, ts.UIMsg, sizeof(ts.UIMsg));
204      get_lang_msg("BTN_CANCEL", ts.UIMsg, ts.UILanguageFile);
205      SetDlgItemText(HFTDlg, IDCANCEL, ts.UIMsg);
206      GetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, ts.UIMsg, sizeof(ts.UIMsg));
207      get_lang_msg("DLG_FILETRANS_PAUSE", ts.UIMsg, ts.UILanguageFile);
208      SetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, ts.UIMsg);
209      GetDlgItemText(HFTDlg, IDC_TRANSHELP, ts.UIMsg, sizeof(ts.UIMsg));
210      get_lang_msg("BTN_HELP", ts.UIMsg, ts.UILanguageFile);
211      SetDlgItemText(HFTDlg, IDC_TRANSHELP, ts.UIMsg);
212    #endif
213    
214    return (FTDlg!=NULL);    return (FTDlg!=NULL);
215  }  }
216    
# Line 221  void FreeFileVar(PFileVar *fv) Line 251  void FreeFileVar(PFileVar *fv)
251    }    }
252  }  }
253    
254    // &h をホスト名に置換 (2007.5.14)
255    void ConvertLogname(char *c)
256    {
257      char buf[MAXPATHLEN], buf2[MAXPATHLEN], *p = c;
258    
259      memset(buf, 0, sizeof(buf));
260    
261      while(*p != '\0') {
262        if (*p == '&' && *(p+1) != '\0') {
263          switch (*(p+1)) {
264            case 'h':
265              if (cv.Open) {
266                if (cv.PortType == IdTCPIP) {
267                  _snprintf(buf2, sizeof(buf2), "%s%s", buf, ts.HostName);
268                  strncpy(buf, buf2, sizeof(buf)-strlen(buf)-1);
269                }
270                else if (cv.PortType == IdSerial) {
271                  _snprintf(buf2, sizeof(buf2), "%sCOM%d", buf, ts.ComPort);
272                  strncpy(buf, buf2, sizeof(buf)-strlen(buf)-1);
273                }
274              }
275              break;
276            default:
277              if (strlen(buf) < sizeof(buf)-3) {
278                strncat(buf, p, 2);
279              }
280          }
281          p++;
282        }
283        else {
284              if (strlen(buf) < sizeof(buf)-2) {
285                strncat(buf, p, 1);
286              }
287        }
288        p++;
289      }
290      strcpy(c, buf);
291    }
292    
293  extern "C" {  extern "C" {
294  void LogStart()  void LogStart()
295  {  {
296    LONG Option;          LONG Option;
297    
298    if ((FileLog) || (BinLog)) return;          if ((FileLog) || (BinLog)) return;
299    
300    if (! LoadTTFILE()) return;          if (! LoadTTFILE()) return;
301    if (! NewFileVar(&LogVar))          if (! NewFileVar(&LogVar))
302    {          {
303      FreeTTFILE();                  FreeTTFILE();
304      return;                  return;
305    }          }
306    LogVar->OpId = OpLog;          LogVar->OpId = OpLog;
307    
308    if (strlen(&(LogVar->FullName[LogVar->DirLen]))==0)          if (strlen(&(LogVar->FullName[LogVar->DirLen]))==0)
309    {          {
310      Option = MAKELONG(ts.TransBin,ts.Append);                  // LOWORD
311      if (! (*GetTransFname)(LogVar, ts.FileDir, GTF_LOG, &Option))                  // 0x0001 = Binary
312      {                  // HIWORD
313        FreeFileVar(&LogVar);                  // 0x0001 = Append
314        FreeTTFILE();                  // 0x1000 = plain text (2005.2.20 yutaka)
315        return;                  // 0x2000 = timestamp (2006.7.23 maya)
316      }                  // teraterm.iniの設定を見てからデフォルトオプションを決める。(2005.5.7 yutaka)
317      ts.TransBin = LOWORD(Option);                  Option = MAKELONG(ts.TransBin,ts.Append |
318      ts.Append = HIWORD(Option);                                                    (0x1000 * ts.LogTypePlainText) |
319    }                                                    (0x2000 * ts.LogTimestamp));
320    else  
321      (*SetFileVar)(LogVar);                  // ログのデフォルトファイル名を設定 (2006.8.28 maya)
322                    strncat(LogVar->FullName, ts.LogDefaultName, sizeof(LogVar->FullName));
323                    ParseStrftimeFileName(LogVar->FullName);
324    
325    if (ts.TransBin > 0)                  // &h をホスト名に置換 (2007.5.14)
326    {                  ConvertLogname(LogVar->FullName);
     BinLog = TRUE;  
     FileLog = FALSE;  
     if (! CreateBinBuf())  
     {  
       FileTransEnd(OpLog);  
       return;  
     }  
   }  
   else {  
     BinLog = FALSE;  
     FileLog = TRUE;  
     if (! CreateLogBuf())  
     {  
       FileTransEnd(OpLog);  
       return;  
     }  
   }  
   cv.LStart = cv.LogPtr;  
   cv.LCount = 0;  
327    
328    HelpId = HlpFileLog;                  if (! (*GetTransFname)(LogVar, ts.FileDir, GTF_LOG, &Option))
329    if (ts.Append > 0)                  {
330    {                          FreeFileVar(&LogVar);
331      LogVar->FileHandle = _lopen(LogVar->FullName,OF_WRITE);                          FreeTTFILE();
332      if (LogVar->FileHandle>0)                          return;
333        _llseek(LogVar->FileHandle,0,2);                  }
334      else                  ts.TransBin = LOWORD(Option);
335        LogVar->FileHandle = _lcreat(LogVar->FullName,0);                  ts.Append = HIWORD(Option);
336    }  
337    else                  if (ts.Append & 0x1000) {
338      LogVar->FileHandle = _lcreat(LogVar->FullName,0);                          ts.LogTypePlainText = 1;
339    LogVar->FileOpen = (LogVar->FileHandle>0);                  } else {
340    if (! LogVar->FileOpen)                          ts.LogTypePlainText = 0;
341    {                  }
342      FileTransEnd(OpLog);  
343      return;                  if (ts.Append & 0x2000) {
344    }                          ts.LogTimestamp = 1;
345    LogVar->ByteCount = 0;                  }
346                    else {
347                            ts.LogTimestamp = 0;
348                    }
349    
350                    ts.Append &= 0x1; // 1bitにマスクする
351    
352            }
353            else {
354                    // &h をホスト名に置換 (2007.5.14)
355                    ConvertLogname(LogVar->FullName);
356                    (*SetFileVar)(LogVar);
357            }
358    
359            if (ts.TransBin > 0)
360            {
361                    BinLog = TRUE;
362                    FileLog = FALSE;
363                    if (! CreateBinBuf())
364                    {
365                            FileTransEnd(OpLog);
366                            return;
367                    }
368            }
369            else {
370                    BinLog = FALSE;
371                    FileLog = TRUE;
372                    if (! CreateLogBuf())
373                    {
374                            FileTransEnd(OpLog);
375                            return;
376                    }
377            }
378            cv.LStart = cv.LogPtr;
379            cv.LCount = 0;
380    
381    if (! OpenFTDlg(LogVar))          HelpId = HlpFileLog;
382      FileTransEnd(OpLog);          if (ts.Append > 0)
383            {
384                    LogVar->FileHandle = _lopen(LogVar->FullName,OF_WRITE);
385                    if (LogVar->FileHandle>0)
386                            _llseek(LogVar->FileHandle,0,2);
387                    else
388                            LogVar->FileHandle = _lcreat(LogVar->FullName,0);
389            }
390            else
391                    LogVar->FileHandle = _lcreat(LogVar->FullName,0);
392            LogVar->FileOpen = (LogVar->FileHandle>0);
393            if (! LogVar->FileOpen)
394            {
395                    FileTransEnd(OpLog);
396                    return;
397            }
398            LogVar->ByteCount = 0;
399    
400            if (! OpenFTDlg(LogVar))
401                    FileTransEnd(OpLog);
402  }  }
403  }  }
404    
# Line 326  void LogPut1(BYTE b) Line 431  void LogPut1(BYTE b)
431      }      }
432      else cv.DCount++;      else cv.DCount++;
433    }    }
434    else    else {
435      cv.DCount = 0;      cv.DCount = 0;
436            // ログ採取中にマクロがストールする問題への修正。
437            // ログ採取中に一度マクロを止めると、バッファのインデックスが同期取れなくなり、
438            // 再度マクロを流しても正しいデータが送れないのが原因。
439            // マクロを停止させた状態でもインデックスの同期を取るようにした。
440            // (2006.12.26 yutaka)
441        cv.DStart = cv.LogPtr;
442      }
443  }  }
444    
445  void Log1Byte(BYTE b)  void Log1Byte(BYTE b)
# Line 378  void CommentLogToFile(char *buf, int siz Line 490  void CommentLogToFile(char *buf, int siz
490          DWORD wrote;          DWORD wrote;
491    
492          if (LogVar == NULL || !LogVar->FileOpen) {          if (LogVar == NULL || !LogVar->FileOpen) {
493    #ifdef I18N
494                    char uimsg[MAX_UIMSG];
495                    strcpy(uimsg, "ERROR");
496                    get_lang_msg("MSG_ERROR", uimsg, ts.UILanguageFile);
497                    strcpy(ts.UIMsg, "It is not opened by the log file yet.");
498                    get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, ts.UILanguageFile);
499                    ::MessageBox(NULL, ts.UIMsg, uimsg, MB_OK|MB_ICONEXCLAMATION);
500    #else
501                  ::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);
502    #endif
503                  return;                  return;
504          }          }
505    
# Line 420  void LogToFile() Line 541  void LogToFile()
541          {          {
542                  if (((cv.FilePause & OpLog)==0) && (! cv.ProtoFlag))                  if (((cv.FilePause & OpLog)==0) && (! cv.ProtoFlag))
543                  {                  {
544                            // 時刻を書き出す(2006.7.23 maya)
545                            // 日付フォーマットを日本ではなく世界標準に変更した (2006.7.23 yutaka)
546                            if (ts.LogTimestamp &&
547                                    (Start == 1 || Buf[Start-2] == 0x0a)) {
548    #if 0
549                                    SYSTEMTIME      LocalTime;
550                                    GetLocalTime(&LocalTime);
551                                    char strtime[27];
552    
553                                    // format time
554                                    sprintf(strtime, "[%04d/%02d/%02d %02d:%02d:%02d.%03d] ",
555                                                    LocalTime.wYear, LocalTime.wMonth,LocalTime.wDay,
556                                                    LocalTime.wHour, LocalTime.wMinute, LocalTime.wSecond,
557                                                    LocalTime.wMilliseconds);
558    #else
559                                            time_t tick = time(NULL);
560                                            char *strtime = ctime(&tick);
561    #endif
562    
563                                    // write to file
564                                    if (Start == 1 && ts.Append) {
565                                            _lwrite(LogVar->FileHandle,"\r\n",strlen("\r\n"));
566                                    }
567                                    _lwrite(LogVar->FileHandle,"[",1);
568                                    // 変換した文字列の終端に \n が含まれているので取り除く。
569                                    _lwrite(LogVar->FileHandle, strtime, strlen(strtime) - 1);
570                                    _lwrite(LogVar->FileHandle,"] ",2);
571                            }
572    
573                          _lwrite(LogVar->FileHandle,(PCHAR)&b,1);                          _lwrite(LogVar->FileHandle,(PCHAR)&b,1);
574                          (LogVar->ByteCount)++;                          (LogVar->ByteCount)++;
575                  }                  }
# Line 520  void FileSendStart() Line 670  void FileSendStart()
670    if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0)    if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0)
671    {    {
672      Option = MAKELONG(ts.TransBin,0);      Option = MAKELONG(ts.TransBin,0);
673            SendVar->FullName[0] = 0;
674      if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option))      if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option))
675      {          {
676        FileTransEnd(OpSendFile);        FileTransEnd(OpSendFile);
677        return;        return;
678      }      }
# Line 694  BOOL OpenProtoDlg(PFileVar fv, int IdPro Line 845  BOOL OpenProtoDlg(PFileVar fv, int IdPro
845  {  {
846    int vsize;    int vsize;
847    PProtoDlg pd;    PProtoDlg pd;
848    #ifdef I18N
849      HWND Hpd;
850    #endif
851    
852    ProtoId = IdProto;    ProtoId = IdProto;
853    
# Line 745  BOOL OpenProtoDlg(PFileVar fv, int IdPro Line 899  BOOL OpenProtoDlg(PFileVar fv, int IdPro
899      ProtoVar = NULL;      ProtoVar = NULL;
900      return FALSE;      return FALSE;
901    }    }
902    #ifdef I18N
903      pd->Create(fv,&ts);
904    #else
905    pd->Create(fv);    pd->Create(fv);
906    #endif
907    
908    #ifdef I18N
909      Hpd=pd->GetSafeHwnd();
910    
911      GetDlgItemText(Hpd, IDC_PROT_FILENAME, ts.UIMsg, sizeof(ts.UIMsg));
912      get_lang_msg("DLG_PROT_FIELNAME", ts.UIMsg, ts.UILanguageFile);
913      SetDlgItemText(Hpd, IDC_PROT_FILENAME, ts.UIMsg);
914      GetDlgItemText(Hpd, IDC_PROT_PROT, ts.UIMsg, sizeof(ts.UIMsg));
915      get_lang_msg("DLG_PROT_PROTO", ts.UIMsg, ts.UILanguageFile);
916      SetDlgItemText(Hpd, IDC_PROT_PROT, ts.UIMsg);
917      GetDlgItemText(Hpd, IDC_PROT_PACKET, ts.UIMsg, sizeof(ts.UIMsg));
918      get_lang_msg("DLG_PROT_PACKET", ts.UIMsg, ts.UILanguageFile);
919      SetDlgItemText(Hpd, IDC_PROT_PACKET, ts.UIMsg);
920      GetDlgItemText(Hpd, IDC_PROT_TRANS, ts.UIMsg, sizeof(ts.UIMsg));
921      get_lang_msg("DLG_PROT_TRANS", ts.UIMsg, ts.UILanguageFile);
922      SetDlgItemText(Hpd, IDC_PROT_TRANS, ts.UIMsg);
923      GetDlgItemText(Hpd, IDCANCEL, ts.UIMsg, sizeof(ts.UIMsg));
924      get_lang_msg("BTN_CANCEL", ts.UIMsg, ts.UILanguageFile);
925      SetDlgItemText(Hpd, IDCANCEL, ts.UIMsg);
926    #endif
927        
928    (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);    (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
929    
# Line 874  void KermitStart(int mode) Line 1052  void KermitStart(int mode)
1052        }        }
1053        else        else
1054          (*SetFileVar)(FileVar);          (*SetFileVar)(FileVar);
1055        break;            break;
1056      case IdKmtReceive:      case IdKmtReceive:
1057        FileVar->OpId = OpKmtRcv;        FileVar->OpId = OpKmtRcv;
1058        break;        break;
# Line 891  void KermitStart(int mode) Line 1069  void KermitStart(int mode)
1069        }        }
1070        else        else
1071          (*SetFileVar)(FileVar);          (*SetFileVar)(FileVar);
1072        break;            break;
1073      case IdKmtFinish:      case IdKmtFinish:
1074        FileVar->OpId = OpKmtFin;        FileVar->OpId = OpKmtFin;
1075        break;        break;
# Line 1006  void BPStart(int mode) Line 1184  void BPStart(int mode)
1184      FileVar->OpId = OpBPSend;      FileVar->OpId = OpBPSend;
1185      if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)      if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1186      {      {
1187              FileVar->FullName[0] = 0;
1188        if (! (*GetTransFname)(FileVar, ts.FileDir, GTF_BP, &Option))        if (! (*GetTransFname)(FileVar, ts.FileDir, GTF_BP, &Option))
1189        {            {
1190          ProtoEnd();          ProtoEnd();
1191          return;          return;
1192        }        }
1193      }      }
1194      else      else
1195        (*SetFileVar)(FileVar);        (*SetFileVar)(FileVar);
   
1196    }    }
1197    else /* IdBPReceive or IdBPAuto */    else /* IdBPReceive or IdBPAuto */
1198      FileVar->OpId = OpBPRcv;      FileVar->OpId = OpBPRcv;
# Line 1063  void QVStart(int mode) Line 1241  void QVStart(int mode)
1241      ProtoEnd();      ProtoEnd();
1242  }  }
1243  }  }
1244    
1245    /*
1246     * $Log$
1247     * Revision 1.11  2007/05/14 14:07:14  maya
1248     * バッファをクリアしていないので落ちる問題を修正した。
1249     *
1250     * Revision 1.10  2007/05/14 13:29:58  maya
1251     * ログファイル名中の &h を、接続中のホスト名に変換する機能を追加した。
1252     *
1253     * Revision 1.9  2007/01/21 16:18:35  maya
1254     * 表示メッセージの読み込み対応
1255     *
1256     * Revision 1.8  2007/01/04 15:11:44  maya
1257     * 表示メッセージの読み込み対応
1258     *
1259     * Revision 1.7  2006/12/25 16:13:54  yutakapon
1260     * ログ採取中にマクロがストールする問題への修正。
1261     * ログ採取中に一度マクロを止めると、バッファのインデックスが同期取れなくなり、
1262     * 再度マクロを流しても正しいデータが送れないのが原因。
1263     * マクロを停止させた状態でもインデックスの同期を取るようにした。
1264     *
1265     * Revision 1.6  2006/08/28 12:27:16  maya
1266     * デフォルトのログファイル名を指定できるようにした。
1267     *   エディットコントロールを "Additional settings" ダイアログに追加した。
1268     *   teraterm.ini ファイルに LogDefaultName エントリを追加した。
1269     *   ファイル名に strftime のフォーマットを使えるようにした。
1270     *
1271     * Revision 1.5  2006/07/23 14:12:26  yutakakn
1272     * ログに含める日付フォーマットを世界標準書式に変更した。
1273     *
1274     * Revision 1.4  2006/07/22 16:15:54  maya
1275     * ログ記録時に時刻も書き込む機能を追加した。
1276     *
1277     * Revision 1.3  2005/05/07 09:49:24  yutakakn
1278     * teraterm.iniに LogTypePlainText を追加した。
1279     *
1280     * Revision 1.2  2005/02/20 14:51:29  yutakakn
1281     * ログファイルの種別に"plain text"を追加。このオプションが有効の場合は、ログファイルに
1282     * ASCII非表示文字の採取をしない。
1283     *
1284     * 現在、無視するキャラクタは以下のとおり。
1285     *  ・BS
1286     *  ・ASCII(0x00-0x1f)のうち非表示なもの
1287     *
1288     * ただし、例外として以下のものはログ採取対象。
1289     *  ・HT
1290     *  ・CR
1291     *  ・LF
1292     *
1293     */

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.11

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