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

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