Develop and Download Open Source Software

Browse CVS Repository

Contents of /ttssh2/teraterm/source/teraterm/filesys.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.9 - (show annotations) (download) (as text)
Sun Jan 21 16:18:35 2007 UTC (17 years, 2 months ago) by maya
Branch: MAIN
CVS Tags: R452_RTM, R450_RTM, R451_RTM
Changes since 1.8: +3 -65 lines
File MIME type: text/x-c++src
表示メッセージの読み込み対応

1 /* Tera Term
2 Copyright(C) 1994-1998 T. Teranishi
3 All rights reserved. */
4
5 /* TERATERM.EXE, file transfer routines */
6 #include "stdafx.h"
7 #include "teraterm.h"
8 #include "tttypes.h"
9 #include "ttftypes.h"
10 #ifdef TERATERM32
11 #include "tt_res.h"
12 #else
13 #include "tt_res16.h"
14 #endif
15 #include "ftdlg.h"
16 #include "protodlg.h"
17 #include "ttwinman.h"
18 #include "commlib.h"
19 #include "ttcommon.h"
20 #include "ttdde.h"
21 #include "ttlib.h"
22 #include "helpid.h"
23
24 #include "filesys.h"
25
26 PFileVar LogVar = NULL;
27 PFileVar SendVar = NULL;
28 PFileVar FileVar = NULL;
29 static PCHAR ProtoVar = NULL;
30 static int ProtoId;
31
32 static BYTE LogLast = 0;
33 BOOL FileLog = FALSE;
34 BOOL BinLog = FALSE;
35 BOOL DDELog = FALSE;
36 static BOOL FileRetrySend, FileRetryEcho, FileCRSend;
37 static BYTE FileByte;
38
39 static BOOL FSend = FALSE;
40
41 static HMODULE HTTFILE = NULL;
42 static int TTFILECount = 0;
43
44 PGetSetupFname GetSetupFname;
45 PGetTransFname GetTransFname;
46 PGetMultiFname GetMultiFname;
47 PGetGetFname GetGetFname;
48 PSetFileVar SetFileVar;
49 PGetXFname GetXFname;
50 PProtoInit ProtoInit;
51 PProtoParse ProtoParse;
52 PProtoTimeOutProc ProtoTimeOutProc;
53 PProtoCancel ProtoCancel;
54
55 #define IdGetSetupFname 1
56 #define IdGetTransFname 2
57 #define IdGetMultiFname 3
58 #define IdGetGetFname 4
59 #define IdSetFileVar 5
60 #define IdGetXFname 6
61
62 #define IdProtoInit 7
63 #define IdProtoParse 8
64 #define IdProtoTimeOutProc 9
65 #define IdProtoCancel 10
66
67 BOOL LoadTTFILE()
68 {
69 BOOL Err;
70
71 #ifdef TERATERM32
72 if (HTTFILE != NULL)
73 #else
74 if (HTTFILE >= HINSTANCE_ERROR)
75 #endif
76 {
77 TTFILECount++;
78 return TRUE;
79 }
80 else
81 TTFILECount = 0;
82
83 #ifdef TERATERM32
84 HTTFILE = LoadLibrary("TTPFILE.DLL");
85 if (HTTFILE == NULL) return FALSE;
86 #else
87 HTTFILE = LoadLibrary("TTFILE.DLL");
88 if (HTTFILE < HINSTANCE_ERROR) return FALSE;
89 #endif
90
91 Err = FALSE;
92 GetSetupFname = (PGetSetupFname)GetProcAddress(HTTFILE,
93 MAKEINTRESOURCE(IdGetSetupFname));
94 if (GetSetupFname==NULL) Err = TRUE;
95
96 GetTransFname = (PGetTransFname)GetProcAddress(HTTFILE,
97 MAKEINTRESOURCE(IdGetTransFname));
98 if (GetTransFname==NULL) Err = TRUE;
99
100 GetMultiFname = (PGetMultiFname)GetProcAddress(HTTFILE,
101 MAKEINTRESOURCE(IdGetMultiFname));
102 if (GetMultiFname==NULL) Err = TRUE;
103
104 GetGetFname = (PGetGetFname)GetProcAddress(HTTFILE,
105 MAKEINTRESOURCE(IdGetGetFname));
106 if (GetGetFname==NULL) Err = TRUE;
107
108 SetFileVar = (PSetFileVar)GetProcAddress(HTTFILE,
109 MAKEINTRESOURCE(IdSetFileVar));
110 if (SetFileVar==NULL) Err = TRUE;
111
112 GetXFname = (PGetXFname)GetProcAddress(HTTFILE,
113 MAKEINTRESOURCE(IdGetXFname));
114 if (GetXFname==NULL) Err = TRUE;
115
116 ProtoInit = (PProtoInit)GetProcAddress(HTTFILE,
117 MAKEINTRESOURCE(IdProtoInit));
118 if (ProtoInit==NULL) Err = TRUE;
119
120 ProtoParse = (PProtoParse)GetProcAddress(HTTFILE,
121 MAKEINTRESOURCE(IdProtoParse));
122 if (ProtoParse==NULL) Err = TRUE;
123
124 ProtoTimeOutProc = (PProtoTimeOutProc)GetProcAddress(HTTFILE,
125 MAKEINTRESOURCE(IdProtoTimeOutProc));
126 if (ProtoTimeOutProc==NULL) Err = TRUE;
127
128 ProtoCancel = (PProtoCancel)GetProcAddress(HTTFILE,
129 MAKEINTRESOURCE(IdProtoCancel));
130 if (ProtoCancel==NULL) Err = TRUE;
131
132 if (Err)
133 {
134 FreeLibrary(HTTFILE);
135 HTTFILE = NULL;
136 return FALSE;
137 }
138 else {
139 TTFILECount = 1;
140 return TRUE;
141 }
142 }
143
144 BOOL FreeTTFILE()
145 {
146 if (TTFILECount==0) return FALSE;
147 TTFILECount--;
148 if (TTFILECount>0) return TRUE;
149 #ifdef TERATERM32
150 if (HTTFILE!=NULL)
151 #else
152 if (HTTFILE>=HINSTANCE_ERROR)
153 #endif
154 {
155 FreeLibrary(HTTFILE);
156 HTTFILE = NULL;
157 }
158 return TRUE;
159 }
160
161 static PFileTransDlg FLogDlg = NULL;
162 static PFileTransDlg SendDlg = NULL;
163 static PProtoDlg PtDlg = NULL;
164
165 BOOL OpenFTDlg(PFileVar fv)
166 {
167 PFileTransDlg FTDlg;
168 #ifdef I18N
169 HWND HFTDlg;
170 #endif
171
172 FTDlg = new CFileTransDlg();
173
174 if (FTDlg!=NULL)
175 {
176 #ifdef I18N
177 FTDlg->Create(fv, &cv, &ts);
178 #else
179 FTDlg->Create(fv, &cv);
180 #endif
181 FTDlg->RefreshNum();
182 if (fv->OpId == OpLog)
183 FTDlg->ShowWindow(SW_MINIMIZE);
184 }
185
186 if (fv->OpId==OpLog)
187 FLogDlg = FTDlg; /* Log */
188 else
189 SendDlg = FTDlg; /* File send */
190
191 #ifdef I18N
192 HFTDlg=FTDlg->GetSafeHwnd();
193
194 GetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, ts.UIMsg, sizeof(ts.UIMsg));
195 get_lang_msg("DLG_FILETRANS_FILENAME", ts.UIMsg, ts.UILanguageFile);
196 SetDlgItemText(HFTDlg, IDC_TRANS_FILENAME, ts.UIMsg);
197 GetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, ts.UIMsg, sizeof(ts.UIMsg));
198 get_lang_msg("DLG_FILETRANS_FULLPATH", ts.UIMsg, ts.UILanguageFile);
199 SetDlgItemText(HFTDlg, IDC_FULLPATH_LABEL, ts.UIMsg);
200 GetDlgItemText(HFTDlg, IDC_TRANS_TRANS, ts.UIMsg, sizeof(ts.UIMsg));
201 get_lang_msg("DLG_FILETRANS_TRNAS", ts.UIMsg, ts.UILanguageFile);
202 SetDlgItemText(HFTDlg, IDC_TRANS_TRANS, ts.UIMsg);
203 GetDlgItemText(HFTDlg, IDCANCEL, ts.UIMsg, sizeof(ts.UIMsg));
204 get_lang_msg("BTN_CANCEL", ts.UIMsg, ts.UILanguageFile);
205 SetDlgItemText(HFTDlg, IDCANCEL, ts.UIMsg);
206 GetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, ts.UIMsg, sizeof(ts.UIMsg));
207 get_lang_msg("DLG_FILETRANS_PAUSE", ts.UIMsg, ts.UILanguageFile);
208 SetDlgItemText(HFTDlg, IDC_TRANSPAUSESTART, ts.UIMsg);
209 GetDlgItemText(HFTDlg, IDC_TRANSHELP, ts.UIMsg, sizeof(ts.UIMsg));
210 get_lang_msg("BTN_HELP", ts.UIMsg, ts.UILanguageFile);
211 SetDlgItemText(HFTDlg, IDC_TRANSHELP, ts.UIMsg);
212 #endif
213
214 return (FTDlg!=NULL);
215 }
216
217 BOOL NewFileVar(PFileVar *fv)
218 {
219 if ((*fv)==NULL)
220 {
221 *fv = (PFileVar)malloc(sizeof(TFileVar));
222 if ((*fv)!=NULL)
223 {
224 memset(*fv, 0, sizeof(TFileVar));
225 strcpy((*fv)->FullName,ts.FileDir);
226 AppendSlash((*fv)->FullName);
227 (*fv)->DirLen = strlen((*fv)->FullName);
228 (*fv)->FileOpen = FALSE;
229 (*fv)->OverWrite = ((ts.FTFlag & FT_RENAME) == 0);
230 (*fv)->HMainWin = HVTWin;
231 (*fv)->Success = FALSE;
232 (*fv)->NoMsg = FALSE;
233 }
234 }
235
236 return ((*fv)!=NULL);
237 }
238
239 void FreeFileVar(PFileVar *fv)
240 {
241 if ((*fv)!=NULL)
242 {
243 if ((*fv)->FileOpen) _lclose((*fv)->FileHandle);
244 if ((*fv)->FnStrMemHandle>0)
245 {
246 GlobalUnlock((*fv)->FnStrMemHandle);
247 GlobalFree((*fv)->FnStrMemHandle);
248 }
249 free(*fv);
250 *fv = NULL;
251 }
252 }
253
254 extern "C" {
255 void LogStart()
256 {
257 LONG Option;
258
259 if ((FileLog) || (BinLog)) return;
260
261 if (! LoadTTFILE()) return;
262 if (! NewFileVar(&LogVar))
263 {
264 FreeTTFILE();
265 return;
266 }
267 LogVar->OpId = OpLog;
268
269 if (strlen(&(LogVar->FullName[LogVar->DirLen]))==0)
270 {
271 // LOWORD
272 // 0x0001 = Binary
273 // HIWORD
274 // 0x0001 = Append
275 // 0x1000 = plain text (2005.2.20 yutaka)
276 // 0x2000 = timestamp (2006.7.23 maya)
277 // teraterm.ini?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スf?スt?スH?ス?ス?スg?スI?スv?スV?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB(2005.5.7 yutaka)
278 Option = MAKELONG(ts.TransBin,ts.Append |
279 (0x1000 * ts.LogTypePlainText) |
280 (0x2000 * ts.LogTimestamp));
281
282 // ?ス?ス?スO?ス?ス?スf?スt?スH?ス?ス?スg?スt?ス@?スC?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス (2006.8.28 maya)
283 strncat(LogVar->FullName, ts.LogDefaultName, sizeof(LogVar->FullName));
284 ParseStrftimeFileName(LogVar->FullName);
285
286 if (! (*GetTransFname)(LogVar, ts.FileDir, GTF_LOG, &Option))
287 {
288 FreeFileVar(&LogVar);
289 FreeTTFILE();
290 return;
291 }
292 ts.TransBin = LOWORD(Option);
293 ts.Append = HIWORD(Option);
294
295 if (ts.Append & 0x1000) {
296 ts.LogTypePlainText = 1;
297 } else {
298 ts.LogTypePlainText = 0;
299 }
300
301 if (ts.Append & 0x2000) {
302 ts.LogTimestamp = 1;
303 }
304 else {
305 ts.LogTimestamp = 0;
306 }
307
308 ts.Append &= 0x1; // 1bit?ス?ス?ス}?スX?スN?ス?ス?ス?ス
309
310 }
311 else
312 (*SetFileVar)(LogVar);
313
314 if (ts.TransBin > 0)
315 {
316 BinLog = TRUE;
317 FileLog = FALSE;
318 if (! CreateBinBuf())
319 {
320 FileTransEnd(OpLog);
321 return;
322 }
323 }
324 else {
325 BinLog = FALSE;
326 FileLog = TRUE;
327 if (! CreateLogBuf())
328 {
329 FileTransEnd(OpLog);
330 return;
331 }
332 }
333 cv.LStart = cv.LogPtr;
334 cv.LCount = 0;
335
336 HelpId = HlpFileLog;
337 if (ts.Append > 0)
338 {
339 LogVar->FileHandle = _lopen(LogVar->FullName,OF_WRITE);
340 if (LogVar->FileHandle>0)
341 _llseek(LogVar->FileHandle,0,2);
342 else
343 LogVar->FileHandle = _lcreat(LogVar->FullName,0);
344 }
345 else
346 LogVar->FileHandle = _lcreat(LogVar->FullName,0);
347 LogVar->FileOpen = (LogVar->FileHandle>0);
348 if (! LogVar->FileOpen)
349 {
350 FileTransEnd(OpLog);
351 return;
352 }
353 LogVar->ByteCount = 0;
354
355 if (! OpenFTDlg(LogVar))
356 FileTransEnd(OpLog);
357 }
358 }
359
360 void LogPut1(BYTE b)
361 {
362 LogLast = b;
363 cv.LogBuf[cv.LogPtr] = b;
364 cv.LogPtr++;
365 if (cv.LogPtr>=InBuffSize)
366 cv.LogPtr = cv.LogPtr-InBuffSize;
367
368 if (FileLog)
369 {
370 if (cv.LCount>=InBuffSize)
371 {
372 cv.LCount = InBuffSize;
373 cv.LStart = cv.LogPtr;
374 }
375 else cv.LCount++;
376 }
377 else
378 cv.LCount = 0;
379
380 if (DDELog)
381 {
382 if (cv.DCount>=InBuffSize)
383 {
384 cv.DCount = InBuffSize;
385 cv.DStart = cv.LogPtr;
386 }
387 else cv.DCount++;
388 }
389 else {
390 cv.DCount = 0;
391 // ?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス}?スN?ス?ス?ス?ス?スX?スg?ス[?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スC?ス?ス?スB
392 // ?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スx?ス}?スN?ス?ス?ス?ス?ス~?ス?ス?ス?ス?ス?ス?スA?スo?スb?スt?ス@?ス?ス?スC?ス?ス?スf?スb?スN?スX?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スA
393 // ?ス?ス?スx?ス}?スN?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スf?ス[?ス^?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
394 // ?ス}?スN?ス?ス?ス?ス?ス?ス?ス~?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スC?ス?ス?スf?スb?スN?スX?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
395 // (2006.12.26 yutaka)
396 cv.DStart = cv.LogPtr;
397 }
398 }
399
400 void Log1Byte(BYTE b)
401 {
402 if (b==0x0d)
403 {
404 LogLast = b;
405 return;
406 }
407 if ((b==0x0a) && (LogLast==0x0d))
408 LogPut1(0x0d);
409 LogPut1(b);
410 }
411
412 static BOOL Get1(PCHAR Buf, int *Start, int *Count, PBYTE b)
413 {
414 if (*Count<=0) return FALSE;
415 *b = Buf[*Start];
416 (*Start)++;
417 if (*Start>=InBuffSize)
418 *Start = *Start-InBuffSize;
419 (*Count)--;
420 return TRUE;
421 }
422
423
424
425 static CRITICAL_SECTION g_filelog_lock; /* ?ス?ス?スb?スN?スp?ス?ス?ス?ス */
426
427 void logfile_lock_initialize(void)
428 {
429 InitializeCriticalSection(&g_filelog_lock);
430 }
431
432 static inline void logfile_lock(void)
433 {
434 EnterCriticalSection(&g_filelog_lock);
435 }
436
437 static inline void logfile_unlock(void)
438 {
439 LeaveCriticalSection(&g_filelog_lock);
440 }
441
442 // ?スR?ス?ス?ス?ス?スg?ス?ス?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
443 void CommentLogToFile(char *buf, int size)
444 {
445 DWORD wrote;
446
447 if (LogVar == NULL || !LogVar->FileOpen) {
448 #ifdef I18N
449 char uimsg[MAX_UIMSG];
450 strcpy(uimsg, "ERROR");
451 get_lang_msg("MSG_ERROR", uimsg, ts.UILanguageFile);
452 strcpy(ts.UIMsg, "It is not opened by the log file yet.");
453 get_lang_msg("MSG_COMMENT_LOG_OPEN_ERROR", ts.UIMsg, ts.UILanguageFile);
454 ::MessageBox(NULL, ts.UIMsg, uimsg, MB_OK|MB_ICONEXCLAMATION);
455 #else
456 ::MessageBox(NULL, "It is not opened by the log file yet.", "ERROR", MB_OK|MB_ICONEXCLAMATION);
457 #endif
458 return;
459 }
460
461 logfile_lock();
462 WriteFile((HANDLE)LogVar->FileHandle, buf, size, &wrote, NULL);
463 WriteFile((HANDLE)LogVar->FileHandle, "\r\n", 2, &wrote, NULL); // ?ス?ス?スs
464 logfile_unlock();
465 }
466
467 void LogToFile()
468 {
469 PCHAR Buf;
470 int Start, Count;
471 BYTE b;
472
473 if (! LogVar->FileOpen) return;
474 if (FileLog)
475 {
476 Buf = cv.LogBuf;
477 Start = cv.LStart;
478 Count = cv.LCount;
479 }
480 else if (BinLog)
481 {
482 Buf = cv.BinBuf;
483 Start = cv.BStart;
484 Count = cv.BCount;
485 }
486 else
487 return;
488
489 if (Buf==NULL) return;
490 if (Count==0) return;
491
492 // ?ス?ス?スb?スN?ス?ス?ス?ス?ス?ス(2004.8.6 yutaka)
493 logfile_lock();
494
495 while (Get1(Buf,&Start,&Count,&b))
496 {
497 if (((cv.FilePause & OpLog)==0) && (! cv.ProtoFlag))
498 {
499 // ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スo?ス?ス(2006.7.23 maya)
500 // ?ス?ス?スt?スt?スH?ス[?ス}?スb?スg?ス?ス?ス?ス?ス{?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スE?スW?ス?ス?ス?ス?ス?ス?スX?ス?ス?ス?ス (2006.7.23 yutaka)
501 if (ts.LogTimestamp &&
502 (Start == 1 || Buf[Start-2] == 0x0a)) {
503 #if 0
504 SYSTEMTIME LocalTime;
505 GetLocalTime(&LocalTime);
506 char strtime[27];
507
508 // format time
509 sprintf(strtime, "[%04d/%02d/%02d %02d:%02d:%02d.%03d] ",
510 LocalTime.wYear, LocalTime.wMonth,LocalTime.wDay,
511 LocalTime.wHour, LocalTime.wMinute, LocalTime.wSecond,
512 LocalTime.wMilliseconds);
513 #else
514 time_t tick = time(NULL);
515 char *strtime = ctime(&tick);
516 #endif
517
518 // write to file
519 if (Start == 1 && ts.Append) {
520 _lwrite(LogVar->FileHandle,"\r\n",strlen("\r\n"));
521 }
522 _lwrite(LogVar->FileHandle,"[",1);
523 // ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スI?ス[?ス?ス \n ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
524 _lwrite(LogVar->FileHandle, strtime, strlen(strtime) - 1);
525 _lwrite(LogVar->FileHandle,"] ",2);
526 }
527
528 _lwrite(LogVar->FileHandle,(PCHAR)&b,1);
529 (LogVar->ByteCount)++;
530 }
531 }
532
533 logfile_unlock();
534
535 if (FileLog)
536 {
537 cv.LStart = Start;
538 cv.LCount = Count;
539 }
540 else {
541 cv.BStart = Start;
542 cv.BCount = Count;
543 }
544 if (((cv.FilePause & OpLog) !=0) || cv.ProtoFlag) return;
545 if (FLogDlg!=NULL)
546 FLogDlg->RefreshNum();
547 }
548
549 BOOL CreateLogBuf()
550 {
551 if (cv.HLogBuf==NULL)
552 {
553 cv.HLogBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);
554 cv.LogBuf = NULL;
555 cv.LogPtr = 0;
556 cv.LStart = 0;
557 cv.LCount = 0;
558 cv.DStart = 0;
559 cv.DCount = 0;
560 }
561 return (cv.HLogBuf!=NULL);
562 }
563
564 void FreeLogBuf()
565 {
566 if ((cv.HLogBuf==NULL) || FileLog || DDELog) return;
567 if (cv.LogBuf!=NULL) GlobalUnlock(cv.HLogBuf);
568 GlobalFree(cv.HLogBuf);
569 cv.HLogBuf = NULL;
570 cv.LogBuf = NULL;
571 cv.LogPtr = 0;
572 cv.LStart = 0;
573 cv.LCount = 0;
574 cv.DStart = 0;
575 cv.DCount = 0;
576 }
577
578 BOOL CreateBinBuf()
579 {
580 if (cv.HBinBuf==NULL)
581 {
582 cv.HBinBuf = GlobalAlloc(GMEM_MOVEABLE,InBuffSize);
583 cv.BinBuf = NULL;
584 cv.BinPtr = 0;
585 cv.BStart = 0;
586 cv.BCount = 0;
587 }
588 return (cv.HBinBuf!=NULL);
589 }
590
591 void FreeBinBuf()
592 {
593 if ((cv.HBinBuf==NULL) || BinLog) return;
594 if (cv.BinBuf!=NULL) GlobalUnlock(cv.HBinBuf);
595 GlobalFree(cv.HBinBuf);
596 cv.HBinBuf = NULL;
597 cv.BinBuf = NULL;
598 cv.BinPtr = 0;
599 cv.BStart = 0;
600 cv.BCount = 0;
601 }
602
603 extern "C" {
604 void FileSendStart()
605 {
606 LONG Option;
607
608 if (! cv.Ready || FSend) return;
609 if (cv.ProtoFlag)
610 {
611 FreeFileVar(&SendVar);
612 return;
613 }
614
615 if (! LoadTTFILE()) return;
616 if (! NewFileVar(&SendVar))
617 {
618 FreeTTFILE();
619 return;
620 }
621 SendVar->OpId = OpSendFile;
622
623 FSend = TRUE;
624
625 if (strlen(&(SendVar->FullName[SendVar->DirLen]))==0)
626 {
627 Option = MAKELONG(ts.TransBin,0);
628 SendVar->FullName[0] = 0;
629 if (! (*GetTransFname)(SendVar, ts.FileDir, GTF_SEND, &Option))
630 {
631 FileTransEnd(OpSendFile);
632 return;
633 }
634 ts.TransBin = LOWORD(Option);
635 }
636 else
637 (*SetFileVar)(SendVar);
638
639 SendVar->FileHandle = _lopen(SendVar->FullName,OF_READ);
640 SendVar->FileOpen = (SendVar->FileHandle>0);
641 if (! SendVar->FileOpen)
642 {
643 FileTransEnd(OpSendFile);
644 return;
645 }
646 SendVar->ByteCount = 0;
647
648 TalkStatus = IdTalkFile;
649 FileRetrySend = FALSE;
650 FileRetryEcho = FALSE;
651 FileCRSend = FALSE;
652
653 if (! OpenFTDlg(SendVar))
654 FileTransEnd(OpSendFile);
655 }
656 }
657
658 void FileTransEnd(WORD OpId)
659 /* OpId = 0: close Log and FileSend
660 OpLog: close Log
661 OpSendFile: close FileSend */
662 {
663 if (((OpId==0) || (OpId==OpLog)) &&
664 (FileLog || BinLog))
665 {
666 FileLog = FALSE;
667 BinLog = FALSE;
668 if (FLogDlg!=NULL)
669 {
670 FLogDlg->DestroyWindow();
671 FLogDlg = NULL;
672 }
673 FreeFileVar(&LogVar);
674 FreeLogBuf();
675 FreeBinBuf();
676 FreeTTFILE();
677 }
678
679 if (((OpId==0) || (OpId==OpSendFile)) &&
680 FSend)
681 {
682 FSend = FALSE;
683 TalkStatus = IdTalkKeyb;
684 if (SendDlg!=NULL)
685 {
686 SendDlg->DestroyWindow();
687 SendDlg = NULL;
688 }
689 FreeFileVar(&SendVar);
690 FreeTTFILE();
691 }
692
693 EndDdeCmnd(0);
694 }
695
696 // vtwin.cpp ?ス?ス?ス?ス?スR?ス[?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スAextern "C"?ス?ス?スt?ス?ス?ス?ス?スB(2004.11.3 yutaka)
697 extern "C" {
698 int FSOut1(BYTE b)
699 {
700 if (ts.TransBin > 0)
701 return CommBinaryOut(&cv,(PCHAR)&b,1);
702 else if ((b>=0x20) || (b==0x09) || (b==0x0A) || (b==0x0D))
703 return CommTextOut(&cv,(PCHAR)&b,1);
704 else
705 return 1;
706 }
707
708 int FSEcho1(BYTE b)
709 {
710 if (ts.TransBin > 0)
711 return CommBinaryEcho(&cv,(PCHAR)&b,1);
712 else
713 return CommTextEcho(&cv,(PCHAR)&b,1);
714 }
715 }
716
717 extern "C" {
718 void FileSend()
719 {
720 WORD c, fc;
721 LONG BCOld;
722
723 if ((SendDlg==NULL) ||
724 ((cv.FilePause & OpSendFile) !=0)) return;
725
726 BCOld = SendVar->ByteCount;
727
728 if (FileRetrySend)
729 {
730 FileRetryEcho = (ts.LocalEcho>0);
731 c = FSOut1(FileByte);
732 FileRetrySend = (c==0);
733 if (FileRetrySend) return;
734 }
735
736 if (FileRetryEcho)
737 {
738 c = FSEcho1(FileByte);
739 FileRetryEcho = (c==0);
740 if (FileRetryEcho) return;
741 }
742
743 do {
744 fc = _lread(SendVar->FileHandle,&FileByte,1);
745 SendVar->ByteCount = SendVar->ByteCount + fc;
746
747 if (FileCRSend && (fc==1) && (FileByte==0x0A))
748 {
749 fc = _lread(SendVar->FileHandle,&FileByte,1);
750 SendVar->ByteCount = SendVar->ByteCount + fc;
751 }
752
753 if (fc!=0)
754 {
755 c = FSOut1(FileByte);
756 FileCRSend = (ts.TransBin==0) && (FileByte==0x0D);
757 FileRetrySend = (c==0);
758 if (FileRetrySend)
759 {
760 if (SendVar->ByteCount != BCOld)
761 SendDlg->RefreshNum();
762 return;
763 }
764 if (ts.LocalEcho>0)
765 {
766 c = FSEcho1(FileByte);
767 FileRetryEcho = (c==0);
768 if (FileRetryEcho) return;
769 }
770 }
771 if ((fc==0) || (SendVar->ByteCount % 100 == 0))
772 {
773 SendDlg->RefreshNum();
774 BCOld = SendVar->ByteCount;
775 if (fc!=0) return;
776 }
777 } while (fc!=0);
778
779 FileTransEnd(OpSendFile);
780 }
781 }
782
783 extern "C" {
784 void FLogChangeButton(BOOL Pause)
785 {
786 if (FLogDlg!=NULL)
787 FLogDlg->ChangeButton(Pause);
788 }
789 }
790
791 extern "C" {
792 void FLogRefreshNum()
793 {
794 if (FLogDlg!=NULL)
795 FLogDlg->RefreshNum();
796 }
797 }
798
799 BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)
800 {
801 int vsize;
802 PProtoDlg pd;
803 #ifdef I18N
804 HWND Hpd;
805 #endif
806
807 ProtoId = IdProto;
808
809 switch (ProtoId) {
810 case PROTO_KMT:
811 vsize = sizeof(TKmtVar);
812 break;
813 case PROTO_XM:
814 vsize = sizeof(TXVar);
815 break;
816 case PROTO_ZM:
817 vsize = sizeof(TZVar);
818 break;
819 case PROTO_BP:
820 vsize = sizeof(TBPVar);
821 break;
822 case PROTO_QV:
823 vsize = sizeof(TQVVar);
824 break;
825 }
826 ProtoVar = (PCHAR)malloc(vsize);
827 if (ProtoVar==NULL) return FALSE;
828
829 switch (ProtoId) {
830 case PROTO_KMT:
831 ((PKmtVar)ProtoVar)->KmtMode = Mode;
832 break;
833 case PROTO_XM:
834 ((PXVar)ProtoVar)->XMode = Mode;
835 ((PXVar)ProtoVar)->XOpt = Opt1;
836 ((PXVar)ProtoVar)->TextFlag = 1 - (Opt2 & 1);
837 break;
838 case PROTO_ZM:
839 ((PZVar)ProtoVar)->BinFlag = (Opt1 & 1) != 0;
840 ((PZVar)ProtoVar)->ZMode = Mode;
841 break;
842 case PROTO_BP:
843 ((PBPVar)ProtoVar)->BPMode = Mode;
844 break;
845 case PROTO_QV:
846 ((PQVVar)ProtoVar)->QVMode = Mode;
847 break;
848 }
849
850 pd = new CProtoDlg();
851 if (pd==NULL)
852 {
853 free(ProtoVar);
854 ProtoVar = NULL;
855 return FALSE;
856 }
857 #ifdef I18N
858 pd->Create(fv,&ts);
859 #else
860 pd->Create(fv);
861 #endif
862
863 #ifdef I18N
864 Hpd=pd->GetSafeHwnd();
865
866 GetDlgItemText(Hpd, IDC_PROT_FILENAME, ts.UIMsg, sizeof(ts.UIMsg));
867 get_lang_msg("DLG_PROT_FIELNAME", ts.UIMsg, ts.UILanguageFile);
868 SetDlgItemText(Hpd, IDC_PROT_FILENAME, ts.UIMsg);
869 GetDlgItemText(Hpd, IDC_PROT_PROT, ts.UIMsg, sizeof(ts.UIMsg));
870 get_lang_msg("DLG_PROT_PROTO", ts.UIMsg, ts.UILanguageFile);
871 SetDlgItemText(Hpd, IDC_PROT_PROT, ts.UIMsg);
872 GetDlgItemText(Hpd, IDC_PROT_PACKET, ts.UIMsg, sizeof(ts.UIMsg));
873 get_lang_msg("DLG_PROT_PACKET", ts.UIMsg, ts.UILanguageFile);
874 SetDlgItemText(Hpd, IDC_PROT_PACKET, ts.UIMsg);
875 GetDlgItemText(Hpd, IDC_PROT_TRANS, ts.UIMsg, sizeof(ts.UIMsg));
876 get_lang_msg("DLG_PROT_TRANS", ts.UIMsg, ts.UILanguageFile);
877 SetDlgItemText(Hpd, IDC_PROT_TRANS, ts.UIMsg);
878 GetDlgItemText(Hpd, IDCANCEL, ts.UIMsg, sizeof(ts.UIMsg));
879 get_lang_msg("BTN_CANCEL", ts.UIMsg, ts.UILanguageFile);
880 SetDlgItemText(Hpd, IDCANCEL, ts.UIMsg);
881 #endif
882
883 (*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
884
885 PtDlg = pd;
886 return TRUE;
887 }
888
889 extern "C" {
890 void CloseProtoDlg()
891 {
892 if (PtDlg!=NULL)
893 {
894 PtDlg->DestroyWindow();
895 PtDlg = NULL;
896
897 ::KillTimer(FileVar->HMainWin,IdProtoTimer);
898 if ((ProtoId==PROTO_QV) &&
899 (((PQVVar)ProtoVar)->QVMode==IdQVSend))
900 CommTextOut(&cv,"\015",1);
901 if (FileVar->LogFlag)
902 _lclose(FileVar->LogFile);
903 FileVar->LogFile = 0;
904 if (ProtoVar!=NULL)
905 {
906 free(ProtoVar);
907 ProtoVar = NULL;
908 }
909 }
910 }
911 }
912
913 BOOL ProtoStart()
914 {
915 if (cv.ProtoFlag) return FALSE;
916 if (FSend)
917 {
918 FreeFileVar(&FileVar);
919 return FALSE;
920 }
921
922 if (! LoadTTFILE()) return FALSE;
923 NewFileVar(&FileVar);
924
925 if (FileVar==NULL)
926 {
927 FreeTTFILE();
928 return FALSE;
929 }
930 cv.ProtoFlag = TRUE;
931 return TRUE;
932 }
933
934 void ProtoEnd()
935 {
936 if (! cv.ProtoFlag) return;
937 cv.ProtoFlag = FALSE;
938
939 /* Enable transmit delay (serial port) */
940 cv.DelayFlag = TRUE;
941 TalkStatus = IdTalkKeyb;
942
943 CloseProtoDlg();
944
945 if ((FileVar!=NULL) && FileVar->Success)
946 EndDdeCmnd(1);
947 else
948 EndDdeCmnd(0);
949
950 FreeTTFILE();
951 FreeFileVar(&FileVar);
952 }
953
954 extern "C" {
955 int ProtoDlgParse()
956 {
957 int P;
958
959 P = ActiveWin;
960 if (PtDlg==NULL) return P;
961
962 if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))
963 P = 0; /* continue */
964 else {
965 CommSend(&cv);
966 ProtoEnd();
967 }
968 return P;
969 }
970 }
971
972 extern "C" {
973 void ProtoDlgTimeOut()
974 {
975 if (PtDlg!=NULL)
976 (*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);
977 }
978 }
979
980 extern "C" {
981 void ProtoDlgCancel()
982 {
983 if ((PtDlg!=NULL) &&
984 (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))
985 ProtoEnd();
986 }
987 }
988
989 extern "C" {
990 void KermitStart(int mode)
991 {
992 WORD w;
993
994 if (! ProtoStart()) return;
995
996 switch (mode) {
997 case IdKmtSend:
998 FileVar->OpId = OpKmtSend;
999 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1000 {
1001 if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_KERMIT,&w) ||
1002 (FileVar->NumFname==0))
1003 {
1004 ProtoEnd();
1005 return;
1006 }
1007 }
1008 else
1009 (*SetFileVar)(FileVar);
1010 break;
1011 case IdKmtReceive:
1012 FileVar->OpId = OpKmtRcv;
1013 break;
1014 case IdKmtGet:
1015 FileVar->OpId = OpKmtSend;
1016 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1017 {
1018 if (! (*GetGetFname)(FileVar->HMainWin,FileVar) ||
1019 (strlen(FileVar->FullName)==0))
1020 {
1021 ProtoEnd();
1022 return;
1023 }
1024 }
1025 else
1026 (*SetFileVar)(FileVar);
1027 break;
1028 case IdKmtFinish:
1029 FileVar->OpId = OpKmtFin;
1030 break;
1031 default:
1032 ProtoEnd();
1033 return;
1034 }
1035 TalkStatus = IdTalkQuiet;
1036
1037 /* disable transmit delay (serial port) */
1038 cv.DelayFlag = FALSE;
1039
1040 if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))
1041 ProtoEnd();
1042 }
1043 }
1044
1045 extern "C" {
1046 void XMODEMStart(int mode)
1047 {
1048 LONG Option;
1049
1050 if (! ProtoStart()) return;
1051
1052 if (mode==IdXReceive)
1053 FileVar->OpId = OpXRcv;
1054 else
1055 FileVar->OpId = OpXSend;
1056
1057 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1058 {
1059 Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
1060 if (! (*GetXFname)(FileVar->HMainWin,
1061 mode==IdXReceive,&Option,FileVar,ts.FileDir))
1062 {
1063 ProtoEnd();
1064 return;
1065 }
1066 ts.XmodemOpt = HIWORD(Option);
1067 ts.XmodemBin = LOWORD(Option);
1068 }
1069 else
1070 (*SetFileVar)(FileVar);
1071
1072 if (mode==IdXReceive)
1073 FileVar->FileHandle = _lcreat(FileVar->FullName,0);
1074 else
1075 FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);
1076
1077 FileVar->FileOpen = FileVar->FileHandle>0;
1078 if (! FileVar->FileOpen)
1079 {
1080 ProtoEnd();
1081 return;
1082 }
1083 TalkStatus = IdTalkQuiet;
1084
1085 /* disable transmit delay (serial port) */
1086 cv.DelayFlag = FALSE;
1087
1088 if (! OpenProtoDlg(FileVar,PROTO_XM,mode,
1089 ts.XmodemOpt,ts.XmodemBin))
1090 ProtoEnd();
1091 }
1092 }
1093
1094 extern "C" {
1095 void ZMODEMStart(int mode)
1096 {
1097 WORD Opt;
1098
1099 if (! ProtoStart()) return;
1100
1101 if (mode==IdZSend)
1102 {
1103 Opt = ts.XmodemBin;
1104 FileVar->OpId = OpZSend;
1105 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1106 {
1107 if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_Z,&Opt) ||
1108 (FileVar->NumFname==0))
1109 {
1110 ProtoEnd();
1111 return;
1112 }
1113 ts.XmodemBin = Opt;
1114 }
1115 else
1116 (*SetFileVar)(FileVar);
1117 }
1118 else /* IdZReceive or IdZAuto */
1119 FileVar->OpId = OpZRcv;
1120
1121 TalkStatus = IdTalkQuiet;
1122
1123 /* disable transmit delay (serial port) */
1124 cv.DelayFlag = FALSE;
1125
1126 if (! OpenProtoDlg(FileVar,PROTO_ZM,mode,Opt,0))
1127 ProtoEnd();
1128 }
1129 }
1130
1131 extern "C" {
1132 void BPStart(int mode)
1133 {
1134 LONG Option;
1135
1136 if (! ProtoStart()) return;
1137 if (mode==IdBPSend)
1138 {
1139 FileVar->OpId = OpBPSend;
1140 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1141 {
1142 FileVar->FullName[0] = 0;
1143 if (! (*GetTransFname)(FileVar, ts.FileDir, GTF_BP, &Option))
1144 {
1145 ProtoEnd();
1146 return;
1147 }
1148 }
1149 else
1150 (*SetFileVar)(FileVar);
1151 }
1152 else /* IdBPReceive or IdBPAuto */
1153 FileVar->OpId = OpBPRcv;
1154
1155 TalkStatus = IdTalkQuiet;
1156
1157 /* disable transmit delay (serial port) */
1158 cv.DelayFlag = FALSE;
1159
1160 if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))
1161 ProtoEnd();
1162 }
1163 }
1164
1165 extern "C" {
1166 void QVStart(int mode)
1167 {
1168 WORD W;
1169
1170 if (! ProtoStart()) return;
1171
1172 if (mode==IdQVSend)
1173 {
1174 FileVar->OpId = OpQVSend;
1175 if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
1176 {
1177 if (! (*GetMultiFname)(FileVar,ts.FileDir,GMF_QV, &W) ||
1178 (FileVar->NumFname==0))
1179 {
1180 ProtoEnd();
1181 return;
1182 }
1183 }
1184 else
1185 (*SetFileVar)(FileVar);
1186 }
1187 else
1188 FileVar->OpId = OpQVRcv;
1189
1190 TalkStatus = IdTalkQuiet;
1191
1192 /* disable transmit delay (serial port) */
1193 cv.DelayFlag = FALSE;
1194
1195 if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))
1196 ProtoEnd();
1197 }
1198 }
1199
1200 /*
1201 * $Log: filesys.cpp,v $
1202 * Revision 1.8 2007/01/04 15:11:44 maya
1203 * ?ス\?ス?ス?ス?ス?スb?スZ?ス[?スW?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1204 *
1205 * Revision 1.7 2006/12/25 16:13:54 yutakapon
1206 * ?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス}?スN?ス?ス?ス?ス?スX?スg?ス[?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スC?ス?ス?スB
1207 * ?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スx?ス}?スN?ス?ス?ス?ス?ス~?ス?ス?ス?ス?ス?ス?スA?スo?スb?スt?ス@?ス?ス?スC?ス?ス?スf?スb?スN?スX?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スA
1208 * ?ス?ス?スx?ス}?スN?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スf?ス[?ス^?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1209 * ?ス}?スN?ス?ス?ス?ス?ス?ス?ス~?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スC?ス?ス?スf?スb?スN?スX?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1210 *
1211 * Revision 1.6 2006/08/28 12:27:16 maya
1212 * ?スf?スt?スH?ス?ス?スg?ス?ス?ス?ス?スO?スt?ス@?スC?ス?ス?ス?ス?ス?ス?スw?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1213 * ?スG?スf?スB?スb?スg?スR?ス?ス?スg?ス?ス?ス[?ス?ス?ス?ス "Additional settings" ?ス_?スC?スA?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1214 * teraterm.ini ?スt?ス@?スC?ス?ス?ス?ス LogDefaultName ?スG?ス?ス?スg?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1215 * ?スt?ス@?スC?ス?ス?ス?ス?ス?ス strftime ?ス?ス?スt?スH?ス[?ス}?スb?スg?ス?ス?スg?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1216 *
1217 * Revision 1.5 2006/07/23 14:12:26 yutakakn
1218 * ?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スt?スt?スH?ス[?ス}?スb?スg?ス?ス?ス?ス?スE?スW?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スX?ス?ス?ス?ス?スB
1219 *
1220 * Revision 1.4 2006/07/22 16:15:54 maya
1221 * ?ス?ス?スO?スL?ス^?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス@?ス\?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1222 *
1223 * Revision 1.3 2005/05/07 09:49:24 yutakakn
1224 * teraterm.ini?ス?ス LogTypePlainText ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1225 *
1226 * Revision 1.2 2005/02/20 14:51:29 yutakakn
1227 * ?ス?ス?スO?スt?ス@?スC?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス"plain text"?ス?ス?ス?ス?ス?ス?スB?ス?ス?ス?ス?スI?スv?スV?ス?ス?ス?ス?ス?ス?スL?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スA?ス?ス?スO?スt?ス@?スC?ス?ス?ス?ス
1228 * ASCII?ス?ス?ス\?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1229 *
1230 * ?ス?ス?ス?ス?スA?ス?ス?ス?ス?ス?ス?ス?ス?スL?ス?ス?ス?ス?スN?ス^?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スB
1231 * ?ス@?スEBS
1232 * ?ス@?スEASCII(0x00-0x1f)?ス?ス?ス?ス?ス?ス?ス?ス?ス\?ス?ス?ス?ス?ス?ス?ス?ス
1233 *
1234 * ?ス?ス?ス?ス?ス?ス?スA?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スO?ス?ス?ス?ス?ス?ス?ス?ス?スB
1235 * ?ス@?スEHT
1236 * ?ス@?スECR
1237 * ?ス@?スELF
1238 *
1239 */

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