Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/teraterm/teraterm/filesys_log.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4328 - (hide annotations) (download) (as text)
Sun Feb 20 05:38:34 2011 UTC (13 years, 1 month ago) by maya
Original Path: trunk/teraterm/teraterm/filesys.cpp
File MIME type: text/x-c++src
File size: 32302 byte(s)
ログファイルを開いたとき、書き込み中の同名ファイルを開ける問題を修正
  http://sourceforge.jp/ticket/browse.php?group_id=1412&tid=24365

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

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