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 9052 - (hide annotations) (download) (as text)
Sun Dec 20 12:06:06 2020 UTC (3 years, 3 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 29448 byte(s)
filesys.cpp,h からプロトコル転送に関するソースを filesys_proto.cpp へ分離
1 doda 6806 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3 nmaya 9048 * (C) 2005- 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 zmatsuo 9052 //PFileVar FileVar = NULL;
68     //static PCHAR ProtoVar = NULL;
69     //static int ProtoId;
70 maya 3227
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 zmatsuo 9052 BOOL FSend = FALSE;
89 maya 3227
90     static HMODULE HTTFILE = NULL;
91     static int TTFILECount = 0;
92    
93     PGetSetupFname GetSetupFname;
94 zmatsuo 9052 PGetTransFname GetTransFname;
95 maya 3227 PGetMultiFname GetMultiFname;
96     PGetGetFname GetGetFname;
97     PSetFileVar SetFileVar;
98     PGetXFname GetXFname;
99     PProtoInit ProtoInit;
100 zmatsuo 9052 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 zmatsuo 9052 //static PProtoDlg PtDlg = NULL;
236 maya 3227
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 zmatsuo 9052 static BOOL NewFileVar(PFileVar *fv)
269 maya 3227 {
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 zmatsuo 9052 static void FreeFileVar(PFileVar *fv)
294 maya 3227 {
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 9052 #if 0
618 zmatsuo 8857 static BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)
619 maya 3227 {
620     int vsize;
621     PProtoDlg pd;
622    
623     ProtoId = IdProto;
624    
625     switch (ProtoId) {
626     case PROTO_KMT:
627     vsize = sizeof(TKmtVar);
628     break;
629     case PROTO_XM:
630     vsize = sizeof(TXVar);
631     break;
632     case PROTO_YM:
633     vsize = sizeof(TYVar);
634     break;
635     case PROTO_ZM:
636     vsize = sizeof(TZVar);
637     break;
638     case PROTO_BP:
639     vsize = sizeof(TBPVar);
640     break;
641     case PROTO_QV:
642     vsize = sizeof(TQVVar);
643     break;
644 zmatsuo 8852 default:
645     vsize = 0;
646     assert(FALSE);
647     break;
648 maya 3227 }
649     ProtoVar = (PCHAR)malloc(vsize);
650     if (ProtoVar==NULL)
651     return FALSE;
652    
653     switch (ProtoId) {
654     case PROTO_KMT:
655     ((PKmtVar)ProtoVar)->KmtMode = Mode;
656     break;
657     case PROTO_XM:
658     ((PXVar)ProtoVar)->XMode = Mode;
659     ((PXVar)ProtoVar)->XOpt = Opt1;
660     ((PXVar)ProtoVar)->TextFlag = 1 - (Opt2 & 1);
661     break;
662 doda 6435 case PROTO_YM:
663 maya 3227 ((PYVar)ProtoVar)->YMode = Mode;
664 yutakapon 3819 ((PYVar)ProtoVar)->YOpt = Opt1;
665 maya 3227 break;
666     case PROTO_ZM:
667     ((PZVar)ProtoVar)->BinFlag = (Opt1 & 1) != 0;
668     ((PZVar)ProtoVar)->ZMode = Mode;
669     break;
670     case PROTO_BP:
671     ((PBPVar)ProtoVar)->BPMode = Mode;
672     break;
673     case PROTO_QV:
674     ((PQVVar)ProtoVar)->QVMode = Mode;
675     break;
676     }
677    
678     pd = new CProtoDlg();
679     if (pd==NULL)
680     {
681     free(ProtoVar);
682     ProtoVar = NULL;
683     return FALSE;
684     }
685 zmatsuo 8947 CProtoDlgInfo info;
686     info.UILanguageFile = ts.UILanguageFile;
687     info.HMainWin = fv->HMainWin;
688     pd->Create(hInst, HVTWin, &info);
689     fv->HWin = pd->m_hWnd;
690 maya 3227
691     (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
692    
693     PtDlg = pd;
694     return TRUE;
695     }
696    
697 zmatsuo 8858 static void CloseProtoDlg(void)
698 maya 3227 {
699     if (PtDlg!=NULL)
700     {
701     PtDlg->DestroyWindow();
702     PtDlg = NULL;
703    
704     ::KillTimer(FileVar->HMainWin,IdProtoTimer);
705     if ((ProtoId==PROTO_QV) &&
706     (((PQVVar)ProtoVar)->QVMode==IdQVSend))
707     CommTextOut(&cv,"\015",1);
708     if (FileVar->LogFlag)
709 zmatsuo 7290 CloseHandle(FileVar->LogFile);
710 maya 3227 FileVar->LogFile = 0;
711     if (ProtoVar!=NULL)
712     {
713     free(ProtoVar);
714     ProtoVar = NULL;
715     }
716     }
717     }
718    
719 zmatsuo 8858 static BOOL ProtoStart(void)
720 maya 3227 {
721     if (cv.ProtoFlag)
722     return FALSE;
723     if (FSend)
724     {
725     FreeFileVar(&FileVar);
726     return FALSE;
727     }
728    
729     if (! LoadTTFILE())
730     return FALSE;
731     NewFileVar(&FileVar);
732    
733     if (FileVar==NULL)
734     {
735     FreeTTFILE();
736     return FALSE;
737     }
738     cv.ProtoFlag = TRUE;
739     return TRUE;
740     }
741    
742 zmatsuo 8858 void ProtoEnd(void)
743 maya 3227 {
744     if (! cv.ProtoFlag)
745     return;
746     cv.ProtoFlag = FALSE;
747    
748     /* Enable transmit delay (serial port) */
749     cv.DelayFlag = TRUE;
750     TalkStatus = IdTalkKeyb;
751    
752     CloseProtoDlg();
753    
754     if ((FileVar!=NULL) && FileVar->Success)
755     EndDdeCmnd(1);
756     else
757     EndDdeCmnd(0);
758    
759     FreeTTFILE();
760     FreeFileVar(&FileVar);
761     }
762    
763 zmatsuo 8857 /**
764     * OnIdle()#teraterm.cpp�����R�[��������
765     * cv.ProtoFlag �� 0 ���O������
766     * @retval 0 continue
767     * 1/2 ActiveWin(�O���[�o������)���l(IdVT=1/IdTek=2)
768     * �� ������������������������
769     */
770 zmatsuo 8858 int ProtoDlgParse(void)
771 maya 3227 {
772     int P;
773    
774     P = ActiveWin;
775     if (PtDlg==NULL)
776     return P;
777    
778     if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))
779     P = 0; /* continue */
780     else {
781     CommSend(&cv);
782     ProtoEnd();
783     }
784     return P;
785     }
786    
787 zmatsuo 8858 void ProtoDlgTimeOut(void)
788 maya 3227 {
789     if (PtDlg!=NULL)
790     (*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);
791     }
792    
793 zmatsuo 8858 void ProtoDlgCancel(void)
794 maya 3227 {
795     if ((PtDlg!=NULL) &&
796     (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))
797     ProtoEnd();
798     }
799    
800     void KermitStart(int mode)
801     {
802     WORD w;
803    
804     if (! ProtoStart())
805     return;
806    
807     switch (mode) {
808     case IdKmtSend:
809     FileVar->OpId = OpKmtSend;
810     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
811     {
812 maya 7951 char FileDirExpanded[MAX_PATH];
813     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
814     if (!(*GetMultiFname)(FileVar, FileDirExpanded, GMF_KERMIT, &w) ||
815 maya 3227 (FileVar->NumFname==0))
816     {
817     ProtoEnd();
818     return;
819     }
820     }
821     else
822     (*SetFileVar)(FileVar);
823     break;
824     case IdKmtReceive:
825     FileVar->OpId = OpKmtRcv;
826     break;
827     case IdKmtGet:
828     FileVar->OpId = OpKmtSend;
829     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
830     {
831 zmatsuo 9051 if (! (*GetGetFname)(FileVar->HMainWin,FileVar, &ts) ||
832 maya 3227 (strlen(FileVar->FullName)==0))
833     {
834     ProtoEnd();
835     return;
836     }
837     }
838     else
839     (*SetFileVar)(FileVar);
840     break;
841     case IdKmtFinish:
842     FileVar->OpId = OpKmtFin;
843     break;
844     default:
845     ProtoEnd();
846     return;
847     }
848     TalkStatus = IdTalkQuiet;
849    
850     /* disable transmit delay (serial port) */
851     cv.DelayFlag = FALSE;
852    
853     if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))
854     ProtoEnd();
855     }
856    
857 zmatsuo 8949 BOOL KermitStartSend(const char *filename)
858     {
859     if (FileVar !=NULL)
860     return FALSE;
861     if (!NewFileVar(&FileVar))
862     return FALSE;
863    
864     FileVar->DirLen = 0;
865     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
866     FileVar->NumFname = 1;
867     FileVar->NoMsg = TRUE;
868     KermitStart(IdKmtSend);
869    
870     return TRUE;
871     }
872    
873     BOOL KermitGet(const char *filename)
874     {
875     if (FileVar !=NULL)
876     return FALSE;
877     if (!NewFileVar(&FileVar))
878     return FALSE;
879    
880     FileVar->DirLen = 0;
881     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
882     FileVar->NumFname = 1;
883     FileVar->NoMsg = TRUE;
884     KermitStart(IdKmtGet);
885    
886     return TRUE;
887     }
888    
889     BOOL KermitStartRecive(void)
890     {
891     if (FileVar !=NULL)
892     return FALSE;
893     if (!NewFileVar(&FileVar))
894     return FALSE;
895    
896     FileVar->NoMsg = TRUE;
897     KermitStart(IdKmtReceive);
898    
899     return TRUE;
900     }
901    
902     BOOL KermitFinish(void)
903     {
904     if (FileVar !=NULL)
905     return FALSE;
906     if (!NewFileVar(&FileVar))
907     return FALSE;
908    
909     FileVar->NoMsg = TRUE;
910     KermitStart(IdKmtFinish);
911    
912     return TRUE;
913     }
914    
915 maya 3227 void XMODEMStart(int mode)
916     {
917     LONG Option;
918 doda 6328 int tmp;
919 maya 3227
920     if (! ProtoStart())
921     return;
922    
923     if (mode==IdXReceive)
924     FileVar->OpId = OpXRcv;
925     else
926     FileVar->OpId = OpXSend;
927    
928     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
929     {
930 maya 7951 char FileDirExpanded[MAX_PATH];
931     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
932 maya 3227 Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
933     if (! (*GetXFname)(FileVar->HMainWin,
934 maya 7951 mode==IdXReceive,&Option,FileVar,FileDirExpanded))
935 maya 3227 {
936     ProtoEnd();
937     return;
938     }
939 doda 6328 tmp = HIWORD(Option);
940     if (mode == IdXReceive) {
941     if (IsXoptCRC(tmp)) {
942     if (IsXopt1k(ts.XmodemOpt)) {
943     ts.XmodemOpt = Xopt1kCRC;
944     }
945     else {
946     ts.XmodemOpt = XoptCRC;
947     }
948     }
949     else {
950     if (IsXopt1k(ts.XmodemOpt)) {
951     ts.XmodemOpt = Xopt1kCksum;
952     }
953     else {
954     ts.XmodemOpt = XoptCheck;
955     }
956     }
957     ts.XmodemBin = LOWORD(Option);
958     }
959     else {
960     if (IsXopt1k(tmp)) {
961     if (IsXoptCRC(ts.XmodemOpt)) {
962     ts.XmodemOpt = Xopt1kCRC;
963     }
964     else {
965     ts.XmodemOpt = Xopt1kCksum;
966     }
967     }
968     else {
969     if (IsXoptCRC(ts.XmodemOpt)) {
970     ts.XmodemOpt = XoptCRC;
971     }
972     else {
973     ts.XmodemOpt = XoptCheck;
974     }
975     }
976     }
977 maya 3227 }
978     else
979     (*SetFileVar)(FileVar);
980    
981     if (mode==IdXReceive)
982     FileVar->FileHandle = _lcreat(FileVar->FullName,0);
983     else
984     FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);
985    
986 zmatsuo 7290 FileVar->FileOpen = FileVar->FileHandle != INVALID_HANDLE_VALUE;
987 maya 3227 if (! FileVar->FileOpen)
988     {
989     ProtoEnd();
990     return;
991     }
992     TalkStatus = IdTalkQuiet;
993    
994     /* disable transmit delay (serial port) */
995     cv.DelayFlag = FALSE;
996    
997     if (! OpenProtoDlg(FileVar,PROTO_XM,mode,
998     ts.XmodemOpt,ts.XmodemBin))
999     ProtoEnd();
1000     }
1001    
1002 zmatsuo 8949 BOOL XMODEMStartReceive(const char *fiename, WORD ParamBinaryFlag, WORD ParamXmodemOpt)
1003     {
1004     if (FileVar !=NULL)
1005     return FALSE;
1006     if (!NewFileVar(&FileVar))
1007     return FALSE;
1008    
1009     FileVar->DirLen = 0;
1010     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
1011     if (IsXopt1k(ts.XmodemOpt)) {
1012     if (IsXoptCRC(ParamXmodemOpt)) {
1013     // CRC
1014     ts.XmodemOpt = Xopt1kCRC;
1015     }
1016     else { // Checksum
1017     ts.XmodemOpt = Xopt1kCksum;
1018     }
1019     }
1020     else {
1021     if (IsXoptCRC(ParamXmodemOpt)) {
1022     ts.XmodemOpt = XoptCRC;
1023     }
1024     else {
1025     ts.XmodemOpt = XoptCheck;
1026     }
1027     }
1028     ts.XmodemBin = ParamBinaryFlag;
1029     FileVar->NoMsg = TRUE;
1030     XMODEMStart(IdXReceive);
1031    
1032     return TRUE;
1033     }
1034    
1035     BOOL XMODEMStartSend(const char *fiename, WORD ParamXmodemOpt)
1036     {
1037     if (FileVar !=NULL)
1038     return FALSE;
1039     if (!NewFileVar(&FileVar))
1040     return FALSE;
1041    
1042     FileVar->DirLen = 0;
1043     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName), fiename, _TRUNCATE);
1044     if (IsXoptCRC(ts.XmodemOpt)) {
1045     if (IsXopt1k(ParamXmodemOpt)) {
1046     ts.XmodemOpt = Xopt1kCRC;
1047     }
1048     else {
1049     ts.XmodemOpt = XoptCRC;
1050     }
1051     }
1052     else {
1053     if (IsXopt1k(ParamXmodemOpt)) {
1054     ts.XmodemOpt = Xopt1kCksum;
1055     }
1056     else {
1057     ts.XmodemOpt = XoptCheck;
1058     }
1059     }
1060     FileVar->NoMsg = TRUE;
1061     XMODEMStart(IdXSend);
1062    
1063     return TRUE;
1064     }
1065    
1066 maya 3227 void YMODEMStart(int mode)
1067     {
1068     WORD Opt;
1069    
1070     if (! ProtoStart())
1071     return;
1072    
1073     if (mode==IdYSend)
1074     {
1075 maya 7951 char FileDirExpanded[MAX_PATH];
1076     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1077    
1078 yutakapon 3819 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
1079     // TODO: "Yopt1K", "YoptG", "YoptSingle"�������������������AIDD_FOPT���g�������K�v�����B
1080     Opt = Yopt1K;
1081 maya 3227 FileVar->OpId = OpYSend;
1082     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1083     {
1084 maya 7951 if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Y,&Opt) ||
1085 maya 3227 (FileVar->NumFname==0))
1086     {
1087     ProtoEnd();
1088     return;
1089     }
1090 yutakapon 3819 //ts.XmodemBin = Opt;
1091 maya 3227 }
1092     else
1093     (*SetFileVar)(FileVar);
1094     }
1095 doda 6363 else {
1096 maya 3227 FileVar->OpId = OpYRcv;
1097 yutakapon 3820 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
1098     Opt = Yopt1K;
1099 yutakapon 3821 (*SetFileVar)(FileVar);
1100 yutakapon 3820 }
1101 maya 3227
1102     TalkStatus = IdTalkQuiet;
1103    
1104     /* disable transmit delay (serial port) */
1105     cv.DelayFlag = FALSE;
1106    
1107     if (! OpenProtoDlg(FileVar,PROTO_YM,mode,Opt,0))
1108     ProtoEnd();
1109     }
1110    
1111 zmatsuo 8949 BOOL YMODEMStartReceive()
1112     {
1113     if (FileVar != NULL) {
1114     return FALSE;
1115     }
1116     if (!NewFileVar(&FileVar)) {
1117     return FALSE;
1118     }
1119     FileVar->NoMsg = TRUE;
1120     YMODEMStart(IdYReceive);
1121     return TRUE;
1122     }
1123    
1124     BOOL YMODEMStartSend(const char *fiename)
1125     {
1126     if (FileVar != NULL) {
1127     return FALSE;
1128     }
1129     if (!NewFileVar(&FileVar)) {
1130     return FALSE;
1131     }
1132    
1133     FileVar->DirLen = 0;
1134     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
1135     FileVar->NumFname = 1;
1136     FileVar->NoMsg = TRUE;
1137     YMODEMStart(IdYSend);
1138     return TRUE;
1139     }
1140    
1141 maya 3227 void ZMODEMStart(int mode)
1142     {
1143     WORD Opt;
1144    
1145     if (! ProtoStart())
1146     return;
1147    
1148 doda 6361 if (mode == IdZSend || mode == IdZAutoS)
1149 maya 3227 {
1150     Opt = ts.XmodemBin;
1151     FileVar->OpId = OpZSend;
1152     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1153     {
1154 maya 7951 char FileDirExpanded[MAX_PATH];
1155     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1156     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Z,&Opt) ||
1157 maya 3227 (FileVar->NumFname==0))
1158     {
1159 doda 6364 if (mode == IdZAutoS) {
1160     CommRawOut(&cv, "\030\030\030\030\030\030\030\030\b\b\b\b\b\b\b\b\b\b", 18);
1161     }
1162 maya 3227 ProtoEnd();
1163     return;
1164     }
1165     ts.XmodemBin = Opt;
1166     }
1167     else
1168     (*SetFileVar)(FileVar);
1169     }
1170 doda 6361 else /* IdZReceive or IdZAutoR */
1171 maya 3227 FileVar->OpId = OpZRcv;
1172    
1173     TalkStatus = IdTalkQuiet;
1174    
1175     /* disable transmit delay (serial port) */
1176     cv.DelayFlag = FALSE;
1177    
1178     if (! OpenProtoDlg(FileVar,PROTO_ZM,mode,Opt,0))
1179     ProtoEnd();
1180     }
1181    
1182 zmatsuo 8949 BOOL ZMODEMStartReceive(void)
1183     {
1184     if (FileVar != NULL) {
1185     return FALSE;
1186     }
1187     if (!NewFileVar(&FileVar)) {
1188     return FALSE;
1189     }
1190    
1191     FileVar->NoMsg = TRUE;
1192     ZMODEMStart(IdZReceive);
1193    
1194     return TRUE;
1195     }
1196    
1197     BOOL ZMODEMStartSend(const char *fiename, WORD ParamBinaryFlag)
1198     {
1199     if (FileVar != NULL) {
1200     return FALSE;
1201     }
1202     if (!NewFileVar(&FileVar)) {
1203     return FALSE;
1204     }
1205    
1206     FileVar->DirLen = 0;
1207     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
1208     FileVar->NumFname = 1;
1209     ts.XmodemBin = ParamBinaryFlag;
1210     FileVar->NoMsg = TRUE;
1211    
1212     ZMODEMStart(IdZSend);
1213    
1214     return TRUE;
1215     }
1216    
1217 maya 3227 void BPStart(int mode)
1218     {
1219 doda 6946 LONG Option = 0;
1220 maya 3227
1221     if (! ProtoStart())
1222     return;
1223     if (mode==IdBPSend)
1224     {
1225     FileVar->OpId = OpBPSend;
1226     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1227     {
1228 maya 7951 char FileDirExpanded[MAX_PATH];
1229     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1230 maya 3227 FileVar->FullName[0] = 0;
1231 maya 7951 if (! (*GetTransFname)(FileVar, FileDirExpanded, GTF_BP, &Option))
1232 maya 3227 {
1233     ProtoEnd();
1234     return;
1235     }
1236     }
1237     else
1238     (*SetFileVar)(FileVar);
1239     }
1240     else /* IdBPReceive or IdBPAuto */
1241     FileVar->OpId = OpBPRcv;
1242    
1243     TalkStatus = IdTalkQuiet;
1244    
1245     /* disable transmit delay (serial port) */
1246     cv.DelayFlag = FALSE;
1247    
1248     if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))
1249     ProtoEnd();
1250     }
1251    
1252 zmatsuo 8949 BOOL BPSendStart(const char *filename)
1253     {
1254     if (FileVar != NULL) {
1255     return FALSE;
1256     }
1257     if (!NewFileVar(&FileVar)) {
1258     return FALSE;
1259     }
1260    
1261     FileVar->DirLen = 0;
1262     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName), filename, _TRUNCATE);
1263     FileVar->NumFname = 1;
1264     FileVar->NoMsg = TRUE;
1265     BPStart(IdBPSend);
1266    
1267     return TRUE;
1268     }
1269    
1270     BOOL BPStartReceive(void)
1271     {
1272     if (FileVar != NULL)
1273     return FALSE;
1274     if (!NewFileVar(&FileVar))
1275     return FALSE;
1276    
1277     FileVar->NoMsg = TRUE;
1278     BPStart(IdBPReceive);
1279    
1280     return TRUE;
1281     }
1282    
1283 maya 3227 void QVStart(int mode)
1284     {
1285     WORD W;
1286    
1287     if (! ProtoStart())
1288     return;
1289    
1290     if (mode==IdQVSend)
1291     {
1292     FileVar->OpId = OpQVSend;
1293     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1294     {
1295 maya 7951 char FileDirExpanded[MAX_PATH];
1296     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1297     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_QV, &W) ||
1298 maya 3227 (FileVar->NumFname==0))
1299     {
1300     ProtoEnd();
1301     return;
1302     }
1303     }
1304     else
1305     (*SetFileVar)(FileVar);
1306     }
1307     else
1308     FileVar->OpId = OpQVRcv;
1309    
1310     TalkStatus = IdTalkQuiet;
1311    
1312     /* disable transmit delay (serial port) */
1313     cv.DelayFlag = FALSE;
1314    
1315     if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))
1316     ProtoEnd();
1317     }
1318 zmatsuo 8948
1319 zmatsuo 8949 BOOL QVStartReceive(void)
1320     {
1321     if (FileVar != NULL) {
1322     return FALSE;
1323     }
1324     if (!NewFileVar(&FileVar)) {
1325     return FALSE;
1326     }
1327 zmatsuo 8948
1328 zmatsuo 8949 FileVar->NoMsg = TRUE;
1329     QVStart(IdQVReceive);
1330    
1331     return TRUE;
1332     }
1333    
1334     BOOL QVStartSend(const char *filename)
1335     {
1336     if (FileVar != NULL) {
1337     return FALSE;
1338     }
1339     if (!NewFileVar(&FileVar)) {
1340     return FALSE;
1341     }
1342    
1343     FileVar->DirLen = 0;
1344     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
1345     FileVar->NumFname = 1;
1346     FileVar->NoMsg = TRUE;
1347     QVStart(IdQVSend);
1348    
1349     return TRUE;
1350     }
1351 zmatsuo 9052 #endif
1352 zmatsuo 8949
1353 zmatsuo 8948 BOOL IsSendVarNULL()
1354     {
1355     return SendVar == NULL;
1356     }
1357    
1358 zmatsuo 9052 #if 0
1359 zmatsuo 8948 BOOL IsFileVarNULL()
1360     {
1361     return FileVar == NULL;
1362     }
1363 zmatsuo 9052 #endif

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