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

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