24
24
25
25
BOOL g_bNoGuiMode = FALSE; // No-GUI mode
26
26
LPWSTR g_pszLogFile = NULL;
27
- MStringW g_load_options;
28
- MStringW g_save_options;
29
27
30
28
INT LogMessageBoxW(HWND hwnd, LPCWSTR text, LPCWSTR title, UINT uType)
31
29
{
@@ -2172,6 +2170,8 @@ class MMainWnd : public MWindowBase
2172
2170
public:
2173
2171
MDropdownArrow m_arrow; // the language drop-down arrow
2174
2172
MStringW m_commands;
2173
+ MStringW m_load_options;
2174
+ MStringW m_save_options;
2175
2175
2176
2176
BOOL ParseCommandLine(HWND hwnd, INT argc, WCHAR **targv);
2177
2177
@@ -2351,6 +2351,11 @@ class MMainWnd : public MWindowBase
2351
2351
BOOL DoItemSearch(ITEM_SEARCH& search);
2352
2352
BOOL DoItemSearchBang(HWND hwnd, MItemSearchDlg *pDialog);
2353
2353
2354
+ bool DoResLoad(const MStringW& filename, const MStringW& options = L"");
2355
+ bool DoResSave(const MStringW& filename, const MStringW& options = L"");
2356
+
2357
+ EGA::arg_t DoEgaResLoad(const EGA::args_t& args);
2358
+ EGA::arg_t DoEgaResSave(const EGA::args_t& args);
2354
2359
EGA::arg_t DoEgaResSearch(const EGA::args_t& args);
2355
2360
EGA::arg_t DoEgaResDelete(const EGA::args_t& args);
2356
2361
EGA::arg_t DoEgaResCloneByName(const EGA::args_t& args);
@@ -11474,55 +11479,14 @@ void MMainWnd::OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
11474
11479
if (command.find(L"load:") == 0)
11475
11480
{
11476
11481
command = command.substr(5);
11477
-
11478
- BOOL bAutoLoadNearbyResH = g_settings.bAutoLoadNearbyResH;
11479
- g_settings.bAutoLoadNearbyResH = g_load_options.find(L"(no-load-res-h)") != g_load_options.npos;
11480
- {
11481
- DoLoadFile(hwnd, command.c_str(), 0, TRUE);
11482
- }
11483
- g_settings.bAutoLoadNearbyResH = bAutoLoadNearbyResH;
11482
+ DoResLoad(command, m_load_options);
11484
11483
continue;
11485
11484
}
11486
11485
11487
11486
if (command.find(L"save:") == 0)
11488
11487
{
11489
11488
command = command.substr(5);
11490
- BOOL bUseIDC_STATIC = g_settings.bUseIDC_STATIC;
11491
- BOOL bAskUpdateResH = g_settings.bAskUpdateResH;
11492
- BOOL bCompressByUPX = g_settings.bCompressByUPX;
11493
- BOOL bSepFilesByLang = g_settings.bSepFilesByLang;
11494
- BOOL bStoreToResFolder = g_settings.bStoreToResFolder;
11495
- BOOL bSelectableByMacro = g_settings.bSelectableByMacro;
11496
- BOOL bRedundantComments = g_settings.bRedundantComments;
11497
- BOOL bWrapManifest = g_settings.bWrapManifest;
11498
- BOOL bUseBeginEnd = g_settings.bUseBeginEnd;
11499
- BOOL bRCFileUTF16 = g_settings.bRCFileUTF16;
11500
- BOOL bBackup = g_settings.bBackup;
11501
- g_settings.bUseIDC_STATIC = g_save_options.find(L"(idc-static)") != g_save_options.npos;
11502
- g_settings.bAskUpdateResH = FALSE;
11503
- g_settings.bCompressByUPX = g_save_options.find(L"(compress)") != g_save_options.npos;
11504
- g_settings.bSepFilesByLang = g_save_options.find(L"(sep-lang)") != g_save_options.npos;
11505
- g_settings.bStoreToResFolder = g_save_options.find(L"(no-res-folder)") == g_save_options.npos;
11506
- g_settings.bSelectableByMacro = g_save_options.find(L"(lang-macro)") != g_save_options.npos;
11507
- g_settings.bRedundantComments = g_save_options.find(L"(less-comments)") == g_save_options.npos;
11508
- g_settings.bWrapManifest = g_save_options.find(L"(wrap-manifest)") != g_save_options.npos;
11509
- g_settings.bUseBeginEnd = g_save_options.find(L"(begin-end)") != g_save_options.npos;
11510
- g_settings.bRCFileUTF16 = g_save_options.find(L"(utf-16)") != g_save_options.npos;
11511
- g_settings.bBackup = g_save_options.find(L"(backup)") != g_save_options.npos;
11512
- {
11513
- DoSaveFile(hwnd, command.c_str());
11514
- }
11515
- g_settings.bUseIDC_STATIC = bUseIDC_STATIC;
11516
- g_settings.bAskUpdateResH = bAskUpdateResH;
11517
- g_settings.bCompressByUPX = bCompressByUPX;
11518
- g_settings.bSepFilesByLang = bSepFilesByLang;
11519
- g_settings.bStoreToResFolder = bStoreToResFolder;
11520
- g_settings.bSelectableByMacro = bSelectableByMacro;
11521
- g_settings.bRedundantComments = bRedundantComments;
11522
- g_settings.bWrapManifest = bWrapManifest;
11523
- g_settings.bUseBeginEnd = bUseBeginEnd;
11524
- g_settings.bRCFileUTF16 = bRCFileUTF16;
11525
- g_settings.bBackup = bBackup;
11489
+ DoResSave(command, m_save_options);
11526
11490
continue;
11527
11491
}
11528
11492
}
@@ -15927,6 +15891,76 @@ MStringW GetRisohTemplate(const MIdOrString& type, WORD wLang)
15927
15891
15928
15892
static MMainWnd *s_pMainWnd = NULL;
15929
15893
15894
+ bool MMainWnd::DoResLoad(const MStringW& filename, const MStringW& options)
15895
+ {
15896
+ bool bOK;
15897
+ BOOL bNoGuiMode = g_bNoGuiMode;
15898
+ g_bNoGuiMode = TRUE;
15899
+ BOOL bAutoLoadNearbyResH = g_settings.bAutoLoadNearbyResH;
15900
+ g_settings.bAutoLoadNearbyResH = options.find(L"(no-load-res-h)") != options.npos;
15901
+ {
15902
+ bOK = !!DoLoadFile(m_hwnd, filename.c_str(), 0, TRUE);
15903
+ }
15904
+ g_settings.bAutoLoadNearbyResH = bAutoLoadNearbyResH;
15905
+ g_bNoGuiMode = bNoGuiMode;
15906
+ return bOK;
15907
+ }
15908
+
15909
+ bool MMainWnd::DoResSave(const MStringW& filename, const MStringW& options)
15910
+ {
15911
+ bool bOK;
15912
+ BOOL bNoGuiMode = g_bNoGuiMode;
15913
+ g_bNoGuiMode = TRUE;
15914
+ BOOL bUseIDC_STATIC = g_settings.bUseIDC_STATIC;
15915
+ BOOL bAskUpdateResH = g_settings.bAskUpdateResH;
15916
+ BOOL bCompressByUPX = g_settings.bCompressByUPX;
15917
+ BOOL bSepFilesByLang = g_settings.bSepFilesByLang;
15918
+ BOOL bStoreToResFolder = g_settings.bStoreToResFolder;
15919
+ BOOL bSelectableByMacro = g_settings.bSelectableByMacro;
15920
+ BOOL bRedundantComments = g_settings.bRedundantComments;
15921
+ BOOL bWrapManifest = g_settings.bWrapManifest;
15922
+ BOOL bUseBeginEnd = g_settings.bUseBeginEnd;
15923
+ BOOL bRCFileUTF16 = g_settings.bRCFileUTF16;
15924
+ BOOL bBackup = g_settings.bBackup;
15925
+ g_settings.bUseIDC_STATIC = options.find(L"(idc-static)") != options.npos;
15926
+ g_settings.bAskUpdateResH = FALSE;
15927
+ g_settings.bCompressByUPX = options.find(L"(compress)") != options.npos;
15928
+ g_settings.bSepFilesByLang = options.find(L"(sep-lang)") != options.npos;
15929
+ g_settings.bStoreToResFolder = options.find(L"(no-res-folder)") == options.npos;
15930
+ g_settings.bSelectableByMacro = options.find(L"(lang-macro)") != options.npos;
15931
+ g_settings.bRedundantComments = options.find(L"(less-comments)") == options.npos;
15932
+ g_settings.bWrapManifest = options.find(L"(wrap-manifest)") != options.npos;
15933
+ g_settings.bUseBeginEnd = options.find(L"(begin-end)") != options.npos;
15934
+ g_settings.bRCFileUTF16 = options.find(L"(utf-16)") != options.npos;
15935
+ g_settings.bBackup = options.find(L"(backup)") != options.npos;
15936
+ {
15937
+ bOK = !!DoSaveFile(m_hwnd, filename.c_str());
15938
+ }
15939
+ g_settings.bUseIDC_STATIC = bUseIDC_STATIC;
15940
+ g_settings.bAskUpdateResH = bAskUpdateResH;
15941
+ g_settings.bCompressByUPX = bCompressByUPX;
15942
+ g_settings.bSepFilesByLang = bSepFilesByLang;
15943
+ g_settings.bStoreToResFolder = bStoreToResFolder;
15944
+ g_settings.bSelectableByMacro = bSelectableByMacro;
15945
+ g_settings.bRedundantComments = bRedundantComments;
15946
+ g_settings.bWrapManifest = bWrapManifest;
15947
+ g_settings.bUseBeginEnd = bUseBeginEnd;
15948
+ g_settings.bRCFileUTF16 = bRCFileUTF16;
15949
+ g_settings.bBackup = bBackup;
15950
+ g_bNoGuiMode = bNoGuiMode;
15951
+ return bOK;
15952
+ }
15953
+
15954
+ EGA::arg_t EGA_FN EGA_RES_load(const EGA::args_t& args)
15955
+ {
15956
+ return s_pMainWnd->DoEgaResLoad(args);
15957
+ }
15958
+
15959
+ EGA::arg_t EGA_FN EGA_RES_save(const EGA::args_t& args)
15960
+ {
15961
+ return s_pMainWnd->DoEgaResSave(args);
15962
+ }
15963
+
15930
15964
EGA::arg_t EGA_FN EGA_RES_search(const EGA::args_t& args)
15931
15965
{
15932
15966
return s_pMainWnd->DoEgaResSearch(args);
@@ -16003,6 +16037,56 @@ EGA::arg_t EGA_set_id_or_str(const MIdOrString& id)
16003
16037
}
16004
16038
}
16005
16039
16040
+ EGA::arg_t MMainWnd::DoEgaResLoad(const EGA::args_t& args)
16041
+ {
16042
+ using namespace EGA;
16043
+ arg_t arg0, arg1;
16044
+
16045
+ if (args.size() >= 1)
16046
+ arg0 = EGA_eval_arg(args[0], true);
16047
+ if (args.size() >= 2)
16048
+ arg1 = EGA_eval_arg(args[1], false);
16049
+
16050
+ bool ret;
16051
+ MAnsiToWide str0(CP_UTF8, EGA_get_str(arg0));
16052
+ if (args.size() >= 2)
16053
+ {
16054
+ MAnsiToWide str1(CP_UTF8, EGA_get_str(arg1));
16055
+ ret = DoResLoad(str0.c_str(), str1.c_str());
16056
+ }
16057
+ else
16058
+ {
16059
+ ret = DoResLoad(str0.c_str(), L"");
16060
+ }
16061
+
16062
+ return make_arg<AstInt>(ret);
16063
+ }
16064
+
16065
+ EGA::arg_t MMainWnd::DoEgaResSave(const EGA::args_t& args)
16066
+ {
16067
+ using namespace EGA;
16068
+ arg_t arg0, arg1;
16069
+
16070
+ if (args.size() >= 1)
16071
+ arg0 = EGA_eval_arg(args[0], true);
16072
+ if (args.size() >= 2)
16073
+ arg1 = EGA_eval_arg(args[1], false);
16074
+
16075
+ bool ret;
16076
+ MAnsiToWide str0(CP_UTF8, EGA_get_str(arg0));
16077
+ if (args.size() >= 2)
16078
+ {
16079
+ MAnsiToWide str1(CP_UTF8, EGA_get_str(arg1));
16080
+ ret = DoResSave(str0.c_str(), str1.c_str());
16081
+ }
16082
+ else
16083
+ {
16084
+ ret = DoResSave(str0.c_str(), L"");
16085
+ }
16086
+
16087
+ return make_arg<AstInt>(ret);
16088
+ }
16089
+
16006
16090
EGA::arg_t MMainWnd::DoEgaResSearch(const EGA::args_t& args)
16007
16091
{
16008
16092
using namespace EGA;
@@ -16391,6 +16475,8 @@ void EGA_extension(void)
16391
16475
EGA_add_fn("RES_get_binary", 0, 3, EGA_RES_get_binary, "RES_get_binary([type[, name[, lang]]])");
16392
16476
EGA_add_fn("RES_set_binary", 4, 4, EGA_RES_set_binary, "RES_set_binary(type, name, lang, bin)");
16393
16477
EGA_add_fn("RES_const", 1, 1, EGA_RES_const, "RES_const(name)");
16478
+ EGA_add_fn("RES_load", 1, 2, EGA_RES_load, "RES_load(filename[, options])");
16479
+ EGA_add_fn("RES_save", 1, 2, EGA_RES_save, "RES_save(filename[, options])");
16394
16480
EGA_add_fn("RES_search", 0, 3, EGA_RES_search, "RES_search([type[, name[, lang]]])");
16395
16481
EGA_add_fn("RES_select", 0, 3, EGA_RES_select, "RES_select([type[, name[, lang]]])");
16396
16482
EGA_add_fn("RES_unload_resh", 0, 0, EGA_RES_unload_resh, "EGA_RES_unload_resh()");
@@ -16444,7 +16530,7 @@ BOOL MMainWnd::ParseCommandLine(HWND hwnd, INT argc, WCHAR **targv)
16444
16530
lstrcmpiW(arg, L"--load-options") == 0)
16445
16531
{
16446
16532
arg = targv[++iarg];
16447
- g_load_options = arg;
16533
+ m_load_options = arg;
16448
16534
continue;
16449
16535
}
16450
16536
@@ -16461,7 +16547,7 @@ BOOL MMainWnd::ParseCommandLine(HWND hwnd, INT argc, WCHAR **targv)
16461
16547
lstrcmpiW(arg, L"--save-options") == 0)
16462
16548
{
16463
16549
arg = targv[++iarg];
16464
- g_save_options = arg;
16550
+ m_save_options = arg;
16465
16551
continue;
16466
16552
}
16467
16553
0 commit comments