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 9053 - (hide annotations) (download) (as text)
Sun Dec 20 12:06:16 2020 UTC (3 years, 3 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 37605 byte(s)
ttpfile.dll のダイアログを使用しないようにした

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

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