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

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