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.5 - (hide 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 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 yutakakn 1.2 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 maya 1.4
266     if (ts.Append & 0x2000) {
267     ts.LogTimestamp = 1;
268     }
269     else {
270     ts.LogTimestamp = 0;
271     }
272    
273 yutakakn 1.2 ts.Append &= 0x1; // 1bit?ス?ス?ス}?スX?スN?ス?ス?ス?ス
274 yutakakn 1.1
275 yutakakn 1.2 }
276     else
277     (*SetFileVar)(LogVar);
278 yutakakn 1.1
279 yutakakn 1.2 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 yutakakn 1.1
301 yutakakn 1.2 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 yutakakn 1.1
320 yutakakn 1.2 if (! OpenFTDlg(LogVar))
321     FileTransEnd(OpLog);
322 yutakakn 1.1 }
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 maya 1.4 // ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スo?ス?ス(2006.7.23 maya)
449 yutakakn 1.5 // ?ス?ス?スt?スt?スH?ス[?ス}?スb?スg?ス?ス?ス?ス?ス{?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スE?スW?ス?ス?ス?ス?ス?ス?スX?ス?ス?ス?ス (2006.7.23 yutaka)
450 maya 1.4 if (ts.LogTimestamp &&
451     (Start == 1 || Buf[Start-2] == 0x0a)) {
452 yutakakn 1.5 #if 0
453 maya 1.4 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 yutakakn 1.5 #else
463     time_t tick = time(NULL);
464     char *strtime = ctime(&tick);
465     #endif
466 maya 1.4
467     // write to file
468     if (Start == 1 && ts.Append) {
469     _lwrite(LogVar->FileHandle,"\r\n",strlen("\r\n"));
470     }
471 yutakakn 1.5 _lwrite(LogVar->FileHandle,"[",1);
472     // ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スI?ス[?ス?ス \n ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
473     _lwrite(LogVar->FileHandle, strtime, strlen(strtime) - 1);
474     _lwrite(LogVar->FileHandle,"] ",2);
475 maya 1.4 }
476    
477 yutakakn 1.1 _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 yutakakn 1.2
1121     /*
1122 yutakakn 1.3 * $Log: filesys.cpp,v $
1123 yutakakn 1.5 * Revision 1.4 2006/07/22 16:15:54 maya
1124     * ?ス?ス?スO?スL?ス^?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス@?ス\?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1125     *
1126 maya 1.4 * Revision 1.3 2005/05/07 09:49:24 yutakakn
1127     * teraterm.ini?ス?ス LogTypePlainText ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1128     *
1129 yutakakn 1.3 * 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 yutakakn 1.2 */

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