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.10 - (show annotations) (download) (as text)
Mon May 14 13:29:58 2007 UTC (16 years, 11 months ago) by maya
Branch: MAIN
Changes since 1.9: +47 -1 lines
File MIME type: text/x-c++src
ログファイル名中の &h を、接続中のホスト名に変換する機能を追加した。

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

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