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 8948 - (hide annotations) (download) (as text)
Fri Oct 2 15:46:23 2020 UTC (3 years, 6 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 24504 byte(s)
vtwin.cpp から SendVar, FileVar 参照を削除

- IsSendVarNULL(), IsFileVarNULL() を追加
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 8947 CProtoDlgInfo info;
667     info.UILanguageFile = ts.UILanguageFile;
668     info.HMainWin = fv->HMainWin;
669     pd->Create(hInst, HVTWin, &info);
670     fv->HWin = pd->m_hWnd;
671 maya 3227
672     (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
673    
674     PtDlg = pd;
675     return TRUE;
676     }
677    
678 zmatsuo 8858 static void CloseProtoDlg(void)
679 maya 3227 {
680     if (PtDlg!=NULL)
681     {
682     PtDlg->DestroyWindow();
683     PtDlg = NULL;
684    
685     ::KillTimer(FileVar->HMainWin,IdProtoTimer);
686     if ((ProtoId==PROTO_QV) &&
687     (((PQVVar)ProtoVar)->QVMode==IdQVSend))
688     CommTextOut(&cv,"\015",1);
689     if (FileVar->LogFlag)
690 zmatsuo 7290 CloseHandle(FileVar->LogFile);
691 maya 3227 FileVar->LogFile = 0;
692     if (ProtoVar!=NULL)
693     {
694     free(ProtoVar);
695     ProtoVar = NULL;
696     }
697     }
698     }
699    
700 zmatsuo 8858 static BOOL ProtoStart(void)
701 maya 3227 {
702     if (cv.ProtoFlag)
703     return FALSE;
704     if (FSend)
705     {
706     FreeFileVar(&FileVar);
707     return FALSE;
708     }
709    
710     if (! LoadTTFILE())
711     return FALSE;
712     NewFileVar(&FileVar);
713    
714     if (FileVar==NULL)
715     {
716     FreeTTFILE();
717     return FALSE;
718     }
719     cv.ProtoFlag = TRUE;
720     return TRUE;
721     }
722    
723 zmatsuo 8858 void ProtoEnd(void)
724 maya 3227 {
725     if (! cv.ProtoFlag)
726     return;
727     cv.ProtoFlag = FALSE;
728    
729     /* Enable transmit delay (serial port) */
730     cv.DelayFlag = TRUE;
731     TalkStatus = IdTalkKeyb;
732    
733     CloseProtoDlg();
734    
735     if ((FileVar!=NULL) && FileVar->Success)
736     EndDdeCmnd(1);
737     else
738     EndDdeCmnd(0);
739    
740     FreeTTFILE();
741     FreeFileVar(&FileVar);
742     }
743    
744 zmatsuo 8857 /**
745     * OnIdle()#teraterm.cpp�����R�[��������
746     * cv.ProtoFlag �� 0 ���O������
747     * @retval 0 continue
748     * 1/2 ActiveWin(�O���[�o������)���l(IdVT=1/IdTek=2)
749     * �� ������������������������
750     */
751 zmatsuo 8858 int ProtoDlgParse(void)
752 maya 3227 {
753     int P;
754    
755     P = ActiveWin;
756     if (PtDlg==NULL)
757     return P;
758    
759     if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))
760     P = 0; /* continue */
761     else {
762     CommSend(&cv);
763     ProtoEnd();
764     }
765     return P;
766     }
767    
768 zmatsuo 8858 void ProtoDlgTimeOut(void)
769 maya 3227 {
770     if (PtDlg!=NULL)
771     (*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);
772     }
773    
774 zmatsuo 8858 void ProtoDlgCancel(void)
775 maya 3227 {
776     if ((PtDlg!=NULL) &&
777     (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))
778     ProtoEnd();
779     }
780    
781     void KermitStart(int mode)
782     {
783     WORD w;
784    
785     if (! ProtoStart())
786     return;
787    
788     switch (mode) {
789     case IdKmtSend:
790     FileVar->OpId = OpKmtSend;
791     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
792     {
793 maya 7951 char FileDirExpanded[MAX_PATH];
794     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
795     if (!(*GetMultiFname)(FileVar, FileDirExpanded, GMF_KERMIT, &w) ||
796 maya 3227 (FileVar->NumFname==0))
797     {
798     ProtoEnd();
799     return;
800     }
801     }
802     else
803     (*SetFileVar)(FileVar);
804     break;
805     case IdKmtReceive:
806     FileVar->OpId = OpKmtRcv;
807     break;
808     case IdKmtGet:
809     FileVar->OpId = OpKmtSend;
810     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
811     {
812 doda 6435 if (! (*GetGetFname)(FileVar->HMainWin,FileVar) ||
813 maya 3227 (strlen(FileVar->FullName)==0))
814     {
815     ProtoEnd();
816     return;
817     }
818     }
819     else
820     (*SetFileVar)(FileVar);
821     break;
822     case IdKmtFinish:
823     FileVar->OpId = OpKmtFin;
824     break;
825     default:
826     ProtoEnd();
827     return;
828     }
829     TalkStatus = IdTalkQuiet;
830    
831     /* disable transmit delay (serial port) */
832     cv.DelayFlag = FALSE;
833    
834     if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))
835     ProtoEnd();
836     }
837    
838     void XMODEMStart(int mode)
839     {
840     LONG Option;
841 doda 6328 int tmp;
842 maya 3227
843     if (! ProtoStart())
844     return;
845    
846     if (mode==IdXReceive)
847     FileVar->OpId = OpXRcv;
848     else
849     FileVar->OpId = OpXSend;
850    
851     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
852     {
853 maya 7951 char FileDirExpanded[MAX_PATH];
854     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
855 maya 3227 Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
856     if (! (*GetXFname)(FileVar->HMainWin,
857 maya 7951 mode==IdXReceive,&Option,FileVar,FileDirExpanded))
858 maya 3227 {
859     ProtoEnd();
860     return;
861     }
862 doda 6328 tmp = HIWORD(Option);
863     if (mode == IdXReceive) {
864     if (IsXoptCRC(tmp)) {
865     if (IsXopt1k(ts.XmodemOpt)) {
866     ts.XmodemOpt = Xopt1kCRC;
867     }
868     else {
869     ts.XmodemOpt = XoptCRC;
870     }
871     }
872     else {
873     if (IsXopt1k(ts.XmodemOpt)) {
874     ts.XmodemOpt = Xopt1kCksum;
875     }
876     else {
877     ts.XmodemOpt = XoptCheck;
878     }
879     }
880     ts.XmodemBin = LOWORD(Option);
881     }
882     else {
883     if (IsXopt1k(tmp)) {
884     if (IsXoptCRC(ts.XmodemOpt)) {
885     ts.XmodemOpt = Xopt1kCRC;
886     }
887     else {
888     ts.XmodemOpt = Xopt1kCksum;
889     }
890     }
891     else {
892     if (IsXoptCRC(ts.XmodemOpt)) {
893     ts.XmodemOpt = XoptCRC;
894     }
895     else {
896     ts.XmodemOpt = XoptCheck;
897     }
898     }
899     }
900 maya 3227 }
901     else
902     (*SetFileVar)(FileVar);
903    
904     if (mode==IdXReceive)
905     FileVar->FileHandle = _lcreat(FileVar->FullName,0);
906     else
907     FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);
908    
909 zmatsuo 7290 FileVar->FileOpen = FileVar->FileHandle != INVALID_HANDLE_VALUE;
910 maya 3227 if (! FileVar->FileOpen)
911     {
912     ProtoEnd();
913     return;
914     }
915     TalkStatus = IdTalkQuiet;
916    
917     /* disable transmit delay (serial port) */
918     cv.DelayFlag = FALSE;
919    
920     if (! OpenProtoDlg(FileVar,PROTO_XM,mode,
921     ts.XmodemOpt,ts.XmodemBin))
922     ProtoEnd();
923     }
924    
925     void YMODEMStart(int mode)
926     {
927     WORD Opt;
928    
929     if (! ProtoStart())
930     return;
931    
932     if (mode==IdYSend)
933     {
934 maya 7951 char FileDirExpanded[MAX_PATH];
935     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
936    
937 yutakapon 3819 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
938     // TODO: "Yopt1K", "YoptG", "YoptSingle"�������������������AIDD_FOPT���g�������K�v�����B
939     Opt = Yopt1K;
940 maya 3227 FileVar->OpId = OpYSend;
941     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
942     {
943 maya 7951 if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Y,&Opt) ||
944 maya 3227 (FileVar->NumFname==0))
945     {
946     ProtoEnd();
947     return;
948     }
949 yutakapon 3819 //ts.XmodemBin = Opt;
950 maya 3227 }
951     else
952     (*SetFileVar)(FileVar);
953     }
954 doda 6363 else {
955 maya 3227 FileVar->OpId = OpYRcv;
956 yutakapon 3820 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
957     Opt = Yopt1K;
958 yutakapon 3821 (*SetFileVar)(FileVar);
959 yutakapon 3820 }
960 maya 3227
961     TalkStatus = IdTalkQuiet;
962    
963     /* disable transmit delay (serial port) */
964     cv.DelayFlag = FALSE;
965    
966     if (! OpenProtoDlg(FileVar,PROTO_YM,mode,Opt,0))
967     ProtoEnd();
968     }
969    
970     void ZMODEMStart(int mode)
971     {
972     WORD Opt;
973    
974     if (! ProtoStart())
975     return;
976    
977 doda 6361 if (mode == IdZSend || mode == IdZAutoS)
978 maya 3227 {
979     Opt = ts.XmodemBin;
980     FileVar->OpId = OpZSend;
981     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
982     {
983 maya 7951 char FileDirExpanded[MAX_PATH];
984     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
985     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Z,&Opt) ||
986 maya 3227 (FileVar->NumFname==0))
987     {
988 doda 6364 if (mode == IdZAutoS) {
989     CommRawOut(&cv, "\030\030\030\030\030\030\030\030\b\b\b\b\b\b\b\b\b\b", 18);
990     }
991 maya 3227 ProtoEnd();
992     return;
993     }
994     ts.XmodemBin = Opt;
995     }
996     else
997     (*SetFileVar)(FileVar);
998     }
999 doda 6361 else /* IdZReceive or IdZAutoR */
1000 maya 3227 FileVar->OpId = OpZRcv;
1001    
1002     TalkStatus = IdTalkQuiet;
1003    
1004     /* disable transmit delay (serial port) */
1005     cv.DelayFlag = FALSE;
1006    
1007     if (! OpenProtoDlg(FileVar,PROTO_ZM,mode,Opt,0))
1008     ProtoEnd();
1009     }
1010    
1011     void BPStart(int mode)
1012     {
1013 doda 6946 LONG Option = 0;
1014 maya 3227
1015     if (! ProtoStart())
1016     return;
1017     if (mode==IdBPSend)
1018     {
1019     FileVar->OpId = OpBPSend;
1020     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1021     {
1022 maya 7951 char FileDirExpanded[MAX_PATH];
1023     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1024 maya 3227 FileVar->FullName[0] = 0;
1025 maya 7951 if (! (*GetTransFname)(FileVar, FileDirExpanded, GTF_BP, &Option))
1026 maya 3227 {
1027     ProtoEnd();
1028     return;
1029     }
1030     }
1031     else
1032     (*SetFileVar)(FileVar);
1033     }
1034     else /* IdBPReceive or IdBPAuto */
1035     FileVar->OpId = OpBPRcv;
1036    
1037     TalkStatus = IdTalkQuiet;
1038    
1039     /* disable transmit delay (serial port) */
1040     cv.DelayFlag = FALSE;
1041    
1042     if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))
1043     ProtoEnd();
1044     }
1045    
1046     void QVStart(int mode)
1047     {
1048     WORD W;
1049    
1050     if (! ProtoStart())
1051     return;
1052    
1053     if (mode==IdQVSend)
1054     {
1055     FileVar->OpId = OpQVSend;
1056     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1057     {
1058 maya 7951 char FileDirExpanded[MAX_PATH];
1059     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1060     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_QV, &W) ||
1061 maya 3227 (FileVar->NumFname==0))
1062     {
1063     ProtoEnd();
1064     return;
1065     }
1066     }
1067     else
1068     (*SetFileVar)(FileVar);
1069     }
1070     else
1071     FileVar->OpId = OpQVRcv;
1072    
1073     TalkStatus = IdTalkQuiet;
1074    
1075     /* disable transmit delay (serial port) */
1076     cv.DelayFlag = FALSE;
1077    
1078     if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))
1079     ProtoEnd();
1080     }
1081 zmatsuo 8948
1082    
1083     BOOL IsSendVarNULL()
1084     {
1085     return SendVar == NULL;
1086     }
1087    
1088     BOOL IsFileVarNULL()
1089     {
1090     return FileVar == NULL;
1091     }

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