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.21 - (hide annotations) (download) (as text)
Tue Jan 29 17:43:33 2008 UTC (16 years, 2 months ago) by maya
Branch: MAIN
Changes since 1.20: +772 -724 lines
File MIME type: text/x-c++src
ログ転送ダイアログを表示しない機能を追加した。

- INI からの読み書きに未対応
- SW_HIDE してしまったらログを止めることができないので、なにか戻す手段が必要かもしれない

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

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