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 9070 - (hide annotations) (download) (as text)
Sun Dec 20 12:09:55 2020 UTC (3 years, 3 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 15162 byte(s)
ftdlg.cpp,h 無効部分削除、OpLog,OpSendFileを移動
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 "ttwinman.h"
43     #include "commlib.h"
44     #include "ttcommon.h"
45     #include "ttdde.h"
46     #include "ttlib.h"
47     #include "dlglib.h"
48 doda 3904 #include "vtterm.h"
49 zmatsuo 8852 #include "helpid.h"
50     #include "layer_for_unicode.h"
51 zmatsuo 8863 #include "codeconv.h"
52 yutakapon 5392
53 zmatsuo 8852 #include "filesys_log_res.h"
54 yutakapon 5162
55 zmatsuo 8866 #include "filesys.h"
56    
57 zmatsuo 9067 typedef struct {
58 zmatsuo 9068 HWND HMainWin;
59     HWND HWin;
60     char DlgCaption[40];
61 zmatsuo 9067
62 zmatsuo 9068 char *FullName;
63 zmatsuo 9067
64 zmatsuo 9068 HANDLE FileHandle;
65     LONG FileSize, ByteCount;
66 zmatsuo 9067
67 zmatsuo 9068 int ProgStat;
68 zmatsuo 9067
69 zmatsuo 9068 DWORD StartTime;
70 zmatsuo 9069 BOOL FilePause;
71 zmatsuo 9067 } TFileVar;
72     typedef TFileVar *PFileVar;
73    
74 doda 3904 #define FS_BRACKET_NONE 0
75     #define FS_BRACKET_START 1
76     #define FS_BRACKET_END 2
77    
78 zmatsuo 9057 static PFileVar SendVar = NULL;
79 maya 3227
80 doda 3904 static BOOL FileRetrySend, FileRetryEcho, FileCRSend, FileReadEOF, BinaryMode;
81 maya 3227 static BYTE FileByte;
82    
83 maya 6071 #define FILE_SEND_BUF_SIZE 8192
84     struct FileSendHandler {
85     CHAR buf[FILE_SEND_BUF_SIZE];
86     int pos;
87     int end;
88     };
89     static struct FileSendHandler FileSendHandler;
90     static int FileDlgRefresh;
91    
92 doda 3904 static int FileBracketMode = FS_BRACKET_NONE;
93     static int FileBracketPtr = 0;
94     static char BracketStartStr[] = "\033[200~";
95     static char BracketEndStr[] = "\033[201~";
96    
97 zmatsuo 9052 BOOL FSend = FALSE;
98 maya 3227
99     static PFileTransDlg SendDlg = NULL;
100    
101 zmatsuo 7526 static BOOL OpenFTDlg(PFileVar fv)
102 maya 3227 {
103     PFileTransDlg FTDlg;
104    
105     FTDlg = new CFileTransDlg();
106    
107 doda 4454 fv->StartTime = 0;
108     fv->ProgStat = 0;
109 zmatsuo 9069 fv->FilePause = FALSE;
110 doda 4454
111 maya 3227 if (FTDlg!=NULL)
112     {
113 zmatsuo 9070 CFileTransDlg::Info info;
114 zmatsuo 9056 info.UILanguageFile = ts.UILanguageFile;
115 zmatsuo 9070 info.OpId = CFileTransDlg::OpSendFile;
116 zmatsuo 9056 info.DlgCaption = ToWcharA(fv->DlgCaption);
117     info.FileName = NULL;
118     info.FullName = ToWcharA(fv->FullName);
119 zmatsuo 9067 info.HideDialog = FALSE;
120 zmatsuo 9056 info.HMainWin = HVTWin;
121     FTDlg->Create(hInst, &info);
122     FTDlg->RefreshNum(0, fv->FileSize, fv->ByteCount);
123     free(info.DlgCaption);
124     free(info.FullName);
125 maya 3227 }
126    
127 zmatsuo 8894 SendDlg = FTDlg; /* File send */
128 maya 3227
129 doda 6947 fv->StartTime = GetTickCount();
130 maya 3227
131     return (FTDlg!=NULL);
132     }
133    
134 zmatsuo 9067 #if 0
135 zmatsuo 8857 static void ShowFTDlg(WORD OpId)
136 maya 3227 {
137 zmatsuo 8894 if (SendDlg != NULL) {
138     SendDlg->ShowWindow(SW_SHOWNORMAL);
139     SetForegroundWindow(SendDlg->GetSafeHwnd());
140 maya 3227 }
141     }
142 zmatsuo 9067 #endif
143 maya 3227
144 zmatsuo 9068 static BOOL NewFileVar(PFileVar *pfv)
145 maya 3227 {
146 zmatsuo 9068 if ((*pfv) != NULL) {
147     return TRUE;
148 maya 3227 }
149    
150 zmatsuo 9068 PFileVar fv = (PFileVar)malloc(sizeof(TFileVar));
151     if (fv == NULL) {
152     return FALSE;
153     }
154     memset(fv, 0, sizeof(TFileVar));
155     fv->FileHandle = INVALID_HANDLE_VALUE;
156     fv->HMainWin = HVTWin;
157    
158     *pfv = fv;
159     return TRUE;
160 maya 3227 }
161    
162 zmatsuo 9068 static void FreeFileVar(PFileVar *pfv)
163 maya 3227 {
164 zmatsuo 9068 if ((*pfv)==NULL) {
165     return;
166 maya 3227 }
167 zmatsuo 9068
168     PFileVar fv = *pfv;
169     if (fv->FileHandle != INVALID_HANDLE_VALUE) {
170     CloseHandle(fv->FileHandle);
171     }
172     if (fv->FullName != NULL) {
173     free(fv->FullName);
174     }
175     free(fv);
176     *pfv = NULL;
177 maya 3227 }
178    
179 zmatsuo 9053 /* �_�C�A���O���������������� */
180     static void CenterCommonDialog(HWND hDlg)
181     {
182     /* hDlg���e���_�C�A���O���E�B���h�E�n���h�� */
183     HWND hWndDlgRoot = GetParent(hDlg);
184     CenterWindow(hWndDlgRoot, GetParent(hWndDlgRoot));
185     }
186    
187     static HFONT DlgFoptFont;
188     static UINT_PTR CALLBACK TransFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)
189     {
190     static const DlgTextInfo text_info[] = {
191     { IDC_FOPT, "DLG_FOPT" },
192     { IDC_FOPTBIN, "DLG_FOPT_BINARY" },
193     };
194     LPOPENFILENAME ofn;
195     LPWORD pw;
196     LPOFNOTIFY notify;
197     LOGFONT logfont;
198     HFONT font;
199     const char *UILanguageFile = ts.UILanguageFile;
200    
201     switch (Message) {
202     case WM_INITDIALOG:
203     ofn = (LPOPENFILENAME)lParam;
204     pw = (LPWORD)ofn->lCustData;
205     SetWindowLongPtr(Dialog, DWLP_USER, (LONG_PTR)pw);
206    
207     font = (HFONT)SendMessage(Dialog, WM_GETFONT, 0, 0);
208     GetObject(font, sizeof(LOGFONT), &logfont);
209     if (get_lang_font("DLG_TAHOMA_FONT", Dialog, &logfont, &DlgFoptFont, UILanguageFile)) {
210     SendDlgItemMessage(Dialog, IDC_FOPT, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
211     SendDlgItemMessage(Dialog, IDC_FOPTBIN, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
212     SendDlgItemMessage(Dialog, IDC_FOPTAPPEND, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
213     SendDlgItemMessage(Dialog, IDC_PLAINTEXT, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
214     SendDlgItemMessage(Dialog, IDC_TIMESTAMP, WM_SETFONT, (WPARAM)DlgFoptFont, MAKELPARAM(TRUE,0));
215     }
216     else {
217     DlgFoptFont = NULL;
218     }
219    
220     SetI18nDlgStrs("Tera Term", Dialog, text_info, _countof(text_info), UILanguageFile);
221    
222     SetRB(Dialog,*pw & 1,IDC_FOPTBIN,IDC_FOPTBIN);
223    
224     CenterCommonDialog(Dialog);
225    
226     return TRUE;
227     case WM_COMMAND: // for old style dialog
228     switch (LOWORD(wParam)) {
229     case IDOK:
230     pw = (LPWORD)GetWindowLongPtr(Dialog,DWLP_USER);
231     if (pw!=NULL)
232     GetRB(Dialog,pw,IDC_FOPTBIN,IDC_FOPTBIN);
233     if (DlgFoptFont != NULL) {
234     DeleteObject(DlgFoptFont);
235     }
236     break;
237     case IDCANCEL:
238     if (DlgFoptFont != NULL) {
239     DeleteObject(DlgFoptFont);
240     }
241     break;
242     }
243     break;
244     case WM_NOTIFY: // for Explorer-style dialog
245     notify = (LPOFNOTIFY)lParam;
246     switch (notify->hdr.code) {
247     case CDN_FILEOK:
248     pw = (LPWORD)GetWindowLongPtr(Dialog,DWLP_USER);
249     if (pw!=NULL)
250     GetRB(Dialog,pw,IDC_FOPTBIN,IDC_FOPTBIN);
251     if (DlgFoptFont != NULL) {
252     DeleteObject(DlgFoptFont);
253     }
254     break;
255     }
256     break;
257     }
258     return FALSE;
259     }
260    
261 zmatsuo 9068 static char *_GetTransFname(HWND hWnd, const char *caption, LPLONG Option)
262 zmatsuo 9053 {
263     WORD optw;
264 zmatsuo 9068 wchar_t TempDir[MAX_PATH];
265 zmatsuo 9053 char FileName[MAX_PATH];
266     const char *UILanguageFile = ts.UILanguageFile;
267    
268     /* save current dir */
269     _GetCurrentDirectoryW(_countof(TempDir), TempDir);
270    
271 zmatsuo 9068 char FileDirExpanded[MAX_PATH];
272     ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
273     PCHAR CurDir = FileDirExpanded;
274 zmatsuo 9053
275 zmatsuo 9068 char *FNFilter = GetCommonDialogFilterA(ts.FileSendFilter, UILanguageFile);
276 zmatsuo 9053
277 zmatsuo 9068 OPENFILENAME ofn = {};
278 zmatsuo 9053 ofn.lStructSize = get_OPENFILENAME_SIZE();
279 zmatsuo 9068 ofn.hwndOwner = hWnd;
280 zmatsuo 9053 ofn.lpstrFilter = FNFilter;
281     ofn.nFilterIndex = 1;
282 zmatsuo 9068 ofn.lpstrFile = FileName;
283     ofn.nMaxFile = sizeof(FileName);
284 zmatsuo 9053 ofn.lpstrInitialDir = CurDir;
285    
286 zmatsuo 9067 ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
287     ofn.Flags |= OFN_ENABLETEMPLATE | OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLESIZING;
288     ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FOPT);
289 zmatsuo 9053
290 zmatsuo 9068 ofn.lpfnHook = TransFnHook;
291 zmatsuo 9067 optw = (WORD)*Option;
292     ofn.lCustData = (LPARAM)&optw;
293 zmatsuo 9053
294     ofn.Flags |= OFN_SHOWHELP;
295    
296 zmatsuo 9068 ofn.lpstrTitle = caption;
297 zmatsuo 9053
298     ofn.hInstance = hInst;
299    
300 zmatsuo 9068 BOOL Ok = GetOpenFileName(&ofn);
301 zmatsuo 9053 free(FNFilter);
302    
303     if (Ok) {
304     *Option = (long)optw;
305     }
306     /* restore dir */
307     _SetCurrentDirectoryW(TempDir);
308    
309 zmatsuo 9068 char *ret = NULL;
310     if (Ok) {
311     ret = _strdup(FileName);
312     }
313     return ret;
314 zmatsuo 9053 }
315    
316 zmatsuo 8858 void FileSendStart(void)
317 maya 3227 {
318     if (! cv.Ready || FSend) return;
319     if (cv.ProtoFlag)
320     {
321     FreeFileVar(&SendVar);
322     return;
323     }
324    
325 zmatsuo 9068 if (SendVar == NULL) {
326     if (! NewFileVar(&SendVar)) {
327     return;
328     }
329 maya 3227 }
330    
331     FSend = TRUE;
332 zmatsuo 9068 PFileVar fv = SendVar;
333 maya 3227
334 zmatsuo 9068 char uimsg[MAX_UIMSG];
335     const char *UILanguageFile = ts.UILanguageFile;
336     strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE);
337     get_lang_msg("FILEDLG_TRANS_TITLE_SENDFILE", uimsg, sizeof(uimsg), TitSendFile, UILanguageFile);
338     strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
339    
340     if (SendVar->FullName == NULL) {
341     // �t�@�C������������������������
342 zmatsuo 9067 LONG Option = 0;
343 doda 6946 if (ts.TransBin)
344     Option |= LOGDLG_BINARY;
345 zmatsuo 9068 char *filename = _GetTransFname(fv->HMainWin, fv->DlgCaption, &Option);
346     if (filename == NULL) {
347 zmatsuo 9067 FileSendEnd();
348 maya 3227 return;
349     }
350 zmatsuo 9068 SendVar->FullName = filename;
351     free(filename);
352 doda 6946 ts.TransBin = CheckFlag(Option, LOGDLG_BINARY);
353 maya 3227 }
354    
355 zmatsuo 7290 SendVar->FileHandle = CreateFile(SendVar->FullName, GENERIC_READ, FILE_SHARE_READ, NULL,
356     OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
357 zmatsuo 9067 if (SendVar->FileHandle == INVALID_HANDLE_VALUE) {
358     FileSendEnd();
359 maya 3227 return;
360     }
361     SendVar->ByteCount = 0;
362     SendVar->FileSize = GetFSize(SendVar->FullName);
363    
364     TalkStatus = IdTalkFile;
365     FileRetrySend = FALSE;
366     FileRetryEcho = FALSE;
367     FileCRSend = FALSE;
368 doda 3904 FileReadEOF = FALSE;
369 maya 6071 FileSendHandler.pos = 0;
370     FileSendHandler.end = 0;
371     FileDlgRefresh = 0;
372 maya 3227
373 doda 3904 if (BracketedPasteMode()) {
374     FileBracketMode = FS_BRACKET_START;
375     FileBracketPtr = 0;
376     BinaryMode = TRUE;
377     }
378     else {
379     FileBracketMode = FS_BRACKET_NONE;
380     BinaryMode = ts.TransBin;
381     }
382    
383 maya 3227 if (! OpenFTDlg(SendVar))
384 zmatsuo 9067 FileSendEnd();
385 maya 3227 }
386    
387 zmatsuo 8949 BOOL FileSendStart2(const char *filename, int binary)
388     {
389     if (SendVar != NULL) {
390     return FALSE;
391     }
392     if (!NewFileVar(&SendVar)) {
393     return FALSE;
394     }
395    
396 zmatsuo 9068 SendVar->FullName = _strdup(filename);
397 zmatsuo 8949 ts.TransBin = binary;
398     FileSendStart();
399    
400     return TRUE;
401     }
402    
403 zmatsuo 9067 void FileSendEnd(void)
404 maya 3227 {
405 zmatsuo 9067 if (FSend) {
406 maya 3227 FSend = FALSE;
407     TalkStatus = IdTalkKeyb;
408     if (SendDlg!=NULL)
409     {
410     SendDlg->DestroyWindow();
411     SendDlg = NULL;
412     }
413     FreeFileVar(&SendVar);
414     }
415    
416     EndDdeCmnd(0);
417     }
418    
419 zmatsuo 9069 void FileSendPause(BOOL Pause)
420 zmatsuo 8857 {
421 zmatsuo 9069 PFileVar fv = SendVar;
422 zmatsuo 8857 if (Pause) {
423 zmatsuo 9069 fv->FilePause = TRUE;
424 zmatsuo 8857 }
425     else {
426 zmatsuo 9069 fv->FilePause = FALSE;
427 zmatsuo 8857 }
428     }
429    
430 zmatsuo 9067 static int FSOut1(BYTE b)
431 maya 3227 {
432 doda 3904 if (BinaryMode)
433 maya 3227 return CommBinaryOut(&cv,(PCHAR)&b,1);
434     else if ((b>=0x20) || (b==0x09) || (b==0x0A) || (b==0x0D))
435     return CommTextOut(&cv,(PCHAR)&b,1);
436     else
437     return 1;
438 doda 3861 }
439 maya 3227
440 zmatsuo 9067 static int FSEcho1(BYTE b)
441 maya 3227 {
442 doda 3904 if (BinaryMode)
443 maya 3227 return CommBinaryEcho(&cv,(PCHAR)&b,1);
444     else
445     return CommTextEcho(&cv,(PCHAR)&b,1);
446     }
447    
448 maya 6071 // �������������������������g��
449     // - BinaryMode == true
450     // - FileBracketMode == false
451     // - cv.TelFlag == false
452     // - ts.LocalEcho == 0
453 zmatsuo 8894 static void FileSendBinayBoost(void)
454 maya 6071 {
455     WORD c, fc;
456     LONG BCOld;
457     DWORD read_bytes;
458 zmatsuo 9069 PFileVar fv = SendVar;
459 maya 6071
460 zmatsuo 9069 if ((SendDlg == NULL) || (fv->FilePause == TRUE))
461 maya 6071 return;
462    
463     BCOld = SendVar->ByteCount;
464    
465     if (FileRetrySend)
466     {
467     c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
468     FileSendHandler.end - FileSendHandler.pos);
469     FileSendHandler.pos += c;
470     FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
471     if (FileRetrySend)
472     return;
473     }
474    
475     do {
476     if (FileSendHandler.pos == FileSendHandler.end) {
477 zmatsuo 7930 ReadFile(SendVar->FileHandle, &(FileSendHandler.buf[0]), sizeof(FileSendHandler.buf), &read_bytes, NULL);
478 maya 6071 fc = LOWORD(read_bytes);
479     FileSendHandler.pos = 0;
480     FileSendHandler.end = fc;
481     } else {
482     fc = FileSendHandler.end - FileSendHandler.end;
483     }
484    
485     if (fc != 0)
486     {
487     c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
488     FileSendHandler.end - FileSendHandler.pos);
489     FileSendHandler.pos += c;
490     FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
491     SendVar->ByteCount = SendVar->ByteCount + c;
492     if (FileRetrySend)
493     {
494 zmatsuo 9056 if (SendVar->ByteCount != BCOld) {
495     SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount);
496     }
497 maya 6071 return;
498     }
499     }
500     FileDlgRefresh = SendVar->ByteCount;
501 zmatsuo 9056 SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount);
502 maya 6071 BCOld = SendVar->ByteCount;
503     if (fc != 0)
504     return;
505     } while (fc != 0);
506    
507 zmatsuo 9067 FileSendEnd();
508 maya 6071 }
509    
510 zmatsuo 8858 void FileSend(void)
511 maya 3227 {
512     WORD c, fc;
513     LONG BCOld;
514 maya 5281 DWORD read_bytes;
515 zmatsuo 9069 PFileVar fv = SendVar;
516 maya 3227
517 maya 6115 if (cv.PortType == IdSerial && ts.FileSendHighSpeedMode &&
518 maya 6110 BinaryMode && !FileBracketMode && !cv.TelFlag &&
519 maya 6079 (ts.LocalEcho == 0) && (ts.Baud >= 115200)) {
520 maya 6071 return FileSendBinayBoost();
521     }
522    
523 zmatsuo 9069 if ((SendDlg == NULL) || (fv->FilePause == TRUE))
524 maya 3227 return;
525    
526     BCOld = SendVar->ByteCount;
527    
528     if (FileRetrySend)
529     {
530     FileRetryEcho = (ts.LocalEcho>0);
531     c = FSOut1(FileByte);
532     FileRetrySend = (c==0);
533     if (FileRetrySend)
534     return;
535     }
536    
537     if (FileRetryEcho)
538     {
539     c = FSEcho1(FileByte);
540     FileRetryEcho = (c==0);
541     if (FileRetryEcho)
542     return;
543     }
544    
545     do {
546 doda 3904 if (FileBracketMode == FS_BRACKET_START) {
547     FileByte = BracketStartStr[FileBracketPtr++];
548     fc = 1;
549 maya 3227
550 doda 3904 if (FileBracketPtr >= sizeof(BracketStartStr) - 1) {
551     FileBracketMode = FS_BRACKET_END;
552     FileBracketPtr = 0;
553     BinaryMode = ts.TransBin;
554     }
555     }
556     else if (! FileReadEOF) {
557 zmatsuo 7930 ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
558 maya 5281 fc = LOWORD(read_bytes);
559 maya 3227 SendVar->ByteCount = SendVar->ByteCount + fc;
560 doda 3904
561     if (FileCRSend && (fc==1) && (FileByte==0x0A)) {
562 zmatsuo 7930 ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
563 maya 5281 fc = LOWORD(read_bytes);
564 doda 3904 SendVar->ByteCount = SendVar->ByteCount + fc;
565     }
566 maya 3227 }
567 doda 3904 else {
568     fc = 0;
569     }
570 maya 3227
571 doda 3904 if (fc == 0 && FileBracketMode == FS_BRACKET_END) {
572     FileReadEOF = TRUE;
573     FileByte = BracketEndStr[FileBracketPtr++];
574     fc = 1;
575     BinaryMode = TRUE;
576    
577     if (FileBracketPtr >= sizeof(BracketEndStr) - 1) {
578     FileBracketMode = FS_BRACKET_NONE;
579     FileBracketPtr = 0;
580     }
581     }
582    
583    
584 maya 3227 if (fc!=0)
585     {
586     c = FSOut1(FileByte);
587     FileCRSend = (ts.TransBin==0) && (FileByte==0x0D);
588     FileRetrySend = (c==0);
589     if (FileRetrySend)
590     {
591 zmatsuo 9056 if (SendVar->ByteCount != BCOld) {
592     SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount);
593     }
594 maya 3227 return;
595     }
596     if (ts.LocalEcho>0)
597     {
598     c = FSEcho1(FileByte);
599     FileRetryEcho = (c==0);
600     if (FileRetryEcho)
601     return;
602     }
603     }
604 doda 3904 if ((fc==0) || ((SendVar->ByteCount % 100 == 0) && (FileBracketPtr == 0))) {
605 zmatsuo 9056 SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount);
606 maya 3227 BCOld = SendVar->ByteCount;
607     if (fc!=0)
608     return;
609     }
610     } while (fc!=0);
611    
612 zmatsuo 9067 FileSendEnd();
613 maya 3227 }
614    
615 zmatsuo 8948 BOOL IsSendVarNULL()
616     {
617     return SendVar == NULL;
618     }

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