Develop and Download Open Source Software

Browse CVS Repository

Annotation of /ttssh2/teraterm/source/teraterm/filesys.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.13 - (hide annotations) (download) (as text)
Wed May 30 16:04:27 2007 UTC (16 years, 10 months ago) by maya
Branch: MAIN
Changes since 1.12: +26 -1 lines
File MIME type: text/x-c++src
標準のログ保存先を指定できるようにした。

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

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