"test/git@developer.sourcefind.cn:change/sglang.git" did not exist on "faba293a0d6c144de0a9687ffc0ed2be6699600d"
Commit 1ca48923 authored by longpanda's avatar longpanda
Browse files

VentoyVlnk add cmdline mode.

VentoyVlnk.exe -i xxx.iso -o xxx.vlnk.iso
parent 730fdd51
...@@ -13,12 +13,17 @@ static CHAR g_LogFile[MAX_PATH]; ...@@ -13,12 +13,17 @@ static CHAR g_LogFile[MAX_PATH];
static HWND g_create_button; static HWND g_create_button;
static HWND g_parse_button; static HWND g_parse_button;
static BOOL g_ShowHelp = FALSE;
static WCHAR g_CmdInFile[MAX_PATH];
static WCHAR g_CmdOutFile[MAX_PATH];
typedef enum MSGID typedef enum MSGID
{ {
MSGID_ERROR = 0, MSGID_ERROR = 0,
MSGID_INFO, MSGID_INFO,
MSGID_BTN_CREATE, MSGID_BTN_CREATE,
MSGID_BTN_PARSE, MSGID_BTN_PARSE,
MSGID_SRC_NONEXIST,
MSGID_SRC_UNSUPPORTED, MSGID_SRC_UNSUPPORTED,
MSGID_FS_UNSUPPORTED, MSGID_FS_UNSUPPORTED,
MSGID_SUFFIX_UNSUPPORTED, MSGID_SUFFIX_UNSUPPORTED,
...@@ -42,6 +47,7 @@ const WCHAR *g_msg_cn[MSGID_BUTT] = ...@@ -42,6 +47,7 @@ const WCHAR *g_msg_cn[MSGID_BUTT] =
L"提醒", L"提醒",
L"创建", L"创建",
L"解析", L"解析",
L"指定的文件不存在",
L"不支持为此文件创建vlnk", L"不支持为此文件创建vlnk",
L"不支持的文件系统", L"不支持的文件系统",
L"不支持的文件后缀名", L"不支持的文件后缀名",
...@@ -61,6 +67,7 @@ const WCHAR *g_msg_en[MSGID_BUTT] = ...@@ -61,6 +67,7 @@ const WCHAR *g_msg_en[MSGID_BUTT] =
L"Info", L"Info",
L"Create", L"Create",
L"Parse", L"Parse",
L"The specified file is not exist!",
L"This file is not supported for vlnk", L"This file is not supported for vlnk",
L"Unsupported file system!", L"Unsupported file system!",
L"Unsupported file suffix!", L"Unsupported file suffix!",
...@@ -78,6 +85,22 @@ const WCHAR *g_msg_en[MSGID_BUTT] = ...@@ -78,6 +85,22 @@ const WCHAR *g_msg_en[MSGID_BUTT] =
const WCHAR **g_msg_lang = NULL; const WCHAR **g_msg_lang = NULL;
HINSTANCE g_hInst; HINSTANCE g_hInst;
static int VtoyMessageBox
(
_In_opt_ HWND hWnd,
_In_opt_ LPCWSTR lpText,
_In_opt_ LPCWSTR lpCaption,
_In_ UINT uType
)
{
if (g_CmdInFile[0] && g_CmdOutFile[0])
{
return 0;
}
return MessageBox(hWnd, lpText, lpCaption, uType);
}
static void Log2File(const char *log) static void Log2File(const char *log)
{ {
...@@ -340,7 +363,7 @@ End: ...@@ -340,7 +363,7 @@ End:
} }
static int CreateVlnk(HWND hWnd, WCHAR *Dir) static int CreateVlnk(HWND hWnd, WCHAR *Dir, WCHAR *InFile, WCHAR *OutFile)
{ {
int i; int i;
int end; int end;
...@@ -358,20 +381,27 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir) ...@@ -358,20 +381,27 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir)
WCHAR *Pos = NULL; WCHAR *Pos = NULL;
ventoy_vlnk *vlnk = NULL; ventoy_vlnk *vlnk = NULL;
ofn.lStructSize = sizeof(ofn); if (InFile)
ofn.hwndOwner = hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = L"Vlnk Source File\0*.iso;*.img;*.wim;*.vhd;*.vhdx;*.vtoy;*.efi;*.dat\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn) != TRUE)
{ {
return 1; wcscpy_s(szFile, MAX_PATH, InFile);
}
else
{
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = L"Vlnk Source File\0*.iso;*.img;*.wim;*.vhd;*.vhdx;*.vtoy;*.efi;*.dat\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn) != TRUE)
{
return 1;
}
} }
LogW(L"Create vlnk for <%ls>\n", szFile); LogW(L"Create vlnk for <%ls>\n", szFile);
...@@ -380,7 +410,7 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir) ...@@ -380,7 +410,7 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir)
if (len < 5 || szFile[0] == '.' || szFile[1] != ':') if (len < 5 || szFile[0] == '.' || szFile[1] != ':')
{ {
MessageBox(hWnd, g_msg_lang[MSGID_SRC_UNSUPPORTED], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_SRC_UNSUPPORTED], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
...@@ -406,7 +436,7 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir) ...@@ -406,7 +436,7 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir)
} }
else else
{ {
MessageBox(hWnd, g_msg_lang[MSGID_FS_UNSUPPORTED], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_FS_UNSUPPORTED], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
...@@ -419,13 +449,13 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir) ...@@ -419,13 +449,13 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir)
if (!IsSupportedImgSuffix(suffix)) if (!IsSupportedImgSuffix(suffix))
{ {
MessageBox(hWnd, g_msg_lang[MSGID_SUFFIX_UNSUPPORTED], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_SUFFIX_UNSUPPORTED], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
if (IsVlnkFile(szFile, NULL)) if (IsVlnkFile(szFile, NULL))
{ {
MessageBox(hWnd, g_msg_lang[MSGID_ALREADY_VLNK], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_ALREADY_VLNK], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
...@@ -459,14 +489,14 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir) ...@@ -459,14 +489,14 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir)
if (len >= VLNK_NAME_MAX) if (len >= VLNK_NAME_MAX)
{ {
LogA("File name length %d overflow\n", len); LogA("File name length %d overflow\n", len);
MessageBox(hWnd, g_msg_lang[MSGID_FILE_NAME_TOO_LONG], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_FILE_NAME_TOO_LONG], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
DiskExtend.StartingOffset.QuadPart = 0; DiskExtend.StartingOffset.QuadPart = 0;
if (GetPhyDiskInfo((char)szFile[0], &DiskSig, &DiskExtend)) if (GetPhyDiskInfo((char)szFile[0], &DiskSig, &DiskExtend))
{ {
MessageBox(hWnd, g_msg_lang[MSGID_DISK_INFO_ERR], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_DISK_INFO_ERR], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
...@@ -477,22 +507,38 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir) ...@@ -477,22 +507,38 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir)
vlnk = (ventoy_vlnk *)Buf; vlnk = (ventoy_vlnk *)Buf;
ventoy_create_vlnk(DiskSig, (uint64_t)DiskExtend.StartingOffset.QuadPart, UTF8Path, vlnk); ventoy_create_vlnk(DiskSig, (uint64_t)DiskExtend.StartingOffset.QuadPart, UTF8Path, vlnk);
DefaultVlnkDstFullPath(Pos + 1, Dir, DstFullPath); if (OutFile)
{
wcscpy_s(DstFullPath, MAX_PATH, OutFile);
}
else
{
DefaultVlnkDstFullPath(Pos + 1, Dir, DstFullPath);
}
LogW(L"vlnk output file path is <%ls>\n", DstFullPath); LogW(L"vlnk output file path is <%ls>\n", DstFullPath);
if (SaveBuffer2File(DstFullPath, Buf, VLNK_FILE_LEN) == 0) if (SaveBuffer2File(DstFullPath, Buf, VLNK_FILE_LEN) == 0)
{ {
WCHAR Msg[1024]; WCHAR Msg[1024];
swprintf_s(Msg, 1024, L"%ls\r\n\r\n%ls", g_msg_lang[MSGID_VLNK_SUCCESS], DstFullPath + lstrlen(Dir) + 1);
LogW(L"Vlnk file create success <%ls>\n", DstFullPath); LogW(L"Vlnk file create success <%ls>\n", DstFullPath);
MessageBox(hWnd, Msg, g_msg_lang[MSGID_INFO], MB_OK | MB_ICONINFORMATION);
if (OutFile)
{
swprintf_s(Msg, 1024, L"%ls\r\n\r\n%ls", g_msg_lang[MSGID_VLNK_SUCCESS], DstFullPath);
VtoyMessageBox(hWnd, Msg, g_msg_lang[MSGID_INFO], MB_OK | MB_ICONINFORMATION);
}
else
{
swprintf_s(Msg, 1024, L"%ls\r\n\r\n%ls", g_msg_lang[MSGID_VLNK_SUCCESS], DstFullPath + lstrlen(Dir) + 1);
VtoyMessageBox(hWnd, Msg, g_msg_lang[MSGID_INFO], MB_OK | MB_ICONINFORMATION);
}
} }
else else
{ {
LogA("Vlnk file save failed\n"); LogA("Vlnk file save failed\n");
MessageBox(hWnd, g_msg_lang[MSGID_CREATE_FILE_ERR], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_CREATE_FILE_ERR], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
} }
free(Buf); free(Buf);
...@@ -567,7 +613,7 @@ static int ParseVlnk(HWND hWnd) ...@@ -567,7 +613,7 @@ static int ParseVlnk(HWND hWnd)
if (!IsVlnkFile(szFile, &vlnk)) if (!IsVlnkFile(szFile, &vlnk))
{ {
MessageBox(hWnd, g_msg_lang[MSGID_INVALID_VLNK], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_INVALID_VLNK], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
...@@ -581,7 +627,7 @@ static int ParseVlnk(HWND hWnd) ...@@ -581,7 +627,7 @@ static int ParseVlnk(HWND hWnd)
if (!IsSupportedImgSuffix(suffix)) if (!IsSupportedImgSuffix(suffix))
{ {
MessageBox(hWnd, g_msg_lang[MSGID_SUFFIX_UNSUPPORTED], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_SUFFIX_UNSUPPORTED], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
...@@ -598,7 +644,7 @@ static int ParseVlnk(HWND hWnd) ...@@ -598,7 +644,7 @@ static int ParseVlnk(HWND hWnd)
Letter = GetDriveLetter(vlnk.disk_signature, vlnk.part_offset); Letter = GetDriveLetter(vlnk.disk_signature, vlnk.part_offset);
if (Letter == 0) if (Letter == 0)
{ {
MessageBox(hWnd, g_msg_lang[MSGID_VLNK_NO_DST], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_VLNK_NO_DST], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
...@@ -609,13 +655,13 @@ static int ParseVlnk(HWND hWnd) ...@@ -609,13 +655,13 @@ static int ParseVlnk(HWND hWnd)
hFile = CreateFileW(szDst, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); hFile = CreateFileW(szDst, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (INVALID_HANDLE_VALUE == hFile) if (INVALID_HANDLE_VALUE == hFile)
{ {
MessageBox(hWnd, g_msg_lang[MSGID_VLNK_NO_DST], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); VtoyMessageBox(hWnd, g_msg_lang[MSGID_VLNK_NO_DST], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
CloseHandle(hFile); CloseHandle(hFile);
swprintf_s(Msg, 1024, L"%ls %ls", g_msg_lang[MSGID_VLNK_POINT_TO], szDst); swprintf_s(Msg, 1024, L"%ls %ls", g_msg_lang[MSGID_VLNK_POINT_TO], szDst);
MessageBox(hWnd, Msg, g_msg_lang[MSGID_INFO], MB_OK | MB_ICONINFORMATION); VtoyMessageBox(hWnd, Msg, g_msg_lang[MSGID_INFO], MB_OK | MB_ICONINFORMATION);
return 0; return 0;
} }
...@@ -637,7 +683,7 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lPara ...@@ -637,7 +683,7 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lPara
if (CtrlID == IDC_BUTTON1) if (CtrlID == IDC_BUTTON1)
{ {
EnableWindow(g_create_button, FALSE); EnableWindow(g_create_button, FALSE);
CreateVlnk(hWnd, g_CurDirW); CreateVlnk(hWnd, g_CurDirW, NULL, NULL);
EnableWindow(g_create_button, TRUE); EnableWindow(g_create_button, TRUE);
} }
else if (CtrlID == IDC_BUTTON2) else if (CtrlID == IDC_BUTTON2)
...@@ -664,9 +710,46 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lPara ...@@ -664,9 +710,46 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lPara
return 0; return 0;
} }
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow) static int ParseCmdLine(LPSTR lpCmdLine)
{ {
int i; int i;
int argc = 0;
LPWSTR *lpszArgv = NULL;
lpszArgv = CommandLineToArgvW(GetCommandLineW(), &argc);
for (i = 0; i < argc; i++)
{
if (lstrcmp(lpszArgv[i], L"-q") == 0 || lstrcmp(lpszArgv[i], L"-Q") == 0)
{
g_LogFile[0] = 0;
}
else if (lstrcmp(lpszArgv[i], L"-h") == 0 || lstrcmp(lpszArgv[i], L"-H") == 0)
{
g_ShowHelp = TRUE;
}
else if (lstrcmp(lpszArgv[i], L"-i") == 0 || lstrcmp(lpszArgv[i], L"-I") == 0)
{
if (i + 1 < argc)
{
wcscpy_s(g_CmdInFile, MAX_PATH, lpszArgv[i + 1]);
}
}
else if (lstrcmp(lpszArgv[i], L"-o") == 0 || lstrcmp(lpszArgv[i], L"-O") == 0)
{
if (i + 1 < argc)
{
wcscpy_s(g_CmdOutFile, MAX_PATH, lpszArgv[i + 1]);
}
}
}
return argc;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
DWORD dwAttrib;
HANDLE hMutex; HANDLE hMutex;
UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(hPrevInstance);
...@@ -680,32 +763,45 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi ...@@ -680,32 +763,45 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
g_msg_lang = g_msg_en; g_msg_lang = g_msg_en;
} }
hMutex = CreateMutexA(NULL, TRUE, "VtoyVlnkMUTEX"); hMutex = CreateMutexA(NULL, TRUE, "VtoyVlnkMUTEX");
if ((hMutex != NULL) && (GetLastError() == ERROR_ALREADY_EXISTS)) if ((hMutex != NULL) && (GetLastError() == ERROR_ALREADY_EXISTS))
{ {
MessageBoxW(NULL, g_msg_lang[MSGID_RUNNING_TIP], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR); MessageBoxW(NULL, g_msg_lang[MSGID_RUNNING_TIP], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1; return 1;
} }
GetCurrentDirectoryA(MAX_PATH, g_CurDirA); GetCurrentDirectoryA(MAX_PATH, g_CurDirA);
GetCurrentDirectoryW(MAX_PATH, g_CurDirW); GetCurrentDirectoryW(MAX_PATH, g_CurDirW);
sprintf_s(g_LogFile, sizeof(g_LogFile), "%s\\VentoyVlnk.log", g_CurDirA); sprintf_s(g_LogFile, sizeof(g_LogFile), "%s\\VentoyVlnk.log", g_CurDirA);
for (i = 0; i < __argc; i++) ParseCmdLine(lpCmdLine);
g_hInst = hInstance;
if (g_ShowHelp)
{ {
if (strncmp(__argv[i], "-Q", 2) == 0 || VtoyMessageBox(NULL, L"VentoyVlnk.exe CMD\r\n -i Input file path\r\n -o Output vlnk file path\r\n -q Quite mode (no log)", L"Tip", MB_OK);
strncmp(__argv[i], "-q", 2) == 0) return 0;
{
g_LogFile[0] = 0;
break;
}
} }
else if (g_CmdInFile[0] && g_CmdOutFile[0])
{
LogA("========= VentoyVlnk Cmdline Mode =========\n");
LogA("========= VentoyVlnk =========\n"); dwAttrib = GetFileAttributesW(g_CmdInFile);
if (dwAttrib == INVALID_FILE_ATTRIBUTES || (dwAttrib & FILE_ATTRIBUTE_DIRECTORY))
{
LogW(L"File <<%ls>> does not exist!\n", g_CmdInFile);
VtoyMessageBox(NULL, g_msg_lang[MSGID_SRC_NONEXIST], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);
return 1;
}
g_hInst = hInstance; return CreateVlnk(NULL, g_CurDirW, g_CmdInFile, g_CmdOutFile);
DialogBoxA(hInstance, MAKEINTRESOURCEA(IDD_DIALOG1), NULL, DialogProc); }
else
{
LogA("========= VentoyVlnk GUI Mode =========\n");
return 0; DialogBoxA(hInstance, MAKEINTRESOURCEA(IDD_DIALOG1), NULL, DialogProc);
return 0;
}
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment