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

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