Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/teraterm/teraterm/filesys.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4454 - (hide annotations) (download) (as text)
Tue Apr 19 13:23:37 2011 UTC (12 years, 11 months ago) by doda
File MIME type: text/x-c++src
File size: 32406 byte(s)
ファイル転送ダイアログ/ファイル送信ダイアログで、経過時間と転送速度を表示するようにした。

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

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