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

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