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 9057 - (hide annotations) (download) (as text)
Sun Dec 20 12:07:15 2020 UTC (3 years, 3 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 38513 byte(s)
FileVar 構造体を ttftypes.h から移動

- teraterm/filesys_send.h を追加
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 zmatsuo 9057 #include "filesys_send.h"
62 zmatsuo 8866
63 doda 3904 #define FS_BRACKET_NONE 0
64     #define FS_BRACKET_START 1
65     #define FS_BRACKET_END 2
66    
67 zmatsuo 9057 static PFileVar SendVar = NULL;
68 zmatsuo 9052 //PFileVar FileVar = NULL;
69     //static PCHAR ProtoVar = NULL;
70     //static int ProtoId;
71 maya 3227
72 doda 3904 static BOOL FileRetrySend, FileRetryEcho, FileCRSend, FileReadEOF, BinaryMode;
73 maya 3227 static BYTE FileByte;
74    
75 maya 6071 #define FILE_SEND_BUF_SIZE 8192
76     struct FileSendHandler {
77     CHAR buf[FILE_SEND_BUF_SIZE];
78     int pos;
79     int end;
80     };
81     static struct FileSendHandler FileSendHandler;
82     static int FileDlgRefresh;
83    
84 doda 3904 static int FileBracketMode = FS_BRACKET_NONE;
85     static int FileBracketPtr = 0;
86     static char BracketStartStr[] = "\033[200~";
87     static char BracketEndStr[] = "\033[201~";
88    
89 zmatsuo 9052 BOOL FSend = FALSE;
90 maya 3227
91     static HMODULE HTTFILE = NULL;
92     static int TTFILECount = 0;
93    
94 zmatsuo 9053 #if 0
95 maya 3227 PGetSetupFname GetSetupFname;
96 zmatsuo 9052 PGetTransFname GetTransFname;
97 maya 3227 PGetMultiFname GetMultiFname;
98     PGetGetFname GetGetFname;
99     PSetFileVar SetFileVar;
100     PGetXFname GetXFname;
101 zmatsuo 9053 #endif
102 zmatsuo 9055 #if 0
103 maya 3227 PProtoInit ProtoInit;
104 zmatsuo 9052 PProtoParse ProtoParse;
105 maya 3227 PProtoTimeOutProc ProtoTimeOutProc;
106     PProtoCancel ProtoCancel;
107 maya 7182 PTTFILESetUILanguageFile TTFILESetUILanguageFile;
108     PTTFILESetFileSendFilter TTFILESetFileSendFilter;
109 zmatsuo 9055 #endif
110 maya 3227
111 zmatsuo 9053 #if 0
112 maya 3227 #define IdGetSetupFname 1
113     #define IdGetTransFname 2
114     #define IdGetMultiFname 3
115     #define IdGetGetFname 4
116     #define IdSetFileVar 5
117     #define IdGetXFname 6
118 zmatsuo 9053 #endif
119 maya 3227
120     #define IdProtoInit 7
121     #define IdProtoParse 8
122     #define IdProtoTimeOutProc 9
123     #define IdProtoCancel 10
124    
125 maya 7182 #define IdTTFILESetUILanguageFile 11
126     #define IdTTFILESetFileSendFilter 12
127    
128 zmatsuo 9055 #if 0
129 zmatsuo 8858 BOOL LoadTTFILE(void)
130 maya 3227 {
131     BOOL Err;
132    
133     if (HTTFILE != NULL)
134     {
135     TTFILECount++;
136     return TRUE;
137     }
138     else
139     TTFILECount = 0;
140    
141 doda 6792 HTTFILE = LoadHomeDLL("TTPFILE.DLL");
142 maya 3227 if (HTTFILE == NULL)
143     return FALSE;
144    
145 maya 7182 Err = FALSE;
146 maya 3227
147 zmatsuo 9053 #if 0
148 maya 3227 GetSetupFname = (PGetSetupFname)GetProcAddress(HTTFILE,
149     MAKEINTRESOURCE(IdGetSetupFname));
150     if (GetSetupFname==NULL)
151     Err = TRUE;
152    
153     GetTransFname = (PGetTransFname)GetProcAddress(HTTFILE,
154     MAKEINTRESOURCE(IdGetTransFname));
155     if (GetTransFname==NULL)
156     Err = TRUE;
157    
158     GetMultiFname = (PGetMultiFname)GetProcAddress(HTTFILE,
159     MAKEINTRESOURCE(IdGetMultiFname));
160     if (GetMultiFname==NULL)
161     Err = TRUE;
162    
163     GetGetFname = (PGetGetFname)GetProcAddress(HTTFILE,
164     MAKEINTRESOURCE(IdGetGetFname));
165     if (GetGetFname==NULL)
166     Err = TRUE;
167    
168     SetFileVar = (PSetFileVar)GetProcAddress(HTTFILE,
169     MAKEINTRESOURCE(IdSetFileVar));
170     if (SetFileVar==NULL)
171     Err = TRUE;
172    
173     GetXFname = (PGetXFname)GetProcAddress(HTTFILE,
174     MAKEINTRESOURCE(IdGetXFname));
175     if (GetXFname==NULL)
176     Err = TRUE;
177 zmatsuo 9053 #endif
178 maya 3227
179     ProtoInit = (PProtoInit)GetProcAddress(HTTFILE,
180     MAKEINTRESOURCE(IdProtoInit));
181     if (ProtoInit==NULL)
182     Err = TRUE;
183    
184     ProtoParse = (PProtoParse)GetProcAddress(HTTFILE,
185     MAKEINTRESOURCE(IdProtoParse));
186     if (ProtoParse==NULL)
187     Err = TRUE;
188    
189     ProtoTimeOutProc = (PProtoTimeOutProc)GetProcAddress(HTTFILE,
190     MAKEINTRESOURCE(IdProtoTimeOutProc));
191     if (ProtoTimeOutProc==NULL)
192     Err = TRUE;
193    
194     ProtoCancel = (PProtoCancel)GetProcAddress(HTTFILE,
195     MAKEINTRESOURCE(IdProtoCancel));
196     if (ProtoCancel==NULL)
197     Err = TRUE;
198    
199 maya 7182 TTFILESetUILanguageFile = (PTTFILESetUILanguageFile)GetProcAddress(HTTFILE,
200     MAKEINTRESOURCE(IdTTFILESetUILanguageFile));
201     if (TTFILESetUILanguageFile==NULL) {
202     Err = TRUE;
203     }
204     else {
205     TTFILESetUILanguageFile(ts.UILanguageFile);
206     }
207    
208     TTFILESetFileSendFilter = (PTTFILESetFileSendFilter)GetProcAddress(HTTFILE,
209     MAKEINTRESOURCE(IdTTFILESetFileSendFilter));
210     if (TTFILESetFileSendFilter==NULL) {
211     Err = TRUE;
212     }
213     else {
214     TTFILESetFileSendFilter(ts.FileSendFilter);
215     }
216    
217 maya 3227 if (Err)
218     {
219     FreeLibrary(HTTFILE);
220     HTTFILE = NULL;
221 doda 6435 return FALSE;
222 maya 3227 }
223     else {
224     TTFILECount = 1;
225     return TRUE;
226     }
227     }
228    
229 zmatsuo 8858 BOOL FreeTTFILE(void)
230 maya 3227 {
231     if (TTFILECount==0)
232     return FALSE;
233     TTFILECount--;
234     if (TTFILECount>0)
235     return TRUE;
236     if (HTTFILE!=NULL)
237     {
238     FreeLibrary(HTTFILE);
239     HTTFILE = NULL;
240     }
241     return TRUE;
242     }
243 zmatsuo 9055 #endif
244 maya 3227
245     static PFileTransDlg SendDlg = NULL;
246 zmatsuo 9052 //static PProtoDlg PtDlg = NULL;
247 maya 3227
248 zmatsuo 7526 static BOOL OpenFTDlg(PFileVar fv)
249 maya 3227 {
250     PFileTransDlg FTDlg;
251    
252     FTDlg = new CFileTransDlg();
253    
254 doda 4454 fv->StartTime = 0;
255     fv->ProgStat = 0;
256 zmatsuo 8857 cv.FilePause &= ~fv->OpId;
257 doda 4454
258 maya 3227 if (FTDlg!=NULL)
259     {
260 zmatsuo 9056 CFileTransDlgInfo info;
261     info.UILanguageFile = ts.UILanguageFile;
262     info.OpId = OpSendFile;
263     info.DlgCaption = ToWcharA(fv->DlgCaption);
264     info.FileName = NULL;
265     info.FullName = ToWcharA(fv->FullName);
266     info.HideDialog = ts.LogHideDialog ? TRUE : FALSE;
267     info.HMainWin = HVTWin;
268     //FTDlg->Create(hInst, HVTWin, fv, &cv, &ts);
269     FTDlg->Create(hInst, &info);
270     //FTDlg->RefreshNum(fv);
271     FTDlg->RefreshNum(0, fv->FileSize, fv->ByteCount);
272     free(info.DlgCaption);
273     free(info.FullName);
274 maya 3227 }
275    
276 zmatsuo 8894 SendDlg = FTDlg; /* File send */
277 maya 3227
278 doda 6947 fv->StartTime = GetTickCount();
279 maya 3227
280     return (FTDlg!=NULL);
281     }
282    
283 zmatsuo 8857 static void ShowFTDlg(WORD OpId)
284 maya 3227 {
285 zmatsuo 8894 if (SendDlg != NULL) {
286     SendDlg->ShowWindow(SW_SHOWNORMAL);
287     SetForegroundWindow(SendDlg->GetSafeHwnd());
288 maya 3227 }
289     }
290    
291 zmatsuo 9052 static BOOL NewFileVar(PFileVar *fv)
292 maya 3227 {
293     if ((*fv)==NULL)
294     {
295     *fv = (PFileVar)malloc(sizeof(TFileVar));
296     if ((*fv)!=NULL)
297     {
298 maya 7951 char FileDirExpanded[MAX_PATH];
299     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
300 maya 3227 memset(*fv, 0, sizeof(TFileVar));
301 maya 7951 strncpy_s((*fv)->FullName, sizeof((*fv)->FullName), FileDirExpanded, _TRUNCATE);
302 maya 3227 AppendSlash((*fv)->FullName,sizeof((*fv)->FullName));
303     (*fv)->DirLen = strlen((*fv)->FullName);
304     (*fv)->FileOpen = FALSE;
305     (*fv)->OverWrite = ((ts.FTFlag & FT_RENAME) == 0);
306     (*fv)->HMainWin = HVTWin;
307     (*fv)->Success = FALSE;
308     (*fv)->NoMsg = FALSE;
309     (*fv)->HideDialog = FALSE;
310     }
311     }
312    
313     return ((*fv)!=NULL);
314     }
315    
316 zmatsuo 9052 static void FreeFileVar(PFileVar *fv)
317 maya 3227 {
318     if ((*fv)!=NULL)
319     {
320 zmatsuo 8894 if ((*fv)->FileOpen) CloseHandle((*fv)->FileHandle);
321 zmatsuo 7541 if ((*fv)->FnStrMemHandle != 0)
322 maya 3227 {
323     GlobalUnlock((*fv)->FnStrMemHandle);
324     GlobalFree((*fv)->FnStrMemHandle);
325     }
326     free(*fv);
327     *fv = NULL;
328     }
329     }
330    
331 zmatsuo 9053 /* �_�C�A���O���������������� */
332     static void CenterCommonDialog(HWND hDlg)
333     {
334     /* hDlg���e���_�C�A���O���E�B���h�E�n���h�� */
335     HWND hWndDlgRoot = GetParent(hDlg);
336     CenterWindow(hWndDlgRoot, GetParent(hWndDlgRoot));
337     }
338    
339     static HFONT DlgFoptFont;
340     static UINT_PTR CALLBACK TransFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)
341     {
342     static const DlgTextInfo text_info[] = {
343     { IDC_FOPT, "DLG_FOPT" },
344     { IDC_FOPTBIN, "DLG_FOPT_BINARY" },
345     };
346     LPOPENFILENAME ofn;
347     LPWORD pw;
348     LPOFNOTIFY notify;
349     LOGFONT logfont;
350     HFONT font;
351     const char *UILanguageFile = ts.UILanguageFile;
352    
353     switch (Message) {
354     case WM_INITDIALOG:
355     ofn = (LPOPENFILENAME)lParam;
356     pw = (LPWORD)ofn->lCustData;
357     SetWindowLongPtr(Dialog, DWLP_USER, (LONG_PTR)pw);
358    
359     font = (HFONT)SendMessage(Dialog, WM_GETFONT, 0, 0);
360     GetObject(font, sizeof(LOGFONT), &logfont);
361     if (get_lang_font("DLG_TAHOMA_FONT", Dialog, &logfont, &DlgFoptFont, UILanguageFile)) {
362     SendDlgItemMessage(Dialog, IDC_FOPT, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
363     SendDlgItemMessage(Dialog, IDC_FOPTBIN, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
364     SendDlgItemMessage(Dialog, IDC_FOPTAPPEND, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
365     SendDlgItemMessage(Dialog, IDC_PLAINTEXT, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
366     SendDlgItemMessage(Dialog, IDC_TIMESTAMP, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
367     }
368     else {
369     DlgFoptFont = NULL;
370     }
371    
372     SetI18nDlgStrs("Tera Term", Dialog, text_info, _countof(text_info), UILanguageFile);
373    
374     SetRB(Dialog,*pw & 1,IDC_FOPTBIN,IDC_FOPTBIN);
375    
376     CenterCommonDialog(Dialog);
377    
378     return TRUE;
379     case WM_COMMAND: // for old style dialog
380     switch (LOWORD(wParam)) {
381     case IDOK:
382     pw = (LPWORD)GetWindowLongPtr(Dialog,DWLP_USER);
383     if (pw!=NULL)
384     GetRB(Dialog,pw,IDC_FOPTBIN,IDC_FOPTBIN);
385     if (DlgFoptFont != NULL) {
386     DeleteObject(DlgFoptFont);
387     }
388     break;
389     case IDCANCEL:
390     if (DlgFoptFont != NULL) {
391     DeleteObject(DlgFoptFont);
392     }
393     break;
394     }
395     break;
396     case WM_NOTIFY: // for Explorer-style dialog
397     notify = (LPOFNOTIFY)lParam;
398     switch (notify->hdr.code) {
399     case CDN_FILEOK:
400     pw = (LPWORD)GetWindowLongPtr(Dialog,DWLP_USER);
401     if (pw!=NULL)
402     GetRB(Dialog,pw,IDC_FOPTBIN,IDC_FOPTBIN);
403     if (DlgFoptFont != NULL) {
404     DeleteObject(DlgFoptFont);
405     }
406     break;
407     }
408     break;
409     }
410     return FALSE;
411     }
412    
413     static BOOL _GetTransFname(PFileVar fv, PCHAR CurDir, WORD FuncId, LPLONG Option)
414     {
415     char uimsg[MAX_UIMSG];
416     char *FNFilter;
417     OPENFILENAME ofn;
418     WORD optw;
419     wchar_t TempDir[MAXPATHLEN];
420     BOOL Ok;
421     char FileName[MAX_PATH];
422     const char *UILanguageFile = ts.UILanguageFile;
423    
424     /* save current dir */
425     _GetCurrentDirectoryW(_countof(TempDir), TempDir);
426    
427     memset(&ofn, 0, sizeof(OPENFILENAME));
428    
429     strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE);
430     switch (FuncId) {
431     case GTF_SEND:
432     get_lang_msg("FILEDLG_TRANS_TITLE_SENDFILE", uimsg, sizeof(uimsg), TitSendFile, UILanguageFile);
433     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
434     break;
435     case GTF_BP:
436     get_lang_msg("FILEDLG_TRANS_TITLE_BPSEND", uimsg, sizeof(uimsg), TitBPSend, UILanguageFile);
437     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
438     break;
439     default:
440     return FALSE;
441     }
442    
443     FNFilter = GetCommonDialogFilterA(ts.FileSendFilter, UILanguageFile);
444    
445     ExtractFileName(fv->FullName, FileName ,sizeof(FileName));
446     strncpy_s(fv->FullName, sizeof(fv->FullName), FileName, _TRUNCATE);
447     ofn.lStructSize = get_OPENFILENAME_SIZE();
448     ofn.hwndOwner = fv->HMainWin;
449     ofn.lpstrFilter = FNFilter;
450     ofn.nFilterIndex = 1;
451     ofn.lpstrFile = fv->FullName;
452     ofn.nMaxFile = sizeof(fv->FullName);
453     ofn.lpstrInitialDir = CurDir;
454    
455     switch (FuncId) {
456     case GTF_SEND:
457     ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
458     ofn.Flags |= OFN_ENABLETEMPLATE | OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLESIZING;
459     ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FOPT);
460    
461     ofn.lpfnHook = (LPOFNHOOKPROC)(&TransFnHook);
462     optw = (WORD)*Option;
463     ofn.lCustData = (LPARAM)&optw;
464     break;
465     case GTF_BP:
466     ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
467     break;
468     }
469    
470     ofn.Flags |= OFN_SHOWHELP;
471    
472     ofn.lpstrTitle = fv->DlgCaption;
473    
474     ofn.hInstance = hInst;
475    
476     Ok = GetOpenFileName(&ofn);
477     free(FNFilter);
478    
479     if (Ok) {
480     *Option = (long)optw;
481    
482     fv->DirLen = ofn.nFileOffset;
483    
484     if (CurDir!=NULL) {
485     memcpy(CurDir,fv->FullName,fv->DirLen-1);
486     CurDir[fv->DirLen-1] = 0;
487     }
488     }
489     /* restore dir */
490     _SetCurrentDirectoryW(TempDir);
491     return Ok;
492     }
493    
494     static void _SetFileVar(PFileVar fv)
495     {
496     int i;
497     char uimsg[MAX_UIMSG];
498     char c;
499     const char *UILanguageFile = ts.UILanguageFile;
500    
501     GetFileNamePos(fv->FullName,&(fv->DirLen),&i);
502     c = fv->FullName[fv->DirLen];
503     if (c=='\\'||c=='/') fv->DirLen++;
504     strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE);
505     switch (fv->OpId) {
506     case OpLog:
507     get_lang_msg("FILEDLG_TRANS_TITLE_LOG", uimsg, sizeof(uimsg), TitLog, UILanguageFile);
508     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
509     break;
510     case OpSendFile:
511     get_lang_msg("FILEDLG_TRANS_TITLE_SENDFILE", uimsg, sizeof(uimsg), TitSendFile, UILanguageFile);
512     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
513     break;
514     case OpKmtRcv:
515     get_lang_msg("FILEDLG_TRANS_TITLE_KMTRCV", uimsg, sizeof(uimsg), TitKmtRcv, UILanguageFile);
516     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
517     break;
518     case OpKmtGet:
519     get_lang_msg("FILEDLG_TRANS_TITLE_KMTGET", uimsg, sizeof(uimsg), TitKmtGet, UILanguageFile);
520     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
521     break;
522     case OpKmtSend:
523     get_lang_msg("FILEDLG_TRANS_TITLE_KMTSEND", uimsg, sizeof(uimsg), TitKmtSend, UILanguageFile);
524     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
525     break;
526     case OpKmtFin:
527     get_lang_msg("FILEDLG_TRANS_TITLE_KMTFIN", uimsg, sizeof(uimsg), TitKmtFin, UILanguageFile);
528     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
529     break;
530     case OpXRcv:
531     get_lang_msg("FILEDLG_TRANS_TITLE_XRCV", uimsg, sizeof(uimsg), TitXRcv, UILanguageFile);
532     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
533     break;
534     case OpXSend:
535     get_lang_msg("FILEDLG_TRANS_TITLE_XSEND", uimsg, sizeof(uimsg), TitXSend, UILanguageFile);
536     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
537     break;
538     case OpYRcv:
539     get_lang_msg("FILEDLG_TRANS_TITLE_YRCV", uimsg, sizeof(uimsg), TitYRcv, UILanguageFile);
540     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
541     break;
542     case OpYSend:
543     get_lang_msg("FILEDLG_TRANS_TITLE_YSEND", uimsg, sizeof(uimsg), TitYSend, UILanguageFile);
544     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
545     break;
546     case OpZRcv:
547     get_lang_msg("FILEDLG_TRANS_TITLE_ZRCV", uimsg, sizeof(uimsg), TitZRcv, UILanguageFile);
548     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
549     break;
550     case OpZSend:
551     get_lang_msg("FILEDLG_TRANS_TITLE_ZSEND", uimsg, sizeof(uimsg), TitZSend, UILanguageFile);
552     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
553     break;
554     case OpBPRcv:
555     get_lang_msg("FILEDLG_TRANS_TITLE_BPRCV", uimsg, sizeof(uimsg), TitBPRcv, UILanguageFile);
556     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
557     break;
558     case OpBPSend:
559     get_lang_msg("FILEDLG_TRANS_TITLE_BPSEND", uimsg, sizeof(uimsg), TitBPSend, UILanguageFile);
560     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
561     break;
562     case OpQVRcv:
563     get_lang_msg("FILEDLG_TRANS_TITLE_QVRCV", uimsg, sizeof(uimsg), TitQVRcv, UILanguageFile);
564     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
565     break;
566     case OpQVSend:
567     get_lang_msg("FILEDLG_TRANS_TITLE_QVSEND", uimsg, sizeof(uimsg), TitQVSend, UILanguageFile);
568     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
569     break;
570     }
571     }
572    
573 zmatsuo 8858 void FileSendStart(void)
574 maya 3227 {
575 doda 6946 LONG Option = 0;
576 maya 3227
577     if (! cv.Ready || FSend) return;
578     if (cv.ProtoFlag)
579     {
580     FreeFileVar(&SendVar);
581     return;
582     }
583    
584 zmatsuo 9055 #if 0
585 doda 6435 if (! LoadTTFILE())
586 maya 3227 return;
587 zmatsuo 9055 #endif
588 maya 3227 if (! NewFileVar(&SendVar))
589     {
590 zmatsuo 9055 #if 0
591 maya 3227 FreeTTFILE();
592 zmatsuo 9055 #endif
593 maya 3227 return;
594     }
595     SendVar->OpId = OpSendFile;
596    
597     FSend = TRUE;
598    
599 maya 7951 if (strlen(&(SendVar->FullName[SendVar->DirLen])) == 0) {
600     char FileDirExpanded[MAX_PATH];
601     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
602 doda 6946 if (ts.TransBin)
603     Option |= LOGDLG_BINARY;
604 maya 3227 SendVar->FullName[0] = 0;
605 zmatsuo 9053 if (! _GetTransFname(SendVar, FileDirExpanded, GTF_SEND, &Option)) {
606 maya 3227 FileTransEnd(OpSendFile);
607     return;
608     }
609 doda 6946 ts.TransBin = CheckFlag(Option, LOGDLG_BINARY);
610 maya 3227 }
611     else
612 zmatsuo 9053 _SetFileVar(SendVar);
613 maya 3227
614 zmatsuo 7290 SendVar->FileHandle = CreateFile(SendVar->FullName, GENERIC_READ, FILE_SHARE_READ, NULL,
615     OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
616     SendVar->FileOpen = (SendVar->FileHandle != INVALID_HANDLE_VALUE);
617 maya 3227 if (! SendVar->FileOpen)
618     {
619     FileTransEnd(OpSendFile);
620     return;
621     }
622     SendVar->ByteCount = 0;
623     SendVar->FileSize = GetFSize(SendVar->FullName);
624    
625     TalkStatus = IdTalkFile;
626     FileRetrySend = FALSE;
627     FileRetryEcho = FALSE;
628     FileCRSend = FALSE;
629 doda 3904 FileReadEOF = FALSE;
630 maya 6071 FileSendHandler.pos = 0;
631     FileSendHandler.end = 0;
632     FileDlgRefresh = 0;
633 maya 3227
634 doda 3904 if (BracketedPasteMode()) {
635     FileBracketMode = FS_BRACKET_START;
636     FileBracketPtr = 0;
637     BinaryMode = TRUE;
638     }
639     else {
640     FileBracketMode = FS_BRACKET_NONE;
641     BinaryMode = ts.TransBin;
642     }
643    
644 maya 3227 if (! OpenFTDlg(SendVar))
645     FileTransEnd(OpSendFile);
646     }
647    
648 zmatsuo 8949 BOOL FileSendStart2(const char *filename, int binary)
649     {
650     if (SendVar != NULL) {
651     return FALSE;
652     }
653     if (!NewFileVar(&SendVar)) {
654     return FALSE;
655     }
656    
657     SendVar->DirLen = 0;
658     strncpy_s(SendVar->FullName, sizeof(SendVar->FullName), filename, _TRUNCATE);
659     ts.TransBin = binary;
660     SendVar->NoMsg = TRUE;
661     FileSendStart();
662    
663     return TRUE;
664     }
665    
666 maya 3227 void FileTransEnd(WORD OpId)
667     /* OpId = 0: close Log and FileSend
668     OpLog: close Log
669     OpSendFile: close FileSend */
670     {
671 zmatsuo 8900 if ((OpId==0) || (OpId==OpLog)) {
672     if (FLogIsOpend()) {
673     FLogClose();
674     }
675 maya 3227 }
676    
677     if (((OpId==0) || (OpId==OpSendFile)) && FSend)
678     {
679     FSend = FALSE;
680     TalkStatus = IdTalkKeyb;
681     if (SendDlg!=NULL)
682     {
683     SendDlg->DestroyWindow();
684     SendDlg = NULL;
685     }
686     FreeFileVar(&SendVar);
687 zmatsuo 9055 #if 0
688 maya 3227 FreeTTFILE();
689 zmatsuo 9055 #endif
690 maya 3227 }
691    
692     EndDdeCmnd(0);
693     }
694    
695 zmatsuo 8857 void FileTransPause(WORD OpId, BOOL Pause)
696     {
697     if (Pause) {
698     cv.FilePause |= OpId;
699     }
700     else {
701     cv.FilePause &= ~OpId;
702     }
703     }
704    
705 maya 3227 int FSOut1(BYTE b)
706     {
707 doda 3904 if (BinaryMode)
708 maya 3227 return CommBinaryOut(&cv,(PCHAR)&b,1);
709     else if ((b>=0x20) || (b==0x09) || (b==0x0A) || (b==0x0D))
710     return CommTextOut(&cv,(PCHAR)&b,1);
711     else
712     return 1;
713 doda 3861 }
714 maya 3227
715     int FSEcho1(BYTE b)
716     {
717 doda 3904 if (BinaryMode)
718 maya 3227 return CommBinaryEcho(&cv,(PCHAR)&b,1);
719     else
720     return CommTextEcho(&cv,(PCHAR)&b,1);
721     }
722    
723 maya 6071 // �������������������������g��
724     // - BinaryMode == true
725     // - FileBracketMode == false
726     // - cv.TelFlag == false
727     // - ts.LocalEcho == 0
728 zmatsuo 8894 static void FileSendBinayBoost(void)
729 maya 6071 {
730     WORD c, fc;
731     LONG BCOld;
732     DWORD read_bytes;
733    
734     if ((SendDlg == NULL) ||
735     ((cv.FilePause & OpSendFile) != 0))
736     return;
737    
738     BCOld = SendVar->ByteCount;
739    
740     if (FileRetrySend)
741     {
742     c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
743     FileSendHandler.end - FileSendHandler.pos);
744     FileSendHandler.pos += c;
745     FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
746     if (FileRetrySend)
747     return;
748     }
749    
750     do {
751     if (FileSendHandler.pos == FileSendHandler.end) {
752 zmatsuo 7930 ReadFile(SendVar->FileHandle, &(FileSendHandler.buf[0]), sizeof(FileSendHandler.buf), &read_bytes, NULL);
753 maya 6071 fc = LOWORD(read_bytes);
754     FileSendHandler.pos = 0;
755     FileSendHandler.end = fc;
756     } else {
757     fc = FileSendHandler.end - FileSendHandler.end;
758     }
759    
760     if (fc != 0)
761     {
762     c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
763     FileSendHandler.end - FileSendHandler.pos);
764     FileSendHandler.pos += c;
765     FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
766     SendVar->ByteCount = SendVar->ByteCount + c;
767     if (FileRetrySend)
768     {
769 zmatsuo 9056 if (SendVar->ByteCount != BCOld) {
770     //SendDlg->RefreshNum(SendVar);
771     SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount);
772     }
773 maya 6071 return;
774     }
775     }
776     FileDlgRefresh = SendVar->ByteCount;
777 zmatsuo 9056 //SendDlg->RefreshNum(SendVar);
778     SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount);
779 maya 6071 BCOld = SendVar->ByteCount;
780     if (fc != 0)
781     return;
782     } while (fc != 0);
783    
784     FileTransEnd(OpSendFile);
785     }
786    
787 zmatsuo 8858 void FileSend(void)
788 maya 3227 {
789     WORD c, fc;
790     LONG BCOld;
791 maya 5281 DWORD read_bytes;
792 maya 3227
793 maya 6115 if (cv.PortType == IdSerial && ts.FileSendHighSpeedMode &&
794 maya 6110 BinaryMode && !FileBracketMode && !cv.TelFlag &&
795 maya 6079 (ts.LocalEcho == 0) && (ts.Baud >= 115200)) {
796 maya 6071 return FileSendBinayBoost();
797     }
798    
799 maya 3227 if ((SendDlg==NULL) ||
800     ((cv.FilePause & OpSendFile) !=0))
801     return;
802    
803     BCOld = SendVar->ByteCount;
804    
805     if (FileRetrySend)
806     {
807     FileRetryEcho = (ts.LocalEcho>0);
808     c = FSOut1(FileByte);
809     FileRetrySend = (c==0);
810     if (FileRetrySend)
811     return;
812     }
813    
814     if (FileRetryEcho)
815     {
816     c = FSEcho1(FileByte);
817     FileRetryEcho = (c==0);
818     if (FileRetryEcho)
819     return;
820     }
821    
822     do {
823 doda 3904 if (FileBracketMode == FS_BRACKET_START) {
824     FileByte = BracketStartStr[FileBracketPtr++];
825     fc = 1;
826 maya 3227
827 doda 3904 if (FileBracketPtr >= sizeof(BracketStartStr) - 1) {
828     FileBracketMode = FS_BRACKET_END;
829     FileBracketPtr = 0;
830     BinaryMode = ts.TransBin;
831     }
832     }
833     else if (! FileReadEOF) {
834 zmatsuo 7930 ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
835 maya 5281 fc = LOWORD(read_bytes);
836 maya 3227 SendVar->ByteCount = SendVar->ByteCount + fc;
837 doda 3904
838     if (FileCRSend && (fc==1) && (FileByte==0x0A)) {
839 zmatsuo 7930 ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
840 maya 5281 fc = LOWORD(read_bytes);
841 doda 3904 SendVar->ByteCount = SendVar->ByteCount + fc;
842     }
843 maya 3227 }
844 doda 3904 else {
845     fc = 0;
846     }
847 maya 3227
848 doda 3904 if (fc == 0 && FileBracketMode == FS_BRACKET_END) {
849     FileReadEOF = TRUE;
850     FileByte = BracketEndStr[FileBracketPtr++];
851     fc = 1;
852     BinaryMode = TRUE;
853    
854     if (FileBracketPtr >= sizeof(BracketEndStr) - 1) {
855     FileBracketMode = FS_BRACKET_NONE;
856     FileBracketPtr = 0;
857     }
858     }
859    
860    
861 maya 3227 if (fc!=0)
862     {
863     c = FSOut1(FileByte);
864     FileCRSend = (ts.TransBin==0) && (FileByte==0x0D);
865     FileRetrySend = (c==0);
866     if (FileRetrySend)
867     {
868 zmatsuo 9056 if (SendVar->ByteCount != BCOld) {
869     //SendDlg->RefreshNum(SendVar);
870     SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount);
871     }
872 maya 3227 return;
873     }
874     if (ts.LocalEcho>0)
875     {
876     c = FSEcho1(FileByte);
877     FileRetryEcho = (c==0);
878     if (FileRetryEcho)
879     return;
880     }
881     }
882 doda 3904 if ((fc==0) || ((SendVar->ByteCount % 100 == 0) && (FileBracketPtr == 0))) {
883 zmatsuo 9056 //SendDlg->RefreshNum(SendVar);
884     SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount);
885 maya 3227 BCOld = SendVar->ByteCount;
886     if (fc!=0)
887     return;
888     }
889     } while (fc!=0);
890    
891     FileTransEnd(OpSendFile);
892     }
893    
894 zmatsuo 9052 #if 0
895 zmatsuo 8857 static BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)
896 maya 3227 {
897     int vsize;
898     PProtoDlg pd;
899    
900     ProtoId = IdProto;
901    
902     switch (ProtoId) {
903     case PROTO_KMT:
904     vsize = sizeof(TKmtVar);
905     break;
906     case PROTO_XM:
907     vsize = sizeof(TXVar);
908     break;
909     case PROTO_YM:
910     vsize = sizeof(TYVar);
911     break;
912     case PROTO_ZM:
913     vsize = sizeof(TZVar);
914     break;
915     case PROTO_BP:
916     vsize = sizeof(TBPVar);
917     break;
918     case PROTO_QV:
919     vsize = sizeof(TQVVar);
920     break;
921 zmatsuo 8852 default:
922     vsize = 0;
923     assert(FALSE);
924     break;
925 maya 3227 }
926     ProtoVar = (PCHAR)malloc(vsize);
927     if (ProtoVar==NULL)
928     return FALSE;
929    
930     switch (ProtoId) {
931     case PROTO_KMT:
932     ((PKmtVar)ProtoVar)->KmtMode = Mode;
933     break;
934     case PROTO_XM:
935     ((PXVar)ProtoVar)->XMode = Mode;
936     ((PXVar)ProtoVar)->XOpt = Opt1;
937     ((PXVar)ProtoVar)->TextFlag = 1 - (Opt2 & 1);
938     break;
939 doda 6435 case PROTO_YM:
940 maya 3227 ((PYVar)ProtoVar)->YMode = Mode;
941 yutakapon 3819 ((PYVar)ProtoVar)->YOpt = Opt1;
942 maya 3227 break;
943     case PROTO_ZM:
944     ((PZVar)ProtoVar)->BinFlag = (Opt1 & 1) != 0;
945     ((PZVar)ProtoVar)->ZMode = Mode;
946     break;
947     case PROTO_BP:
948     ((PBPVar)ProtoVar)->BPMode = Mode;
949     break;
950     case PROTO_QV:
951     ((PQVVar)ProtoVar)->QVMode = Mode;
952     break;
953     }
954    
955     pd = new CProtoDlg();
956     if (pd==NULL)
957     {
958     free(ProtoVar);
959     ProtoVar = NULL;
960     return FALSE;
961     }
962 zmatsuo 8947 CProtoDlgInfo info;
963     info.UILanguageFile = ts.UILanguageFile;
964     info.HMainWin = fv->HMainWin;
965     pd->Create(hInst, HVTWin, &info);
966     fv->HWin = pd->m_hWnd;
967 maya 3227
968     (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
969    
970     PtDlg = pd;
971     return TRUE;
972     }
973    
974 zmatsuo 8858 static void CloseProtoDlg(void)
975 maya 3227 {
976     if (PtDlg!=NULL)
977     {
978     PtDlg->DestroyWindow();
979     PtDlg = NULL;
980    
981     ::KillTimer(FileVar->HMainWin,IdProtoTimer);
982     if ((ProtoId==PROTO_QV) &&
983     (((PQVVar)ProtoVar)->QVMode==IdQVSend))
984     CommTextOut(&cv,"\015",1);
985     if (FileVar->LogFlag)
986 zmatsuo 7290 CloseHandle(FileVar->LogFile);
987 maya 3227 FileVar->LogFile = 0;
988     if (ProtoVar!=NULL)
989     {
990     free(ProtoVar);
991     ProtoVar = NULL;
992     }
993     }
994     }
995    
996 zmatsuo 8858 static BOOL ProtoStart(void)
997 maya 3227 {
998     if (cv.ProtoFlag)
999     return FALSE;
1000     if (FSend)
1001     {
1002     FreeFileVar(&FileVar);
1003     return FALSE;
1004     }
1005    
1006     if (! LoadTTFILE())
1007     return FALSE;
1008     NewFileVar(&FileVar);
1009    
1010     if (FileVar==NULL)
1011     {
1012     FreeTTFILE();
1013     return FALSE;
1014     }
1015     cv.ProtoFlag = TRUE;
1016     return TRUE;
1017     }
1018    
1019 zmatsuo 8858 void ProtoEnd(void)
1020 maya 3227 {
1021     if (! cv.ProtoFlag)
1022     return;
1023     cv.ProtoFlag = FALSE;
1024    
1025     /* Enable transmit delay (serial port) */
1026     cv.DelayFlag = TRUE;
1027     TalkStatus = IdTalkKeyb;
1028    
1029     CloseProtoDlg();
1030    
1031     if ((FileVar!=NULL) && FileVar->Success)
1032     EndDdeCmnd(1);
1033     else
1034     EndDdeCmnd(0);
1035    
1036     FreeTTFILE();
1037     FreeFileVar(&FileVar);
1038     }
1039    
1040 zmatsuo 8857 /**
1041     * OnIdle()#teraterm.cpp�����R�[��������
1042     * cv.ProtoFlag �� 0 ���O������
1043     * @retval 0 continue
1044     * 1/2 ActiveWin(�O���[�o������)���l(IdVT=1/IdTek=2)
1045     * �� ������������������������
1046     */
1047 zmatsuo 8858 int ProtoDlgParse(void)
1048 maya 3227 {
1049     int P;
1050    
1051     P = ActiveWin;
1052     if (PtDlg==NULL)
1053     return P;
1054    
1055     if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))
1056     P = 0; /* continue */
1057     else {
1058     CommSend(&cv);
1059     ProtoEnd();
1060     }
1061     return P;
1062     }
1063    
1064 zmatsuo 8858 void ProtoDlgTimeOut(void)
1065 maya 3227 {
1066     if (PtDlg!=NULL)
1067     (*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);
1068     }
1069    
1070 zmatsuo 8858 void ProtoDlgCancel(void)
1071 maya 3227 {
1072     if ((PtDlg!=NULL) &&
1073     (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))
1074     ProtoEnd();
1075     }
1076    
1077     void KermitStart(int mode)
1078     {
1079     WORD w;
1080    
1081     if (! ProtoStart())
1082     return;
1083    
1084     switch (mode) {
1085     case IdKmtSend:
1086     FileVar->OpId = OpKmtSend;
1087     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1088     {
1089 maya 7951 char FileDirExpanded[MAX_PATH];
1090     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1091     if (!(*GetMultiFname)(FileVar, FileDirExpanded, GMF_KERMIT, &w) ||
1092 maya 3227 (FileVar->NumFname==0))
1093     {
1094     ProtoEnd();
1095     return;
1096     }
1097     }
1098     else
1099     (*SetFileVar)(FileVar);
1100     break;
1101     case IdKmtReceive:
1102     FileVar->OpId = OpKmtRcv;
1103     break;
1104     case IdKmtGet:
1105     FileVar->OpId = OpKmtSend;
1106     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1107     {
1108 zmatsuo 9051 if (! (*GetGetFname)(FileVar->HMainWin,FileVar, &ts) ||
1109 maya 3227 (strlen(FileVar->FullName)==0))
1110     {
1111     ProtoEnd();
1112     return;
1113     }
1114     }
1115     else
1116     (*SetFileVar)(FileVar);
1117     break;
1118     case IdKmtFinish:
1119     FileVar->OpId = OpKmtFin;
1120     break;
1121     default:
1122     ProtoEnd();
1123     return;
1124     }
1125     TalkStatus = IdTalkQuiet;
1126    
1127     /* disable transmit delay (serial port) */
1128     cv.DelayFlag = FALSE;
1129    
1130     if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))
1131     ProtoEnd();
1132     }
1133    
1134 zmatsuo 8949 BOOL KermitStartSend(const char *filename)
1135     {
1136     if (FileVar !=NULL)
1137     return FALSE;
1138     if (!NewFileVar(&FileVar))
1139     return FALSE;
1140    
1141     FileVar->DirLen = 0;
1142     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
1143     FileVar->NumFname = 1;
1144     FileVar->NoMsg = TRUE;
1145     KermitStart(IdKmtSend);
1146    
1147     return TRUE;
1148     }
1149    
1150     BOOL KermitGet(const char *filename)
1151     {
1152     if (FileVar !=NULL)
1153     return FALSE;
1154     if (!NewFileVar(&FileVar))
1155     return FALSE;
1156    
1157     FileVar->DirLen = 0;
1158     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
1159     FileVar->NumFname = 1;
1160     FileVar->NoMsg = TRUE;
1161     KermitStart(IdKmtGet);
1162    
1163     return TRUE;
1164     }
1165    
1166     BOOL KermitStartRecive(void)
1167     {
1168     if (FileVar !=NULL)
1169     return FALSE;
1170     if (!NewFileVar(&FileVar))
1171     return FALSE;
1172    
1173     FileVar->NoMsg = TRUE;
1174     KermitStart(IdKmtReceive);
1175    
1176     return TRUE;
1177     }
1178    
1179     BOOL KermitFinish(void)
1180     {
1181     if (FileVar !=NULL)
1182     return FALSE;
1183     if (!NewFileVar(&FileVar))
1184     return FALSE;
1185    
1186     FileVar->NoMsg = TRUE;
1187     KermitStart(IdKmtFinish);
1188    
1189     return TRUE;
1190     }
1191    
1192 maya 3227 void XMODEMStart(int mode)
1193     {
1194     LONG Option;
1195 doda 6328 int tmp;
1196 maya 3227
1197     if (! ProtoStart())
1198     return;
1199    
1200     if (mode==IdXReceive)
1201     FileVar->OpId = OpXRcv;
1202     else
1203     FileVar->OpId = OpXSend;
1204    
1205     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1206     {
1207 maya 7951 char FileDirExpanded[MAX_PATH];
1208     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1209 maya 3227 Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
1210     if (! (*GetXFname)(FileVar->HMainWin,
1211 maya 7951 mode==IdXReceive,&Option,FileVar,FileDirExpanded))
1212 maya 3227 {
1213     ProtoEnd();
1214     return;
1215     }
1216 doda 6328 tmp = HIWORD(Option);
1217     if (mode == IdXReceive) {
1218     if (IsXoptCRC(tmp)) {
1219     if (IsXopt1k(ts.XmodemOpt)) {
1220     ts.XmodemOpt = Xopt1kCRC;
1221     }
1222     else {
1223     ts.XmodemOpt = XoptCRC;
1224     }
1225     }
1226     else {
1227     if (IsXopt1k(ts.XmodemOpt)) {
1228     ts.XmodemOpt = Xopt1kCksum;
1229     }
1230     else {
1231     ts.XmodemOpt = XoptCheck;
1232     }
1233     }
1234     ts.XmodemBin = LOWORD(Option);
1235     }
1236     else {
1237     if (IsXopt1k(tmp)) {
1238     if (IsXoptCRC(ts.XmodemOpt)) {
1239     ts.XmodemOpt = Xopt1kCRC;
1240     }
1241     else {
1242     ts.XmodemOpt = Xopt1kCksum;
1243     }
1244     }
1245     else {
1246     if (IsXoptCRC(ts.XmodemOpt)) {
1247     ts.XmodemOpt = XoptCRC;
1248     }
1249     else {
1250     ts.XmodemOpt = XoptCheck;
1251     }
1252     }
1253     }
1254 maya 3227 }
1255     else
1256     (*SetFileVar)(FileVar);
1257    
1258     if (mode==IdXReceive)
1259     FileVar->FileHandle = _lcreat(FileVar->FullName,0);
1260     else
1261     FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);
1262    
1263 zmatsuo 7290 FileVar->FileOpen = FileVar->FileHandle != INVALID_HANDLE_VALUE;
1264 maya 3227 if (! FileVar->FileOpen)
1265     {
1266     ProtoEnd();
1267     return;
1268     }
1269     TalkStatus = IdTalkQuiet;
1270    
1271     /* disable transmit delay (serial port) */
1272     cv.DelayFlag = FALSE;
1273    
1274     if (! OpenProtoDlg(FileVar,PROTO_XM,mode,
1275     ts.XmodemOpt,ts.XmodemBin))
1276     ProtoEnd();
1277     }
1278    
1279 zmatsuo 8949 BOOL XMODEMStartReceive(const char *fiename, WORD ParamBinaryFlag, WORD ParamXmodemOpt)
1280     {
1281     if (FileVar !=NULL)
1282     return FALSE;
1283     if (!NewFileVar(&FileVar))
1284     return FALSE;
1285    
1286     FileVar->DirLen = 0;
1287     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
1288     if (IsXopt1k(ts.XmodemOpt)) {
1289     if (IsXoptCRC(ParamXmodemOpt)) {
1290     // CRC
1291     ts.XmodemOpt = Xopt1kCRC;
1292     }
1293     else { // Checksum
1294     ts.XmodemOpt = Xopt1kCksum;
1295     }
1296     }
1297     else {
1298     if (IsXoptCRC(ParamXmodemOpt)) {
1299     ts.XmodemOpt = XoptCRC;
1300     }
1301     else {
1302     ts.XmodemOpt = XoptCheck;
1303     }
1304     }
1305     ts.XmodemBin = ParamBinaryFlag;
1306     FileVar->NoMsg = TRUE;
1307     XMODEMStart(IdXReceive);
1308    
1309     return TRUE;
1310     }
1311    
1312     BOOL XMODEMStartSend(const char *fiename, WORD ParamXmodemOpt)
1313     {
1314     if (FileVar !=NULL)
1315     return FALSE;
1316     if (!NewFileVar(&FileVar))
1317     return FALSE;
1318    
1319     FileVar->DirLen = 0;
1320     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName), fiename, _TRUNCATE);
1321     if (IsXoptCRC(ts.XmodemOpt)) {
1322     if (IsXopt1k(ParamXmodemOpt)) {
1323     ts.XmodemOpt = Xopt1kCRC;
1324     }
1325     else {
1326     ts.XmodemOpt = XoptCRC;
1327     }
1328     }
1329     else {
1330     if (IsXopt1k(ParamXmodemOpt)) {
1331     ts.XmodemOpt = Xopt1kCksum;
1332     }
1333     else {
1334     ts.XmodemOpt = XoptCheck;
1335     }
1336     }
1337     FileVar->NoMsg = TRUE;
1338     XMODEMStart(IdXSend);
1339    
1340     return TRUE;
1341     }
1342    
1343 maya 3227 void YMODEMStart(int mode)
1344     {
1345     WORD Opt;
1346    
1347     if (! ProtoStart())
1348     return;
1349    
1350     if (mode==IdYSend)
1351     {
1352 maya 7951 char FileDirExpanded[MAX_PATH];
1353     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1354    
1355 yutakapon 3819 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
1356     // TODO: "Yopt1K", "YoptG", "YoptSingle"�������������������AIDD_FOPT���g�������K�v�����B
1357     Opt = Yopt1K;
1358 maya 3227 FileVar->OpId = OpYSend;
1359     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1360     {
1361 maya 7951 if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Y,&Opt) ||
1362 maya 3227 (FileVar->NumFname==0))
1363     {
1364     ProtoEnd();
1365     return;
1366     }
1367 yutakapon 3819 //ts.XmodemBin = Opt;
1368 maya 3227 }
1369     else
1370     (*SetFileVar)(FileVar);
1371     }
1372 doda 6363 else {
1373 maya 3227 FileVar->OpId = OpYRcv;
1374 yutakapon 3820 // �t�@�C���]�������I�v�V������"Yopt1K"�����������B
1375     Opt = Yopt1K;
1376 yutakapon 3821 (*SetFileVar)(FileVar);
1377 yutakapon 3820 }
1378 maya 3227
1379     TalkStatus = IdTalkQuiet;
1380    
1381     /* disable transmit delay (serial port) */
1382     cv.DelayFlag = FALSE;
1383    
1384     if (! OpenProtoDlg(FileVar,PROTO_YM,mode,Opt,0))
1385     ProtoEnd();
1386     }
1387    
1388 zmatsuo 8949 BOOL YMODEMStartReceive()
1389     {
1390     if (FileVar != NULL) {
1391     return FALSE;
1392     }
1393     if (!NewFileVar(&FileVar)) {
1394     return FALSE;
1395     }
1396     FileVar->NoMsg = TRUE;
1397     YMODEMStart(IdYReceive);
1398     return TRUE;
1399     }
1400    
1401     BOOL YMODEMStartSend(const char *fiename)
1402     {
1403     if (FileVar != NULL) {
1404     return FALSE;
1405     }
1406     if (!NewFileVar(&FileVar)) {
1407     return FALSE;
1408     }
1409    
1410     FileVar->DirLen = 0;
1411     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
1412     FileVar->NumFname = 1;
1413     FileVar->NoMsg = TRUE;
1414     YMODEMStart(IdYSend);
1415     return TRUE;
1416     }
1417    
1418 maya 3227 void ZMODEMStart(int mode)
1419     {
1420     WORD Opt;
1421    
1422     if (! ProtoStart())
1423     return;
1424    
1425 doda 6361 if (mode == IdZSend || mode == IdZAutoS)
1426 maya 3227 {
1427     Opt = ts.XmodemBin;
1428     FileVar->OpId = OpZSend;
1429     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1430     {
1431 maya 7951 char FileDirExpanded[MAX_PATH];
1432     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1433     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Z,&Opt) ||
1434 maya 3227 (FileVar->NumFname==0))
1435     {
1436 doda 6364 if (mode == IdZAutoS) {
1437     CommRawOut(&cv, "\030\030\030\030\030\030\030\030\b\b\b\b\b\b\b\b\b\b", 18);
1438     }
1439 maya 3227 ProtoEnd();
1440     return;
1441     }
1442     ts.XmodemBin = Opt;
1443     }
1444     else
1445     (*SetFileVar)(FileVar);
1446     }
1447 doda 6361 else /* IdZReceive or IdZAutoR */
1448 maya 3227 FileVar->OpId = OpZRcv;
1449    
1450     TalkStatus = IdTalkQuiet;
1451    
1452     /* disable transmit delay (serial port) */
1453     cv.DelayFlag = FALSE;
1454    
1455     if (! OpenProtoDlg(FileVar,PROTO_ZM,mode,Opt,0))
1456     ProtoEnd();
1457     }
1458    
1459 zmatsuo 8949 BOOL ZMODEMStartReceive(void)
1460     {
1461     if (FileVar != NULL) {
1462     return FALSE;
1463     }
1464     if (!NewFileVar(&FileVar)) {
1465     return FALSE;
1466     }
1467    
1468     FileVar->NoMsg = TRUE;
1469     ZMODEMStart(IdZReceive);
1470    
1471     return TRUE;
1472     }
1473    
1474     BOOL ZMODEMStartSend(const char *fiename, WORD ParamBinaryFlag)
1475     {
1476     if (FileVar != NULL) {
1477     return FALSE;
1478     }
1479     if (!NewFileVar(&FileVar)) {
1480     return FALSE;
1481     }
1482    
1483     FileVar->DirLen = 0;
1484     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
1485     FileVar->NumFname = 1;
1486     ts.XmodemBin = ParamBinaryFlag;
1487     FileVar->NoMsg = TRUE;
1488    
1489     ZMODEMStart(IdZSend);
1490    
1491     return TRUE;
1492     }
1493    
1494 maya 3227 void BPStart(int mode)
1495     {
1496 doda 6946 LONG Option = 0;
1497 maya 3227
1498     if (! ProtoStart())
1499     return;
1500     if (mode==IdBPSend)
1501     {
1502     FileVar->OpId = OpBPSend;
1503     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1504     {
1505 maya 7951 char FileDirExpanded[MAX_PATH];
1506     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1507 maya 3227 FileVar->FullName[0] = 0;
1508 maya 7951 if (! (*GetTransFname)(FileVar, FileDirExpanded, GTF_BP, &Option))
1509 maya 3227 {
1510     ProtoEnd();
1511     return;
1512     }
1513     }
1514     else
1515     (*SetFileVar)(FileVar);
1516     }
1517     else /* IdBPReceive or IdBPAuto */
1518     FileVar->OpId = OpBPRcv;
1519    
1520     TalkStatus = IdTalkQuiet;
1521    
1522     /* disable transmit delay (serial port) */
1523     cv.DelayFlag = FALSE;
1524    
1525     if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))
1526     ProtoEnd();
1527     }
1528    
1529 zmatsuo 8949 BOOL BPSendStart(const char *filename)
1530     {
1531     if (FileVar != NULL) {
1532     return FALSE;
1533     }
1534     if (!NewFileVar(&FileVar)) {
1535     return FALSE;
1536     }
1537    
1538     FileVar->DirLen = 0;
1539     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName), filename, _TRUNCATE);
1540     FileVar->NumFname = 1;
1541     FileVar->NoMsg = TRUE;
1542     BPStart(IdBPSend);
1543    
1544     return TRUE;
1545     }
1546    
1547     BOOL BPStartReceive(void)
1548     {
1549     if (FileVar != NULL)
1550     return FALSE;
1551     if (!NewFileVar(&FileVar))
1552     return FALSE;
1553    
1554     FileVar->NoMsg = TRUE;
1555     BPStart(IdBPReceive);
1556    
1557     return TRUE;
1558     }
1559    
1560 maya 3227 void QVStart(int mode)
1561     {
1562     WORD W;
1563    
1564     if (! ProtoStart())
1565     return;
1566    
1567     if (mode==IdQVSend)
1568     {
1569     FileVar->OpId = OpQVSend;
1570     if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1571     {
1572 maya 7951 char FileDirExpanded[MAX_PATH];
1573     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
1574     if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_QV, &W) ||
1575 maya 3227 (FileVar->NumFname==0))
1576     {
1577     ProtoEnd();
1578     return;
1579     }
1580     }
1581     else
1582     (*SetFileVar)(FileVar);
1583     }
1584     else
1585     FileVar->OpId = OpQVRcv;
1586    
1587     TalkStatus = IdTalkQuiet;
1588    
1589     /* disable transmit delay (serial port) */
1590     cv.DelayFlag = FALSE;
1591    
1592     if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))
1593     ProtoEnd();
1594     }
1595 zmatsuo 8948
1596 zmatsuo 8949 BOOL QVStartReceive(void)
1597     {
1598     if (FileVar != NULL) {
1599     return FALSE;
1600     }
1601     if (!NewFileVar(&FileVar)) {
1602     return FALSE;
1603     }
1604 zmatsuo 8948
1605 zmatsuo 8949 FileVar->NoMsg = TRUE;
1606     QVStart(IdQVReceive);
1607    
1608     return TRUE;
1609     }
1610    
1611     BOOL QVStartSend(const char *filename)
1612     {
1613     if (FileVar != NULL) {
1614     return FALSE;
1615     }
1616     if (!NewFileVar(&FileVar)) {
1617     return FALSE;
1618     }
1619    
1620     FileVar->DirLen = 0;
1621     strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
1622     FileVar->NumFname = 1;
1623     FileVar->NoMsg = TRUE;
1624     QVStart(IdQVSend);
1625    
1626     return TRUE;
1627     }
1628 zmatsuo 9052 #endif
1629 zmatsuo 8949
1630 zmatsuo 8948 BOOL IsSendVarNULL()
1631     {
1632     return SendVar == NULL;
1633     }
1634    
1635 zmatsuo 9052 #if 0
1636 zmatsuo 8948 BOOL IsFileVarNULL()
1637     {
1638     return FileVar == NULL;
1639     }
1640 zmatsuo 9052 #endif

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