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 9105 - (hide annotations) (download) (as text)
Sun Dec 20 12:16:38 2020 UTC (3 years, 3 months ago) by zmatsuo
File MIME type: text/x-c++src
File size: 15083 byte(s)
filesys.cpp で定義しているグローバル変数 FSend をファイル内変数へ変更

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

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