diff --git a/Source/build.cpp b/Source/build.cpp index 06251a67..56757b37 100644 --- a/Source/build.cpp +++ b/Source/build.cpp @@ -407,7 +407,7 @@ int CEXEBuild::add_string_main(const char *string, int process) // returns offse if (build_userlangstrings.find(cp, 0, &idx) < 0) idx = -1; } free(cp); - if (idx >= 0) return -(idx+1); + if (idx >= 0) return -(idx+1+(sizeof(common_strings)+sizeof(installer_strings))/sizeof(int)); } char buf[4096]; @@ -429,7 +429,7 @@ int CEXEBuild::add_string_uninst(const char *string, int process) // returns off if (ubuild_userlangstrings.find(cp, 0, &idx) < 0) idx = -1; } free(cp); - if (idx >= 0) return -(idx+1); + if (idx >= 0) return -(idx+1+(sizeof(common_strings)+sizeof(uninstall_strings))/sizeof(int)); } char buf[4096]; diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c index baf36eef..93177158 100644 --- a/Source/exehead/Ui.c +++ b/Source/exehead/Ui.c @@ -43,9 +43,7 @@ static char gDontFookWithFocus = 0; // Added by Amir Szekely 3rd August 2002 char *language_tables; -common_strings *cur_common_strings_table; -char *cur_install_strings_table; // installer_strings/uninstall_strings depending on installer type -int *cur_user_strings_table; +int *cur_language_table; int g_quit_flag; // set when Quit has been called (meaning bail out ASAP) @@ -115,8 +113,8 @@ static int m_page=-1,m_abort; static HWND m_curwnd, m_bgwnd, m_hwndOK, m_hwndCancel; static int m_whichcfg; -static BOOL NSISCALL SetDlgItemTextFromLang_(HWND dlg, int id, langid_t lid) { - return my_SetDialogItemText(dlg,id+1000,STR(GetLangString(lid))); +static BOOL NSISCALL SetDlgItemTextFromLang_(HWND dlg, int id, int lid) { + return my_SetDialogItemText(dlg,id+1000,LANG_STR(lid)); } #define SetDlgItemTextFromLang(dlg,id,lid) SetDlgItemTextFromLang_(dlg,(id)-1000,lid) @@ -258,14 +256,7 @@ lang_again: for (i = 0; i < lang_num; i++) { language_table=language_tables+i*g_inst_cmnheader->language_table_size; if (!((lang ^ *(LANGID*)language_table) & lang_mask)) { - cur_common_strings_table=(common_strings*)(language_table+sizeof(LANGID)); - cur_install_strings_table=(void*)(cur_common_strings_table+1); -#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT - if (g_is_uninstaller) - cur_user_strings_table=(int*)((uninstall_strings*)cur_install_strings_table+1); - else -#endif - cur_user_strings_table=(int*)((installer_strings*)cur_install_strings_table+1); + cur_language_table=(int*)(language_table+sizeof(LANGID)); break; } } @@ -279,7 +270,7 @@ lang_again: myitoa(state_language, *(LANGID*)language_table); - SendMessage(m_bgwnd, WM_SETTEXT, 0, (LPARAM)process_string_from_lang(g_caption,LANGID_CAPTION)); + SendMessage(m_bgwnd, WM_SETTEXT, 0, (LPARAM)process_string_fromtab(g_caption,LANG_CAPTION)); } int NSISCALL ui_doinstall(void) @@ -352,7 +343,7 @@ int NSISCALL ui_doinstall(void) // Multilingual support { extern char *g_db_strtab; - lang_num=g_inst_cmnheader->str_tables_num; + lang_num=g_inst_cmnheader->language_tables_num; language_tables=(void*)(g_db_strtab+g_inst_cmnheader->num_string_bytes); myitoa(state_language, GetUserDefaultLangID()); @@ -482,32 +473,32 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) g_hwnd=hwndDlg; m_hwndOK=GetDlgItem(hwndDlg,IDOK); m_hwndCancel=GetDlgItem(hwndDlg,IDCANCEL); - SetDlgItemTextFromLang(hwndDlg,IDC_VERSTR,LANGID_BRANDING); + SetDlgItemTextFromLang(hwndDlg,IDC_VERSTR,LANG_BRANDING); SetClassLong(hwndDlg,GCL_HICON,(long)g_hIcon); - SetDlgItemTextFromLang(hwndDlg,IDCANCEL,LANGID_BTN_CANCEL); + SetDlgItemTextFromLang(hwndDlg,IDCANCEL,LANG_BTN_CANCEL); #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT if (!g_is_uninstaller) #endif - SetDlgItemTextFromLang(hwndDlg,IDC_BACK,LANGID_BTN_BACK); + SetDlgItemTextFromLang(hwndDlg,IDC_BACK,LANG_BTN_BACK); ShowWindow(hwndDlg,SW_SHOW); } #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT if (g_is_uninstaller) { - islp = (LANG_UNINST_TEXT>0); + islp = LANG_STR_TAB(LANG_UNINST_TEXT); iscp++; } else #endif//NSIS_CONFIG_UNINSTALL_SUPPORT { #ifdef NSIS_CONFIG_LICENSEPAGE - islp = (LANG_LICENSE_DATA>0); + islp = LANG_STR_TAB(LANG_LICENSE_DATA); #endif//NSIS_CONFIG_LICENSEPAGE #ifdef NSIS_CONFIG_COMPONENTPAGE - iscp = (LANG_COMP_TEXT>0); + iscp = LANG_STR_TAB(LANG_COMP_TEXT); #endif//NSIS_CONFIG_COMPONENTPAGE - ispotentiallydp = (LANG_DIR_TEXT>0); + ispotentiallydp = LANG_STR_TAB(LANG_DIR_TEXT); if (ispotentiallydp && !((g_inst_cmnheader->misc_flags&2) && is_valid_instpath(state_install_directory) @@ -553,19 +544,19 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) else if (!m_curwnd) { HWND hwndtmp; - langid_t langid = - (m_page == g_max_page) ? LANGID_BTN_CLOSE : + int str = + (m_page == g_max_page) ? LANG_BTN_CLOSE : #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT - g_is_uninstaller ? LANGID_BTN_UNINST : + g_is_uninstaller ? LANG_BTN_UNINST : #endif #ifdef NSIS_CONFIG_LICENSEPAGE - (m_page == 0) ? LANGID_BTN_LICENSE : + (m_page == 0) ? LANG_BTN_LICENSE : #endif - (m_page == 2 || (m_page == 1 && !isdp)) ? LANGID_BTN_INSTALL : - LANGID_BTN_NEXT; - SetDlgItemTextFromLang(hwndDlg,IDOK,langid); + (m_page == 2 || (m_page == 1 && !isdp)) ? LANG_BTN_INSTALL : + LANG_BTN_NEXT; + SetDlgItemTextFromLang(hwndDlg,IDOK,str); mystrcpy(g_tmp,g_caption); - process_string_from_lang(g_tmp+mystrlen(g_tmp),LANGID_SUBCAPTION(m_page)); + process_string_fromtab(g_tmp+mystrlen(g_tmp),LANG_SUBCAPTION(m_page)); SetWindowText(hwndDlg,g_tmp); @@ -664,14 +655,14 @@ static BOOL CALLBACK LicenseProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM static HWND hwLicense; if (uMsg == WM_INITDIALOG) { - EDITSTREAM es={(DWORD)STR(LANG_LICENSE_DATA),0,StreamLicense}; + EDITSTREAM es={(DWORD)LANG_STR(LANG_LICENSE_DATA),0,StreamLicense}; hwLicense=GetUIItem(IDC_EDIT1); SendMessage(hwLicense,EM_AUTOURLDETECT,TRUE,0); SendMessage(hwLicense,EM_SETBKGNDCOLOR,0,g_inst_header->license_bg>=0?g_inst_header->license_bg:GetSysColor(COLOR_BTNFACE)); SendMessage(hwLicense,EM_SETEVENTMASK,0,ENM_LINK|ENM_KEYEVENTS); //XGE 8th September 2002 Or'd in ENM_KEYEVENTS dwRead=0; SendMessage(hwLicense,EM_STREAMIN,(((char*)es.dwCookie)[0]=='{')?SF_RTF:SF_TEXT,(LPARAM)&es); - SetUITextFromLang(IDC_INTROTEXT,LANGID_LICENSE_TEXT); + SetUITextFromLang(IDC_INTROTEXT,LANG_LICENSE_TEXT); //XGE 5th September 2002 - place the initial focus in the richedit control gDontFookWithFocus++; SetFocus(hwLicense); @@ -728,8 +719,8 @@ static BOOL CALLBACK UninstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l { if (uMsg == WM_INITDIALOG) { - SetUITextFromLang(IDC_INTROTEXT,LANGID_UNINST_TEXT); - SetUITextFromLang(IDC_UNINSTFROM,LANGID_UNINST_SUBTEXT); + SetUITextFromLang(IDC_INTROTEXT,LANG_UNINST_TEXT); + SetUITextFromLang(IDC_UNINSTFROM,LANG_UNINST_SUBTEXT); SetUITextNT(IDC_EDIT1,state_install_directory); } return HandleStaticBkColor(); @@ -769,9 +760,9 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar } #endif SetUITextNT(IDC_DIR,state_install_directory); - SetUITextFromLang(IDC_INTROTEXT,LANGID_DIR_TEXT); - SetUITextFromLang(IDC_BROWSE,LANGID_BTN_BROWSE); - SetUITextFromLang(IDC_SELDIRTEXT,LANGID_DIR_SUBTEXT); + SetUITextFromLang(IDC_INTROTEXT,LANG_DIR_TEXT); + SetUITextFromLang(IDC_BROWSE,LANG_BTN_BROWSE); + SetUITextFromLang(IDC_SELDIRTEXT,LANG_DIR_SUBTEXT); } if (uMsg == WM_COMMAND) { @@ -862,12 +853,12 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar // Added by Amir Szekely 24th July 2002 // Allows 'SpaceTexts none' - if (LANG_SPACE_REQ) { - inttosizestr(total,mystrcpy(s,STR(LANG_SPACE_REQ))); + if (LANG_STR_TAB(LANG_SPACE_REQ)) { + inttosizestr(total,mystrcpy(s,LANG_STR(LANG_SPACE_REQ))); SetUITextNT(IDC_SPACEREQUIRED,s); if (available != -1) { - inttosizestr(available,mystrcpy(s,STR(LANG_SPACE_AVAIL))); + inttosizestr(available,mystrcpy(s,LANG_STR(LANG_SPACE_AVAIL))); SetUITextNT(IDC_SPACEAVAILABLE,s); } else @@ -967,9 +958,9 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar hTreeItems=(HTREEITEM*)my_GlobalAlloc(sizeof(HTREEITEM)*num_sections); hBMcheck1=LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); - SetUITextFromLang(IDC_INTROTEXT,LANGID_COMP_TEXT); - SetUITextFromLang(IDC_TEXT1,LANGID_COMP_SUBTEXT(0)); - SetUITextFromLang(IDC_TEXT2,LANGID_COMP_SUBTEXT(1)); + SetUITextFromLang(IDC_INTROTEXT,LANG_COMP_TEXT); + SetUITextFromLang(IDC_TEXT1,LANG_COMP_SUBTEXT(0)); + SetUITextFromLang(IDC_TEXT2,LANG_COMP_SUBTEXT(1)); oldTreeWndProc=SetWindowLong(hwndTree1,GWL_WNDPROC,(DWORD)newTreeWndProc); @@ -993,7 +984,7 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar { SendMessage(hwndCombo1,CB_ADDSTRING,0,(LPARAM)GetStringFromStringTab(g_inst_header->install_types_ptr[m_num_insttypes])); } - if (g_inst_header->no_custom_instmode_flag!=1) SendMessage(hwndCombo1,CB_ADDSTRING,0,(LPARAM)STR(LANG_COMP_CUSTOM)); + if (g_inst_header->no_custom_instmode_flag!=1) SendMessage(hwndCombo1,CB_ADDSTRING,0,(LPARAM)LANG_STR(LANG_COMP_CUSTOM)); SendMessage(hwndCombo1,CB_SETCURSEL,m_whichcfg,0); } @@ -1251,7 +1242,7 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar ShowWindow(GetUIItem(IDC_TEXT2),c); } - if (LANG_SPACE_REQ) { + if (LANG_STR_TAB(LANG_SPACE_REQ)) { int x,total; char s[128]; for (total=x=0; x < num_sections; x ++) @@ -1259,7 +1250,7 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar if (g_inst_section[x].default_state&DFS_SET) total+=g_inst_section[x].size_kb; } - inttosizestr(total,mystrcpy(s,STR(LANG_SPACE_REQ))); + inttosizestr(total,mystrcpy(s,LANG_STR(LANG_SPACE_REQ))); SetUITextNT(IDC_SPACEREQUIRED,s); } } @@ -1271,9 +1262,9 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar int ui_st_updateflag=0x3; -void NSISCALL update_status_text_from_lang(langid_t id, const char *text2) +void NSISCALL update_status_text_from_lang(int id, const char *text2) { - update_status_text(STR(GetLangString(id)), text2); + update_status_text(LANG_STR(id), text2); } void NSISCALL update_status_text(const char *text1, const char *text2) @@ -1358,7 +1349,7 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa #endif { int x; - log_printf3("New install of \"%s\" to \"%s\"",STR(LANG_NAME),state_install_directory); + log_printf3("New install of \"%s\" to \"%s\"",LANG_STR(LANG_NAME),state_install_directory); for (x=0; x < num_sections; x ++) { #ifdef NSIS_CONFIG_COMPONENTPAGE @@ -1380,7 +1371,7 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa if (lb_fg >= 0) { ListView_SetTextColor(insthwnd, lb_fg); } - SetWindowText(insthwndbutton,STR(LANG_BTN_DETAILS)); + SetWindowText(insthwndbutton,LANG_STR(LANG_BTN_DETAILS)); if (g_inst_cmnheader->show_details) { ShowWindow(insthwndbutton,SW_HIDE); @@ -1423,8 +1414,8 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa { ShowWindow(g_hwnd,SW_SHOWNA); mystrcpy(g_tmp,g_caption); - process_string_from_lang(g_tmp+mystrlen(g_tmp),LANGID_SUBCAPTION(g_max_page+1)); - update_status_text_from_lang(LANGID_COMPLETED,""); + process_string_fromtab(g_tmp+mystrlen(g_tmp),LANG_SUBCAPTION(g_max_page+1)); + update_status_text_from_lang(LANG_COMPLETED,""); SetWindowText(g_hwnd,g_tmp); SetFocus(h); } @@ -1450,7 +1441,7 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa { DWORD pos = GetMessagePos(); HMENU menu = CreatePopupMenu(); - AppendMenu(menu,MF_STRING,1,GetStringFromStringTab(GetLangString(LANGID_COPYDETAILS))); + AppendMenu(menu,MF_STRING,1,LANG_STR(LANG_COPYDETAILS)); if (1==TrackPopupMenu( menu, TPM_NONOTIFY|TPM_RETURNCMD, diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index 69f8ed1d..8174a56e 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -234,10 +234,10 @@ static int NSISCALL ExecuteEntry(entry *entry_) log_printf3("CreateDirectory: \"%s\" (%d)",buf1,parm1); if (parm1) { - update_status_text_from_lang(LANGID_OUTPUTDIR,buf1); + update_status_text_from_lang(LANG_OUTPUTDIR,buf1); mystrcpy(state_output_directory,buf1); } - else update_status_text_from_lang(LANGID_CREATEDIR,buf1); + else update_status_text_from_lang(LANG_CREATEDIR,buf1); { char *tp; char *p; @@ -306,7 +306,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) log_printf2("Rename: %s",buf3); if (MoveFile(buf0,buf1)) { - update_status_text_from_lang(LANGID_RENAME,buf3); + update_status_text_from_lang(LANG_RENAME,buf3); } else { @@ -317,7 +317,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) exec_rebootflag++; #endif MoveFileOnReboot(buf0,buf1); - update_status_text_from_lang(LANGID_RENAMEONREBOOT,buf3); + update_status_text_from_lang(LANG_RENAMEONREBOOT,buf3); log_printf2("Rename on reboot: %s",buf3); } else @@ -415,7 +415,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) { if (overwriteflag) { - update_status_text_from_lang(LANGID_SKIPPED,buf3); + update_status_text_from_lang(LANG_SKIPPED,buf3); if (overwriteflag==2) exec_errorflag++; log_printf3("File: skipped: \"%s\" (overwriteflag=%d)",buf0,overwriteflag); return 0; @@ -424,7 +424,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) mystrcpy(buf2,g_usrvars[0]);//save $0 mystrcpy(g_usrvars[0],buf0); - process_string_from_lang(buf1,LANGID_FILEERR); + process_string_fromtab(buf1,LANG_FILEERR); mystrcpy(g_usrvars[0],buf2); // restore $0 switch (my_MessageBox(buf1,MB_ABORTRETRYIGNORE|MB_ICONSTOP)) @@ -438,12 +438,12 @@ static int NSISCALL ExecuteEntry(entry *entry_) return 0; default: log_printf("File: error, user abort"); - update_status_text_from_lang(LANGID_CANTWRITE,buf0); + update_status_text_from_lang(LANG_CANTWRITE,buf0); return EXEC_ERROR; } } - update_status_text_from_lang(LANGID_EXTRACT,buf3); + update_status_text_from_lang(LANG_EXTRACT,buf3); ret=GetCompressedDataFromDataBlock(parm2,hOut); log_printf3("File: wrote %d to \"%s\"",ret,buf0); @@ -457,11 +457,11 @@ static int NSISCALL ExecuteEntry(entry *entry_) { if (ret == -2) { - wsprintf(buf0,"%s%s",STR(LANG_ERRORWRITING),buf3); + wsprintf(buf0,"%s%s",LANG_STR(LANG_ERRORWRITING),buf3); } else { - mystrcpy(buf0,STR(LANG_ERRORDECOMPRESSING)); + mystrcpy(buf0,LANG_STR(LANG_ERRORDECOMPRESSING)); } log_printf2("%s",buf0); my_MessageBox(buf0,MB_OK|MB_ICONSTOP); @@ -494,7 +494,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) if (DeleteFile(buf1)) { log_printf2("Delete: DeleteFile(\"%s\")",buf1); - update_status_text_from_lang(LANGID_DELETEFILE,buf1); + update_status_text_from_lang(LANG_DELETEFILE,buf1); } else { @@ -505,7 +505,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) exec_rebootflag++; #endif log_printf2("Delete: DeleteFile on Reboot(\"%s\")",buf1); - update_status_text_from_lang(LANGID_DELETEONREBOOT,buf1); + update_status_text_from_lang(LANG_DELETEONREBOOT,buf1); MoveFileOnReboot(buf1,NULL); } else @@ -802,7 +802,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) char *buf1=process_string_fromparm_tobuf(0x11); char *buf2=process_string_fromparm_tobuf(0x22); wsprintf(buf3,"%s %s",buf0,buf1); - update_status_text_from_lang(LANGID_EXECSHELL, buf3); + update_status_text_from_lang(LANG_EXECSHELL, buf3); x=(int)ShellExecute(g_hwnd,buf0[0]?buf0:NULL,buf1,buf2[0]?buf2:NULL,state_output_directory,parm3); if (x < 33) { @@ -822,7 +822,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) HANDLE hProc; char *buf0=process_string_fromparm_tobuf(0x00); log_printf2("Exec: command=\"%s\"",buf0); - update_status_text_from_lang(LANGID_EXECUTE,buf0); + update_status_text_from_lang(LANG_EXECUTE,buf0); hProc=myCreateProcess(buf0,*state_output_directory?state_output_directory:NULL); @@ -949,7 +949,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) } else { - update_status_text_from_lang(LANGID_CANNOTFINDSYMBOL,buf1); + update_status_text_from_lang(LANG_CANNOTFINDSYMBOL,buf1); log_printf3("Error registering DLL: %s not found in %s",buf1,buf0); } if (!parm3) FreeLibrary(h); @@ -957,14 +957,14 @@ static int NSISCALL ExecuteEntry(entry *entry_) } else { - update_status_text_from_lang(LANGID_COULDNOTLOAD,buf0); + update_status_text_from_lang(LANG_COULDNOTLOAD,buf0); log_printf2("Error registering DLL: Could not load %s",buf0); } OleUninitialize(); } else { - update_status_text_from_lang(LANGID_NOOLE,buf0); + update_status_text_from_lang(LANG_NOOLE,buf0); log_printf("Error registering DLL: Could not initialize OLE"); } } @@ -1023,11 +1023,11 @@ static int NSISCALL ExecuteEntry(entry *entry_) if (rv) { exec_errorflag++; - update_status_text_from_lang(LANGID_ERRORCREATINGSHORTCUT,buf2); + update_status_text_from_lang(LANG_ERRORCREATINGSHORTCUT,buf2); } else { - update_status_text_from_lang(LANGID_CREATESHORTCUT,buf2); + update_status_text_from_lang(LANG_CREATESHORTCUT,buf2); } } return 0; @@ -1045,7 +1045,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) buf0[mystrlen(buf0)+1]=0; buf1[mystrlen(buf1)+1]=0; - wsprintf(buf2,"%s%s",STR(LANG_COPYTO),buf1); + wsprintf(buf2,"%s%s",LANG_STR(LANG_COPYTO),buf1); op.pFrom=buf0; op.pTo=buf1; @@ -1055,7 +1055,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) res=SHFileOperation(&op); if (res) { // some of these changes were from Edgewise (wiked_edge@yahoo.com) - update_status_text_from_lang(LANGID_COPYFAILED,""); + update_status_text_from_lang(LANG_COPYFAILED,""); exec_errorflag++; } } @@ -1453,11 +1453,11 @@ static int NSISCALL ExecuteEntry(entry *entry_) log_printf3("created uninstaller: %d, \"%s\"",ret,buf1); if (ret < 0) { - update_status_text_from_lang(LANGID_ERRORCREATING,buf0); + update_status_text_from_lang(LANG_ERRORCREATING,buf0); DeleteFile(buf1); } else - update_status_text_from_lang(LANGID_CREATEDUNINST,buf0); + update_status_text_from_lang(LANG_CREATEDUNINST,buf0); } return 0; #endif//NSIS_CONFIG_UNINSTALL_SUPPORT @@ -1528,6 +1528,6 @@ static int NSISCALL ExecuteEntry(entry *entry_) return 0; #endif // NSIS_CONFIG_PLUGIN_SUPPORT } - my_MessageBox(STR(LANG_INSTCORRUPTED),MB_OK|MB_ICONSTOP); + my_MessageBox(LANG_STR(LANG_INSTCORRUPTED),MB_OK|MB_ICONSTOP); return EXEC_ERROR; } diff --git a/Source/exehead/fileform.c b/Source/exehead/fileform.c index 3c29c97f..190fbb50 100644 --- a/Source/exehead/fileform.c +++ b/Source/exehead/fileform.c @@ -3,6 +3,7 @@ #include "util.h" #include "state.h" #include "resource.h" +#include "lang.h" #ifdef NSIS_CONFIG_COMPRESSION_SUPPORT #ifdef NSIS_COMPRESS_USE_ZLIB @@ -112,11 +113,7 @@ const char * NSISCALL loadHeaders(void) const char * NSISCALL GetStringFromStringTab(int offs) { - /*if (offs < 0) { - wsprintf(ps_tmpbuf, "my first user madasd %d->%d which should be %d\n%d", offs, cur_user_strings_table[-(offs+1)], cur_user_strings_table[0], LANG_COMP_TEXT); - my_MessageBox(ps_tmpbuf, MB_OK); - }*/ - return g_db_strtab+(offs < 0 ? cur_user_strings_table[-(offs+1)] : offs); + return g_db_strtab+(offs < 0 ? LANG_STR_TAB(offs) : offs); } #define IBUFSIZE 16384 diff --git a/Source/exehead/fileform.h b/Source/exehead/fileform.h index 882784e2..cd3852db 100644 --- a/Source/exehead/fileform.h +++ b/Source/exehead/fileform.h @@ -279,7 +279,7 @@ typedef struct // Settings common to both installers and uninstallers typedef struct { - int str_tables_num; // number of strings tables in array + int language_tables_num; // number of strings tables in array int language_table_size; // size of each language table int num_entries; // total number of entries diff --git a/Source/exehead/lang.h b/Source/exehead/lang.h index 69ae15d8..07bd1a08 100644 --- a/Source/exehead/lang.h +++ b/Source/exehead/lang.h @@ -37,133 +37,77 @@ // these IDs fall between -128 to +127 and compile to tiny 2-byte PUSH <8-bit> // instructions when being passed to the functions. -typedef void *langid_t; // Just so compiler can warn if an ID is given to a - // function expecting a string offset and vice-versa. - // Please note that all LANG_* define the offset not the string itself. -// To get the string itself use process_string_fromtab, GetStringFromStringTab or STR(). +// To get the string itself use process_string_fromtab, GetStringFromStringTab or LANG_STR(). -#define STR(x) GetStringFromStringTab(x) +#define LANG_STR(x) GetStringFromStringTab(x) +#define LANG_STR_TAB(x) cur_language_table[-((int)x+1)] -#define INSTALL_STR(x) (((installer_strings *)cur_install_strings_table)->x) -#define INSTALL_ID(x) ((langid_t)((~(UINT)0) - FIELD_OFFSET(installer_strings, x) / sizeof(int))) +#define INSTALL_STR(x) (0 - ((sizeof(common_strings) + FIELD_OFFSET(installer_strings, x)) / sizeof(int) + 1)) +//#define INSTALL_STR(x) (-(int)((FIELD_OFFSET(installer_strings, x) / sizeof(int)) + (sizeof(common_strings) / sizeof(int)))) // Installer specific strings #define LANG_BTN_BACK (INSTALL_STR(backbutton)) -#define LANGID_BTN_BACK (INSTALL_ID(backbutton)) #define LANG_BTN_NEXT (INSTALL_STR(nextbutton)) -#define LANGID_BTN_NEXT (INSTALL_ID(nextbutton)) #define LANG_BTN_BROWSE (INSTALL_STR(browse)) -#define LANGID_BTN_BROWSE (INSTALL_ID(browse)) #define LANG_BTN_INSTALL (INSTALL_STR(installbutton)) -#define LANGID_BTN_INSTALL (INSTALL_ID(installbutton)) #define LANG_SPACE_REQ (INSTALL_STR(spacerequired)) -#define LANGID_SPACE_REQ (INSTALL_ID(spacerequired)) #define LANG_SPACE_AVAIL (INSTALL_STR(spaceavailable)) -#define LANGID_SPACE_AVAIL (INSTALL_ID(spaceavailable)) #define LANG_COMP_CUSTOM (INSTALL_STR(custom)) -#define LANGID_COMP_CUSTOM (INSTALL_ID(custom)) #define LANG_DIR_TEXT (INSTALL_STR(text)) -#define LANGID_DIR_TEXT (INSTALL_ID(text)) #define LANG_DIR_SUBTEXT (INSTALL_STR(dirsubtext)) -#define LANGID_DIR_SUBTEXT (INSTALL_ID(dirsubtext)) #define LANG_COMP_TEXT (INSTALL_STR(componenttext)) -#define LANGID_COMP_TEXT (INSTALL_ID(componenttext)) #define LANG_COMP_SUBTEXT(x) (INSTALL_STR(componentsubtext[x])) -#define LANGID_COMP_SUBTEXT(x) (INSTALL_ID(componentsubtext[x])) #define LANG_LICENSE_TEXT (INSTALL_STR(licensetext)) -#define LANGID_LICENSE_TEXT (INSTALL_ID(licensetext)) #define LANG_LICENSE_DATA (INSTALL_STR(licensedata)) -#define LANGID_LICENSE_DATA (INSTALL_ID(licensedata)) #define LANG_BTN_LICENSE (INSTALL_STR(licensebutton)) -#define LANGID_BTN_LICENSE (INSTALL_ID(licensebutton)) -#define UNINSTALL_STR(x) (((uninstall_strings *)cur_install_strings_table)->x) -#define UNINSTALL_ID(x) ((langid_t)((~(UINT)0) - FIELD_OFFSET(uninstall_strings, x) / sizeof(int))) +#define UNINSTALL_STR(x) (0 - ((sizeof(common_strings) + FIELD_OFFSET(uninstall_strings, x)) / sizeof(int) + 1)) // Uninstall specific strings #define LANG_BTN_UNINST (UNINSTALL_STR(uninstbutton)) -#define LANGID_BTN_UNINST (UNINSTALL_ID(uninstbutton)) #define LANG_UNINST_TEXT (UNINSTALL_STR(uninstalltext)) -#define LANGID_UNINST_TEXT (UNINSTALL_ID(uninstalltext)) #define LANG_UNINST_SUBTEXT (UNINSTALL_STR(uninstalltext2)) -#define LANGID_UNINST_SUBTEXT (UNINSTALL_ID(uninstalltext2)) -#define COMMON_STR(x) (cur_common_strings_table->x) -#define COMMON_ID(x) ((langid_t)(FIELD_OFFSET(common_strings, x) / sizeof(int))) +#define COMMON_STR(x) (-1 - (int)(FIELD_OFFSET(common_strings, x) / sizeof(int))) // Common strings #define LANG_BRANDING (COMMON_STR(branding)) -#define LANGID_BRANDING (COMMON_ID(branding)) #define LANG_BTN_CANCEL (COMMON_STR(cancelbutton)) -#define LANGID_BTN_CANCEL (COMMON_ID(cancelbutton)) #define LANG_BTN_DETAILS (COMMON_STR(showdetailsbutton)) -#define LANGID_BTN_DETAILS (COMMON_ID(showdetailsbutton)) #define LANG_COMPLETED (COMMON_STR(completed)) -#define LANGID_COMPLETED (COMMON_ID(completed)) #define LANG_BTN_CLOSE (COMMON_STR(closebutton)) -#define LANGID_BTN_CLOSE (COMMON_ID(closebutton)) #define LANG_NAME (COMMON_STR(name)) -#define LANGID_NAME (COMMON_ID(name)) #define LANG_CAPTION (COMMON_STR(caption)) -#define LANGID_CAPTION (COMMON_ID(caption)) #define LANG_SUBCAPTION(x) (COMMON_STR(subcaptions[x])) -#define LANGID_SUBCAPTION(x) (COMMON_ID(subcaptions[x])) // instruction strings #define LANG_FILEERR (COMMON_STR(fileerrtext)) -#define LANGID_FILEERR (COMMON_ID(fileerrtext)) #define LANG_DELETEFILE (COMMON_STR(del_file)) -#define LANGID_DELETEFILE (COMMON_ID(del_file)) #define LANG_DLLREGERROR (COMMON_STR(err_reg_dll)) -#define LANGID_DLLREGERROR (COMMON_ID(err_reg_dll)) #define LANG_REMOVEDIR (COMMON_STR(remove_dir)) -#define LANGID_REMOVEDIR (COMMON_ID(remove_dir)) #define LANG_OUTPUTDIR (COMMON_STR(output_dir)) -#define LANGID_OUTPUTDIR (COMMON_ID(output_dir)) #define LANG_CREATEDIR (COMMON_STR(create_dir)) -#define LANGID_CREATEDIR (COMMON_ID(create_dir)) #define LANG_RENAME (COMMON_STR(rename)) -#define LANGID_RENAME (COMMON_ID(rename)) #define LANG_RENAMEONREBOOT (COMMON_STR(rename_on_reboot)) -#define LANGID_RENAMEONREBOOT (COMMON_ID(rename_on_reboot)) #define LANG_SKIPPED (COMMON_STR(skipped)) -#define LANGID_SKIPPED (COMMON_ID(skipped)) #define LANG_CANTWRITE (COMMON_STR(cant_write)) -#define LANGID_CANTWRITE (COMMON_ID(cant_write)) #define LANG_EXTRACT (COMMON_STR(extract)) -#define LANGID_EXTRACT (COMMON_ID(extract)) #define LANG_ERRORWRITING (COMMON_STR(err_writing)) -#define LANGID_ERRORWRITING (COMMON_ID(err_writing)) #define LANG_ERRORDECOMPRESSING (COMMON_STR(err_decompressing)) -#define LANGID_ERRORDECOMPRESSING (COMMON_ID(err_decompressing)) #define LANG_DELETEONREBOOT (COMMON_STR(del_on_reboot)) -#define LANGID_DELETEONREBOOT (COMMON_ID(del_on_reboot)) #define LANG_EXECSHELL (COMMON_STR(exec_shell)) -#define LANGID_EXECSHELL (COMMON_ID(exec_shell)) #define LANG_EXECUTE (COMMON_STR(exec)) -#define LANGID_EXECUTE (COMMON_ID(exec)) #define LANG_CANNOTFINDSYMBOL (COMMON_STR(symbol_not_found)) -#define LANGID_CANNOTFINDSYMBOL (COMMON_ID(symbol_not_found)) #define LANG_COULDNOTLOAD (COMMON_STR(could_not_load)) -#define LANGID_COULDNOTLOAD (COMMON_ID(could_not_load)) #define LANG_NOOLE (COMMON_STR(no_ole)) -#define LANGID_NOOLE (COMMON_ID(no_ole)) #define LANG_ERRORCREATINGSHORTCUT (COMMON_STR(err_creating_shortcut)) -#define LANGID_ERRORCREATINGSHORTCUT (COMMON_ID(err_creating_shortcut)) #define LANG_CREATESHORTCUT (COMMON_STR(create_shortcut)) -#define LANGID_CREATESHORTCUT (COMMON_ID(create_shortcut)) #define LANG_COPYTO (COMMON_STR(copy_to)) -#define LANGID_COPYTO (COMMON_ID(copy_to)) #define LANG_COPYFAILED (COMMON_STR(copy_failed)) -#define LANGID_COPYFAILED (COMMON_ID(copy_failed)) #define LANG_ERRORCREATING (COMMON_STR(err_creating)) -#define LANGID_ERRORCREATING (COMMON_ID(err_creating)) #define LANG_CREATEDUNINST (COMMON_STR(created_uninst)) -#define LANGID_CREATEDUNINST (COMMON_ID(created_uninst)) #define LANG_INSTCORRUPTED (COMMON_STR(inst_corrupted)) -#define LANGID_INSTCORRUPTED (COMMON_ID(inst_corrupted)) #define LANG_COPYDETAILS (COMMON_STR(copy_details)) -#define LANGID_COPYDETAILS (COMMON_ID(copy_details)) #endif//_NSIS_LANG_H_ diff --git a/Source/exehead/ui.h b/Source/exehead/ui.h index c7f434a9..480fdfc4 100644 --- a/Source/exehead/ui.h +++ b/Source/exehead/ui.h @@ -1,16 +1,12 @@ #ifndef _UI_H_ #define _UI_H_ -#include "lang.h" - // Added by Amir Szekely 3rd August 2002 extern char *language_tables; -extern common_strings *cur_common_strings_table; -extern char *cur_install_strings_table; // installer_strings/uninstall_strings depending on installer type -extern int *cur_user_strings_table; +extern int *cur_language_table; int NSISCALL ui_doinstall(void); -void NSISCALL update_status_text_from_lang(langid_t id, const char *text2); +void NSISCALL update_status_text_from_lang(int id, const char *text2); void NSISCALL update_status_text(const char *text1, const char *text2); extern int ui_st_updateflag; diff --git a/Source/exehead/util.c b/Source/exehead/util.c index db0a7065..7d3eb516 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -70,7 +70,7 @@ void NSISCALL doRMDir(char *buf, int recurse) if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) doRMDir(buf,recurse); else { - update_status_text_from_lang(LANGID_DELETEFILE,buf); + update_status_text_from_lang(LANG_DELETEFILE,buf); if (fd.dwFileAttributes & FILE_ATTRIBUTE_READONLY) SetFileAttributes(buf,fd.dwFileAttributes^FILE_ATTRIBUTE_READONLY); DeleteFile(buf); @@ -82,7 +82,7 @@ void NSISCALL doRMDir(char *buf, int recurse) buf[i]=0; // fix buffer } log_printf2("RMDir: RemoveDirectory(\"%s\")",buf); - update_status_text_from_lang(LANGID_REMOVEDIR,buf); + update_status_text_from_lang(LANG_REMOVEDIR,buf); RemoveDirectory(buf); } #endif//NSIS_SUPPORT_RMDIR @@ -336,19 +336,6 @@ char * NSISCALL process_string_fromtab(char *out, int offs) return lstrcpyn(out,process_string(ps_tmpbuf,GetStringFromStringTab(offs)),NSIS_MAX_STRLEN); } -char * NSISCALL process_string_from_lang(char *out, langid_t id) -{ - return process_string_fromtab(out, GetLangString(id)); -} - -// Retrieve the string offset associated with the language string ID given -int NSISCALL GetLangString(langid_t id) -{ - return (int)id < 0 ? - *((int *)cur_install_strings_table - 1 - (int)id) : - *((int *)cur_common_strings_table + (int)id); -} - void NSISCALL myitoa(char *s, int d) { wsprintf(s,"%d",d); } int NSISCALL myatoi(char *s) diff --git a/Source/exehead/util.h b/Source/exehead/util.h index d22a4172..c1329300 100644 --- a/Source/exehead/util.h +++ b/Source/exehead/util.h @@ -1,11 +1,8 @@ #include "config.h" -#include "lang.h" extern char ps_tmpbuf[NSIS_MAX_STRLEN*2]; char * NSISCALL process_string(char *out, const char *in); char * NSISCALL process_string_fromtab(char *out, int offs); -char * NSISCALL process_string_from_lang(char *out, langid_t id); -int NSISCALL GetLangString(langid_t id); void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out); int NSISCALL myatoi(char *s); void NSISCALL myitoa(char *s, int d); diff --git a/Source/lang.cpp b/Source/lang.cpp index 22ff3696..e68caa29 100644 --- a/Source/lang.cpp +++ b/Source/lang.cpp @@ -267,7 +267,7 @@ int CEXEBuild::WriteStringTables() { if (build_userlangstrings.getnum()) build_langtables.add(string_tables[i]->user_strings.get(), string_tables[i]->user_strings.getlen()); } - build_header.common.str_tables_num = st_num; + build_header.common.language_tables_num = st_num; build_header.common.language_table_size = sizeof(LANGID) + sizeof(common_strings) + sizeof(installer_strings) + (build_userlangstrings.getnum() * sizeof(int)); for (i = 0; i < st_num; i++) { @@ -277,7 +277,7 @@ int CEXEBuild::WriteStringTables() { if (ubuild_userlangstrings.getnum()) ubuild_langtables.add(string_tables[i]->user_ustrings.get(), string_tables[i]->user_ustrings.getlen()); } - build_uninst.common.str_tables_num = st_num; + build_uninst.common.language_tables_num = st_num; build_uninst.common.language_table_size = sizeof(LANGID) + sizeof(common_strings) + sizeof(uninstall_strings) + (ubuild_userlangstrings.getnum() * sizeof(int)); SCRIPT_MSG("Done!\n"); diff --git a/Source/script.cpp b/Source/script.cpp index f749eda9..73028fed 100644 --- a/Source/script.cpp +++ b/Source/script.cpp @@ -2957,7 +2957,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char ent.offsets[0]=line.gettoken_enum(1,usrvars); int k=line.gettoken_enum(2,rootkeys[0]); if (k == -1) k=line.gettoken_enum(2,rootkeys[1]); - if (!ent.offsets[0] || k == -1) PRINTHELP() + if (ent.offsets[0] == -1 || k == -1) PRINTHELP() ent.offsets[1]=(int)rootkey_tab[k]; ent.offsets[2]=add_string(line.gettoken_str(3)); ent.offsets[3]=add_string(line.gettoken_str(4));