Revision: 9080 https://osdn.net/projects/ttssh2/scm/svn/commits/9080 Author: zmatsuo Date: 2020-12-20 21:11:41 +0900 (Sun, 20 Dec 2020) Log Message: ----------- XMODEM の API を XMODEMStartReceive(), XMODEMStartSend() に統一 - XMODEMStart()の使用をやめた Modified Paths: -------------- trunk/teraterm/teraterm/filesys.h trunk/teraterm/teraterm/filesys_proto.cpp trunk/teraterm/teraterm/vtwin.cpp trunk/teraterm/ttpfile/xmodem.c -------------- next part -------------- Modified: trunk/teraterm/teraterm/filesys.h =================================================================== --- trunk/teraterm/teraterm/filesys.h 2020-12-20 12:11:31 UTC (rev 9079) +++ trunk/teraterm/teraterm/filesys.h 2020-12-20 12:11:41 UTC (rev 9080) @@ -51,7 +51,6 @@ BOOL KermitGet(const char *filename); BOOL KermitStartRecive(void); BOOL KermitFinish(void); -void XMODEMStart(int mode); BOOL XMODEMStartReceive(const char *fiename, WORD ParamBinaryFlag, WORD ParamXmodemOpt); BOOL XMODEMStartSend(const char *fiename, WORD ParamXmodemOpt); void YMODEMStart(int mode); Modified: trunk/teraterm/teraterm/filesys_proto.cpp =================================================================== --- trunk/teraterm/teraterm/filesys_proto.cpp 2020-12-20 12:11:31 UTC (rev 9079) +++ trunk/teraterm/teraterm/filesys_proto.cpp 2020-12-20 12:11:41 UTC (rev 9080) @@ -99,7 +99,17 @@ static void _SetDlgProtoFileName(struct FileVarProto *fv, const char *text) { - SetDlgItemText(fv->HWin, IDC_PROTOFNAME, text); + // \x83t\x83@\x83C\x83\x8B\x96\xBC(\x8DŌ\xE3\x82̃p\x83X\x83Z\x83p\x83\x8C\x81[\x83^\x82\xA9\x82\xE7\x8C\xE3\x82\xEB\x82\xF0\x95\\x8E\xA6) + const char *s = text; + const char *p = strrchr(text, '\\'); + if (p == NULL) { + p = strrchr(text, '/'); + } + if (p != NULL) { + s = p + 1; + } + assert(fv->HWin != NULL); + SetDlgItemText(fv->HWin, IDC_PROTOFNAME, s); } static void _InitDlgProgress(struct FileVarProto *fv, int *CurProgStat) @@ -109,6 +119,9 @@ static BOOL NewFileVar_(PFileVarProto *pfv) { + if (*pfv != NULL) { + return TRUE; + } TFileVarProto *fv = (TFileVarProto *)malloc(sizeof(TFileVarProto)); if (fv == NULL) return FALSE; @@ -528,6 +541,15 @@ return ptrs; } +char **MakeStrArrayFromStr(const char *str) +{ + const char *strs[2]; + strs[0] = str; + strs[1] = NULL; + char **ret = MakeStrArrayFromArray((char **)strs); + return ret; +} + char **MakeFileArrayMultiSelect(const char *lpstrFile) { // \x90\x94\x82𐔂\xA6\x82\xE9 @@ -545,6 +567,11 @@ file_count++; } + if (file_count == 0) { + // 1\x82\xBE\x82\xAF\x91I\x91\xF0\x82\xB3\x82\xEA\x82Ă\xA2\x82\xBD + return MakeStrArrayFromStr(lpstrFile); + } + // \x83p\x83X + \x83t\x83@\x83C\x83\x8B\x96\xBC \x88ꗗ\x8D쐬 size_t ptr_len = sizeof(char *) * (file_count + 1); char **filenames = (char **)malloc(ptr_len); @@ -568,15 +595,6 @@ return ret; } -char **MakeFileArrayFromStr(char *str) -{ - char *strs[2]; - strs[0] = str; - strs[1] = NULL; - char **ret = MakeStrArrayFromArray(strs); - return ret; -} - static char **_GetXFname(HWND HWin, BOOL Receive, const char *caption, LPLONG Option) { char FileDirExpanded[MAX_PATH]; @@ -644,7 +662,7 @@ else *Option = MAKELONG(LOWORD(*Option),HIWORD(opt)); - ret = MakeFileArrayFromStr(FullName); + ret = MakeStrArrayFromStr(FullName); } return ret; @@ -826,13 +844,11 @@ #define GMF_QV 2 /* Quick-VAN Send */ #define GMF_Y 3 /* YMODEM Send */ -#define FnStrMemSize 4096 static char **_GetMultiFname(HWND hWnd, WORD FuncId, const char *caption, LPWORD Option) { - OPENFILENAME ofn; +#define FnStrMemSize 4096 wchar_t TempDir[MAX_PATH]; - BOOL Ok; const char *FileSendFilter = ts.FileSendFilter; const char *UILanguageFile = ts.UILanguageFile; @@ -858,7 +874,7 @@ free(default_filename); } - memset(&ofn, 0, sizeof(OPENFILENAME)); + OPENFILENAME ofn = {}; ofn.lStructSize = get_OPENFILENAME_SIZE(); ofn.hwndOwner = hWnd; ofn.lpstrFilter = FNFilter; @@ -883,72 +899,14 @@ ofn.hInstance = hInst; - Ok = GetOpenFileName(&ofn); + BOOL Ok = GetOpenFileName(&ofn); free(FNFilter); - char **ret; + char **ret = NULL; if (Ok) { - int i, len; - int NumFname = 0; - /* count number of file names */ - len = strlen(FnStrMem); - i = 0; - while (len>0) { - i = i + len + 1; - NumFname++; - len = strlen(&FnStrMem[i]); - } - - NumFname--; - - if (NumFname<1) { - // single selection - ret = MakeFileArrayFromStr(FnStrMem); - } - else { - // multiple selection - ret = MakeFileArrayMultiSelect(FnStrMem); - } -#if 0 - if (fv->NumFname<1) { // single selection - fv->NumFname = 1; - fv->DirLen = ofn.nFileOffset; - strncpy_s(fv->FullName, sizeof(fv->FullName),fv->FnStrMem, _TRUNCATE); - fv->FnPtr = 0; - } - else { // multiple selection - strncpy_s(fv->FullName, sizeof(fv->FullName),fv->FnStrMem, _TRUNCATE); - AppendSlash(fv->FullName,sizeof(fv->FullName)); - fv->DirLen = strlen(fv->FullName); - fv->FnPtr = strlen(fv->FnStrMem)+1; - file_array = MakeFileArrayMultiSelect(fv->FnStrMem); - - { - int a = 0; - } - } -#endif - -// fv->FNCount = 0; + // multiple selection + ret = MakeFileArrayMultiSelect(FnStrMem); } - else { - ret = NULL; - } - -#if 0 - GlobalUnlock(fv->FnStrMemHandle); - if (! Ok) { - GlobalFree(fv->FnStrMemHandle); - fv->FnStrMemHandle = NULL; - } -#endif - -#if 0 - if (! Ok) { - free(fv->FnStrMem); - fv->FnStrMem = NULL; - } -#endif free(FnStrMem); /* restore dir */ @@ -1104,86 +1062,11 @@ return TRUE; } -void XMODEMStart(int mode) +static void XMODEMStart(int mode) { - LONG Option; - int tmp; - const char *UILanguageFile = ts.UILanguageFile; - char uimsg[MAX_UIMSG]; - if (! ProtoStart()) return; - TFileVarProto *fv = FileVar; - - if (mode==IdXReceive) { - FileVar->OpId = OpXRcv; - - strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE); - get_lang_msg("FILEDLG_TRANS_TITLE_XRCV", uimsg, sizeof(uimsg), TitXRcv, UILanguageFile); - strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); - } - else { - FileVar->OpId = OpXSend; - - strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE); - get_lang_msg("FILEDLG_TRANS_TITLE_XSEND", uimsg, sizeof(uimsg), TitXSend, UILanguageFile); - strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); - } - - if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0) - { - Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt); - char **filenames = _GetXFname(FileVar->HMainWin, - mode==IdXReceive, fv->DlgCaption, &Option); - if (filenames == NULL) { - ProtoEnd(); - return; - } - fv->FileNames = filenames; - GetNextFname(fv); - tmp = HIWORD(Option); - if (mode == IdXReceive) { - if (IsXoptCRC(tmp)) { - if (IsXopt1k(ts.XmodemOpt)) { - ts.XmodemOpt = Xopt1kCRC; - } - else { - ts.XmodemOpt = XoptCRC; - } - } - else { - if (IsXopt1k(ts.XmodemOpt)) { - ts.XmodemOpt = Xopt1kCksum; - } - else { - ts.XmodemOpt = XoptCheck; - } - } - ts.XmodemBin = LOWORD(Option); - } - else { - if (IsXopt1k(tmp)) { - if (IsXoptCRC(ts.XmodemOpt)) { - ts.XmodemOpt = Xopt1kCRC; - } - else { - ts.XmodemOpt = Xopt1kCksum; - } - } - else { - if (IsXoptCRC(ts.XmodemOpt)) { - ts.XmodemOpt = XoptCRC; - } - else { - ts.XmodemOpt = XoptCheck; - } - } - } - } - else - _SetFileVar(FileVar); - TalkStatus = IdTalkQuiet; /* disable transmit delay (serial port) */ @@ -1194,7 +1077,14 @@ } } -BOOL XMODEMStartReceive(const char *fiename, WORD ParamBinaryFlag, WORD ParamXmodemOpt) +/** + * XMODEM\x8E\xF3\x90M + * + * @param[in] filename \x8E\xF3\x90M\x83t\x83@\x83C\x83\x8B\x96\xBC(NULL\x82̂Ƃ\xAB\x81A\x83_\x83C\x83A\x83\x8D\x83O\x82őI\x91\xF0\x82\xB7\x82\xE9) + * @param[in] ParamBinaryFlag + * @param[in] ParamXmodemOpt + */ +BOOL XMODEMStartReceive(const char *filename, WORD ParamBinaryFlag, WORD ParamXmodemOpt) { if (FileVar !=NULL) return FALSE; @@ -1201,33 +1091,78 @@ if (!NewFileVar_(&FileVar)) return FALSE; - FileVar->DirLen = 0; - strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE); - if (IsXopt1k(ts.XmodemOpt)) { - if (IsXoptCRC(ParamXmodemOpt)) { - // CRC - ts.XmodemOpt = Xopt1kCRC; + TFileVarProto *fv = FileVar; + FileVar->OpId = OpXRcv; + + const char *UILanguageFile = ts.UILanguageFile; + char uimsg[MAX_UIMSG]; + strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE); + get_lang_msg("FILEDLG_TRANS_TITLE_XRCV", uimsg, sizeof(uimsg), TitXRcv, UILanguageFile); + strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); + + if (filename == NULL) { + LONG Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt); + char **filenames = _GetXFname(HVTWin, TRUE, fv->DlgCaption, &Option); + if (filenames == NULL) { + FreeFileVar_(&FileVar); + return FALSE; } - else { // Checksum - ts.XmodemOpt = Xopt1kCksum; + fv->FileNames = filenames; + int tmp = HIWORD(Option); + if (IsXoptCRC(tmp)) { + if (IsXopt1k(ts.XmodemOpt)) { + ts.XmodemOpt = Xopt1kCRC; + } + else { + ts.XmodemOpt = XoptCRC; + } } + else { + if (IsXopt1k(ts.XmodemOpt)) { + ts.XmodemOpt = Xopt1kCksum; + } + else { + ts.XmodemOpt = XoptCheck; + } + } + ts.XmodemBin = LOWORD(Option); } else { - if (IsXoptCRC(ParamXmodemOpt)) { - ts.XmodemOpt = XoptCRC; + fv->FileNames = MakeStrArrayFromStr(filename); + if (IsXopt1k(ts.XmodemOpt)) { + if (IsXoptCRC(ParamXmodemOpt)) { + // CRC + ts.XmodemOpt = Xopt1kCRC; + } + else { // Checksum + ts.XmodemOpt = Xopt1kCksum; + } } else { - ts.XmodemOpt = XoptCheck; + if (IsXoptCRC(ParamXmodemOpt)) { + ts.XmodemOpt = XoptCRC; + } + else { + ts.XmodemOpt = XoptCheck; + } } + ts.XmodemBin = ParamBinaryFlag; + FileVar->NoMsg = TRUE; } - ts.XmodemBin = ParamBinaryFlag; - FileVar->NoMsg = TRUE; + GetNextFname(fv); XMODEMStart(IdXReceive); + fv->SetDlgProtoFileName(fv, fv->FullName); return TRUE; } -BOOL XMODEMStartSend(const char *fiename, WORD ParamXmodemOpt) +/** + * XMODEM\x91\x97\x90M + * + * @param[in] filename \x91\x97\x90M\x83t\x83@\x83C\x83\x8B\x96\xBC(NULL\x82̂Ƃ\xAB\x81A\x83_\x83C\x83A\x83\x8D\x83O\x82őI\x91\xF0\x82\xB7\x82\xE9) + * @param[in] ParamXmodemOpt + */ +BOOL XMODEMStartSend(const char *filename, WORD ParamXmodemOpt) { if (FileVar !=NULL) return FALSE; @@ -1234,26 +1169,64 @@ if (!NewFileVar_(&FileVar)) return FALSE; - FileVar->DirLen = 0; - strncpy_s(FileVar->FullName, sizeof(FileVar->FullName), fiename, _TRUNCATE); - if (IsXoptCRC(ts.XmodemOpt)) { - if (IsXopt1k(ParamXmodemOpt)) { - ts.XmodemOpt = Xopt1kCRC; + TFileVarProto *fv = FileVar; + FileVar->OpId = OpXSend; + + const char *UILanguageFile = ts.UILanguageFile; + char uimsg[MAX_UIMSG]; + strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE); + get_lang_msg("FILEDLG_TRANS_TITLE_XSEND", uimsg, sizeof(uimsg), TitXSend, UILanguageFile); + strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); + + if (filename == NULL) { + LONG Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt); + char **filenames = _GetXFname(HVTWin, FALSE, fv->DlgCaption, &Option); + if (filenames == NULL) { + FreeFileVar_(&FileVar); + return FALSE; } + fv->FileNames = filenames; + int tmp = HIWORD(Option); + if (IsXopt1k(tmp)) { + if (IsXoptCRC(ts.XmodemOpt)) { + ts.XmodemOpt = Xopt1kCRC; + } + else { + ts.XmodemOpt = Xopt1kCksum; + } + } else { - ts.XmodemOpt = XoptCRC; + if (IsXoptCRC(ts.XmodemOpt)) { + ts.XmodemOpt = XoptCRC; + } + else { + ts.XmodemOpt = XoptCheck; + } } } else { - if (IsXopt1k(ParamXmodemOpt)) { - ts.XmodemOpt = Xopt1kCksum; + fv->FileNames = MakeStrArrayFromStr(filename); + if (IsXoptCRC(ts.XmodemOpt)) { + if (IsXopt1k(ParamXmodemOpt)) { + ts.XmodemOpt = Xopt1kCRC; + } + else { + ts.XmodemOpt = XoptCRC; + } } else { - ts.XmodemOpt = XoptCheck; + if (IsXopt1k(ParamXmodemOpt)) { + ts.XmodemOpt = Xopt1kCksum; + } + else { + ts.XmodemOpt = XoptCheck; + } } + FileVar->NoMsg = TRUE; } - FileVar->NoMsg = TRUE; + GetNextFname(fv); XMODEMStart(IdXSend); + fv->SetDlgProtoFileName(fv, fv->FullName); return TRUE; } Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2020-12-20 12:11:31 UTC (rev 9079) +++ trunk/teraterm/teraterm/vtwin.cpp 2020-12-20 12:11:41 UTC (rev 9080) @@ -4334,13 +4334,13 @@ void CVTWindow::OnFileXRcv() { HelpId = HlpFileXmodemRecv; - XMODEMStart(IdXReceive); + XMODEMStartReceive(NULL, 0, 0); } void CVTWindow::OnFileXSend() { HelpId = HlpFileXmodemSend; - XMODEMStart(IdXSend); + XMODEMStartSend(NULL, 0); } void CVTWindow::OnFileYRcv() Modified: trunk/teraterm/ttpfile/xmodem.c =================================================================== --- trunk/teraterm/ttpfile/xmodem.c 2020-12-20 12:11:31 UTC (rev 9079) +++ trunk/teraterm/ttpfile/xmodem.c 2020-12-20 12:11:41 UTC (rev 9080) @@ -243,9 +243,6 @@ } fv->StartTime = GetTickCount(); - SetWindowText(fv->HWin, fv->DlgCaption); - fv->SetDlgProtoFileName(fv, &(fv->FullName[fv->DirLen])); - xv->PktNumOffset = 0; xv->PktNum = 0; xv->PktNumSent = 0; @@ -284,8 +281,10 @@ // \x83t\x83@\x83C\x83\x8B\x91\x97\x90M\x8AJ\x8En\x91O\x82ɁA"rx \x83t\x83@\x83C\x83\x8B\x96\xBC"\x82\xF0\x8E\xA9\x93\xAE\x93I\x82ɌĂяo\x82\xB7\x81B(2007.12.20 yutaka) if (ts->XModemRcvCommand[0] != '\0') { char inistr[MAX_PATH + 10]; + int i, j; + GetFileNamePos(fv->FullName,&i,&j); _snprintf_s(inistr, sizeof(inistr), _TRUNCATE, "%s %s\015", - ts->XModemRcvCommand, &(fv->FullName[fv->DirLen])); + ts->XModemRcvCommand, &(fv->FullName[j])); FTConvFName(inistr + strlen(ts->XModemRcvCommand) + 1); XWrite(fv, xv, cv, inistr, strlen(inistr)); } @@ -639,13 +638,13 @@ return 0; } case XMODEM_OPT: { - WORD Opt1 = va_arg(ap, WORD); + WORD Opt1 = va_arg(ap, int); xv->XOpt = Opt1; return 0; } case XMODEM_TEXT_FLAG: { - WORD Opt2 = va_arg(ap, WORD); - xv->TextFlag = 1 - (Opt2 & 1); + WORD Opt2 = va_arg(ap, int); + xv->TextFlag = Opt2; return 0; } }