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 9065 - (hide annotations) (download) (as text)
Sun Dec 20 12:09:00 2020 UTC (3 years, 3 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 38622 byte(s)
ttftypes.h 内の定数を各ファイルに移動, 無効化部分を削除

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

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