Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/teraterm/teraterm/filesys.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8900 - (hide annotations) (download) (as text)
Tue Aug 18 15:29:32 2020 UTC (3 years, 7 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 24270 byte(s)
filesys_log.h を作成

- filesys.h から分離
- 使用していないので filesys_log から ttpfile.dll のロードを行わないようにした
- ログのポーズに cv.FilePause を使用しないようにした
1 doda 6806 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3 zmatsuo 8822 * (C) 2005-2020 TeraTerm Project
4 doda 6806 * All rights reserved.
5     *
6 doda 6841 * Redistribution and use in source and binary forms, with or without
7     * modification, are permitted provided that the following conditions
8     * are met:
9 doda 6806 *
10 doda 6841 * 1. Redistributions of source code must retain the above copyright
11     * notice, this list of conditions and the following disclaimer.
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the distribution.
15     * 3. The name of the author may not be used to endorse or promote products
16     * derived from this software without specific prior written permission.
17 doda 6806 *
18 doda 6841 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 doda 6806 */
29 maya 3227
30     /* TERATERM.EXE, file transfer routines */
31 zmatsuo 7526 #include <stdio.h>
32     #include <io.h>
33     #include <process.h>
34 zmatsuo 8852 #include <windows.h>
35     #include <htmlhelp.h>
36     #include <assert.h>
37 zmatsuo 7526
38 maya 3227 #include "teraterm.h"
39     #include "tttypes.h"
40     #include "ttftypes.h"
41     #include "ftdlg.h"
42     #include "protodlg.h"
43     #include "ttwinman.h"
44     #include "commlib.h"
45     #include "ttcommon.h"
46     #include "ttdde.h"
47     #include "ttlib.h"
48     #include "dlglib.h"
49 doda 3904 #include "vtterm.h"
50 zmatsuo 7290 #include "win16api.h"
51 maya 3227 #include "ftlib.h"
52 yutakapon 5392 #include "buffer.h"
53 zmatsuo 8852 #include "helpid.h"
54     #include "layer_for_unicode.h"
55 zmatsuo 8863 #include "layer_for_unicode_crt.h"
56     #include "codeconv.h"
57 yutakapon 5392
58 zmatsuo 8852 #include "filesys_log_res.h"
59 yutakapon 5162
60 zmatsuo 8866 #include "filesys.h"
61    
62 doda 3904 #define FS_BRACKET_NONE 0
63     #define FS_BRACKET_START 1
64     #define FS_BRACKET_END 2
65    
66 maya 3227 PFileVar SendVar = NULL;
67     PFileVar FileVar = NULL;
68     static PCHAR ProtoVar = NULL;
69     static int ProtoId;
70    
71 doda 3904 static BOOL FileRetrySend, FileRetryEcho, FileCRSend, FileReadEOF, BinaryMode;
72 maya 3227 static BYTE FileByte;
73    
74 maya 6071 #define FILE_SEND_BUF_SIZE 8192
75     struct FileSendHandler {
76     CHAR buf[FILE_SEND_BUF_SIZE];
77     int pos;
78     int end;
79     };
80     static struct FileSendHandler FileSendHandler;
81     static int FileDlgRefresh;
82    
83 doda 3904 static int FileBracketMode = FS_BRACKET_NONE;
84     static int FileBracketPtr = 0;
85     static char BracketStartStr[] = "\033[200~";
86     static char BracketEndStr[] = "\033[201~";
87    
88 maya 3227 static BOOL FSend = FALSE;
89    
90     static HMODULE HTTFILE = NULL;
91     static int TTFILECount = 0;
92    
93     PGetSetupFname GetSetupFname;
94 zmatsuo 8852 static PGetTransFname GetTransFname;
95 maya 3227 PGetMultiFname GetMultiFname;
96     PGetGetFname GetGetFname;
97     PSetFileVar SetFileVar;
98     PGetXFname GetXFname;
99     PProtoInit ProtoInit;
100 zmatsuo 8857 static PProtoParse ProtoParse;
101 maya 3227 PProtoTimeOutProc ProtoTimeOutProc;
102     PProtoCancel ProtoCancel;
103 maya 7182 PTTFILESetUILanguageFile TTFILESetUILanguageFile;
104     PTTFILESetFileSendFilter TTFILESetFileSendFilter;
105 maya 3227
106     #define IdGetSetupFname 1
107     #define IdGetTransFname 2
108     #define IdGetMultiFname 3
109     #define IdGetGetFname 4
110     #define IdSetFileVar 5
111     #define IdGetXFname 6
112    
113     #define IdProtoInit 7
114     #define IdProtoParse 8
115     #define IdProtoTimeOutProc 9
116     #define IdProtoCancel 10
117    
118 maya 7182 #define IdTTFILESetUILanguageFile 11
119     #define IdTTFILESetFileSendFilter 12
120    
121 zmatsuo 8858 BOOL LoadTTFILE(void)
122 maya 3227 {
123     BOOL Err;
124    
125     if (HTTFILE != NULL)
126     {
127     TTFILECount++;
128     return TRUE;
129     }
130     else
131     TTFILECount = 0;
132    
133 doda 6792 HTTFILE = LoadHomeDLL("TTPFILE.DLL");
134 maya 3227 if (HTTFILE == NULL)
135     return FALSE;
136    
137 maya 7182 Err = FALSE;
138 maya 3227
139     GetSetupFname = (PGetSetupFname)GetProcAddress(HTTFILE,
140     MAKEINTRESOURCE(IdGetSetupFname));
141     if (GetSetupFname==NULL)
142     Err = TRUE;
143    
144     GetTransFname = (PGetTransFname)GetProcAddress(HTTFILE,
145     MAKEINTRESOURCE(IdGetTransFname));
146     if (GetTransFname==NULL)
147     Err = TRUE;
148    
149     GetMultiFname = (PGetMultiFname)GetProcAddress(HTTFILE,
150     MAKEINTRESOURCE(IdGetMultiFname));
151     if (GetMultiFname==NULL)
152     Err = TRUE;
153    
154     GetGetFname = (PGetGetFname)GetProcAddress(HTTFILE,
155     MAKEINTRESOURCE(IdGetGetFname));
156     if (GetGetFname==NULL)
157     Err = TRUE;
158    
159     SetFileVar = (PSetFileVar)GetProcAddress(HTTFILE,
160     MAKEINTRESOURCE(IdSetFileVar));
161     if (SetFileVar==NULL)
162     Err = TRUE;
163    
164     GetXFname = (PGetXFname)GetProcAddress(HTTFILE,
165     MAKEINTRESOURCE(IdGetXFname));
166     if (GetXFname==NULL)
167     Err = TRUE;
168    
169     ProtoInit = (PProtoInit)GetProcAddress(HTTFILE,
170     MAKEINTRESOURCE(IdProtoInit));
171     if (ProtoInit==NULL)
172     Err = TRUE;
173    
174     ProtoParse = (PProtoParse)GetProcAddress(HTTFILE,
175     MAKEINTRESOURCE(IdProtoParse));
176     if (ProtoParse==NULL)
177     Err = TRUE;
178    
179     ProtoTimeOutProc = (PProtoTimeOutProc)GetProcAddress(HTTFILE,
180     MAKEINTRESOURCE(IdProtoTimeOutProc));
181     if (ProtoTimeOutProc==NULL)
182     Err = TRUE;
183    
184     ProtoCancel = (PProtoCancel)GetProcAddress(HTTFILE,
185     MAKEINTRESOURCE(IdProtoCancel));
186     if (ProtoCancel==NULL)
187     Err = TRUE;
188    
189 maya 7182 TTFILESetUILanguageFile = (PTTFILESetUILanguageFile)GetProcAddress(HTTFILE,
190     MAKEINTRESOURCE(IdTTFILESetUILanguageFile));
191     if (TTFILESetUILanguageFile==NULL) {
192     Err = TRUE;
193     }
194     else {
195     TTFILESetUILanguageFile(ts.UILanguageFile);
196     }
197    
198     TTFILESetFileSendFilter = (PTTFILESetFileSendFilter)GetProcAddress(HTTFILE,
199     MAKEINTRESOURCE(IdTTFILESetFileSendFilter));
200     if (TTFILESetFileSendFilter==NULL) {
201     Err = TRUE;
202     }
203     else {
204     TTFILESetFileSendFilter(ts.FileSendFilter);
205     }
206    
207 maya 3227 if (Err)
208     {
209     FreeLibrary(HTTFILE);
210     HTTFILE = NULL;
211 doda 6435 return FALSE;
212 maya 3227 }
213     else {
214     TTFILECount = 1;
215     return TRUE;
216     }
217     }
218    
219 zmatsuo 8858 BOOL FreeTTFILE(void)
220 maya 3227 {
221     if (TTFILECount==0)
222     return FALSE;
223     TTFILECount--;
224     if (TTFILECount>0)
225     return TRUE;
226     if (HTTFILE!=NULL)
227     {
228     FreeLibrary(HTTFILE);
229     HTTFILE = NULL;
230     }
231     return TRUE;
232     }
233    
234     static PFileTransDlg SendDlg = NULL;
235     static PProtoDlg PtDlg = NULL;
236    
237 zmatsuo 7526 static BOOL OpenFTDlg(PFileVar fv)
238 maya 3227 {
239     PFileTransDlg FTDlg;
240    
241     FTDlg = new CFileTransDlg();
242    
243 doda 4454 fv->StartTime = 0;
244     fv->ProgStat = 0;
245 zmatsuo 8857 cv.FilePause &= ~fv->OpId;
246 doda 4454
247 maya 3227 if (FTDlg!=NULL)
248     {
249 zmatsuo 7526 FTDlg->Create(hInst, HVTWin, fv, &cv, &ts);
250 zmatsuo 8895 FTDlg->RefreshNum(fv);
251 maya 3227 }
252    
253 zmatsuo 8894 SendDlg = FTDlg; /* File send */
254 maya 3227
255 doda 6947 fv->StartTime = GetTickCount();
256 maya 3227
257     return (FTDlg!=NULL);
258     }
259    
260 zmatsuo 8857 static void ShowFTDlg(WORD OpId)
261 maya 3227 {
262 zmatsuo 8894 if (SendDlg != NULL) {
263     SendDlg->ShowWindow(SW_SHOWNORMAL);
264     SetForegroundWindow(SendDlg->GetSafeHwnd());
265 maya 3227 }
266     }
267    
268     BOOL NewFileVar(PFileVar *fv)
269     {
270     if ((*fv)==NULL)
271     {
272     *fv = (PFileVar)malloc(sizeof(TFileVar));
273     if ((*fv)!=NULL)
274     {
275 maya 7951 char FileDirExpanded[MAX_PATH];
276     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
277 maya 3227 memset(*fv, 0, sizeof(TFileVar));
278 maya 7951 strncpy_s((*fv)->FullName, sizeof((*fv)->FullName), FileDirExpanded, _TRUNCATE);
279 maya 3227 AppendSlash((*fv)->FullName,sizeof((*fv)->FullName));
280     (*fv)->DirLen = strlen((*fv)->FullName);
281     (*fv)->FileOpen = FALSE;
282     (*fv)->OverWrite = ((ts.FTFlag & FT_RENAME) == 0);
283     (*fv)->HMainWin = HVTWin;
284     (*fv)->Success = FALSE;
285     (*fv)->NoMsg = FALSE;
286     (*fv)->HideDialog = FALSE;
287     }
288     }
289    
290     return ((*fv)!=NULL);
291     }
292    
293     void FreeFileVar(PFileVar *fv)
294     {
295     if ((*fv)!=NULL)
296     {
297 zmatsuo 8894 if ((*fv)->FileOpen) CloseHandle((*fv)->FileHandle);
298 zmatsuo 7541 if ((*fv)->FnStrMemHandle != 0)
299 maya 3227 {
300     GlobalUnlock((*fv)->FnStrMemHandle);
301     GlobalFree((*fv)->FnStrMemHandle);
302     }
303     free(*fv);
304     *fv = NULL;
305     }
306     }
307    
308 zmatsuo 8858 void FileSendStart(void)
309 maya 3227 {
310 doda 6946 LONG Option = 0;
311 maya 3227
312     if (! cv.Ready || FSend) return;
313     if (cv.ProtoFlag)
314     {
315     FreeFileVar(&SendVar);
316     return;
317     }
318    
319 doda 6435 if (! LoadTTFILE())
320 maya 3227 return;
321     if (! NewFileVar(&SendVar))
322     {
323     FreeTTFILE();
324     return;
325     }
326     SendVar->OpId = OpSendFile;
327    
328     FSend = TRUE;
329    
330 maya 7951 if (strlen(&(SendVar->FullName[SendVar->DirLen])) == 0) {
331     char FileDirExpanded[MAX_PATH];
332     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
333 doda 6946 if (ts.TransBin)
334     Option |= LOGDLG_BINARY;
335 maya 3227 SendVar->FullName[0] = 0;
336 maya 7951 if (! (*GetTransFname)(SendVar, FileDirExpanded, GTF_SEND, &Option)) {
337 maya 3227 FileTransEnd(OpSendFile);
338     return;
339     }
340 doda 6946 ts.TransBin = CheckFlag(Option, LOGDLG_BINARY);
341 maya 3227 }
342     else
343     (*SetFileVar)(SendVar);
344    
345 zmatsuo 7290 SendVar->FileHandle = CreateFile(SendVar->FullName, GENERIC_READ, FILE_SHARE_READ, NULL,
346     OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
347     SendVar->FileOpen = (SendVar->FileHandle != INVALID_HANDLE_VALUE);
348 maya 3227 if (! SendVar->FileOpen)
349     {
350     FileTransEnd(OpSendFile);
351     return;
352     }
353     SendVar->ByteCount = 0;
354     SendVar->FileSize = GetFSize(SendVar->FullName);
355    
356     TalkStatus = IdTalkFile;
357     FileRetrySend = FALSE;
358     FileRetryEcho = FALSE;
359     FileCRSend = FALSE;
360 doda 3904 FileReadEOF = FALSE;
361 maya 6071 FileSendHandler.pos = 0;
362     FileSendHandler.end = 0;
363     FileDlgRefresh = 0;
364 maya 3227
365 doda 3904 if (BracketedPasteMode()) {
366     FileBracketMode = FS_BRACKET_START;
367     FileBracketPtr = 0;
368     BinaryMode = TRUE;
369     }
370     else {
371     FileBracketMode = FS_BRACKET_NONE;
372     BinaryMode = ts.TransBin;
373     }
374    
375 maya 3227 if (! OpenFTDlg(SendVar))
376     FileTransEnd(OpSendFile);
377     }
378    
379     void FileTransEnd(WORD OpId)
380     /* OpId = 0: close Log and FileSend
381     OpLog: close Log
382     OpSendFile: close FileSend */
383     {
384 zmatsuo 8900 if ((OpId==0) || (OpId==OpLog)) {
385     if (FLogIsOpend()) {
386     FLogClose();
387     }
388 maya 3227 }
389    
390     if (((OpId==0) || (OpId==OpSendFile)) && FSend)
391     {
392     FSend = FALSE;
393     TalkStatus = IdTalkKeyb;
394     if (SendDlg!=NULL)
395     {
396     SendDlg->DestroyWindow();
397     SendDlg = NULL;
398     }
399     FreeFileVar(&SendVar);
400     FreeTTFILE();
401     }
402    
403     EndDdeCmnd(0);
404     }
405    
406 zmatsuo 8857 void FileTransPause(WORD OpId, BOOL Pause)
407     {
408     if (Pause) {
409     cv.FilePause |= OpId;
410     }
411     else {
412     cv.FilePause &= ~OpId;
413     }
414     }
415    
416 maya 3227 int FSOut1(BYTE b)
417     {
418 doda 3904 if (BinaryMode)
419 maya 3227 return CommBinaryOut(&cv,(PCHAR)&b,1);
420     else if ((b>=0x20) || (b==0x09) || (b==0x0A) || (b==0x0D))
421     return CommTextOut(&cv,(PCHAR)&b,1);
422     else
423     return 1;
424 doda 3861 }
425 maya 3227
426     int FSEcho1(BYTE b)
427     {
428 doda 3904 if (BinaryMode)
429 maya 3227 return CommBinaryEcho(&cv,(PCHAR)&b,1);
430     else
431     return CommTextEcho(&cv,(PCHAR)&b,1);
432     }
433    
434 maya 6071 // �������������������������g��
435     // - BinaryMode == true
436     // - FileBracketMode == false
437     // - cv.TelFlag == false
438     // - ts.LocalEcho == 0
439 zmatsuo 8894 static void FileSendBinayBoost(void)
440 maya 6071 {
441     WORD c, fc;
442     LONG BCOld;
443     DWORD read_bytes;
444    
445     if ((SendDlg == NULL) ||
446     ((cv.FilePause & OpSendFile) != 0))
447     return;
448    
449     BCOld = SendVar->ByteCount;
450    
451     if (FileRetrySend)
452     {
453     c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
454     FileSendHandler.end - FileSendHandler.pos);
455     FileSendHandler.pos += c;
456     FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
457     if (FileRetrySend)
458     return;
459     }
460    
461     do {
462     if (FileSendHandler.pos == FileSendHandler.end) {
463 zmatsuo 7930 ReadFile(SendVar->FileHandle, &(FileSendHandler.buf[0]), sizeof(FileSendHandler.buf), &read_bytes, NULL);
464 maya 6071 fc = LOWORD(read_bytes);
465     FileSendHandler.pos = 0;
466     FileSendHandler.end = fc;
467     } else {
468     fc = FileSendHandler.end - FileSendHandler.end;
469     }
470    
471     if (fc != 0)
472     {
473     c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
474     FileSendHandler.end - FileSendHandler.pos);
475     FileSendHandler.pos += c;
476     FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
477     SendVar->ByteCount = SendVar->ByteCount + c;
478     if (FileRetrySend)
479     {
480     if (SendVar->ByteCount != BCOld)
481 zmatsuo 8895 SendDlg->RefreshNum(SendVar);
482 maya 6071 return;
483     }
484     }
485     FileDlgRefresh = SendVar->ByteCount;
486 zmatsuo 8895 SendDlg->RefreshNum(SendVar);
487 maya 6071 BCOld = SendVar->ByteCount;
488     if (fc != 0)
489     return;
490     } while (fc != 0);
491    
492     FileTransEnd(OpSendFile);
493     }
494    
495 zmatsuo 8858 void FileSend(void)
496 maya 3227 {
497     WORD c, fc;
498     LONG BCOld;
499 maya 5281 DWORD read_bytes;
500 maya 3227
501 maya 6115 if (cv.PortType == IdSerial && ts.FileSendHighSpeedMode &&
502 maya 6110 BinaryMode && !FileBracketMode && !cv.TelFlag &&
503 maya 6079 (ts.LocalEcho == 0) && (ts.Baud >= 115200)) {
504 maya 6071 return FileSendBinayBoost();
505     }
506    
507 maya 3227 if ((SendDlg==NULL) ||
508     ((cv.FilePause & OpSendFile) !=0))
509     return;
510    
511     BCOld = SendVar->ByteCount;
512    
513     if (FileRetrySend)
514     {
515     FileRetryEcho = (ts.LocalEcho>0);
516     c = FSOut1(FileByte);
517     FileRetrySend = (c==0);
518     if (FileRetrySend)
519     return;
520     }
521    
522     if (FileRetryEcho)
523     {
524     c = FSEcho1(FileByte);
525     FileRetryEcho = (c==0);
526     if (FileRetryEcho)
527     return;
528     }
529    
530     do {
531 doda 3904 if (FileBracketMode == FS_BRACKET_START) {
532     FileByte = BracketStartStr[FileBracketPtr++];
533     fc = 1;
534 maya 3227
535 doda 3904 if (FileBracketPtr >= sizeof(BracketStartStr) - 1) {
536     FileBracketMode = FS_BRACKET_END;
537     FileBracketPtr = 0;
538     BinaryMode = ts.TransBin;
539     }
540     }
541     else if (! FileReadEOF) {
542 zmatsuo 7930 ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
543 maya 5281 fc = LOWORD(read_bytes);
544 maya 3227 SendVar->ByteCount = SendVar->ByteCount + fc;
545 doda 3904
546     if (FileCRSend && (fc==1) && (FileByte==0x0A)) {
547 zmatsuo 7930 ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
548 maya 5281 fc = LOWORD(read_bytes);
549 doda 3904 SendVar->ByteCount = SendVar->ByteCount + fc;
550     }
551 maya 3227 }
552 doda 3904 else {
553     fc = 0;
554     }
555 maya 3227
556 doda 3904 if (fc == 0 && FileBracketMode == FS_BRACKET_END) {
557     FileReadEOF = TRUE;
558     FileByte = BracketEndStr[FileBracketPtr++];
559     fc = 1;
560     BinaryMode = TRUE;
561    
562     if (FileBracketPtr >= sizeof(BracketEndStr) - 1) {
563     FileBracketMode = FS_BRACKET_NONE;
564     FileBracketPtr = 0;
565     }
566     }
567    
568    
569 maya 3227 if (fc!=0)
570     {
571     c = FSOut1(FileByte);
572     FileCRSend = (ts.TransBin==0) && (FileByte==0x0D);
573     FileRetrySend = (c==0);
574     if (FileRetrySend)
575     {
576     if (SendVar->ByteCount != BCOld)
577 zmatsuo 8895 SendDlg->RefreshNum(SendVar);
578 maya 3227 return;
579     }
580     if (ts.LocalEcho>0)
581     {
582     c = FSEcho1(FileByte);
583     FileRetryEcho = (c==0);
584     if (FileRetryEcho)
585     return;
586     }
587     }
588 doda 3904 if ((fc==0) || ((SendVar->ByteCount % 100 == 0) && (FileBracketPtr == 0))) {
589 zmatsuo 8895 SendDlg->RefreshNum(SendVar);
590 maya 3227 BCOld = SendVar->ByteCount;
591     if (fc!=0)
592     return;
593     }
594     } while (fc!=0);
595    
596     FileTransEnd(OpSendFile);
597     }
598    
599 zmatsuo 8857 static BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)
600 maya 3227 {
601     int vsize;
602     PProtoDlg pd;
603    
604     ProtoId = IdProto;
605    
606     switch (ProtoId) {
607     case PROTO_KMT:
608     vsize = sizeof(TKmtVar);
609     break;
610     case PROTO_XM:
611     vsize = sizeof(TXVar);
612     break;
613     case PROTO_YM:
614     vsize = sizeof(TYVar);
615     break;
616     case PROTO_ZM:
617     vsize = sizeof(TZVar);
618     break;
619     case PROTO_BP:
620     vsize = sizeof(TBPVar);
621     break;
622     case PROTO_QV:
623     vsize = sizeof(TQVVar);
624     break;
625 zmatsuo 8852 default:
626     vsize = 0;
627     assert(FALSE);
628     break;
629 maya 3227 }
630     ProtoVar = (PCHAR)malloc(vsize);
631     if (ProtoVar==NULL)
632     return FALSE;
633    
634     switch (ProtoId) {
635     case PROTO_KMT:
636     ((PKmtVar)ProtoVar)->KmtMode = Mode;
637     break;
638     case PROTO_XM:
639     ((PXVar)ProtoVar)->XMode = Mode;
640     ((PXVar)ProtoVar)->XOpt = Opt1;
641     ((PXVar)ProtoVar)->TextFlag = 1 - (Opt2 & 1);
642     break;
643 doda 6435 case PROTO_YM:
644 maya 3227 ((PYVar)ProtoVar)->YMode = Mode;
645 yutakapon 3819 ((PYVar)ProtoVar)->YOpt = Opt1;
646 maya 3227 break;
647     case PROTO_ZM:
648     ((PZVar)ProtoVar)->BinFlag = (Opt1 & 1) != 0;
649     ((PZVar)ProtoVar)->ZMode = Mode;
650     break;
651     case PROTO_BP:
652     ((PBPVar)ProtoVar)->BPMode = Mode;
653     break;
654     case PROTO_QV:
655     ((PQVVar)ProtoVar)->QVMode = Mode;
656     break;
657     }
658    
659     pd = new CProtoDlg();
660     if (pd==NULL)
661     {
662     free(ProtoVar);
663     ProtoVar = NULL;
664     return FALSE;
665     }
666 zmatsuo 7526 pd->Create(hInst, HVTWin, fv, &ts);
667 maya 3227
668     (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
669    
670     PtDlg = pd;
671     return TRUE;
672     }
673    
674 zmatsuo 8858 static void CloseProtoDlg(void)
675 maya 3227 {
676     if (PtDlg!=NULL)
677     {
678     PtDlg->DestroyWindow();
679     PtDlg = NULL;
680    
681     ::KillTimer(FileVar->HMainWin,IdProtoTimer);
682     if ((ProtoId==PROTO_QV) &&
683     (((PQVVar)ProtoVar)->QVMode==IdQVSend))
684     CommTextOut(&cv,"\015",1);
685     if (FileVar->LogFlag)
686 zmatsuo 7290 CloseHandle(FileVar->LogFile);
687 maya 3227 FileVar->LogFile = 0;
688     if (ProtoVar!=NULL)
689     {
690     free(ProtoVar);
691     ProtoVar = NULL;
692     }
693     }
694     }
695    
696 zmatsuo 8858 static BOOL ProtoStart(void)
697 maya 3227 {
698     if (cv.ProtoFlag)
699     return FALSE;
700     if (FSend)
701     {
702     FreeFileVar(&FileVar);
703     return FALSE;
704     }
705    
706     if (! LoadTTFILE())
707     return FALSE;
708     NewFileVar(&FileVar);
709    
710     if (FileVar==NULL)
711     {
712     FreeTTFILE();
713     return FALSE;
714     }
715     cv.ProtoFlag = TRUE;
716     return TRUE;
717     }
718    
719 zmatsuo 8858 void ProtoEnd(void)
720 maya 3227 {
721     if (! cv.ProtoFlag)
722     return;
723     cv.ProtoFlag = FALSE;
724    
725     /* Enable transmit delay (serial port) */
726     cv.DelayFlag = TRUE;
727     TalkStatus = IdTalkKeyb;
728    
729     CloseProtoDlg();
730    
731     if ((FileVar!=NULL) && FileVar->Success)
732     EndDdeCmnd(1);
733     else
734     EndDdeCmnd(0);
735    
736     FreeTTFILE();
737     FreeFileVar(&FileVar);
738     }
739    
740 zmatsuo 8857 /**
741     * OnIdle()#teraterm.cpp�����R�[��������
742     * cv.ProtoFlag �� 0 ���O������
743     * @retval 0 continue
744     * 1/2 ActiveWin(�O���[�o������)���l(IdVT=1/IdTek=2)
745     * �� ������������������������
746     */
747 zmatsuo 8858 int ProtoDlgParse(void)
748 maya 3227 {
749     int P;
750    
751     P = ActiveWin;
752     if (PtDlg==NULL)
753     return P;
754    
755     if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))
756     P = 0; /* continue */
757     else {
758     CommSend(&cv);
759     ProtoEnd();
760     }
761     return P;
762     }
763    
764 zmatsuo 8858 void ProtoDlgTimeOut(void)
765 maya 3227 {
766     if (PtDlg!=NULL)
767     (*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);
768     }
769    
770 zmatsuo 8858 void ProtoDlgCancel(void)
771 maya 3227 {
772     if ((PtDlg!=NULL) &&
773     (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))
774     ProtoEnd();
775     }
776    
777     void KermitStart(int mode)
778     {
779     WORD w;
780    
781     if (! ProtoStart())
782     return;
783    
784     switch (mode) {
785     case IdKmtSend:
786     FileVar->OpId = OpKmtSend;
787     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
788     {
789 maya 7951 char FileDirExpanded[MAX_PATH];
790     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
791     if (!(*GetMultiFname)(FileVar, FileDirExpanded, GMF_KERMIT, &w) ||
792 maya 3227 (FileVar->NumFname==0))
793     {
794     ProtoEnd();
795     return;
796     }
797     }
798     else
799     (*SetFileVar)(FileVar);
800     break;
801     case IdKmtReceive:
802     FileVar->OpId = OpKmtRcv;
803     break;
804     case IdKmtGet:
805     FileVar->OpId = OpKmtSend;
806     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
807     {
808 doda 6435 if (! (*GetGetFname)(FileVar->HMainWin,FileVar) ||
809 maya 3227 (strlen(FileVar->FullName)==0))
810     {
811     ProtoEnd();
812     return;
813     }
814     }
815     else
816     (*SetFileVar)(FileVar);
817     break;
818     case IdKmtFinish:
819     FileVar->OpId = OpKmtFin;
820     break;
821     default:
822     ProtoEnd();
823     return;
824     }
825     TalkStatus = IdTalkQuiet;
826    
827     /* disable transmit delay (serial port) */
828     cv.DelayFlag = FALSE;
829    
830     if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))
831     ProtoEnd();
832     }
833    
834     void XMODEMStart(int mode)
835     {
836     LONG Option;
837 doda 6328 int tmp;
838 maya 3227
839     if (! ProtoStart())
840     return;
841    
842     if (mode==IdXReceive)
843     FileVar->OpId = OpXRcv;
844     else
845     FileVar->OpId = OpXSend;
846    
847     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
848     {
849 maya 7951 char FileDirExpanded[MAX_PATH];
850     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
851 maya 3227 Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
852     if (! (*GetXFname)(FileVar->HMainWin,
853 maya 7951 mode==IdXReceive,&Option,FileVar,FileDirExpanded))
854 maya 3227 {
855     ProtoEnd();
856     return;
857     }
858 doda 6328 tmp = HIWORD(Option);
859     if (mode == IdXReceive) {
860     if (IsXoptCRC(tmp)) {
861     if (IsXopt1k(ts.XmodemOpt)) {
862     ts.XmodemOpt = Xopt1kCRC;
863     }
864     else {
865     ts.XmodemOpt = XoptCRC;
866     }
867     }
868     else {
869     if (IsXopt1k(ts.XmodemOpt)) {
870     ts.XmodemOpt = Xopt1kCksum;
871     }
872     else {
873     ts.XmodemOpt = XoptCheck;
874     }
875     }
876     ts.XmodemBin = LOWORD(Option);
877     }
878     else {
879     if (IsXopt1k(tmp)) {
880     if (IsXoptCRC(ts.XmodemOpt)) {
881     ts.XmodemOpt = Xopt1kCRC;
882     }
883     else {
884     ts.XmodemOpt = Xopt1kCksum;
885     }
886     }
887     else {
888     if (IsXoptCRC(ts.XmodemOpt)) {
889     ts.XmodemOpt = XoptCRC;
890     }
891     else {
892     ts.XmodemOpt = XoptCheck;
893     }
894     }
895     }
896 maya 3227 }
897     else
898     (*SetFileVar)(FileVar);
899    
900     if (mode==IdXReceive)
901     FileVar->FileHandle = _lcreat(FileVar->FullName,0);
902     else
903     FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);
904    
905 zmatsuo 7290 FileVar->FileOpen = FileVar->FileHandle != INVALID_HANDLE_VALUE;
906 maya 3227 if (! FileVar->FileOpen)
907     {
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_XM,mode,
917     ts.XmodemOpt,ts.XmodemBin))
918     ProtoEnd();
919     }
920    
921     void YMODEMStart(int mode)
922     {
923     WORD Opt;
924    
925     if (! ProtoStart())
926     return;
927    
928     if (mode==IdYSend)
929     {
930 maya 7951 char FileDirExpanded[MAX_PATH];
931     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
932    
933 yutakapon 3819 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
934     // TODO: "Yopt1K", "YoptG", "YoptSingle"�������������������AIDD_FOPT���g�������K�v�����B
935     Opt = Yopt1K;
936 maya 3227 FileVar->OpId = OpYSend;
937     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
938     {
939 maya 7951 if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Y,&Opt) ||
940 maya 3227 (FileVar->NumFname==0))
941     {
942     ProtoEnd();
943     return;
944     }
945 yutakapon 3819 //ts.XmodemBin = Opt;
946 maya 3227 }
947     else
948     (*SetFileVar)(FileVar);
949     }
950 doda 6363 else {
951 maya 3227 FileVar->OpId = OpYRcv;
952 yutakapon 3820 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
953     Opt = Yopt1K;
954 yutakapon 3821 (*SetFileVar)(FileVar);
955 yutakapon 3820 }
956 maya 3227
957     TalkStatus = IdTalkQuiet;
958    
959     /* disable transmit delay (serial port) */
960     cv.DelayFlag = FALSE;
961    
962     if (! OpenProtoDlg(FileVar,PROTO_YM,mode,Opt,0))
963     ProtoEnd();
964     }
965    
966     void ZMODEMStart(int mode)
967     {
968     WORD Opt;
969    
970     if (! ProtoStart())
971     return;
972    
973 doda 6361 if (mode == IdZSend || mode == IdZAutoS)
974 maya 3227 {
975     Opt = ts.XmodemBin;
976     FileVar->OpId = OpZSend;
977     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
978     {
979 maya 7951 char FileDirExpanded[MAX_PATH];
980     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
981     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Z,&Opt) ||
982 maya 3227 (FileVar->NumFname==0))
983     {
984 doda 6364 if (mode == IdZAutoS) {
985     CommRawOut(&cv, "\030\030\030\030\030\030\030\030\b\b\b\b\b\b\b\b\b\b", 18);
986     }
987 maya 3227 ProtoEnd();
988     return;
989     }
990     ts.XmodemBin = Opt;
991     }
992     else
993     (*SetFileVar)(FileVar);
994     }
995 doda 6361 else /* IdZReceive or IdZAutoR */
996 maya 3227 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     void BPStart(int mode)
1008     {
1009 doda 6946 LONG Option = 0;
1010 maya 3227
1011     if (! ProtoStart())
1012     return;
1013     if (mode==IdBPSend)
1014     {
1015     FileVar->OpId = OpBPSend;
1016     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1017     {
1018 maya 7951 char FileDirExpanded[MAX_PATH];
1019     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1020 maya 3227 FileVar->FullName[0] = 0;
1021 maya 7951 if (! (*GetTransFname)(FileVar, FileDirExpanded, GTF_BP, &Option))
1022 maya 3227 {
1023     ProtoEnd();
1024     return;
1025     }
1026     }
1027     else
1028     (*SetFileVar)(FileVar);
1029     }
1030     else /* IdBPReceive or IdBPAuto */
1031     FileVar->OpId = OpBPRcv;
1032    
1033     TalkStatus = IdTalkQuiet;
1034    
1035     /* disable transmit delay (serial port) */
1036     cv.DelayFlag = FALSE;
1037    
1038     if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))
1039     ProtoEnd();
1040     }
1041    
1042     void QVStart(int mode)
1043     {
1044     WORD W;
1045    
1046     if (! ProtoStart())
1047     return;
1048    
1049     if (mode==IdQVSend)
1050     {
1051     FileVar->OpId = OpQVSend;
1052     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1053     {
1054 maya 7951 char FileDirExpanded[MAX_PATH];
1055     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1056     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_QV, &W) ||
1057 maya 3227 (FileVar->NumFname==0))
1058     {
1059     ProtoEnd();
1060     return;
1061     }
1062     }
1063     else
1064     (*SetFileVar)(FileVar);
1065     }
1066     else
1067     FileVar->OpId = OpQVRcv;
1068    
1069     TalkStatus = IdTalkQuiet;
1070    
1071     /* disable transmit delay (serial port) */
1072     cv.DelayFlag = FALSE;
1073    
1074     if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))
1075     ProtoEnd();
1076     }

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