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

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