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.25 - (hide annotations) (download) (as text)
Mon Apr 14 17:35:29 2008 UTC (15 years, 10 months ago) by maya
Branch: MAIN
CVS Tags: HEAD
Changes since 1.24: +0 -0 lines
File MIME type: text/x-c++src
FILE REMOVED
ファイル移動に伴う修正

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

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