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 8949 - (hide annotations) (download) (as text)
Fri Oct 2 15:46:34 2020 UTC (3 years, 6 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 29416 byte(s)
ttdde.c 内で変数 FileVar の参照をなくした

- 各通信プロトコルの受信送信開始関数を追加
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 zmatsuo 8949 BOOL FileSendStart2(const char *filename, int binary)
380     {
381     if (SendVar != NULL) {
382     return FALSE;
383     }
384     if (!NewFileVar(&SendVar)) {
385     return FALSE;
386     }
387    
388     SendVar->DirLen = 0;
389     strncpy_s(SendVar->FullName, sizeof(SendVar->FullName), filename, _TRUNCATE);
390     ts.TransBin = binary;
391     SendVar->NoMsg = TRUE;
392     FileSendStart();
393    
394     return TRUE;
395     }
396    
397 maya 3227 void FileTransEnd(WORD OpId)
398     /* OpId = 0: close Log and FileSend
399     OpLog: close Log
400     OpSendFile: close FileSend */
401     {
402 zmatsuo 8900 if ((OpId==0) || (OpId==OpLog)) {
403     if (FLogIsOpend()) {
404     FLogClose();
405     }
406 maya 3227 }
407    
408     if (((OpId==0) || (OpId==OpSendFile)) && FSend)
409     {
410     FSend = FALSE;
411     TalkStatus = IdTalkKeyb;
412     if (SendDlg!=NULL)
413     {
414     SendDlg->DestroyWindow();
415     SendDlg = NULL;
416     }
417     FreeFileVar(&SendVar);
418     FreeTTFILE();
419     }
420    
421     EndDdeCmnd(0);
422     }
423    
424 zmatsuo 8857 void FileTransPause(WORD OpId, BOOL Pause)
425     {
426     if (Pause) {
427     cv.FilePause |= OpId;
428     }
429     else {
430     cv.FilePause &= ~OpId;
431     }
432     }
433    
434 maya 3227 int FSOut1(BYTE b)
435     {
436 doda 3904 if (BinaryMode)
437 maya 3227 return CommBinaryOut(&cv,(PCHAR)&b,1);
438     else if ((b>=0x20) || (b==0x09) || (b==0x0A) || (b==0x0D))
439     return CommTextOut(&cv,(PCHAR)&b,1);
440     else
441     return 1;
442 doda 3861 }
443 maya 3227
444     int FSEcho1(BYTE b)
445     {
446 doda 3904 if (BinaryMode)
447 maya 3227 return CommBinaryEcho(&cv,(PCHAR)&b,1);
448     else
449     return CommTextEcho(&cv,(PCHAR)&b,1);
450     }
451    
452 maya 6071 // �������������������������g��
453     // - BinaryMode == true
454     // - FileBracketMode == false
455     // - cv.TelFlag == false
456     // - ts.LocalEcho == 0
457 zmatsuo 8894 static void FileSendBinayBoost(void)
458 maya 6071 {
459     WORD c, fc;
460     LONG BCOld;
461     DWORD read_bytes;
462    
463     if ((SendDlg == NULL) ||
464     ((cv.FilePause & OpSendFile) != 0))
465     return;
466    
467     BCOld = SendVar->ByteCount;
468    
469     if (FileRetrySend)
470     {
471     c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
472     FileSendHandler.end - FileSendHandler.pos);
473     FileSendHandler.pos += c;
474     FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
475     if (FileRetrySend)
476     return;
477     }
478    
479     do {
480     if (FileSendHandler.pos == FileSendHandler.end) {
481 zmatsuo 7930 ReadFile(SendVar->FileHandle, &(FileSendHandler.buf[0]), sizeof(FileSendHandler.buf), &read_bytes, NULL);
482 maya 6071 fc = LOWORD(read_bytes);
483     FileSendHandler.pos = 0;
484     FileSendHandler.end = fc;
485     } else {
486     fc = FileSendHandler.end - FileSendHandler.end;
487     }
488    
489     if (fc != 0)
490     {
491     c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
492     FileSendHandler.end - FileSendHandler.pos);
493     FileSendHandler.pos += c;
494     FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
495     SendVar->ByteCount = SendVar->ByteCount + c;
496     if (FileRetrySend)
497     {
498     if (SendVar->ByteCount != BCOld)
499 zmatsuo 8895 SendDlg->RefreshNum(SendVar);
500 maya 6071 return;
501     }
502     }
503     FileDlgRefresh = SendVar->ByteCount;
504 zmatsuo 8895 SendDlg->RefreshNum(SendVar);
505 maya 6071 BCOld = SendVar->ByteCount;
506     if (fc != 0)
507     return;
508     } while (fc != 0);
509    
510     FileTransEnd(OpSendFile);
511     }
512    
513 zmatsuo 8858 void FileSend(void)
514 maya 3227 {
515     WORD c, fc;
516     LONG BCOld;
517 maya 5281 DWORD read_bytes;
518 maya 3227
519 maya 6115 if (cv.PortType == IdSerial && ts.FileSendHighSpeedMode &&
520 maya 6110 BinaryMode && !FileBracketMode && !cv.TelFlag &&
521 maya 6079 (ts.LocalEcho == 0) && (ts.Baud >= 115200)) {
522 maya 6071 return FileSendBinayBoost();
523     }
524    
525 maya 3227 if ((SendDlg==NULL) ||
526     ((cv.FilePause & OpSendFile) !=0))
527     return;
528    
529     BCOld = SendVar->ByteCount;
530    
531     if (FileRetrySend)
532     {
533     FileRetryEcho = (ts.LocalEcho>0);
534     c = FSOut1(FileByte);
535     FileRetrySend = (c==0);
536     if (FileRetrySend)
537     return;
538     }
539    
540     if (FileRetryEcho)
541     {
542     c = FSEcho1(FileByte);
543     FileRetryEcho = (c==0);
544     if (FileRetryEcho)
545     return;
546     }
547    
548     do {
549 doda 3904 if (FileBracketMode == FS_BRACKET_START) {
550     FileByte = BracketStartStr[FileBracketPtr++];
551     fc = 1;
552 maya 3227
553 doda 3904 if (FileBracketPtr >= sizeof(BracketStartStr) - 1) {
554     FileBracketMode = FS_BRACKET_END;
555     FileBracketPtr = 0;
556     BinaryMode = ts.TransBin;
557     }
558     }
559     else if (! FileReadEOF) {
560 zmatsuo 7930 ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
561 maya 5281 fc = LOWORD(read_bytes);
562 maya 3227 SendVar->ByteCount = SendVar->ByteCount + fc;
563 doda 3904
564     if (FileCRSend && (fc==1) && (FileByte==0x0A)) {
565 zmatsuo 7930 ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
566 maya 5281 fc = LOWORD(read_bytes);
567 doda 3904 SendVar->ByteCount = SendVar->ByteCount + fc;
568     }
569 maya 3227 }
570 doda 3904 else {
571     fc = 0;
572     }
573 maya 3227
574 doda 3904 if (fc == 0 && FileBracketMode == FS_BRACKET_END) {
575     FileReadEOF = TRUE;
576     FileByte = BracketEndStr[FileBracketPtr++];
577     fc = 1;
578     BinaryMode = TRUE;
579    
580     if (FileBracketPtr >= sizeof(BracketEndStr) - 1) {
581     FileBracketMode = FS_BRACKET_NONE;
582     FileBracketPtr = 0;
583     }
584     }
585    
586    
587 maya 3227 if (fc!=0)
588     {
589     c = FSOut1(FileByte);
590     FileCRSend = (ts.TransBin==0) && (FileByte==0x0D);
591     FileRetrySend = (c==0);
592     if (FileRetrySend)
593     {
594     if (SendVar->ByteCount != BCOld)
595 zmatsuo 8895 SendDlg->RefreshNum(SendVar);
596 maya 3227 return;
597     }
598     if (ts.LocalEcho>0)
599     {
600     c = FSEcho1(FileByte);
601     FileRetryEcho = (c==0);
602     if (FileRetryEcho)
603     return;
604     }
605     }
606 doda 3904 if ((fc==0) || ((SendVar->ByteCount % 100 == 0) && (FileBracketPtr == 0))) {
607 zmatsuo 8895 SendDlg->RefreshNum(SendVar);
608 maya 3227 BCOld = SendVar->ByteCount;
609     if (fc!=0)
610     return;
611     }
612     } while (fc!=0);
613    
614     FileTransEnd(OpSendFile);
615     }
616    
617 zmatsuo 8857 static BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)
618 maya 3227 {
619     int vsize;
620     PProtoDlg pd;
621    
622     ProtoId = IdProto;
623    
624     switch (ProtoId) {
625     case PROTO_KMT:
626     vsize = sizeof(TKmtVar);
627     break;
628     case PROTO_XM:
629     vsize = sizeof(TXVar);
630     break;
631     case PROTO_YM:
632     vsize = sizeof(TYVar);
633     break;
634     case PROTO_ZM:
635     vsize = sizeof(TZVar);
636     break;
637     case PROTO_BP:
638     vsize = sizeof(TBPVar);
639     break;
640     case PROTO_QV:
641     vsize = sizeof(TQVVar);
642     break;
643 zmatsuo 8852 default:
644     vsize = 0;
645     assert(FALSE);
646     break;
647 maya 3227 }
648     ProtoVar = (PCHAR)malloc(vsize);
649     if (ProtoVar==NULL)
650     return FALSE;
651    
652     switch (ProtoId) {
653     case PROTO_KMT:
654     ((PKmtVar)ProtoVar)->KmtMode = Mode;
655     break;
656     case PROTO_XM:
657     ((PXVar)ProtoVar)->XMode = Mode;
658     ((PXVar)ProtoVar)->XOpt = Opt1;
659     ((PXVar)ProtoVar)->TextFlag = 1 - (Opt2 & 1);
660     break;
661 doda 6435 case PROTO_YM:
662 maya 3227 ((PYVar)ProtoVar)->YMode = Mode;
663 yutakapon 3819 ((PYVar)ProtoVar)->YOpt = Opt1;
664 maya 3227 break;
665     case PROTO_ZM:
666     ((PZVar)ProtoVar)->BinFlag = (Opt1 & 1) != 0;
667     ((PZVar)ProtoVar)->ZMode = Mode;
668     break;
669     case PROTO_BP:
670     ((PBPVar)ProtoVar)->BPMode = Mode;
671     break;
672     case PROTO_QV:
673     ((PQVVar)ProtoVar)->QVMode = Mode;
674     break;
675     }
676    
677     pd = new CProtoDlg();
678     if (pd==NULL)
679     {
680     free(ProtoVar);
681     ProtoVar = NULL;
682     return FALSE;
683     }
684 zmatsuo 8947 CProtoDlgInfo info;
685     info.UILanguageFile = ts.UILanguageFile;
686     info.HMainWin = fv->HMainWin;
687     pd->Create(hInst, HVTWin, &info);
688     fv->HWin = pd->m_hWnd;
689 maya 3227
690     (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
691    
692     PtDlg = pd;
693     return TRUE;
694     }
695    
696 zmatsuo 8858 static void CloseProtoDlg(void)
697 maya 3227 {
698     if (PtDlg!=NULL)
699     {
700     PtDlg->DestroyWindow();
701     PtDlg = NULL;
702    
703     ::KillTimer(FileVar->HMainWin,IdProtoTimer);
704     if ((ProtoId==PROTO_QV) &&
705     (((PQVVar)ProtoVar)->QVMode==IdQVSend))
706     CommTextOut(&cv,"\015",1);
707     if (FileVar->LogFlag)
708 zmatsuo 7290 CloseHandle(FileVar->LogFile);
709 maya 3227 FileVar->LogFile = 0;
710     if (ProtoVar!=NULL)
711     {
712     free(ProtoVar);
713     ProtoVar = NULL;
714     }
715     }
716     }
717    
718 zmatsuo 8858 static BOOL ProtoStart(void)
719 maya 3227 {
720     if (cv.ProtoFlag)
721     return FALSE;
722     if (FSend)
723     {
724     FreeFileVar(&FileVar);
725     return FALSE;
726     }
727    
728     if (! LoadTTFILE())
729     return FALSE;
730     NewFileVar(&FileVar);
731    
732     if (FileVar==NULL)
733     {
734     FreeTTFILE();
735     return FALSE;
736     }
737     cv.ProtoFlag = TRUE;
738     return TRUE;
739     }
740    
741 zmatsuo 8858 void ProtoEnd(void)
742 maya 3227 {
743     if (! cv.ProtoFlag)
744     return;
745     cv.ProtoFlag = FALSE;
746    
747     /* Enable transmit delay (serial port) */
748     cv.DelayFlag = TRUE;
749     TalkStatus = IdTalkKeyb;
750    
751     CloseProtoDlg();
752    
753     if ((FileVar!=NULL) && FileVar->Success)
754     EndDdeCmnd(1);
755     else
756     EndDdeCmnd(0);
757    
758     FreeTTFILE();
759     FreeFileVar(&FileVar);
760     }
761    
762 zmatsuo 8857 /**
763     * OnIdle()#teraterm.cpp�����R�[��������
764     * cv.ProtoFlag �� 0 ���O������
765     * @retval 0 continue
766     * 1/2 ActiveWin(�O���[�o������)���l(IdVT=1/IdTek=2)
767     * �� ������������������������
768     */
769 zmatsuo 8858 int ProtoDlgParse(void)
770 maya 3227 {
771     int P;
772    
773     P = ActiveWin;
774     if (PtDlg==NULL)
775     return P;
776    
777     if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))
778     P = 0; /* continue */
779     else {
780     CommSend(&cv);
781     ProtoEnd();
782     }
783     return P;
784     }
785    
786 zmatsuo 8858 void ProtoDlgTimeOut(void)
787 maya 3227 {
788     if (PtDlg!=NULL)
789     (*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);
790     }
791    
792 zmatsuo 8858 void ProtoDlgCancel(void)
793 maya 3227 {
794     if ((PtDlg!=NULL) &&
795     (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))
796     ProtoEnd();
797     }
798    
799     void KermitStart(int mode)
800     {
801     WORD w;
802    
803     if (! ProtoStart())
804     return;
805    
806     switch (mode) {
807     case IdKmtSend:
808     FileVar->OpId = OpKmtSend;
809     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
810     {
811 maya 7951 char FileDirExpanded[MAX_PATH];
812     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
813     if (!(*GetMultiFname)(FileVar, FileDirExpanded, GMF_KERMIT, &w) ||
814 maya 3227 (FileVar->NumFname==0))
815     {
816     ProtoEnd();
817     return;
818     }
819     }
820     else
821     (*SetFileVar)(FileVar);
822     break;
823     case IdKmtReceive:
824     FileVar->OpId = OpKmtRcv;
825     break;
826     case IdKmtGet:
827     FileVar->OpId = OpKmtSend;
828     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
829     {
830 doda 6435 if (! (*GetGetFname)(FileVar->HMainWin,FileVar) ||
831 maya 3227 (strlen(FileVar->FullName)==0))
832     {
833     ProtoEnd();
834     return;
835     }
836     }
837     else
838     (*SetFileVar)(FileVar);
839     break;
840     case IdKmtFinish:
841     FileVar->OpId = OpKmtFin;
842     break;
843     default:
844     ProtoEnd();
845     return;
846     }
847     TalkStatus = IdTalkQuiet;
848    
849     /* disable transmit delay (serial port) */
850     cv.DelayFlag = FALSE;
851    
852     if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))
853     ProtoEnd();
854     }
855    
856 zmatsuo 8949 BOOL KermitStartSend(const char *filename)
857     {
858     if (FileVar !=NULL)
859     return FALSE;
860     if (!NewFileVar(&FileVar))
861     return FALSE;
862    
863     FileVar->DirLen = 0;
864     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
865     FileVar->NumFname = 1;
866     FileVar->NoMsg = TRUE;
867     KermitStart(IdKmtSend);
868    
869     return TRUE;
870     }
871    
872     BOOL KermitGet(const char *filename)
873     {
874     if (FileVar !=NULL)
875     return FALSE;
876     if (!NewFileVar(&FileVar))
877     return FALSE;
878    
879     FileVar->DirLen = 0;
880     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
881     FileVar->NumFname = 1;
882     FileVar->NoMsg = TRUE;
883     KermitStart(IdKmtGet);
884    
885     return TRUE;
886     }
887    
888     BOOL KermitStartRecive(void)
889     {
890     if (FileVar !=NULL)
891     return FALSE;
892     if (!NewFileVar(&FileVar))
893     return FALSE;
894    
895     FileVar->NoMsg = TRUE;
896     KermitStart(IdKmtReceive);
897    
898     return TRUE;
899     }
900    
901     BOOL KermitFinish(void)
902     {
903     if (FileVar !=NULL)
904     return FALSE;
905     if (!NewFileVar(&FileVar))
906     return FALSE;
907    
908     FileVar->NoMsg = TRUE;
909     KermitStart(IdKmtFinish);
910    
911     return TRUE;
912     }
913    
914 maya 3227 void XMODEMStart(int mode)
915     {
916     LONG Option;
917 doda 6328 int tmp;
918 maya 3227
919     if (! ProtoStart())
920     return;
921    
922     if (mode==IdXReceive)
923     FileVar->OpId = OpXRcv;
924     else
925     FileVar->OpId = OpXSend;
926    
927     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
928     {
929 maya 7951 char FileDirExpanded[MAX_PATH];
930     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
931 maya 3227 Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
932     if (! (*GetXFname)(FileVar->HMainWin,
933 maya 7951 mode==IdXReceive,&Option,FileVar,FileDirExpanded))
934 maya 3227 {
935     ProtoEnd();
936     return;
937     }
938 doda 6328 tmp = HIWORD(Option);
939     if (mode == IdXReceive) {
940     if (IsXoptCRC(tmp)) {
941     if (IsXopt1k(ts.XmodemOpt)) {
942     ts.XmodemOpt = Xopt1kCRC;
943     }
944     else {
945     ts.XmodemOpt = XoptCRC;
946     }
947     }
948     else {
949     if (IsXopt1k(ts.XmodemOpt)) {
950     ts.XmodemOpt = Xopt1kCksum;
951     }
952     else {
953     ts.XmodemOpt = XoptCheck;
954     }
955     }
956     ts.XmodemBin = LOWORD(Option);
957     }
958     else {
959     if (IsXopt1k(tmp)) {
960     if (IsXoptCRC(ts.XmodemOpt)) {
961     ts.XmodemOpt = Xopt1kCRC;
962     }
963     else {
964     ts.XmodemOpt = Xopt1kCksum;
965     }
966     }
967     else {
968     if (IsXoptCRC(ts.XmodemOpt)) {
969     ts.XmodemOpt = XoptCRC;
970     }
971     else {
972     ts.XmodemOpt = XoptCheck;
973     }
974     }
975     }
976 maya 3227 }
977     else
978     (*SetFileVar)(FileVar);
979    
980     if (mode==IdXReceive)
981     FileVar->FileHandle = _lcreat(FileVar->FullName,0);
982     else
983     FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);
984    
985 zmatsuo 7290 FileVar->FileOpen = FileVar->FileHandle != INVALID_HANDLE_VALUE;
986 maya 3227 if (! FileVar->FileOpen)
987     {
988     ProtoEnd();
989     return;
990     }
991     TalkStatus = IdTalkQuiet;
992    
993     /* disable transmit delay (serial port) */
994     cv.DelayFlag = FALSE;
995    
996     if (! OpenProtoDlg(FileVar,PROTO_XM,mode,
997     ts.XmodemOpt,ts.XmodemBin))
998     ProtoEnd();
999     }
1000    
1001 zmatsuo 8949 BOOL XMODEMStartReceive(const char *fiename, WORD ParamBinaryFlag, WORD ParamXmodemOpt)
1002     {
1003     if (FileVar !=NULL)
1004     return FALSE;
1005     if (!NewFileVar(&FileVar))
1006     return FALSE;
1007    
1008     FileVar->DirLen = 0;
1009     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
1010     if (IsXopt1k(ts.XmodemOpt)) {
1011     if (IsXoptCRC(ParamXmodemOpt)) {
1012     // CRC
1013     ts.XmodemOpt = Xopt1kCRC;
1014     }
1015     else { // Checksum
1016     ts.XmodemOpt = Xopt1kCksum;
1017     }
1018     }
1019     else {
1020     if (IsXoptCRC(ParamXmodemOpt)) {
1021     ts.XmodemOpt = XoptCRC;
1022     }
1023     else {
1024     ts.XmodemOpt = XoptCheck;
1025     }
1026     }
1027     ts.XmodemBin = ParamBinaryFlag;
1028     FileVar->NoMsg = TRUE;
1029     XMODEMStart(IdXReceive);
1030    
1031     return TRUE;
1032     }
1033    
1034     BOOL XMODEMStartSend(const char *fiename, WORD ParamXmodemOpt)
1035     {
1036     if (FileVar !=NULL)
1037     return FALSE;
1038     if (!NewFileVar(&FileVar))
1039     return FALSE;
1040    
1041     FileVar->DirLen = 0;
1042     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName), fiename, _TRUNCATE);
1043     if (IsXoptCRC(ts.XmodemOpt)) {
1044     if (IsXopt1k(ParamXmodemOpt)) {
1045     ts.XmodemOpt = Xopt1kCRC;
1046     }
1047     else {
1048     ts.XmodemOpt = XoptCRC;
1049     }
1050     }
1051     else {
1052     if (IsXopt1k(ParamXmodemOpt)) {
1053     ts.XmodemOpt = Xopt1kCksum;
1054     }
1055     else {
1056     ts.XmodemOpt = XoptCheck;
1057     }
1058     }
1059     FileVar->NoMsg = TRUE;
1060     XMODEMStart(IdXSend);
1061    
1062     return TRUE;
1063     }
1064    
1065 maya 3227 void YMODEMStart(int mode)
1066     {
1067     WORD Opt;
1068    
1069     if (! ProtoStart())
1070     return;
1071    
1072     if (mode==IdYSend)
1073     {
1074 maya 7951 char FileDirExpanded[MAX_PATH];
1075     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1076    
1077 yutakapon 3819 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
1078     // TODO: "Yopt1K", "YoptG", "YoptSingle"�������������������AIDD_FOPT���g�������K�v�����B
1079     Opt = Yopt1K;
1080 maya 3227 FileVar->OpId = OpYSend;
1081     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1082     {
1083 maya 7951 if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Y,&Opt) ||
1084 maya 3227 (FileVar->NumFname==0))
1085     {
1086     ProtoEnd();
1087     return;
1088     }
1089 yutakapon 3819 //ts.XmodemBin = Opt;
1090 maya 3227 }
1091     else
1092     (*SetFileVar)(FileVar);
1093     }
1094 doda 6363 else {
1095 maya 3227 FileVar->OpId = OpYRcv;
1096 yutakapon 3820 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
1097     Opt = Yopt1K;
1098 yutakapon 3821 (*SetFileVar)(FileVar);
1099 yutakapon 3820 }
1100 maya 3227
1101     TalkStatus = IdTalkQuiet;
1102    
1103     /* disable transmit delay (serial port) */
1104     cv.DelayFlag = FALSE;
1105    
1106     if (! OpenProtoDlg(FileVar,PROTO_YM,mode,Opt,0))
1107     ProtoEnd();
1108     }
1109    
1110 zmatsuo 8949 BOOL YMODEMStartReceive()
1111     {
1112     if (FileVar != NULL) {
1113     return FALSE;
1114     }
1115     if (!NewFileVar(&FileVar)) {
1116     return FALSE;
1117     }
1118     FileVar->NoMsg = TRUE;
1119     YMODEMStart(IdYReceive);
1120     return TRUE;
1121     }
1122    
1123     BOOL YMODEMStartSend(const char *fiename)
1124     {
1125     if (FileVar != NULL) {
1126     return FALSE;
1127     }
1128     if (!NewFileVar(&FileVar)) {
1129     return FALSE;
1130     }
1131    
1132     FileVar->DirLen = 0;
1133     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
1134     FileVar->NumFname = 1;
1135     FileVar->NoMsg = TRUE;
1136     YMODEMStart(IdYSend);
1137     return TRUE;
1138     }
1139    
1140 maya 3227 void ZMODEMStart(int mode)
1141     {
1142     WORD Opt;
1143    
1144     if (! ProtoStart())
1145     return;
1146    
1147 doda 6361 if (mode == IdZSend || mode == IdZAutoS)
1148 maya 3227 {
1149     Opt = ts.XmodemBin;
1150     FileVar->OpId = OpZSend;
1151     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1152     {
1153 maya 7951 char FileDirExpanded[MAX_PATH];
1154     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1155     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Z,&Opt) ||
1156 maya 3227 (FileVar->NumFname==0))
1157     {
1158 doda 6364 if (mode == IdZAutoS) {
1159     CommRawOut(&cv, "\030\030\030\030\030\030\030\030\b\b\b\b\b\b\b\b\b\b", 18);
1160     }
1161 maya 3227 ProtoEnd();
1162     return;
1163     }
1164     ts.XmodemBin = Opt;
1165     }
1166     else
1167     (*SetFileVar)(FileVar);
1168     }
1169 doda 6361 else /* IdZReceive or IdZAutoR */
1170 maya 3227 FileVar->OpId = OpZRcv;
1171    
1172     TalkStatus = IdTalkQuiet;
1173    
1174     /* disable transmit delay (serial port) */
1175     cv.DelayFlag = FALSE;
1176    
1177     if (! OpenProtoDlg(FileVar,PROTO_ZM,mode,Opt,0))
1178     ProtoEnd();
1179     }
1180    
1181 zmatsuo 8949 BOOL ZMODEMStartReceive(void)
1182     {
1183     if (FileVar != NULL) {
1184     return FALSE;
1185     }
1186     if (!NewFileVar(&FileVar)) {
1187     return FALSE;
1188     }
1189    
1190     FileVar->NoMsg = TRUE;
1191     ZMODEMStart(IdZReceive);
1192    
1193     return TRUE;
1194     }
1195    
1196     BOOL ZMODEMStartSend(const char *fiename, WORD ParamBinaryFlag)
1197     {
1198     if (FileVar != NULL) {
1199     return FALSE;
1200     }
1201     if (!NewFileVar(&FileVar)) {
1202     return FALSE;
1203     }
1204    
1205     FileVar->DirLen = 0;
1206     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
1207     FileVar->NumFname = 1;
1208     ts.XmodemBin = ParamBinaryFlag;
1209     FileVar->NoMsg = TRUE;
1210    
1211     ZMODEMStart(IdZSend);
1212    
1213     return TRUE;
1214     }
1215    
1216 maya 3227 void BPStart(int mode)
1217     {
1218 doda 6946 LONG Option = 0;
1219 maya 3227
1220     if (! ProtoStart())
1221     return;
1222     if (mode==IdBPSend)
1223     {
1224     FileVar->OpId = OpBPSend;
1225     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1226     {
1227 maya 7951 char FileDirExpanded[MAX_PATH];
1228     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1229 maya 3227 FileVar->FullName[0] = 0;
1230 maya 7951 if (! (*GetTransFname)(FileVar, FileDirExpanded, GTF_BP, &Option))
1231 maya 3227 {
1232     ProtoEnd();
1233     return;
1234     }
1235     }
1236     else
1237     (*SetFileVar)(FileVar);
1238     }
1239     else /* IdBPReceive or IdBPAuto */
1240     FileVar->OpId = OpBPRcv;
1241    
1242     TalkStatus = IdTalkQuiet;
1243    
1244     /* disable transmit delay (serial port) */
1245     cv.DelayFlag = FALSE;
1246    
1247     if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))
1248     ProtoEnd();
1249     }
1250    
1251 zmatsuo 8949 BOOL BPSendStart(const char *filename)
1252     {
1253     if (FileVar != NULL) {
1254     return FALSE;
1255     }
1256     if (!NewFileVar(&FileVar)) {
1257     return FALSE;
1258     }
1259    
1260     FileVar->DirLen = 0;
1261     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName), filename, _TRUNCATE);
1262     FileVar->NumFname = 1;
1263     FileVar->NoMsg = TRUE;
1264     BPStart(IdBPSend);
1265    
1266     return TRUE;
1267     }
1268    
1269     BOOL BPStartReceive(void)
1270     {
1271     if (FileVar != NULL)
1272     return FALSE;
1273     if (!NewFileVar(&FileVar))
1274     return FALSE;
1275    
1276     FileVar->NoMsg = TRUE;
1277     BPStart(IdBPReceive);
1278    
1279     return TRUE;
1280     }
1281    
1282 maya 3227 void QVStart(int mode)
1283     {
1284     WORD W;
1285    
1286     if (! ProtoStart())
1287     return;
1288    
1289     if (mode==IdQVSend)
1290     {
1291     FileVar->OpId = OpQVSend;
1292     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1293     {
1294 maya 7951 char FileDirExpanded[MAX_PATH];
1295     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1296     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_QV, &W) ||
1297 maya 3227 (FileVar->NumFname==0))
1298     {
1299     ProtoEnd();
1300     return;
1301     }
1302     }
1303     else
1304     (*SetFileVar)(FileVar);
1305     }
1306     else
1307     FileVar->OpId = OpQVRcv;
1308    
1309     TalkStatus = IdTalkQuiet;
1310    
1311     /* disable transmit delay (serial port) */
1312     cv.DelayFlag = FALSE;
1313    
1314     if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))
1315     ProtoEnd();
1316     }
1317 zmatsuo 8948
1318 zmatsuo 8949 BOOL QVStartReceive(void)
1319     {
1320     if (FileVar != NULL) {
1321     return FALSE;
1322     }
1323     if (!NewFileVar(&FileVar)) {
1324     return FALSE;
1325     }
1326 zmatsuo 8948
1327 zmatsuo 8949 FileVar->NoMsg = TRUE;
1328     QVStart(IdQVReceive);
1329    
1330     return TRUE;
1331     }
1332    
1333     BOOL QVStartSend(const char *filename)
1334     {
1335     if (FileVar != NULL) {
1336     return FALSE;
1337     }
1338     if (!NewFileVar(&FileVar)) {
1339     return FALSE;
1340     }
1341    
1342     FileVar->DirLen = 0;
1343     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
1344     FileVar->NumFname = 1;
1345     FileVar->NoMsg = TRUE;
1346     QVStart(IdQVSend);
1347    
1348     return TRUE;
1349     }
1350    
1351 zmatsuo 8948 BOOL IsSendVarNULL()
1352     {
1353     return SendVar == NULL;
1354     }
1355    
1356     BOOL IsFileVarNULL()
1357     {
1358     return FileVar == NULL;
1359     }

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