Develop and Download Open Source Software

Browse CVS Repository

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

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


Revision 1.6 - (hide annotations) (download) (as text)
Mon Aug 28 12:27:16 2006 UTC (17 years, 6 months ago) by maya
Branch: MAIN
CVS Tags: R446_RTM, R448_RTM, R445_RTM, R449_RTM, R447_RTM
Changes since 1.5: +10 -0 lines
File MIME type: text/x-c++src
デフォルトのログファイル名を指定できるようにした。
  エディットコントロールを "Additional settings" ダイアログに追加した。
  teraterm.ini ファイルに LogDefaultName エントリを追加した。
  ファイル名に strftime のフォーマットを使えるようにした。

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

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