Develop and Download Open Source Software

Browse CVS Repository

Annotation of /ttssh2/teraterm/source/teraterm/filesys.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.20 - (hide annotations) (download) (as text)
Fri Nov 30 08:59:11 2007 UTC (16 years, 4 months ago) by maya
Branch: MAIN
CVS Tags: R456_RTM, R457_RTM
Changes since 1.19: +1 -0 lines
File MIME type: text/x-c++src
ログ採取のファイル選択ダイアログにおいて、「標準のログ保存先フォルダ」が存在するならそこを初期フォルダにするようにした。

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

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