Develop and Download Open Source Software

Browse CVS Repository

Contents of /ttssh2/teraterm/source/teraterm/filesys.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.5 - (show annotations) (download) (as text)
Sun Jul 23 14:12:26 2006 UTC (17 years, 8 months ago) by yutakakn
Branch: MAIN
CVS Tags: R441_RTM, R442_RTM, R443_RTM, R444_RTM
Changes since 1.4: +13 -1 lines
File MIME type: text/x-c++src
ログに含める日付フォーマットを世界標準書式に変更した。

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 #ifdef TERATERM32
11 #include "tt_res.h"
12 #else
13 #include "tt_res16.h"
14 #endif
15 #include "ftdlg.h"
16 #include "protodlg.h"
17 #include "ttwinman.h"
18 #include "commlib.h"
19 #include "ttcommon.h"
20 #include "ttdde.h"
21 #include "ttlib.h"
22 #include "helpid.h"
23
24 #include "filesys.h"
25
26 PFileVar LogVar = NULL;
27 PFileVar SendVar = NULL;
28 PFileVar FileVar = NULL;
29 static PCHAR ProtoVar = NULL;
30 static int ProtoId;
31
32 static BYTE LogLast = 0;
33 BOOL FileLog = FALSE;
34 BOOL BinLog = FALSE;
35 BOOL DDELog = FALSE;
36 static BOOL FileRetrySend, FileRetryEcho, FileCRSend;
37 static BYTE FileByte;
38
39 static BOOL FSend = FALSE;
40
41 static HMODULE HTTFILE = NULL;
42 static int TTFILECount = 0;
43
44 PGetSetupFname GetSetupFname;
45 PGetTransFname GetTransFname;
46 PGetMultiFname GetMultiFname;
47 PGetGetFname GetGetFname;
48 PSetFileVar SetFileVar;
49 PGetXFname GetXFname;
50 PProtoInit ProtoInit;
51 PProtoParse ProtoParse;
52 PProtoTimeOutProc ProtoTimeOutProc;
53 PProtoCancel ProtoCancel;
54
55 #define IdGetSetupFname 1
56 #define IdGetTransFname 2
57 #define IdGetMultiFname 3
58 #define IdGetGetFname 4
59 #define IdSetFileVar 5
60 #define IdGetXFname 6
61
62 #define IdProtoInit 7
63 #define IdProtoParse 8
64 #define IdProtoTimeOutProc 9
65 #define IdProtoCancel 10
66
67 BOOL LoadTTFILE()
68 {
69 BOOL Err;
70
71 #ifdef TERATERM32
72 if (HTTFILE != NULL)
73 #else
74 if (HTTFILE >= HINSTANCE_ERROR)
75 #endif
76 {
77 TTFILECount++;
78 return TRUE;
79 }
80 else
81 TTFILECount = 0;
82
83 #ifdef TERATERM32
84 HTTFILE = LoadLibrary("TTPFILE.DLL");
85 if (HTTFILE == NULL) return FALSE;
86 #else
87 HTTFILE = LoadLibrary("TTFILE.DLL");
88 if (HTTFILE < HINSTANCE_ERROR) return FALSE;
89 #endif
90
91 Err = FALSE;
92 GetSetupFname = (PGetSetupFname)GetProcAddress(HTTFILE,
93 MAKEINTRESOURCE(IdGetSetupFname));
94 if (GetSetupFname==NULL) Err = TRUE;
95
96 GetTransFname = (PGetTransFname)GetProcAddress(HTTFILE,
97 MAKEINTRESOURCE(IdGetTransFname));
98 if (GetTransFname==NULL) Err = TRUE;
99
100 GetMultiFname = (PGetMultiFname)GetProcAddress(HTTFILE,
101 MAKEINTRESOURCE(IdGetMultiFname));
102 if (GetMultiFname==NULL) Err = TRUE;
103
104 GetGetFname = (PGetGetFname)GetProcAddress(HTTFILE,
105 MAKEINTRESOURCE(IdGetGetFname));
106 if (GetGetFname==NULL) Err = TRUE;
107
108 SetFileVar = (PSetFileVar)GetProcAddress(HTTFILE,
109 MAKEINTRESOURCE(IdSetFileVar));
110 if (SetFileVar==NULL) Err = TRUE;
111
112 GetXFname = (PGetXFname)GetProcAddress(HTTFILE,
113 MAKEINTRESOURCE(IdGetXFname));
114 if (GetXFname==NULL) Err = TRUE;
115
116 ProtoInit = (PProtoInit)GetProcAddress(HTTFILE,
117 MAKEINTRESOURCE(IdProtoInit));
118 if (ProtoInit==NULL) Err = TRUE;
119
120 ProtoParse = (PProtoParse)GetProcAddress(HTTFILE,
121 MAKEINTRESOURCE(IdProtoParse));
122 if (ProtoParse==NULL) Err = TRUE;
123
124 ProtoTimeOutProc = (PProtoTimeOutProc)GetProcAddress(HTTFILE,
125 MAKEINTRESOURCE(IdProtoTimeOutProc));
126 if (ProtoTimeOutProc==NULL) Err = TRUE;
127
128 ProtoCancel = (PProtoCancel)GetProcAddress(HTTFILE,
129 MAKEINTRESOURCE(IdProtoCancel));
130 if (ProtoCancel==NULL) Err = TRUE;
131
132 if (Err)
133 {
134 FreeLibrary(HTTFILE);
135 HTTFILE = NULL;
136 return FALSE;
137 }
138 else {
139 TTFILECount = 1;
140 return TRUE;
141 }
142 }
143
144 BOOL FreeTTFILE()
145 {
146 if (TTFILECount==0) return FALSE;
147 TTFILECount--;
148 if (TTFILECount>0) return TRUE;
149 #ifdef TERATERM32
150 if (HTTFILE!=NULL)
151 #else
152 if (HTTFILE>=HINSTANCE_ERROR)
153 #endif
154 {
155 FreeLibrary(HTTFILE);
156 HTTFILE = NULL;
157 }
158 return TRUE;
159 }
160
161 static PFileTransDlg FLogDlg = NULL;
162 static PFileTransDlg SendDlg = NULL;
163 static PProtoDlg PtDlg = NULL;
164
165 BOOL OpenFTDlg(PFileVar fv)
166 {
167 PFileTransDlg FTDlg;
168
169 FTDlg = new CFileTransDlg();
170
171 if (FTDlg!=NULL)
172 {
173 FTDlg->Create(fv, &cv);
174 FTDlg->RefreshNum();
175 if (fv->OpId == OpLog)
176 FTDlg->ShowWindow(SW_MINIMIZE);
177 }
178
179 if (fv->OpId==OpLog)
180 FLogDlg = FTDlg; /* Log */
181 else
182 SendDlg = FTDlg; /* File send */
183
184 return (FTDlg!=NULL);
185 }
186
187 BOOL NewFileVar(PFileVar *fv)
188 {
189 if ((*fv)==NULL)
190 {
191 *fv = (PFileVar)malloc(sizeof(TFileVar));
192 if ((*fv)!=NULL)
193 {
194 memset(*fv, 0, sizeof(TFileVar));
195 strcpy((*fv)->FullName,ts.FileDir);
196 AppendSlash((*fv)->FullName);
197 (*fv)->DirLen = strlen((*fv)->FullName);
198 (*fv)->FileOpen = FALSE;
199 (*fv)->OverWrite = ((ts.FTFlag & FT_RENAME) == 0);
200 (*fv)->HMainWin = HVTWin;
201 (*fv)->Success = FALSE;
202 (*fv)->NoMsg = FALSE;
203 }
204 }
205
206 return ((*fv)!=NULL);
207 }
208
209 void FreeFileVar(PFileVar *fv)
210 {
211 if ((*fv)!=NULL)
212 {
213 if ((*fv)->FileOpen) _lclose((*fv)->FileHandle);
214 if ((*fv)->FnStrMemHandle>0)
215 {
216 GlobalUnlock((*fv)->FnStrMemHandle);
217 GlobalFree((*fv)->FnStrMemHandle);
218 }
219 free(*fv);
220 *fv = NULL;
221 }
222 }
223
224 extern "C" {
225 void LogStart()
226 {
227 LONG Option;
228
229 if ((FileLog) || (BinLog)) return;
230
231 if (! LoadTTFILE()) return;
232 if (! NewFileVar(&LogVar))
233 {
234 FreeTTFILE();
235 return;
236 }
237 LogVar->OpId = OpLog;
238
239 if (strlen(&(LogVar->FullName[LogVar->DirLen]))==0)
240 {
241 // LOWORD
242 // 0x0001 = Binary
243 // HIWORD
244 // 0x0001 = Append
245 // 0x1000 = plain text (2005.2.20 yutaka)
246 // 0x2000 = timestamp (2006.7.23 maya)
247 // teraterm.ini?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スf?スt?スH?ス?ス?スg?スI?スv?スV?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB(2005.5.7 yutaka)
248 Option = MAKELONG(ts.TransBin,ts.Append |
249 (0x1000 * ts.LogTypePlainText) |
250 (0x2000 * ts.LogTimestamp));
251 if (! (*GetTransFname)(LogVar, ts.FileDir, GTF_LOG, &Option))
252 {
253 FreeFileVar(&LogVar);
254 FreeTTFILE();
255 return;
256 }
257 ts.TransBin = LOWORD(Option);
258 ts.Append = HIWORD(Option);
259
260 if (ts.Append & 0x1000) {
261 ts.LogTypePlainText = 1;
262 } else {
263 ts.LogTypePlainText = 0;
264 }
265
266 if (ts.Append & 0x2000) {
267 ts.LogTimestamp = 1;
268 }
269 else {
270 ts.LogTimestamp = 0;
271 }
272
273 ts.Append &= 0x1; // 1bit?ス?ス?ス}?スX?スN?ス?ス?ス?ス
274
275 }
276 else
277 (*SetFileVar)(LogVar);
278
279 if (ts.TransBin > 0)
280 {
281 BinLog = TRUE;
282 FileLog = FALSE;
283 if (! CreateBinBuf())
284 {
285 FileTransEnd(OpLog);
286 return;
287 }
288 }
289 else {
290 BinLog = FALSE;
291 FileLog = TRUE;
292 if (! CreateLogBuf())
293 {
294 FileTransEnd(OpLog);
295 return;
296 }
297 }
298 cv.LStart = cv.LogPtr;
299 cv.LCount = 0;
300
301 HelpId = HlpFileLog;
302 if (ts.Append > 0)
303 {
304 LogVar->FileHandle = _lopen(LogVar->FullName,OF_WRITE);
305 if (LogVar->FileHandle>0)
306 _llseek(LogVar->FileHandle,0,2);
307 else
308 LogVar->FileHandle = _lcreat(LogVar->FullName,0);
309 }
310 else
311 LogVar->FileHandle = _lcreat(LogVar->FullName,0);
312 LogVar->FileOpen = (LogVar->FileHandle>0);
313 if (! LogVar->FileOpen)
314 {
315 FileTransEnd(OpLog);
316 return;
317 }
318 LogVar->ByteCount = 0;
319
320 if (! OpenFTDlg(LogVar))
321 FileTransEnd(OpLog);
322 }
323 }
324
325 void LogPut1(BYTE b)
326 {
327 LogLast = b;
328 cv.LogBuf[cv.LogPtr] = b;
329 cv.LogPtr++;
330 if (cv.LogPtr>=InBuffSize)
331 cv.LogPtr = cv.LogPtr-InBuffSize;
332
333 if (FileLog)
334 {
335 if (cv.LCount>=InBuffSize)
336 {
337 cv.LCount = InBuffSize;
338 cv.LStart = cv.LogPtr;
339 }
340 else cv.LCount++;
341 }
342 else
343 cv.LCount = 0;
344
345 if (DDELog)
346 {
347 if (cv.DCount>=InBuffSize)
348 {
349 cv.DCount = InBuffSize;
350 cv.DStart = cv.LogPtr;
351 }
352 else cv.DCount++;
353 }
354 else
355 cv.DCount = 0;
356 }
357
358 void Log1Byte(BYTE b)
359 {
360 if (b==0x0d)
361 {
362 LogLast = b;
363 return;
364 }
365 if ((b==0x0a) && (LogLast==0x0d))
366 LogPut1(0x0d);
367 LogPut1(b);
368 }
369
370 static BOOL Get1(PCHAR Buf, int *Start, int *Count, PBYTE b)
371 {
372 if (*Count<=0) return FALSE;
373 *b = Buf[*Start];
374 (*Start)++;
375 if (*Start>=InBuffSize)
376 *Start = *Start-InBuffSize;
377 (*Count)--;
378 return TRUE;
379 }
380
381
382
383 static CRITICAL_SECTION g_filelog_lock; /* ?ス?ス?スb?スN?スp?ス?ス?ス?ス */
384
385 void logfile_lock_initialize(void)
386 {
387 InitializeCriticalSection(&g_filelog_lock);
388 }
389
390 static inline void logfile_lock(void)
391 {
392 EnterCriticalSection(&g_filelog_lock);
393 }
394
395 static inline void logfile_unlock(void)
396 {
397 LeaveCriticalSection(&g_filelog_lock);
398 }
399
400 // ?スR?ス?ス?ス?ス?スg?ス?ス?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
401 void CommentLogToFile(char *buf, int size)
402 {
403 DWORD wrote;
404
405 if (LogVar == NULL || !LogVar->FileOpen) {
406 ::MessageBox(NULL, "It is not opened by the log file yet.", "ERROR", MB_OK|MB_ICONEXCLAMATION);
407 return;
408 }
409
410 logfile_lock();
411 WriteFile((HANDLE)LogVar->FileHandle, buf, size, &wrote, NULL);
412 WriteFile((HANDLE)LogVar->FileHandle, "\r\n", 2, &wrote, NULL); // ?ス?ス?スs
413 logfile_unlock();
414 }
415
416 void LogToFile()
417 {
418 PCHAR Buf;
419 int Start, Count;
420 BYTE b;
421
422 if (! LogVar->FileOpen) return;
423 if (FileLog)
424 {
425 Buf = cv.LogBuf;
426 Start = cv.LStart;
427 Count = cv.LCount;
428 }
429 else if (BinLog)
430 {
431 Buf = cv.BinBuf;
432 Start = cv.BStart;
433 Count = cv.BCount;
434 }
435 else
436 return;
437
438 if (Buf==NULL) return;
439 if (Count==0) return;
440
441 // ?ス?ス?スb?スN?ス?ス?ス?ス?ス?ス(2004.8.6 yutaka)
442 logfile_lock();
443
444 while (Get1(Buf,&Start,&Count,&b))
445 {
446 if (((cv.FilePause & OpLog)==0) && (! cv.ProtoFlag))
447 {
448 // ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スo?ス?ス(2006.7.23 maya)
449 // ?ス?ス?スt?スt?スH?ス[?ス}?スb?スg?ス?ス?ス?ス?ス{?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スE?スW?ス?ス?ス?ス?ス?ス?スX?ス?ス?ス?ス (2006.7.23 yutaka)
450 if (ts.LogTimestamp &&
451 (Start == 1 || Buf[Start-2] == 0x0a)) {
452 #if 0
453 SYSTEMTIME LocalTime;
454 GetLocalTime(&LocalTime);
455 char strtime[27];
456
457 // format time
458 sprintf(strtime, "[%04d/%02d/%02d %02d:%02d:%02d.%03d] ",
459 LocalTime.wYear, LocalTime.wMonth,LocalTime.wDay,
460 LocalTime.wHour, LocalTime.wMinute, LocalTime.wSecond,
461 LocalTime.wMilliseconds);
462 #else
463 time_t tick = time(NULL);
464 char *strtime = ctime(&tick);
465 #endif
466
467 // write to file
468 if (Start == 1 && ts.Append) {
469 _lwrite(LogVar->FileHandle,"\r\n",strlen("\r\n"));
470 }
471 _lwrite(LogVar->FileHandle,"[",1);
472 // ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スI?ス[?ス?ス \n ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
473 _lwrite(LogVar->FileHandle, strtime, strlen(strtime) - 1);
474 _lwrite(LogVar->FileHandle,"] ",2);
475 }
476
477 _lwrite(LogVar->FileHandle,(PCHAR)&b,1);
478 (LogVar->ByteCount)++;
479 }
480 }
481
482 logfile_unlock();
483
484 if (FileLog)
485 {
486 cv.LStart = Start;
487 cv.LCount = Count;
488 }
489 else {
490 cv.BStart = Start;
491 cv.BCount = Count;
492 }
493 if (((cv.FilePause & OpLog) !=0) || cv.ProtoFlag) return;
494 if (FLogDlg!=NULL)
495 FLogDlg->RefreshNum();
496 }
497
498 BOOL CreateLogBuf()
499 {
500 if (cv.HLogBuf==NULL)
501 {
502 cv.HLogBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);
503 cv.LogBuf = NULL;
504 cv.LogPtr = 0;
505 cv.LStart = 0;
506 cv.LCount = 0;
507 cv.DStart = 0;
508 cv.DCount = 0;
509 }
510 return (cv.HLogBuf!=NULL);
511 }
512
513 void FreeLogBuf()
514 {
515 if ((cv.HLogBuf==NULL) || FileLog || DDELog) return;
516 if (cv.LogBuf!=NULL) GlobalUnlock(cv.HLogBuf);
517 GlobalFree(cv.HLogBuf);
518 cv.HLogBuf = NULL;
519 cv.LogBuf = NULL;
520 cv.LogPtr = 0;
521 cv.LStart = 0;
522 cv.LCount = 0;
523 cv.DStart = 0;
524 cv.DCount = 0;
525 }
526
527 BOOL CreateBinBuf()
528 {
529 if (cv.HBinBuf==NULL)
530 {
531 cv.HBinBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);
532 cv.BinBuf = NULL;
533 cv.BinPtr = 0;
534 cv.BStart = 0;
535 cv.BCount = 0;
536 }
537 return (cv.HBinBuf!=NULL);
538 }
539
540 void FreeBinBuf()
541 {
542 if ((cv.HBinBuf==NULL) || BinLog) return;
543 if (cv.BinBuf!=NULL) GlobalUnlock(cv.HBinBuf);
544 GlobalFree(cv.HBinBuf);
545 cv.HBinBuf = NULL;
546 cv.BinBuf = NULL;
547 cv.BinPtr = 0;
548 cv.BStart = 0;
549 cv.BCount = 0;
550 }
551
552 extern "C" {
553 void FileSendStart()
554 {
555 LONG Option;
556
557 if (! cv.Ready || FSend) return;
558 if (cv.ProtoFlag)
559 {
560 FreeFileVar(&SendVar);
561 return;
562 }
563
564 if (! LoadTTFILE()) return;
565 if (! NewFileVar(&SendVar))
566 {
567 FreeTTFILE();
568 return;
569 }
570 SendVar->OpId = OpSendFile;
571
572 FSend = TRUE;
573
574 if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0)
575 {
576 Option = MAKELONG(ts.TransBin,0);
577 if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option))
578 {
579 FileTransEnd(OpSendFile);
580 return;
581 }
582 ts.TransBin = LOWORD(Option);
583 }
584 else
585 (*SetFileVar)(SendVar);
586
587 SendVar->FileHandle = _lopen(SendVar->FullName,OF_READ);
588 SendVar->FileOpen = (SendVar->FileHandle>0);
589 if (! SendVar->FileOpen)
590 {
591 FileTransEnd(OpSendFile);
592 return;
593 }
594 SendVar->ByteCount = 0;
595
596 TalkStatus = IdTalkFile;
597 FileRetrySend = FALSE;
598 FileRetryEcho = FALSE;
599 FileCRSend = FALSE;
600
601 if (! OpenFTDlg(SendVar))
602 FileTransEnd(OpSendFile);
603 }
604 }
605
606 void FileTransEnd(WORD OpId)
607 /* OpId = 0: close Log and FileSend
608 OpLog: close Log
609 OpSendFile: close FileSend */
610 {
611 if (((OpId==0) || (OpId==OpLog)) &&
612 (FileLog || BinLog))
613 {
614 FileLog = FALSE;
615 BinLog = FALSE;
616 if (FLogDlg!=NULL)
617 {
618 FLogDlg->DestroyWindow();
619 FLogDlg = NULL;
620 }
621 FreeFileVar(&LogVar);
622 FreeLogBuf();
623 FreeBinBuf();
624 FreeTTFILE();
625 }
626
627 if (((OpId==0) || (OpId==OpSendFile)) &&
628 FSend)
629 {
630 FSend = FALSE;
631 TalkStatus = IdTalkKeyb;
632 if (SendDlg!=NULL)
633 {
634 SendDlg->DestroyWindow();
635 SendDlg = NULL;
636 }
637 FreeFileVar(&SendVar);
638 FreeTTFILE();
639 }
640
641 EndDdeCmnd(0);
642 }
643
644 // vtwin.cpp ?ス?ス?ス?ス?スR?ス[?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スAextern "C"?ス?ス?スt?ス?ス?ス?ス?スB(2004.11.3 yutaka)
645 extern "C" {
646 int FSOut1(BYTE b)
647 {
648 if (ts.TransBin > 0)
649 return CommBinaryOut(&cv,(PCHAR)&b,1);
650 else if ((b>=0x20) || (b==0x09) || (b==0x0A) || (b==0x0D))
651 return CommTextOut(&cv,(PCHAR)&b,1);
652 else
653 return 1;
654 }
655
656 int FSEcho1(BYTE b)
657 {
658 if (ts.TransBin > 0)
659 return CommBinaryEcho(&cv,(PCHAR)&b,1);
660 else
661 return CommTextEcho(&cv,(PCHAR)&b,1);
662 }
663 }
664
665 extern "C" {
666 void FileSend()
667 {
668 WORD c, fc;
669 LONG BCOld;
670
671 if ((SendDlg==NULL) ||
672 ((cv.FilePause & OpSendFile) !=0)) return;
673
674 BCOld = SendVar->ByteCount;
675
676 if (FileRetrySend)
677 {
678 FileRetryEcho = (ts.LocalEcho>0);
679 c = FSOut1(FileByte);
680 FileRetrySend = (c==0);
681 if (FileRetrySend) return;
682 }
683
684 if (FileRetryEcho)
685 {
686 c = FSEcho1(FileByte);
687 FileRetryEcho = (c==0);
688 if (FileRetryEcho) return;
689 }
690
691 do {
692 fc = _lread(SendVar->FileHandle,&FileByte,1);
693 SendVar->ByteCount = SendVar->ByteCount + fc;
694
695 if (FileCRSend && (fc==1) && (FileByte==0x0A))
696 {
697 fc = _lread(SendVar->FileHandle,&FileByte,1);
698 SendVar->ByteCount = SendVar->ByteCount + fc;
699 }
700
701 if (fc!=0)
702 {
703 c = FSOut1(FileByte);
704 FileCRSend = (ts.TransBin==0) && (FileByte==0x0D);
705 FileRetrySend = (c==0);
706 if (FileRetrySend)
707 {
708 if (SendVar->ByteCount != BCOld)
709 SendDlg->RefreshNum();
710 return;
711 }
712 if (ts.LocalEcho>0)
713 {
714 c = FSEcho1(FileByte);
715 FileRetryEcho = (c==0);
716 if (FileRetryEcho) return;
717 }
718 }
719 if ((fc==0) || (SendVar->ByteCount % 100 == 0))
720 {
721 SendDlg->RefreshNum();
722 BCOld = SendVar->ByteCount;
723 if (fc!=0) return;
724 }
725 } while (fc!=0);
726
727 FileTransEnd(OpSendFile);
728 }
729 }
730
731 extern "C" {
732 void FLogChangeButton(BOOL Pause)
733 {
734 if (FLogDlg!=NULL)
735 FLogDlg->ChangeButton(Pause);
736 }
737 }
738
739 extern "C" {
740 void FLogRefreshNum()
741 {
742 if (FLogDlg!=NULL)
743 FLogDlg->RefreshNum();
744 }
745 }
746
747 BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)
748 {
749 int vsize;
750 PProtoDlg pd;
751
752 ProtoId = IdProto;
753
754 switch (ProtoId) {
755 case PROTO_KMT:
756 vsize = sizeof(TKmtVar);
757 break;
758 case PROTO_XM:
759 vsize = sizeof(TXVar);
760 break;
761 case PROTO_ZM:
762 vsize = sizeof(TZVar);
763 break;
764 case PROTO_BP:
765 vsize = sizeof(TBPVar);
766 break;
767 case PROTO_QV:
768 vsize = sizeof(TQVVar);
769 break;
770 }
771 ProtoVar = (PCHAR)malloc(vsize);
772 if (ProtoVar==NULL) return FALSE;
773
774 switch (ProtoId) {
775 case PROTO_KMT:
776 ((PKmtVar)ProtoVar)->KmtMode = Mode;
777 break;
778 case PROTO_XM:
779 ((PXVar)ProtoVar)->XMode = Mode;
780 ((PXVar)ProtoVar)->XOpt = Opt1;
781 ((PXVar)ProtoVar)->TextFlag = 1 - (Opt2 & 1);
782 break;
783 case PROTO_ZM:
784 ((PZVar)ProtoVar)->BinFlag = (Opt1 & 1) != 0;
785 ((PZVar)ProtoVar)->ZMode = Mode;
786 break;
787 case PROTO_BP:
788 ((PBPVar)ProtoVar)->BPMode = Mode;
789 break;
790 case PROTO_QV:
791 ((PQVVar)ProtoVar)->QVMode = Mode;
792 break;
793 }
794
795 pd = new CProtoDlg();
796 if (pd==NULL)
797 {
798 free(ProtoVar);
799 ProtoVar = NULL;
800 return FALSE;
801 }
802 pd->Create(fv);
803
804 (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
805
806 PtDlg = pd;
807 return TRUE;
808 }
809
810 extern "C" {
811 void CloseProtoDlg()
812 {
813 if (PtDlg!=NULL)
814 {
815 PtDlg->DestroyWindow();
816 PtDlg = NULL;
817
818 ::KillTimer(FileVar->HMainWin,IdProtoTimer);
819 if ((ProtoId==PROTO_QV) &&
820 (((PQVVar)ProtoVar)->QVMode==IdQVSend))
821 CommTextOut(&cv,"\015",1);
822 if (FileVar->LogFlag)
823 _lclose(FileVar->LogFile);
824 FileVar->LogFile = 0;
825 if (ProtoVar!=NULL)
826 {
827 free(ProtoVar);
828 ProtoVar = NULL;
829 }
830 }
831 }
832 }
833
834 BOOL ProtoStart()
835 {
836 if (cv.ProtoFlag) return FALSE;
837 if (FSend)
838 {
839 FreeFileVar(&FileVar);
840 return FALSE;
841 }
842
843 if (! LoadTTFILE()) return FALSE;
844 NewFileVar(&FileVar);
845
846 if (FileVar==NULL)
847 {
848 FreeTTFILE();
849 return FALSE;
850 }
851 cv.ProtoFlag = TRUE;
852 return TRUE;
853 }
854
855 void ProtoEnd()
856 {
857 if (! cv.ProtoFlag) return;
858 cv.ProtoFlag = FALSE;
859
860 /* Enable transmit delay (serial port) */
861 cv.DelayFlag = TRUE;
862 TalkStatus = IdTalkKeyb;
863
864 CloseProtoDlg();
865
866 if ((FileVar!=NULL) && FileVar->Success)
867 EndDdeCmnd(1);
868 else
869 EndDdeCmnd(0);
870
871 FreeTTFILE();
872 FreeFileVar(&FileVar);
873 }
874
875 extern "C" {
876 int ProtoDlgParse()
877 {
878 int P;
879
880 P = ActiveWin;
881 if (PtDlg==NULL) return P;
882
883 if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))
884 P = 0; /* continue */
885 else {
886 CommSend(&cv);
887 ProtoEnd();
888 }
889 return P;
890 }
891 }
892
893 extern "C" {
894 void ProtoDlgTimeOut()
895 {
896 if (PtDlg!=NULL)
897 (*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);
898 }
899 }
900
901 extern "C" {
902 void ProtoDlgCancel()
903 {
904 if ((PtDlg!=NULL) &&
905 (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))
906 ProtoEnd();
907 }
908 }
909
910 extern "C" {
911 void KermitStart(int mode)
912 {
913 WORD w;
914
915 if (! ProtoStart()) return;
916
917 switch (mode) {
918 case IdKmtSend:
919 FileVar->OpId = OpKmtSend;
920 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
921 {
922 if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_KERMIT,&w) ||
923 (FileVar->NumFname==0))
924 {
925 ProtoEnd();
926 return;
927 }
928 }
929 else
930 (*SetFileVar)(FileVar);
931 break;
932 case IdKmtReceive:
933 FileVar->OpId = OpKmtRcv;
934 break;
935 case IdKmtGet:
936 FileVar->OpId = OpKmtSend;
937 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
938 {
939 if (! (*GetGetFname)(FileVar->HMainWin,FileVar) ||
940 (strlen(FileVar->FullName)==0))
941 {
942 ProtoEnd();
943 return;
944 }
945 }
946 else
947 (*SetFileVar)(FileVar);
948 break;
949 case IdKmtFinish:
950 FileVar->OpId = OpKmtFin;
951 break;
952 default:
953 ProtoEnd();
954 return;
955 }
956 TalkStatus = IdTalkQuiet;
957
958 /* disable transmit delay (serial port) */
959 cv.DelayFlag = FALSE;
960
961 if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))
962 ProtoEnd();
963 }
964 }
965
966 extern "C" {
967 void XMODEMStart(int mode)
968 {
969 LONG Option;
970
971 if (! ProtoStart()) return;
972
973 if (mode==IdXReceive)
974 FileVar->OpId = OpXRcv;
975 else
976 FileVar->OpId = OpXSend;
977
978 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
979 {
980 Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
981 if (! (*GetXFname)(FileVar->HMainWin,
982 mode==IdXReceive,&Option,FileVar,ts.FileDir))
983 {
984 ProtoEnd();
985 return;
986 }
987 ts.XmodemOpt = HIWORD(Option);
988 ts.XmodemBin = LOWORD(Option);
989 }
990 else
991 (*SetFileVar)(FileVar);
992
993 if (mode==IdXReceive)
994 FileVar->FileHandle = _lcreat(FileVar->FullName,0);
995 else
996 FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);
997
998 FileVar->FileOpen = FileVar->FileHandle>0;
999 if (! FileVar->FileOpen)
1000 {
1001 ProtoEnd();
1002 return;
1003 }
1004 TalkStatus = IdTalkQuiet;
1005
1006 /* disable transmit delay (serial port) */
1007 cv.DelayFlag = FALSE;
1008
1009 if (! OpenProtoDlg(FileVar,PROTO_XM,mode,
1010 ts.XmodemOpt,ts.XmodemBin))
1011 ProtoEnd();
1012 }
1013 }
1014
1015 extern "C" {
1016 void ZMODEMStart(int mode)
1017 {
1018 WORD Opt;
1019
1020 if (! ProtoStart()) return;
1021
1022 if (mode==IdZSend)
1023 {
1024 Opt = ts.XmodemBin;
1025 FileVar->OpId = OpZSend;
1026 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1027 {
1028 if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_Z,&Opt) ||
1029 (FileVar->NumFname==0))
1030 {
1031 ProtoEnd();
1032 return;
1033 }
1034 ts.XmodemBin = Opt;
1035 }
1036 else
1037 (*SetFileVar)(FileVar);
1038 }
1039 else /* IdZReceive or IdZAuto */
1040 FileVar->OpId = OpZRcv;
1041
1042 TalkStatus = IdTalkQuiet;
1043
1044 /* disable transmit delay (serial port) */
1045 cv.DelayFlag = FALSE;
1046
1047 if (! OpenProtoDlg(FileVar,PROTO_ZM,mode,Opt,0))
1048 ProtoEnd();
1049 }
1050 }
1051
1052 extern "C" {
1053 void BPStart(int mode)
1054 {
1055 LONG Option;
1056
1057 if (! ProtoStart()) return;
1058 if (mode==IdBPSend)
1059 {
1060 FileVar->OpId = OpBPSend;
1061 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1062 {
1063 if (! (*GetTransFname)(FileVar, ts.FileDir, GTF_BP, &Option))
1064 {
1065 ProtoEnd();
1066 return;
1067 }
1068 }
1069 else
1070 (*SetFileVar)(FileVar);
1071
1072 }
1073 else /* IdBPReceive or IdBPAuto */
1074 FileVar->OpId = OpBPRcv;
1075
1076 TalkStatus = IdTalkQuiet;
1077
1078 /* disable transmit delay (serial port) */
1079 cv.DelayFlag = FALSE;
1080
1081 if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))
1082 ProtoEnd();
1083 }
1084 }
1085
1086 extern "C" {
1087 void QVStart(int mode)
1088 {
1089 WORD W;
1090
1091 if (! ProtoStart()) return;
1092
1093 if (mode==IdQVSend)
1094 {
1095 FileVar->OpId = OpQVSend;
1096 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1097 {
1098 if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_QV, &W) ||
1099 (FileVar->NumFname==0))
1100 {
1101 ProtoEnd();
1102 return;
1103 }
1104 }
1105 else
1106 (*SetFileVar)(FileVar);
1107 }
1108 else
1109 FileVar->OpId = OpQVRcv;
1110
1111 TalkStatus = IdTalkQuiet;
1112
1113 /* disable transmit delay (serial port) */
1114 cv.DelayFlag = FALSE;
1115
1116 if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))
1117 ProtoEnd();
1118 }
1119 }
1120
1121 /*
1122 * $Log: filesys.cpp,v $
1123 * Revision 1.4 2006/07/22 16:15:54 maya
1124 * ?ス?ス?スO?スL?ス^?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス@?ス\?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1125 *
1126 * Revision 1.3 2005/05/07 09:49:24 yutakakn
1127 * teraterm.ini?ス?ス LogTypePlainText ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1128 *
1129 * Revision 1.2 2005/02/20 14:51:29 yutakakn
1130 * ?ス?ス?スO?スt?ス@?スC?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス"plain text"?ス?ス?ス?ス?ス?ス?スB?ス?ス?ス?ス?スI?スv?スV?ス?ス?ス?ス?ス?ス?スL?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スA?ス?ス?スO?スt?ス@?スC?ス?ス?ス?ス
1131 * ASCII?ス?ス?ス\?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1132 *
1133 * ?ス?ス?ス?ス?スA?ス?ス?ス?ス?ス?ス?ス?ス?スL?ス?ス?ス?ス?スN?ス^?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1134 * ?ス@?スEBS
1135 * ?ス@?スEASCII(0x00-0x1f)?ス?ス?ス?ス?ス?ス?ス?ス?ス\?ス?ス?ス?ス?ス?ス?ス?ス
1136 *
1137 * ?ス?ス?ス?ス?ス?ス?スA?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?スB
1138 * ?ス@?スEHT
1139 * ?ス@?スECR
1140 * ?ス@?スELF
1141 *
1142 */

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