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.2 - (hide annotations) (download) (as text)
Sun Feb 20 14:51:29 2005 UTC (19 years, 1 month ago) by yutakakn
Branch: MAIN
CVS Tags: R412_RTM, R413_RTM, R415_RTM, R414_RTM, R411_RTM
Changes since 1.1: +77 -64 lines
File MIME type: text/x-c++src
ログファイルの種別に"plain text"を追加。このオプションが有効の場合は、ログファイルに
ASCII非表示文字の採取をしない。

現在、無視するキャラクタは以下のとおり。
 ・BS
 ・ASCII(0x00-0x1f)のうち非表示なもの

ただし、例外として以下のものはログ採取対象。
 ・HT
 ・CR
 ・LF

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

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