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

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