Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/teraterm/teraterm/filesys_log.cpp

Parent Directory Parent Directory | Revision Log Revision Log


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

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