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.12 - (show annotations) (download) (as text)
Fri May 25 09:56:05 2007 UTC (16 years, 10 months ago) by yutakapon
Branch: MAIN
Changes since 1.11: +42 -7 lines
File MIME type: text/x-c++src
タイムスタンプ付きログで1KBごとに不要な改行が入るバグを修正。

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

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