Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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