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.3 - (hide annotations) (download) (as text)
Sat May 7 09:49:24 2005 UTC (18 years, 10 months ago) by yutakakn
Branch: MAIN
CVS Tags: R439_RTM, R430_RTM, R426_RTM, R420_RTM, R431_RTM, R416_BOXSELECT_CHANGE, R418_RTM, R428_RTM, R419_RTM, R423_RTM, R424_RTM, R422_RTM, R429_RTM, R432_RTM, R440_RTM, R434_RTM, R417_RTM, R421_RTM, R433_RTM, R416_RTM, R436_RTM, R435_RTM, R425_RTM, R437_RTM, R427_RTM, R435a_RTM, R438_RTM
Changes since 1.2: +16 -2 lines
File MIME type: text/x-c++src
teraterm.iniに LogTypePlainText を追加した。

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

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