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.8 - (show annotations) (download) (as text)
Thu Jan 4 15:11:44 2007 UTC (17 years, 3 months ago) by maya
Branch: MAIN
CVS Tags: ConnectingTimeout_before, ConnectingTimeout_after
Changes since 1.7: +141 -5 lines
File MIME type: text/x-c++src
表示メッセージの読み込み対応

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

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