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

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

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