Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/teraterm/filesys_log.cpp

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

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

Legend:
Removed from v.3226  
changed lines
  Added in v.3227

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