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.23 - (hide annotations) (download) (as text)
Wed Feb 13 14:12:54 2008 UTC (16 years ago) by yutakapon
Branch: MAIN
CVS Tags: R458_RTM
Changes since 1.22: +6 -1 lines
File MIME type: text/x-c++src
showttコマンドに6, 7, 8パラメータを追加。
http://www.neocom.ca/forum/viewtopic.php?t=742

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

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