diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index 1974b92e..e7d93408 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -1419,6 +1419,9 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos) ) ); return 0; + case EW_SETLANG: + set_language(process_string_fromtab_toint(parms[0])); + return 0; } my_MessageBox(STR(LANG_INSTCORRUPTED),MB_OK|MB_ICONSTOP); return EXEC_ERROR; diff --git a/Source/exehead/state.h b/Source/exehead/state.h index 4c9aed61..b5de6e5b 100644 --- a/Source/exehead/state.h +++ b/Source/exehead/state.h @@ -1,9 +1,8 @@ -extern char g_usrvars[25][NSIS_MAX_STRLEN]; +extern char g_usrvars[24][NSIS_MAX_STRLEN]; #define state_command_line (g_usrvars[20]) #define state_install_directory (g_usrvars[21]) #define state_output_directory (g_usrvars[22]) #define state_exe_directory (g_usrvars[23]) -#define state_language (g_usrvars[24]) extern char g_caption[NSIS_MAX_STRLEN*2]; extern HWND g_hwnd; diff --git a/Source/exehead/util.c b/Source/exehead/util.c index ff0450aa..35569c5e 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -16,7 +16,7 @@ char g_log_file[1024]; extern char plugins_temp_dir[NSIS_MAX_STRLEN]; #endif -char g_usrvars[25][NSIS_MAX_STRLEN]; +char g_usrvars[24][NSIS_MAX_STRLEN]; HANDLE g_hInstance; @@ -486,10 +486,13 @@ void NSISCALL process_string(char *out, const char *in) case VAR_CODES_START + 22: // INSTDIR case VAR_CODES_START + 23: // OUTDIR case VAR_CODES_START + 24: // EXEDIR - case VAR_CODES_START + 25: // LANGUAGE mystrcpy(out, g_usrvars[nVarIdx - (VAR_CODES_START + 1)]); break; + case VAR_CODES_START + 25: // LANGUAGE + wsprintf(out, "%u", cur_common_strings_table->lang_id); + break; + case VAR_CODES_START + 26: // PROGRAMFILES myRegGetStr(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion", "ProgramFilesDir", out); if (!*out) diff --git a/Source/script.cpp b/Source/script.cpp index a50b9702..4517f803 100644 --- a/Source/script.cpp +++ b/Source/script.cpp @@ -21,7 +21,7 @@ static const char *usrvars="$0\0$1\0$2\0$3\0$4\0$5\0$6\0$7\0$8\0$9\0" "$R0\0$R1\0$R2\0$R3\0$R4\0$R5\0$R6\0$R7\0$R8\0$R9\0" - "$CMDLINE\0$INSTDIR\0$OUTDIR\0$EXEDIR\0$LANGUAGE\0"; + "$CMDLINE\0$INSTDIR\0$OUTDIR\0$EXEDIR\0"; int CEXEBuild::process_script(FILE *fp, char *curfilename, int *lineptr) @@ -2216,6 +2216,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char ent.offsets[0]=add_string(line.gettoken_str(1)); ent.offsets[1]=GWL_USERDATA; ent.offsets[2]=add_string(line.gettoken_str(2)); + SCRIPT_MSG("SetStaticBkColor: handle=%s color=%s\n",line.gettoken_str(1),line.gettoken_str(2)); return add_entry(&ent); #else//!NSIS_SUPPORT_HWNDS case TOK_ISWINDOW: @@ -3350,6 +3351,11 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char } SCRIPT_MSG("\n"); return add_entry(&ent); + case TOK_SETLANG: + ent.which=EW_SETLANG; + ent.offsets[0]=add_string(line.gettoken_str(1)); + SCRIPT_MSG("SetLanguage: language=%s", line.gettoken_str(1)); + return add_entry(&ent); // end of instructions ///////////////////////////////////////////////////////////////////////////////