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

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