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.15 by maya, Wed Jun 6 14:02:53 2007 UTC revision 1.22 by maya, Sat Feb 2 15:36:50 2008 UTC
# Line 7  Line 7 
7  #include "teraterm.h"  #include "teraterm.h"
8  #include "tttypes.h"  #include "tttypes.h"
9  #include "ttftypes.h"  #include "ttftypes.h"
 #ifdef TERATERM32  
10  #include "tt_res.h"  #include "tt_res.h"
 #else  
 #include "tt_res16.h"  
 #endif  
11  #include "ftdlg.h"  #include "ftdlg.h"
12  #include "protodlg.h"  #include "protodlg.h"
13  #include "ttwinman.h"  #include "ttwinman.h"
# Line 78  enum enumLineEnd eLineEnd = Line_LineHea Line 74  enum enumLineEnd eLineEnd = Line_LineHea
74    
75  BOOL LoadTTFILE()  BOOL LoadTTFILE()
76  {  {
77    BOOL Err;          BOOL Err;
78    
79  #ifdef TERATERM32          if (HTTFILE != NULL)
80    if (HTTFILE != NULL)          {
81  #else                  TTFILECount++;
82    if (HTTFILE >= HINSTANCE_ERROR)                  return TRUE;
83  #endif          }
84    {          else
85      TTFILECount++;                  TTFILECount = 0;
86      return TRUE;  
87    }          HTTFILE = LoadLibrary("TTPFILE.DLL");
88    else          if (HTTFILE == NULL)
89      TTFILECount = 0;                  return FALSE;
90    
91  #ifdef TERATERM32          Err = FALSE;
92    HTTFILE = LoadLibrary("TTPFILE.DLL");          GetSetupFname = (PGetSetupFname)GetProcAddress(HTTFILE,
93    if (HTTFILE == NULL) return FALSE;                                                         MAKEINTRESOURCE(IdGetSetupFname));
94  #else          if (GetSetupFname==NULL)
95    HTTFILE = LoadLibrary("TTFILE.DLL");                  Err = TRUE;
96    if (HTTFILE < HINSTANCE_ERROR) return FALSE;  
97  #endif          GetTransFname = (PGetTransFname)GetProcAddress(HTTFILE,
98                                                           MAKEINTRESOURCE(IdGetTransFname));
99            if (GetTransFname==NULL)
100                    Err = TRUE;
101    
102            GetMultiFname = (PGetMultiFname)GetProcAddress(HTTFILE,
103                                                           MAKEINTRESOURCE(IdGetMultiFname));
104            if (GetMultiFname==NULL)
105                    Err = TRUE;
106    
107            GetGetFname = (PGetGetFname)GetProcAddress(HTTFILE,
108                                                       MAKEINTRESOURCE(IdGetGetFname));
109            if (GetGetFname==NULL)
110                    Err = TRUE;
111    
112            SetFileVar = (PSetFileVar)GetProcAddress(HTTFILE,
113                                                     MAKEINTRESOURCE(IdSetFileVar));
114            if (SetFileVar==NULL)
115                    Err = TRUE;
116    
117            GetXFname = (PGetXFname)GetProcAddress(HTTFILE,
118                                                   MAKEINTRESOURCE(IdGetXFname));
119            if (GetXFname==NULL)
120                    Err = TRUE;
121    
122            ProtoInit = (PProtoInit)GetProcAddress(HTTFILE,
123                                                   MAKEINTRESOURCE(IdProtoInit));
124            if (ProtoInit==NULL)
125                    Err = TRUE;
126    
127            ProtoParse = (PProtoParse)GetProcAddress(HTTFILE,
128                                                     MAKEINTRESOURCE(IdProtoParse));
129            if (ProtoParse==NULL)
130                    Err = TRUE;
131    
132            ProtoTimeOutProc = (PProtoTimeOutProc)GetProcAddress(HTTFILE,
133                                                                 MAKEINTRESOURCE(IdProtoTimeOutProc));
134            if (ProtoTimeOutProc==NULL)
135                    Err = TRUE;
136    
137            ProtoCancel = (PProtoCancel)GetProcAddress(HTTFILE,
138                                                       MAKEINTRESOURCE(IdProtoCancel));
139            if (ProtoCancel==NULL)
140                    Err = TRUE;
141    
142    Err = FALSE;          if (Err)
143    GetSetupFname = (PGetSetupFname)GetProcAddress(HTTFILE,          {
144      MAKEINTRESOURCE(IdGetSetupFname));                  FreeLibrary(HTTFILE);
145    if (GetSetupFname==NULL) Err = TRUE;                  HTTFILE = NULL;
146                    return FALSE;
147    GetTransFname = (PGetTransFname)GetProcAddress(HTTFILE,          }
148      MAKEINTRESOURCE(IdGetTransFname));          else {
149    if (GetTransFname==NULL) Err = TRUE;                  TTFILECount = 1;
150                    return TRUE;
151    GetMultiFname = (PGetMultiFname)GetProcAddress(HTTFILE,          }
     MAKEINTRESOURCE(IdGetMultiFname));  
   if (GetMultiFname==NULL) Err = TRUE;  
   
   GetGetFname = (PGetGetFname)GetProcAddress(HTTFILE,  
     MAKEINTRESOURCE(IdGetGetFname));  
   if (GetGetFname==NULL) Err = TRUE;  
   
   SetFileVar = (PSetFileVar)GetProcAddress(HTTFILE,  
     MAKEINTRESOURCE(IdSetFileVar));  
   if (SetFileVar==NULL) Err = TRUE;  
   
   GetXFname = (PGetXFname)GetProcAddress(HTTFILE,  
     MAKEINTRESOURCE(IdGetXFname));  
   if (GetXFname==NULL) Err = TRUE;  
   
   ProtoInit = (PProtoInit)GetProcAddress(HTTFILE,  
     MAKEINTRESOURCE(IdProtoInit));  
   if (ProtoInit==NULL) Err = TRUE;  
   
   ProtoParse = (PProtoParse)GetProcAddress(HTTFILE,  
     MAKEINTRESOURCE(IdProtoParse));  
   if (ProtoParse==NULL) Err = TRUE;  
   
   ProtoTimeOutProc = (PProtoTimeOutProc)GetProcAddress(HTTFILE,  
     MAKEINTRESOURCE(IdProtoTimeOutProc));  
   if (ProtoTimeOutProc==NULL) Err = TRUE;  
   
   ProtoCancel = (PProtoCancel)GetProcAddress(HTTFILE,  
     MAKEINTRESOURCE(IdProtoCancel));  
   if (ProtoCancel==NULL) Err = TRUE;  
   
   if (Err)  
   {  
     FreeLibrary(HTTFILE);  
     HTTFILE = NULL;  
     return FALSE;  
   }  
   else {  
     TTFILECount = 1;  
     return TRUE;  
   }  
152  }  }
153    
154  BOOL FreeTTFILE()  BOOL FreeTTFILE()
155  {  {
156    if (TTFILECount==0) return FALSE;          if (TTFILECount==0)
157    TTFILECount--;                  return FALSE;
158    if (TTFILECount>0) return TRUE;          TTFILECount--;
159  #ifdef TERATERM32          if (TTFILECount>0)
160    if (HTTFILE!=NULL)                  return TRUE;
161  #else          if (HTTFILE!=NULL)
162    if (HTTFILE>=HINSTANCE_ERROR)          {
163  #endif                  FreeLibrary(HTTFILE);
164    {                  HTTFILE = NULL;
165      FreeLibrary(HTTFILE);          }
166      HTTFILE = NULL;          return TRUE;
   }  
   return TRUE;  
167  }  }
168    
169  static PFileTransDlg FLogDlg = NULL;  static PFileTransDlg FLogDlg = NULL;
# Line 176  static PProtoDlg PtDlg = NULL; Line 172  static PProtoDlg PtDlg = NULL;
172    
173  BOOL OpenFTDlg(PFileVar fv)  BOOL OpenFTDlg(PFileVar fv)
174  {  {
175    PFileTransDlg FTDlg;          PFileTransDlg FTDlg;
176  #ifndef NO_I18N          HWND HFTDlg;
177    HWND HFTDlg;          char uimsg[MAX_UIMSG];
 #endif  
178    
179    FTDlg = new CFileTransDlg();          FTDlg = new CFileTransDlg();
     
   if (FTDlg!=NULL)  
   {  
 #ifndef NO_I18N  
     FTDlg->Create(fv, &cv, &ts);  
 #else  
     FTDlg->Create(fv, &cv);  
 #endif  
     FTDlg->RefreshNum();  
     if (fv->OpId == OpLog)  
       FTDlg->ShowWindow(SW_MINIMIZE);  
   }  
   
   if (fv->OpId==OpLog)  
     FLogDlg = FTDlg; /* Log */  
   else  
     SendDlg = FTDlg; /* File send */  
   
 #ifndef NO_I18N  
   HFTDlg=FTDlg->GetSafeHwnd();  
   
   GetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("DLG_FILETRANS_FILENAME", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, ts.UIMsg);  
   GetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("DLG_FILETRANS_FULLPATH", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, ts.UIMsg);  
   GetDlgItemText(HFTDlg, IDC_TRANS_TRANS, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("DLG_FILETRANS_TRNAS", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(HFTDlg, IDC_TRANS_TRANS, ts.UIMsg);  
   GetDlgItemText(HFTDlg, IDCANCEL, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("BTN_CANCEL", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(HFTDlg, IDCANCEL, ts.UIMsg);  
   GetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("DLG_FILETRANS_PAUSE", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, ts.UIMsg);  
   GetDlgItemText(HFTDlg, IDC_TRANSHELP, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("BTN_HELP", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(HFTDlg, IDC_TRANSHELP, ts.UIMsg);  
 #endif  
180    
181    return (FTDlg!=NULL);          if (FTDlg!=NULL)
182            {
183                    FTDlg->Create(fv, &cv, &ts);
184                    FTDlg->RefreshNum();
185                    if (fv->HideDialog)
186                            FTDlg->ShowWindow(SW_HIDE);
187                    else if (fv->OpId == OpLog)
188                            FTDlg->ShowWindow(SW_MINIMIZE);
189            }
190    
191            if (fv->OpId==OpLog)
192                    FLogDlg = FTDlg; /* Log */
193            else
194                    SendDlg = FTDlg; /* File send */
195    
196            HFTDlg=FTDlg->GetSafeHwnd();
197    
198            GetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, uimsg, sizeof(uimsg));
199            get_lang_msg("DLG_FILETRANS_FILENAME", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
200            SetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, ts.UIMsg);
201            GetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, uimsg, sizeof(uimsg));
202            get_lang_msg("DLG_FILETRANS_FULLPATH", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
203            SetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, ts.UIMsg);
204            GetDlgItemText(HFTDlg, IDC_TRANS_TRANS, uimsg, sizeof(uimsg));
205            get_lang_msg("DLG_FILETRANS_TRNAS", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
206            SetDlgItemText(HFTDlg, IDC_TRANS_TRANS, ts.UIMsg);
207            GetDlgItemText(HFTDlg, IDCANCEL, uimsg, sizeof(uimsg));
208            get_lang_msg("BTN_CANCEL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
209            SetDlgItemText(HFTDlg, IDCANCEL, ts.UIMsg);
210            GetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, uimsg, sizeof(uimsg));
211            get_lang_msg("DLG_FILETRANS_PAUSE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
212            SetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, ts.UIMsg);
213            GetDlgItemText(HFTDlg, IDC_TRANSHELP, uimsg, sizeof(uimsg));
214            get_lang_msg("BTN_HELP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
215            SetDlgItemText(HFTDlg, IDC_TRANSHELP, ts.UIMsg);
216    
217            return (FTDlg!=NULL);
218    }
219    
220    void ShowFTDlg(WORD OpId)
221    {
222            if (OpId == OpLog) {
223                    if (FLogDlg != NULL) {
224                            FLogDlg->ShowWindow(SW_SHOWNORMAL);
225                    }
226            }
227            else {
228                    if (SendDlg != NULL) {
229                            SendDlg->ShowWindow(SW_SHOWNORMAL);
230                    }
231            }
232  }  }
233    
234  BOOL NewFileVar(PFileVar *fv)  BOOL NewFileVar(PFileVar *fv)
235  {  {
236    if ((*fv)==NULL)          if ((*fv)==NULL)
237    {          {
238      *fv = (PFileVar)malloc(sizeof(TFileVar));                  *fv = (PFileVar)malloc(sizeof(TFileVar));
239      if ((*fv)!=NULL)                  if ((*fv)!=NULL)
240      {                  {
241        memset(*fv, 0, sizeof(TFileVar));                          memset(*fv, 0, sizeof(TFileVar));
242        strcpy((*fv)->FullName,ts.FileDir);                          strncpy_s((*fv)->FullName, sizeof((*fv)->FullName),ts.FileDir, _TRUNCATE);
243        AppendSlash((*fv)->FullName);                          AppendSlash((*fv)->FullName,sizeof((*fv)->FullName));
244        (*fv)->DirLen = strlen((*fv)->FullName);                          (*fv)->DirLen = strlen((*fv)->FullName);
245        (*fv)->FileOpen = FALSE;                          (*fv)->FileOpen = FALSE;
246        (*fv)->OverWrite = ((ts.FTFlag & FT_RENAME) == 0);                          (*fv)->OverWrite = ((ts.FTFlag & FT_RENAME) == 0);
247        (*fv)->HMainWin = HVTWin;                          (*fv)->HMainWin = HVTWin;
248        (*fv)->Success = FALSE;                          (*fv)->Success = FALSE;
249        (*fv)->NoMsg = FALSE;                          (*fv)->NoMsg = FALSE;
250      }                          (*fv)->HideDialog = FALSE;
251    }                  }
252            }
253    
254    return ((*fv)!=NULL);          return ((*fv)!=NULL);
255  }  }
256    
257  void FreeFileVar(PFileVar *fv)  void FreeFileVar(PFileVar *fv)
258  {  {
259    if ((*fv)!=NULL)          if ((*fv)!=NULL)
260    {          {
261      if ((*fv)->FileOpen) _lclose((*fv)->FileHandle);                  if ((*fv)->FileOpen) _lclose((*fv)->FileHandle);
262      if ((*fv)->FnStrMemHandle>0)                  if ((*fv)->FnStrMemHandle>0)
263      {                  {
264        GlobalUnlock((*fv)->FnStrMemHandle);                          GlobalUnlock((*fv)->FnStrMemHandle);
265        GlobalFree((*fv)->FnStrMemHandle);                          GlobalFree((*fv)->FnStrMemHandle);
266      }                  }
267      free(*fv);                  free(*fv);
268      *fv = NULL;                  *fv = NULL;
269    }          }
270  }  }
271    
272  // &h をホスト名に置換 (2007.5.14)  // &h をホスト名に置換 (2007.5.14)
273  void ConvertLogname(char *c)  void ConvertLogname(char *c, int destlen)
274  {  {
275    char buf[MAXPATHLEN], buf2[MAXPATHLEN], *p = c;          char buf[MAXPATHLEN], buf2[MAXPATHLEN], *p = c;
276    
277    memset(buf, 0, sizeof(buf));          memset(buf, 0, sizeof(buf));
278    
279    while(*p != '\0') {          while(*p != '\0') {
280      if (*p == '&' && *(p+1) != '\0') {                  if (*p == '&' && *(p+1) != '\0') {
281        switch (*(p+1)) {                          switch (*(p+1)) {
282          case 'h':                          case 'h':
283            if (cv.Open) {                                  if (cv.Open) {
284              if (cv.PortType == IdTCPIP) {                                          if (cv.PortType == IdTCPIP) {
285                _snprintf(buf2, sizeof(buf2), "%s%s", buf, ts.HostName);                                                  strncat_s(buf,sizeof(buf),ts.HostName,_TRUNCATE);
286                strncpy(buf, buf2, sizeof(buf)-strlen(buf)-1);                                          }
287              }                                          else if (cv.PortType == IdSerial) {
288              else if (cv.PortType == IdSerial) {                                                  strncpy_s(buf2,sizeof(buf2),buf,_TRUNCATE);
289                _snprintf(buf2, sizeof(buf2), "%sCOM%d", buf, ts.ComPort);                                                  _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%sCOM%d", buf2, ts.ComPort);
290                strncpy(buf, buf2, sizeof(buf)-strlen(buf)-1);                                          }
291              }                                  }
292            }                                  break;
293            break;                          default:
294          default:                                  strncpy_s(buf2,sizeof(buf2),p,2);
295            if (strlen(buf) < sizeof(buf)-3) {                                  strncat_s(buf,sizeof(buf),buf2,_TRUNCATE);
296              strncat(buf, p, 2);                          }
297            }                          p++;
298        }                  }
299        p++;                  else {
300      }                          strncpy_s(buf2,sizeof(buf2),p,1);
301      else {                          strncat_s(buf,sizeof(buf),buf2,_TRUNCATE);
302            if (strlen(buf) < sizeof(buf)-2) {                  }
303              strncat(buf, p, 1);                  p++;
304            }          }
305      }          strncpy_s(c, destlen, buf, _TRUNCATE);
     p++;  
   }  
   strcpy(c, buf);  
306  }  }
307    
308  extern "C" {  extern "C" {
# Line 336  void LogStart() Line 339  void LogStart()
339                  // 0x0001 = Append                  // 0x0001 = Append
340                  // 0x1000 = plain text (2005.2.20 yutaka)                  // 0x1000 = plain text (2005.2.20 yutaka)
341                  // 0x2000 = timestamp (2006.7.23 maya)                  // 0x2000 = timestamp (2006.7.23 maya)
342                    // 0x4000 = hide file transfer dialog (2008.1.30 maya)
343                  // teraterm.iniの設定を見てからデフォルトオプションを決める。(2005.5.7 yutaka)                  // teraterm.iniの設定を見てからデフォルトオプションを決める。(2005.5.7 yutaka)
344                  Option = MAKELONG(ts.TransBin,ts.Append |                  Option = MAKELONG(ts.TransBin,
345                                                    (0x1000 * ts.LogTypePlainText) |                                    ts.Append |
346                                                    (0x2000 * ts.LogTimestamp));                                    (0x1000 * ts.LogTypePlainText) |
347                                      (0x2000 * ts.LogTimestamp) |
348                                      (0x4000 * ts.LogHideDialog));
349    
350                  // ログのデフォルトファイル名を設定 (2006.8.28 maya)                  // ログのデフォルトファイル名を設定 (2006.8.28 maya)
351                  strncat(LogVar->FullName, ts.LogDefaultName, sizeof(LogVar->FullName)-1);                  strncat_s(LogVar->FullName, sizeof(LogVar->FullName), ts.LogDefaultName, _TRUNCATE);
                 LogVar->FullName[sizeof(LogVar->FullName)-1] = '\0';  
352    
353                  ParseStrftimeFileName(LogVar->FullName);                  ParseStrftimeFileName(LogVar->FullName, sizeof(LogVar->FullName));
354    
355                  // &h をホスト名に置換 (2007.5.14)                  // &h をホスト名に置換 (2007.5.14)
356                  ConvertLogname(LogVar->FullName);                  ConvertLogname(LogVar->FullName, sizeof(LogVar->FullName));
357    
358                    strncpy_s(LogVar->LogDefaultPath, sizeof(LogVar->LogDefaultPath), ts.LogDefaultPath, _TRUNCATE);
359                  if (! (*GetTransFname)(LogVar, logdir, GTF_LOG, &Option))                  if (! (*GetTransFname)(LogVar, logdir, GTF_LOG, &Option))
360                  {                  {
361                          FreeFileVar(&LogVar);                          FreeFileVar(&LogVar);
# Line 372  void LogStart() Line 378  void LogStart()
378                          ts.LogTimestamp = 0;                          ts.LogTimestamp = 0;
379                  }                  }
380    
381                    if (ts.Append & 0x4000) {
382                            ts.LogHideDialog = 1;
383                    }
384                    else {
385                            ts.LogHideDialog = 0;
386                    }
387    
388                  ts.Append &= 0x1; // 1bitにマスクする                  ts.Append &= 0x1; // 1bitにマスクする
389    
390          }          }
# Line 381  void LogStart() Line 394  void LogStart()
394                  char FileName[MAX_PATH];                  char FileName[MAX_PATH];
395    
396                  // フルパス化                  // フルパス化
397                  strncpy(FileName, LogVar->FullName, sizeof(FileName)-1);                  strncpy_s(FileName, sizeof(FileName), LogVar->FullName, _TRUNCATE);
398                  FileName[sizeof(FileName)-1] = '\0';                  ConvFName(logdir,FileName,sizeof(FileName),"",LogVar->FullName,sizeof(LogVar->FullName));
                 ConvFName(logdir,FileName,"",LogVar->FullName);  
399    
400                  ParseStrftimeFileName(LogVar->FullName);                  ParseStrftimeFileName(LogVar->FullName, sizeof(LogVar->FullName));
401    
402                  // &h をホスト名に置換 (2007.5.14)                  // &h をホスト名に置換 (2007.5.14)
403                  ConvertLogname(LogVar->FullName);                  ConvertLogname(LogVar->FullName, sizeof(LogVar->FullName));
404                  (*SetFileVar)(LogVar);                  (*SetFileVar)(LogVar);
405          }          }
406    
# Line 413  void LogStart() Line 425  void LogStart()
425          }          }
426          cv.LStart = cv.LogPtr;          cv.LStart = cv.LogPtr;
427          cv.LCount = 0;          cv.LCount = 0;
428            if (ts.LogHideDialog)
429                    LogVar->HideDialog = 1;
430    
431          HelpId = HlpFileLog;          HelpId = HlpFileLog;
432          /* 2007.05.24 Gentaro */          /* 2007.05.24 Gentaro */
# Line 449  void LogStart() Line 463  void LogStart()
463    
464  void LogPut1(BYTE b)  void LogPut1(BYTE b)
465  {  {
466    LogLast = b;          LogLast = b;
467    cv.LogBuf[cv.LogPtr] = b;          cv.LogBuf[cv.LogPtr] = b;
468    cv.LogPtr++;          cv.LogPtr++;
469    if (cv.LogPtr>=InBuffSize)          if (cv.LogPtr>=InBuffSize)
470      cv.LogPtr = cv.LogPtr-InBuffSize;                  cv.LogPtr = cv.LogPtr-InBuffSize;
471    
472    if (FileLog)          if (FileLog)
473    {          {
474      if (cv.LCount>=InBuffSize)                  if (cv.LCount>=InBuffSize)
475      {                  {
476        cv.LCount = InBuffSize;                          cv.LCount = InBuffSize;
477        cv.LStart = cv.LogPtr;                          cv.LStart = cv.LogPtr;
478      }                  }
479      else cv.LCount++;                  else
480    }                          cv.LCount++;
481    else          }
482      cv.LCount = 0;          else
483                    cv.LCount = 0;
484    if (DDELog)  
485    {          if (DDELog)
486      if (cv.DCount>=InBuffSize)          {
487      {                  if (cv.DCount>=InBuffSize)
488        cv.DCount = InBuffSize;                  {
489        cv.DStart = cv.LogPtr;                          cv.DCount = InBuffSize;
490      }                          cv.DStart = cv.LogPtr;
491      else cv.DCount++;                  }
492    }                  else
493    else {                          cv.DCount++;
494      cv.DCount = 0;          }
495          // ログ採取中にマクロがストールする問題への修正。          else {
496          // ログ採取中に一度マクロを止めると、バッファのインデックスが同期取れなくなり、                  cv.DCount = 0;
497          // 再度マクロを流しても正しいデータが送れないのが原因。                  // ログ採取中にマクロがストールする問題への修正。
498          // マクロを停止させた状態でもインデックスの同期を取るようにした。                  // ログ採取中に一度マクロを止めると、バッファのインデックスが同期取れなくなり、
499          // (2006.12.26 yutaka)                  // 再度マクロを流しても正しいデータが送れないのが原因。
500      cv.DStart = cv.LogPtr;                  // マクロを停止させた状態でもインデックスの同期を取るようにした。
501    }                  // (2006.12.26 yutaka)
502                    cv.DStart = cv.LogPtr;
503            }
504  }  }
505    
506  void Log1Byte(BYTE b)  void Log1Byte(BYTE b)
507  {  {
508    if (b==0x0d)          if (b==0x0d)
509    {          {
510      LogLast = b;                  LogLast = b;
511      return;                  return;
512    }          }
513    if ((b==0x0a) && (LogLast==0x0d))          if ((b==0x0a) && (LogLast==0x0d))
514      LogPut1(0x0d);                  LogPut1(0x0d);
515    LogPut1(b);          LogPut1(b);
516  }  }
517    
518    static BOOL Get1(PCHAR Buf, int *Start, int *Count, PBYTE b)  static BOOL Get1(PCHAR Buf, int *Start, int *Count, PBYTE b)
519    {  {
520      if (*Count<=0) return FALSE;          if (*Count<=0) return FALSE;
521      *b = Buf[*Start];          *b = Buf[*Start];
522      (*Start)++;          (*Start)++;
523      if (*Start>=InBuffSize)          if (*Start>=InBuffSize)
524        *Start = *Start-InBuffSize;                  *Start = *Start-InBuffSize;
525      (*Count)--;          (*Count)--;
526      return TRUE;          return TRUE;
527    }  }
528    
529    
530    
# Line 535  void CommentLogToFile(char *buf, int siz Line 551  void CommentLogToFile(char *buf, int siz
551          DWORD wrote;          DWORD wrote;
552    
553          if (LogVar == NULL || !LogVar->FileOpen) {          if (LogVar == NULL || !LogVar->FileOpen) {
 #ifndef NO_I18N  
554                  char uimsg[MAX_UIMSG];                  char uimsg[MAX_UIMSG];
555                  strcpy(uimsg, "ERROR");                  get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts.UILanguageFile);
556                  get_lang_msg("MSG_ERROR", uimsg, ts.UILanguageFile);                  get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, sizeof(ts.UIMsg),
557                  strcpy(ts.UIMsg, "It is not opened by the log file yet.");                               "It is not opened by the log file yet.", ts.UILanguageFile);
                 get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, ts.UILanguageFile);  
558                  ::MessageBox(NULL, ts.UIMsg, uimsg, MB_OK|MB_ICONEXCLAMATION);                  ::MessageBox(NULL, ts.UIMsg, uimsg, MB_OK|MB_ICONEXCLAMATION);
 #else  
                 ::MessageBox(NULL, "It is not opened by the log file yet.", "ERROR", MB_OK|MB_ICONEXCLAMATION);  
 #endif  
559                  return;                  return;
560          }          }
561    
# Line 649  void LogToFile() Line 660  void LogToFile()
660    
661  BOOL CreateLogBuf()  BOOL CreateLogBuf()
662  {  {
663    if (cv.HLogBuf==NULL)          if (cv.HLogBuf==NULL)
664    {          {
665      cv.HLogBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);                  cv.HLogBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);
666      cv.LogBuf = NULL;                  cv.LogBuf = NULL;
667      cv.LogPtr = 0;                  cv.LogPtr = 0;
668      cv.LStart = 0;                  cv.LStart = 0;
669      cv.LCount = 0;                  cv.LCount = 0;
670      cv.DStart = 0;                  cv.DStart = 0;
671      cv.DCount = 0;                  cv.DCount = 0;
672    }          }
673    return (cv.HLogBuf!=NULL);          return (cv.HLogBuf!=NULL);
674  }  }
675    
676  void FreeLogBuf()  void FreeLogBuf()
677  {  {
678    if ((cv.HLogBuf==NULL) || FileLog || DDELog) return;          if ((cv.HLogBuf==NULL) || FileLog || DDELog)
679    if (cv.LogBuf!=NULL) GlobalUnlock(cv.HLogBuf);                  return;
680    GlobalFree(cv.HLogBuf);          if (cv.LogBuf!=NULL)
681    cv.HLogBuf = NULL;                  GlobalUnlock(cv.HLogBuf);
682    cv.LogBuf = NULL;          GlobalFree(cv.HLogBuf);
683    cv.LogPtr = 0;          cv.HLogBuf = NULL;
684    cv.LStart = 0;          cv.LogBuf = NULL;
685    cv.LCount = 0;          cv.LogPtr = 0;
686    cv.DStart = 0;          cv.LStart = 0;
687    cv.DCount = 0;          cv.LCount = 0;
688            cv.DStart = 0;
689            cv.DCount = 0;
690  }  }
691    
692  BOOL CreateBinBuf()  BOOL CreateBinBuf()
693  {  {
694    if (cv.HBinBuf==NULL)          if (cv.HBinBuf==NULL)
695    {          {
696      cv.HBinBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);                  cv.HBinBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);
697      cv.BinBuf = NULL;                  cv.BinBuf = NULL;
698      cv.BinPtr = 0;                  cv.BinPtr = 0;
699      cv.BStart = 0;                  cv.BStart = 0;
700      cv.BCount = 0;                  cv.BCount = 0;
701    }          }
702    return (cv.HBinBuf!=NULL);          return (cv.HBinBuf!=NULL);
703  }  }
704    
705  void FreeBinBuf()  void FreeBinBuf()
706  {  {
707    if ((cv.HBinBuf==NULL) || BinLog) return;          if ((cv.HBinBuf==NULL) || BinLog)
708    if (cv.BinBuf!=NULL) GlobalUnlock(cv.HBinBuf);                  return;
709    GlobalFree(cv.HBinBuf);          if (cv.BinBuf!=NULL)
710    cv.HBinBuf = NULL;                  GlobalUnlock(cv.HBinBuf);
711    cv.BinBuf = NULL;          GlobalFree(cv.HBinBuf);
712    cv.BinPtr = 0;          cv.HBinBuf = NULL;
713    cv.BStart = 0;          cv.BinBuf = NULL;
714    cv.BCount = 0;          cv.BinPtr = 0;
715            cv.BStart = 0;
716            cv.BCount = 0;
717  }  }
718    
719  extern "C" {  extern "C" {
720  void FileSendStart()  void FileSendStart()
721  {  {
722    LONG Option;          LONG Option;
723    
724    if (! cv.Ready || FSend) return;          if (! cv.Ready || FSend) return;
725    if (cv.ProtoFlag)          if (cv.ProtoFlag)
726    {          {
727      FreeFileVar(&SendVar);                  FreeFileVar(&SendVar);
728      return;                  return;
729    }          }
   
   if (! LoadTTFILE()) return;  
   if (! NewFileVar(&SendVar))  
   {  
     FreeTTFILE();  
     return;  
   }  
   SendVar->OpId = OpSendFile;  
   
   FSend = TRUE;  
   
   if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0)  
   {  
     Option = MAKELONG(ts.TransBin,0);  
         SendVar->FullName[0] = 0;  
     if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option))  
         {  
       FileTransEnd(OpSendFile);  
       return;  
     }  
     ts.TransBin = LOWORD(Option);  
   }  
   else  
     (*SetFileVar)(SendVar);  
   
   SendVar->FileHandle = _lopen(SendVar->FullName,OF_READ);  
   SendVar->FileOpen = (SendVar->FileHandle>0);  
   if (! SendVar->FileOpen)  
   {  
     FileTransEnd(OpSendFile);  
     return;  
   }  
   SendVar->ByteCount = 0;  
   
   TalkStatus = IdTalkFile;  
   FileRetrySend = FALSE;  
   FileRetryEcho = FALSE;  
   FileCRSend = FALSE;  
730    
731    if (! OpenFTDlg(SendVar))          if (! LoadTTFILE())
732      FileTransEnd(OpSendFile);                  return;
733  }          if (! NewFileVar(&SendVar))
734            {
735                    FreeTTFILE();
736                    return;
737            }
738            SendVar->OpId = OpSendFile;
739    
740            FSend = TRUE;
741    
742            if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0)
743            {
744                    Option = MAKELONG(ts.TransBin,0);
745                    SendVar->FullName[0] = 0;
746                    if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option))
747                    {
748                            FileTransEnd(OpSendFile);
749                            return;
750                    }
751                    ts.TransBin = LOWORD(Option);
752            }
753            else
754                    (*SetFileVar)(SendVar);
755    
756            SendVar->FileHandle = _lopen(SendVar->FullName,OF_READ);
757            SendVar->FileOpen = (SendVar->FileHandle>0);
758            if (! SendVar->FileOpen)
759            {
760                    FileTransEnd(OpSendFile);
761                    return;
762            }
763            SendVar->ByteCount = 0;
764    
765            TalkStatus = IdTalkFile;
766            FileRetrySend = FALSE;
767            FileRetryEcho = FALSE;
768            FileCRSend = FALSE;
769    
770            if (! OpenFTDlg(SendVar))
771                    FileTransEnd(OpSendFile);
772            }
773  }  }
774    
775  void FileTransEnd(WORD OpId)  void FileTransEnd(WORD OpId)
# Line 761  void FileTransEnd(WORD OpId) Line 777  void FileTransEnd(WORD OpId)
777        OpLog: close Log        OpLog: close Log
778   OpSendFile: close FileSend */   OpSendFile: close FileSend */
779  {  {
780    if (((OpId==0) || (OpId==OpLog)) &&          if (((OpId==0) || (OpId==OpLog)) && (FileLog || BinLog))
781        (FileLog || BinLog))          {
782    {                  FileLog = FALSE;
783      FileLog = FALSE;                  BinLog = FALSE;
784      BinLog = FALSE;                  if (FLogDlg!=NULL)
785      if (FLogDlg!=NULL)                  {
786      {                          FLogDlg->DestroyWindow();
787        FLogDlg->DestroyWindow();                          FLogDlg = NULL;
788        FLogDlg = NULL;                  }
789      }                  FreeFileVar(&LogVar);
790      FreeFileVar(&LogVar);                  FreeLogBuf();
791      FreeLogBuf();                  FreeBinBuf();
792      FreeBinBuf();                  FreeTTFILE();
793      FreeTTFILE();          }
794    }  
795            if (((OpId==0) || (OpId==OpSendFile)) && FSend)
796    if (((OpId==0) || (OpId==OpSendFile)) &&          {
797        FSend)                  FSend = FALSE;
798    {                  TalkStatus = IdTalkKeyb;
799      FSend = FALSE;                  if (SendDlg!=NULL)
800      TalkStatus = IdTalkKeyb;                  {
801      if (SendDlg!=NULL)                          SendDlg->DestroyWindow();
802      {                          SendDlg = NULL;
803        SendDlg->DestroyWindow();                  }
804        SendDlg = NULL;                  FreeFileVar(&SendVar);
805      }                  FreeTTFILE();
806      FreeFileVar(&SendVar);          }
     FreeTTFILE();  
   }  
807    
808    EndDdeCmnd(0);          EndDdeCmnd(0);
809  }  }
810    
811  // vtwin.cpp からコールしたいので、extern "C"を付ける。(2004.11.3 yutaka)  // vtwin.cpp からコールしたいので、extern "C"を付ける。(2004.11.3 yutaka)
812  extern "C" {  extern "C" {
813    int FSOut1(BYTE b)  int FSOut1(BYTE b)
814    {  {
815      if (ts.TransBin > 0)          if (ts.TransBin > 0)
816        return CommBinaryOut(&cv,(PCHAR)&b,1);                  return CommBinaryOut(&cv,(PCHAR)&b,1);
817      else if ((b>=0x20) || (b==0x09) || (b==0x0A) || (b==0x0D))          else if ((b>=0x20) || (b==0x09) || (b==0x0A) || (b==0x0D))
818        return CommTextOut(&cv,(PCHAR)&b,1);                  return CommTextOut(&cv,(PCHAR)&b,1);
819      else          else
820        return 1;                  return 1;
821    }          }
822    
823    int FSEcho1(BYTE b)  int FSEcho1(BYTE b)
824    {  {
825      if (ts.TransBin > 0)          if (ts.TransBin > 0)
826        return CommBinaryEcho(&cv,(PCHAR)&b,1);                  return CommBinaryEcho(&cv,(PCHAR)&b,1);
827      else          else
828        return CommTextEcho(&cv,(PCHAR)&b,1);                  return CommTextEcho(&cv,(PCHAR)&b,1);
829    }          }
830  }  }
831    
832  extern "C" {  extern "C" {
833  void FileSend()  void FileSend()
834  {  {
835    WORD c, fc;          WORD c, fc;
836    LONG BCOld;          LONG BCOld;
837    
838            if ((SendDlg==NULL) ||
839                ((cv.FilePause & OpSendFile) !=0))
840                    return;
841    
842            BCOld = SendVar->ByteCount;
843    
844            if (FileRetrySend)
845            {
846                    FileRetryEcho = (ts.LocalEcho>0);
847                    c = FSOut1(FileByte);
848                    FileRetrySend = (c==0);
849                    if (FileRetrySend)
850                            return;
851            }
852    
853    if ((SendDlg==NULL) ||          if (FileRetryEcho)
854        ((cv.FilePause & OpSendFile) !=0)) return;          {
855                    c = FSEcho1(FileByte);
856                    FileRetryEcho = (c==0);
857                    if (FileRetryEcho)
858                            return;
859            }
860    
861    BCOld = SendVar->ByteCount;          do {
862                    fc = _lread(SendVar->FileHandle,&FileByte,1);
863                    SendVar->ByteCount = SendVar->ByteCount + fc;
864    
865    if (FileRetrySend)                  if (FileCRSend && (fc==1) && (FileByte==0x0A))
866    {                  {
867      FileRetryEcho = (ts.LocalEcho>0);                          fc = _lread(SendVar->FileHandle,&FileByte,1);
868      c = FSOut1(FileByte);                          SendVar->ByteCount = SendVar->ByteCount + fc;
869      FileRetrySend = (c==0);                  }
     if (FileRetrySend) return;  
   }  
   
   if (FileRetryEcho)  
   {  
     c = FSEcho1(FileByte);  
     FileRetryEcho = (c==0);  
     if (FileRetryEcho) return;  
   }  
   
   do {  
     fc = _lread(SendVar->FileHandle,&FileByte,1);  
     SendVar->ByteCount = SendVar->ByteCount + fc;  
   
     if (FileCRSend && (fc==1) && (FileByte==0x0A))  
     {  
       fc = _lread(SendVar->FileHandle,&FileByte,1);  
       SendVar->ByteCount = SendVar->ByteCount + fc;  
     }  
   
     if (fc!=0)  
     {  
       c = FSOut1(FileByte);  
       FileCRSend = (ts.TransBin==0) && (FileByte==0x0D);  
       FileRetrySend = (c==0);  
       if (FileRetrySend)  
       {  
         if (SendVar->ByteCount != BCOld)  
           SendDlg->RefreshNum();  
           return;  
       }  
       if (ts.LocalEcho>0)  
       {  
         c = FSEcho1(FileByte);  
         FileRetryEcho = (c==0);  
         if (FileRetryEcho) return;  
       }  
     }  
     if ((fc==0) || (SendVar->ByteCount % 100 == 0))  
     {  
       SendDlg->RefreshNum();  
       BCOld = SendVar->ByteCount;  
       if (fc!=0) return;  
     }  
   } while (fc!=0);  
870    
871    FileTransEnd(OpSendFile);                  if (fc!=0)
872                    {
873                            c = FSOut1(FileByte);
874                            FileCRSend = (ts.TransBin==0) && (FileByte==0x0D);
875                            FileRetrySend = (c==0);
876                            if (FileRetrySend)
877                            {
878                                    if (SendVar->ByteCount != BCOld)
879                                            SendDlg->RefreshNum();
880                                    return;
881                            }
882                            if (ts.LocalEcho>0)
883                            {
884                                    c = FSEcho1(FileByte);
885                                    FileRetryEcho = (c==0);
886                                    if (FileRetryEcho)
887                                            return;
888                            }
889                    }
890                    if ((fc==0) || (SendVar->ByteCount % 100 == 0))
891                    {
892                            SendDlg->RefreshNum();
893                            BCOld = SendVar->ByteCount;
894                            if (fc!=0)
895                                    return;
896                    }
897            } while (fc!=0);
898    
899            FileTransEnd(OpSendFile);
900  }  }
901  }  }
902    
903  extern "C" {  extern "C" {
904  void FLogChangeButton(BOOL Pause)  void FLogChangeButton(BOOL Pause)
905  {  {
906    if (FLogDlg!=NULL)          if (FLogDlg!=NULL)
907      FLogDlg->ChangeButton(Pause);                  FLogDlg->ChangeButton(Pause);
908  }  }
909  }  }
910    
911  extern "C" {  extern "C" {
912  void FLogRefreshNum()  void FLogRefreshNum()
913  {  {
914    if (FLogDlg!=NULL)          if (FLogDlg!=NULL)
915      FLogDlg->RefreshNum();                  FLogDlg->RefreshNum();
916  }  }
917  }  }
918    
919  BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)  BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)
920  {  {
921    int vsize;          int vsize;
922    PProtoDlg pd;          PProtoDlg pd;
923  #ifndef NO_I18N          HWND Hpd;
924    HWND Hpd;          char uimsg[MAX_UIMSG];
925  #endif  
926            ProtoId = IdProto;
927    
928            switch (ProtoId) {
929                    case PROTO_KMT:
930                            vsize = sizeof(TKmtVar);
931                            break;
932                    case PROTO_XM:
933                            vsize = sizeof(TXVar);
934                            break;
935                    case PROTO_ZM:
936                            vsize = sizeof(TZVar);
937                            break;
938                    case PROTO_BP:
939                            vsize = sizeof(TBPVar);
940                            break;
941                    case PROTO_QV:
942                            vsize = sizeof(TQVVar);
943                            break;
944            }
945            ProtoVar = (PCHAR)malloc(vsize);
946            if (ProtoVar==NULL)
947                    return FALSE;
948    
949            switch (ProtoId) {
950                    case PROTO_KMT:
951                            ((PKmtVar)ProtoVar)->KmtMode = Mode;
952                            break;
953                    case PROTO_XM:
954                            ((PXVar)ProtoVar)->XMode = Mode;
955                            ((PXVar)ProtoVar)->XOpt = Opt1;
956                            ((PXVar)ProtoVar)->TextFlag = 1 - (Opt2 & 1);
957                            break;
958                    case PROTO_ZM:
959                            ((PZVar)ProtoVar)->BinFlag = (Opt1 & 1) != 0;
960                            ((PZVar)ProtoVar)->ZMode = Mode;
961                            break;
962                    case PROTO_BP:
963                            ((PBPVar)ProtoVar)->BPMode = Mode;
964                            break;
965                    case PROTO_QV:
966                            ((PQVVar)ProtoVar)->QVMode = Mode;
967                            break;
968            }
969    
970    ProtoId = IdProto;          pd = new CProtoDlg();
971            if (pd==NULL)
972            {
973                    free(ProtoVar);
974                    ProtoVar = NULL;
975                    return FALSE;
976            }
977            pd->Create(fv,&ts);
978    
979    switch (ProtoId) {          Hpd=pd->GetSafeHwnd();
     case PROTO_KMT:  
       vsize = sizeof(TKmtVar);  
       break;  
     case PROTO_XM:  
       vsize = sizeof(TXVar);  
       break;  
     case PROTO_ZM:  
       vsize = sizeof(TZVar);  
       break;  
     case PROTO_BP:  
       vsize = sizeof(TBPVar);  
       break;  
     case PROTO_QV:  
       vsize = sizeof(TQVVar);  
       break;  
   }  
   ProtoVar = (PCHAR)malloc(vsize);  
   if (ProtoVar==NULL) return FALSE;  
   
   switch (ProtoId) {  
     case PROTO_KMT:  
       ((PKmtVar)ProtoVar)->KmtMode = Mode;  
       break;  
     case PROTO_XM:  
       ((PXVar)ProtoVar)->XMode = Mode;  
       ((PXVar)ProtoVar)->XOpt = Opt1;  
       ((PXVar)ProtoVar)->TextFlag = 1 - (Opt2 & 1);  
       break;  
     case PROTO_ZM:  
       ((PZVar)ProtoVar)->BinFlag = (Opt1 & 1) != 0;  
       ((PZVar)ProtoVar)->ZMode = Mode;  
       break;  
     case PROTO_BP:  
       ((PBPVar)ProtoVar)->BPMode = Mode;  
       break;  
     case PROTO_QV:  
       ((PQVVar)ProtoVar)->QVMode = Mode;  
       break;  
   }  
   
   pd = new CProtoDlg();  
   if (pd==NULL)  
   {  
     free(ProtoVar);  
     ProtoVar = NULL;  
     return FALSE;  
   }  
 #ifndef NO_I18N  
   pd->Create(fv,&ts);  
 #else  
   pd->Create(fv);  
 #endif  
980    
981  #ifndef NO_I18N          GetDlgItemText(Hpd, IDC_PROT_FILENAME, uimsg, sizeof(uimsg));
982    Hpd=pd->GetSafeHwnd();          get_lang_msg("DLG_PROT_FIELNAME", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
983            SetDlgItemText(Hpd, IDC_PROT_FILENAME, ts.UIMsg);
984            GetDlgItemText(Hpd, IDC_PROT_PROT, uimsg, sizeof(uimsg));
985            get_lang_msg("DLG_PROT_PROTO", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
986            SetDlgItemText(Hpd, IDC_PROT_PROT, ts.UIMsg);
987            GetDlgItemText(Hpd, IDC_PROT_PACKET, uimsg, sizeof(uimsg));
988            get_lang_msg("DLG_PROT_PACKET", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
989            SetDlgItemText(Hpd, IDC_PROT_PACKET, ts.UIMsg);
990            GetDlgItemText(Hpd, IDC_PROT_TRANS, uimsg, sizeof(uimsg));
991            get_lang_msg("DLG_PROT_TRANS", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
992            SetDlgItemText(Hpd, IDC_PROT_TRANS, ts.UIMsg);
993            GetDlgItemText(Hpd, IDCANCEL, uimsg, sizeof(uimsg));
994            get_lang_msg("BTN_CANCEL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
995            SetDlgItemText(Hpd, IDCANCEL, ts.UIMsg);
996    
997    GetDlgItemText(Hpd, IDC_PROT_FILENAME, ts.UIMsg, sizeof(ts.UIMsg));          (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
   get_lang_msg("DLG_PROT_FIELNAME", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(Hpd, IDC_PROT_FILENAME, ts.UIMsg);  
   GetDlgItemText(Hpd, IDC_PROT_PROT, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("DLG_PROT_PROTO", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(Hpd, IDC_PROT_PROT, ts.UIMsg);  
   GetDlgItemText(Hpd, IDC_PROT_PACKET, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("DLG_PROT_PACKET", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(Hpd, IDC_PROT_PACKET, ts.UIMsg);  
   GetDlgItemText(Hpd, IDC_PROT_TRANS, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("DLG_PROT_TRANS", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(Hpd, IDC_PROT_TRANS, ts.UIMsg);  
   GetDlgItemText(Hpd, IDCANCEL, ts.UIMsg, sizeof(ts.UIMsg));  
   get_lang_msg("BTN_CANCEL", ts.UIMsg, ts.UILanguageFile);  
   SetDlgItemText(Hpd, IDCANCEL, ts.UIMsg);  
 #endif  
     
   (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);  
998    
999    PtDlg = pd;          PtDlg = pd;
1000    return TRUE;          return TRUE;
1001  }  }
1002    
1003  extern "C" {  extern "C" {
1004  void CloseProtoDlg()  void CloseProtoDlg()
1005  {  {
1006    if (PtDlg!=NULL)          if (PtDlg!=NULL)
1007    {          {
1008      PtDlg->DestroyWindow();                  PtDlg->DestroyWindow();
1009      PtDlg = NULL;                  PtDlg = NULL;
1010    
1011      ::KillTimer(FileVar->HMainWin,IdProtoTimer);                  ::KillTimer(FileVar->HMainWin,IdProtoTimer);
1012      if ((ProtoId==PROTO_QV) &&                  if ((ProtoId==PROTO_QV) &&
1013          (((PQVVar)ProtoVar)->QVMode==IdQVSend))                      (((PQVVar)ProtoVar)->QVMode==IdQVSend))
1014        CommTextOut(&cv,"\015",1);                          CommTextOut(&cv,"\015",1);
1015      if (FileVar->LogFlag)                  if (FileVar->LogFlag)
1016        _lclose(FileVar->LogFile);                          _lclose(FileVar->LogFile);
1017      FileVar->LogFile = 0;                  FileVar->LogFile = 0;
1018      if (ProtoVar!=NULL)                  if (ProtoVar!=NULL)
1019      {                  {
1020        free(ProtoVar);                          free(ProtoVar);
1021        ProtoVar = NULL;                          ProtoVar = NULL;
1022      }                  }
1023    }          }
1024  }  }
1025  }  }
1026    
1027  BOOL ProtoStart()  BOOL ProtoStart()
1028  {  {
1029    if (cv.ProtoFlag) return FALSE;          if (cv.ProtoFlag)
1030    if (FSend)                  return FALSE;
1031    {          if (FSend)
1032      FreeFileVar(&FileVar);          {
1033      return FALSE;                  FreeFileVar(&FileVar);
1034    }                  return FALSE;
1035            }
1036    if (! LoadTTFILE()) return FALSE;  
1037    NewFileVar(&FileVar);          if (! LoadTTFILE())
1038                    return FALSE;
1039    if (FileVar==NULL)          NewFileVar(&FileVar);
1040    {  
1041      FreeTTFILE();          if (FileVar==NULL)
1042      return FALSE;          {
1043    }                  FreeTTFILE();
1044    cv.ProtoFlag = TRUE;                  return FALSE;
1045    return TRUE;          }
1046            cv.ProtoFlag = TRUE;
1047            return TRUE;
1048  }  }
1049    
1050  void ProtoEnd()  void ProtoEnd()
1051  {  {
1052    if (! cv.ProtoFlag) return;          if (! cv.ProtoFlag)
1053    cv.ProtoFlag = FALSE;                  return;
1054            cv.ProtoFlag = FALSE;
1055    
1056            /* Enable transmit delay (serial port) */
1057            cv.DelayFlag = TRUE;
1058            TalkStatus = IdTalkKeyb;
1059    
1060            CloseProtoDlg();
1061    
1062    /* Enable transmit delay (serial port) */          if ((FileVar!=NULL) && FileVar->Success)
1063    cv.DelayFlag = TRUE;                  EndDdeCmnd(1);
1064    TalkStatus = IdTalkKeyb;          else
1065                    EndDdeCmnd(0);
   CloseProtoDlg();  
   
   if ((FileVar!=NULL) && FileVar->Success)  
     EndDdeCmnd(1);  
   else  
     EndDdeCmnd(0);  
1066    
1067    FreeTTFILE();          FreeTTFILE();
1068    FreeFileVar(&FileVar);          FreeFileVar(&FileVar);
1069  }  }
1070    
1071  extern "C" {  extern "C" {
1072  int ProtoDlgParse()  int ProtoDlgParse()
1073  {  {
1074    int P;          int P;
1075    
1076    P = ActiveWin;          P = ActiveWin;
1077    if (PtDlg==NULL) return P;          if (PtDlg==NULL)
1078                    return P;
1079    
1080    if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))          if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))
1081      P = 0; /* continue */                  P = 0; /* continue */
1082    else {          else {
1083      CommSend(&cv);                  CommSend(&cv);
1084      ProtoEnd();                  ProtoEnd();
1085    }          }
1086    return P;          return P;
1087  }  }
1088  }  }
1089    
1090  extern "C" {  extern "C" {
1091  void ProtoDlgTimeOut()  void ProtoDlgTimeOut()
1092  {  {
1093    if (PtDlg!=NULL)          if (PtDlg!=NULL)
1094      (*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);                  (*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);
1095  }  }
1096  }  }
1097    
1098  extern "C" {  extern "C" {
1099  void ProtoDlgCancel()  void ProtoDlgCancel()
1100  {  {
1101    if ((PtDlg!=NULL) &&          if ((PtDlg!=NULL) &&
1102        (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))              (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))
1103      ProtoEnd();                  ProtoEnd();
1104  }  }
1105  }  }
1106    
1107  extern "C" {  extern "C" {
1108  void KermitStart(int mode)  void KermitStart(int mode)
1109  {  {
1110    WORD w;          WORD w;
1111    
1112    if (! ProtoStart()) return;          if (! ProtoStart())
1113                    return;
1114    
1115    switch (mode) {          switch (mode) {
1116      case IdKmtSend:                  case IdKmtSend:
1117        FileVar->OpId = OpKmtSend;                          FileVar->OpId = OpKmtSend;
1118        if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)                          if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1119        {                          {
1120          if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_KERMIT,&w) ||                                  if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_KERMIT,&w) ||
1121              (FileVar->NumFname==0))                                      (FileVar->NumFname==0))
1122          {                                  {
1123            ProtoEnd();                                          ProtoEnd();
1124            return;                                          return;
1125          }                                  }
1126        }                          }
1127        else                          else
1128          (*SetFileVar)(FileVar);                                  (*SetFileVar)(FileVar);
1129            break;                          break;
1130      case IdKmtReceive:                  case IdKmtReceive:
1131        FileVar->OpId = OpKmtRcv;                          FileVar->OpId = OpKmtRcv;
1132        break;                          break;
1133      case IdKmtGet:                  case IdKmtGet:
1134        FileVar->OpId = OpKmtSend;                          FileVar->OpId = OpKmtSend;
1135        if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)                          if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1136        {                          {
1137          if (! (*GetGetFname)(FileVar->HMainWin,FileVar) ||                                  if (! (*GetGetFname)(FileVar->HMainWin,FileVar) ||
1138            (strlen(FileVar->FullName)==0))                                      (strlen(FileVar->FullName)==0))
1139          {                                  {
1140            ProtoEnd();                                          ProtoEnd();
1141            return;                                          return;
1142          }                                  }
1143        }                          }
1144        else                          else
1145          (*SetFileVar)(FileVar);                                  (*SetFileVar)(FileVar);
1146            break;                          break;
1147      case IdKmtFinish:                  case IdKmtFinish:
1148        FileVar->OpId = OpKmtFin;                          FileVar->OpId = OpKmtFin;
1149        break;                          break;
1150      default:                  default:
1151        ProtoEnd();                          ProtoEnd();
1152        return;                          return;
1153    }          }
1154    TalkStatus = IdTalkQuiet;          TalkStatus = IdTalkQuiet;
1155    
1156    /* disable transmit delay (serial port) */          /* disable transmit delay (serial port) */
1157    cv.DelayFlag = FALSE;          cv.DelayFlag = FALSE;
1158    
1159    if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))          if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))
1160      ProtoEnd();                  ProtoEnd();
1161  }  }
1162  }  }
1163    
1164  extern "C" {  extern "C" {
1165  void XMODEMStart(int mode)  void XMODEMStart(int mode)
1166  {  {
1167    LONG Option;          LONG Option;
1168    
1169    if (! ProtoStart()) return;          if (! ProtoStart())
1170                    return;
1171    
1172            if (mode==IdXReceive)
1173                    FileVar->OpId = OpXRcv;
1174            else
1175                    FileVar->OpId = OpXSend;
1176    
1177            if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1178            {
1179                    Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
1180                    if (! (*GetXFname)(FileVar->HMainWin,
1181                                       mode==IdXReceive,&Option,FileVar,ts.FileDir))
1182                    {
1183                            ProtoEnd();
1184                            return;
1185                    }
1186                    ts.XmodemOpt = HIWORD(Option);
1187                    ts.XmodemBin = LOWORD(Option);
1188            }
1189            else
1190                    (*SetFileVar)(FileVar);
1191    
1192    if (mode==IdXReceive)          if (mode==IdXReceive)
1193      FileVar->OpId = OpXRcv;                  FileVar->FileHandle = _lcreat(FileVar->FullName,0);
1194    else          else
1195      FileVar->OpId = OpXSend;                  FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);
1196    
1197    if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)          FileVar->FileOpen = FileVar->FileHandle>0;
1198    {          if (! FileVar->FileOpen)
1199      Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);          {
1200      if (! (*GetXFname)(FileVar->HMainWin,                  ProtoEnd();
1201        mode==IdXReceive,&Option,FileVar,ts.FileDir))                  return;
1202      {          }
1203        ProtoEnd();          TalkStatus = IdTalkQuiet;
1204        return;  
1205      }          /* disable transmit delay (serial port) */
1206      ts.XmodemOpt = HIWORD(Option);          cv.DelayFlag = FALSE;
1207      ts.XmodemBin = LOWORD(Option);  
1208    }          if (! OpenProtoDlg(FileVar,PROTO_XM,mode,
1209    else                             ts.XmodemOpt,ts.XmodemBin))
1210      (*SetFileVar)(FileVar);                  ProtoEnd();
   
   if (mode==IdXReceive)  
     FileVar->FileHandle = _lcreat(FileVar->FullName,0);  
   else  
     FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);  
   
   FileVar->FileOpen = FileVar->FileHandle>0;  
   if (! FileVar->FileOpen)  
   {  
     ProtoEnd();  
     return;  
   }  
   TalkStatus = IdTalkQuiet;  
   
   /* disable transmit delay (serial port) */  
   cv.DelayFlag = FALSE;  
   
   if (! OpenProtoDlg(FileVar,PROTO_XM,mode,  
                      ts.XmodemOpt,ts.XmodemBin))  
     ProtoEnd();  
1211  }  }
1212  }  }
1213    
1214  extern "C" {  extern "C" {
1215  void ZMODEMStart(int mode)  void ZMODEMStart(int mode)
1216  {  {
1217    WORD Opt;          WORD Opt;
1218    
1219    if (! ProtoStart()) return;          if (! ProtoStart())
1220                    return;
1221    
1222    if (mode==IdZSend)          if (mode==IdZSend)
1223    {          {
1224      Opt = ts.XmodemBin;                  Opt = ts.XmodemBin;
1225      FileVar->OpId = OpZSend;                  FileVar->OpId = OpZSend;
1226      if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)                  if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1227      {                  {
1228        if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_Z,&Opt) ||                          if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_Z,&Opt) ||
1229            (FileVar->NumFname==0))                              (FileVar->NumFname==0))
1230        {                          {
1231          ProtoEnd();                                  ProtoEnd();
1232          return;                                  return;
1233        }                          }
1234        ts.XmodemBin = Opt;                          ts.XmodemBin = Opt;
1235      }                  }
1236      else                  else
1237        (*SetFileVar)(FileVar);                  (*SetFileVar)(FileVar);
1238    }          }
1239    else /* IdZReceive or IdZAuto */          else /* IdZReceive or IdZAuto */
1240      FileVar->OpId = OpZRcv;                  FileVar->OpId = OpZRcv;
1241    
1242    TalkStatus = IdTalkQuiet;          TalkStatus = IdTalkQuiet;
1243    
1244    /* disable transmit delay (serial port) */          /* disable transmit delay (serial port) */
1245    cv.DelayFlag = FALSE;          cv.DelayFlag = FALSE;
1246    
1247    if (! OpenProtoDlg(FileVar,PROTO_ZM,mode,Opt,0))          if (! OpenProtoDlg(FileVar,PROTO_ZM,mode,Opt,0))
1248      ProtoEnd();                  ProtoEnd();
1249  }  }
1250  }  }
1251    
1252  extern "C" {  extern "C" {
1253  void BPStart(int mode)  void BPStart(int mode)
1254  {  {
1255    LONG Option;          LONG Option;
1256    
1257    if (! ProtoStart()) return;          if (! ProtoStart())
1258    if (mode==IdBPSend)                  return;
1259    {          if (mode==IdBPSend)
1260      FileVar->OpId = OpBPSend;          {
1261      if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)                  FileVar->OpId = OpBPSend;
1262      {                  if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1263            FileVar->FullName[0] = 0;                  {
1264        if (! (*GetTransFname)(FileVar, ts.FileDir, GTF_BP, &Option))                          FileVar->FullName[0] = 0;
1265            {                          if (! (*GetTransFname)(FileVar, ts.FileDir, GTF_BP, &Option))
1266          ProtoEnd();                          {
1267          return;                                  ProtoEnd();
1268        }                                  return;
1269      }                          }
1270      else                  }
1271        (*SetFileVar)(FileVar);                  else
1272    }                          (*SetFileVar)(FileVar);
1273    else /* IdBPReceive or IdBPAuto */          }
1274      FileVar->OpId = OpBPRcv;          else /* IdBPReceive or IdBPAuto */
1275                    FileVar->OpId = OpBPRcv;
1276    
1277    TalkStatus = IdTalkQuiet;          TalkStatus = IdTalkQuiet;
1278    
1279    /* disable transmit delay (serial port) */          /* disable transmit delay (serial port) */
1280    cv.DelayFlag = FALSE;          cv.DelayFlag = FALSE;
1281    
1282    if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))          if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))
1283      ProtoEnd();                  ProtoEnd();
1284  }  }
1285  }  }
1286    
1287  extern "C" {  extern "C" {
1288  void QVStart(int mode)  void QVStart(int mode)
1289  {  {
1290    WORD W;          WORD W;
1291    
1292    if (! ProtoStart()) return;          if (! ProtoStart())
1293                    return;
1294    
1295    if (mode==IdQVSend)          if (mode==IdQVSend)
1296    {          {
1297      FileVar->OpId = OpQVSend;                  FileVar->OpId = OpQVSend;
1298      if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)                  if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1299      {                  {
1300        if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_QV, &W) ||                          if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_QV, &W) ||
1301            (FileVar->NumFname==0))                              (FileVar->NumFname==0))
1302        {                          {
1303          ProtoEnd();                                  ProtoEnd();
1304          return;                                  return;
1305        }                          }
1306      }                  }
1307      else                  else
1308        (*SetFileVar)(FileVar);                          (*SetFileVar)(FileVar);
1309    }          }
1310    else          else
1311      FileVar->OpId = OpQVRcv;                  FileVar->OpId = OpQVRcv;
1312    
1313    TalkStatus = IdTalkQuiet;          TalkStatus = IdTalkQuiet;
1314    
1315    /* disable transmit delay (serial port) */          /* disable transmit delay (serial port) */
1316    cv.DelayFlag = FALSE;          cv.DelayFlag = FALSE;
1317    
1318    if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))          if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))
1319      ProtoEnd();                  ProtoEnd();
1320  }  }
1321  }  }
   
 /*  
  * $Log$  
  * Revision 1.15  2007/06/06 14:02:53  maya  
  * プリプロセッサにより構造体が変わってしまうので、INET6 と I18N の #define を逆転させた。  
  *  
  * Revision 1.14  2007/05/31 14:39:05  maya  
  * 接続時に自動的にログ採取を開始できるようにした。  
  *  
  * Revision 1.13  2007/05/30 16:04:27  maya  
  * 標準のログ保存先を指定できるようにした。  
  *  
  * Revision 1.12  2007/05/25 09:56:05  yutakapon  
  * タイムスタンプ付きログで1KBごとに不要な改行が入るバグを修正。  
  *  
  * Revision 1.11  2007/05/14 14:07:14  maya  
  * バッファをクリアしていないので落ちる問題を修正した。  
  *  
  * Revision 1.10  2007/05/14 13:29:58  maya  
  * ログファイル名中の &h を、接続中のホスト名に変換する機能を追加した。  
  *  
  * Revision 1.9  2007/01/21 16:18:35  maya  
  * 表示メッセージの読み込み対応  
  *  
  * Revision 1.8  2007/01/04 15:11:44  maya  
  * 表示メッセージの読み込み対応  
  *  
  * Revision 1.7  2006/12/25 16:13:54  yutakapon  
  * ログ採取中にマクロがストールする問題への修正。  
  * ログ採取中に一度マクロを止めると、バッファのインデックスが同期取れなくなり、  
  * 再度マクロを流しても正しいデータが送れないのが原因。  
  * マクロを停止させた状態でもインデックスの同期を取るようにした。  
  *  
  * Revision 1.6  2006/08/28 12:27:16  maya  
  * デフォルトのログファイル名を指定できるようにした。  
  *   エディットコントロールを "Additional settings" ダイアログに追加した。  
  *   teraterm.ini ファイルに LogDefaultName エントリを追加した。  
  *   ファイル名に strftime のフォーマットを使えるようにした。  
  *  
  * Revision 1.5  2006/07/23 14:12:26  yutakakn  
  * ログに含める日付フォーマットを世界標準書式に変更した。  
  *  
  * Revision 1.4  2006/07/22 16:15:54  maya  
  * ログ記録時に時刻も書き込む機能を追加した。  
  *  
  * Revision 1.3  2005/05/07 09:49:24  yutakakn  
  * teraterm.iniに LogTypePlainText を追加した。  
  *  
  * Revision 1.2  2005/02/20 14:51:29  yutakakn  
  * ログファイルの種別に"plain text"を追加。このオプションが有効の場合は、ログファイルに  
  * ASCII非表示文字の採取をしない。  
  *  
  * 現在、無視するキャラクタは以下のとおり。  
  *  ・BS  
  *  ・ASCII(0x00-0x1f)のうち非表示なもの  
  *  
  * ただし、例外として以下のものはログ採取対象。  
  *  ・HT  
  *  ・CR  
  *  ・LF  
  *  
  */  

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.22

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