Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ttcomtester/teraterm/teraterm/filesys_log.cpp

Parent Directory Parent Directory | Revision Log Revision Log


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

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