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

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