summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xContrib/BgImage/BgImage.cpp2
-rwxr-xr-xContrib/Graphics/Wizard/arrow.bmpbin52576 -> 52576 bytes
-rwxr-xr-xContrib/Language files/Malay.nlf (renamed from Contrib/Language files/Malaysian.nlf)44
-rwxr-xr-xContrib/Language files/SConscript2
-rwxr-xr-xContrib/Language files/Thai.nlf218
-rwxr-xr-xContrib/Library/TypeLib/TypeLib.cpp2
-rwxr-xr-xContrib/Modern UI/Changelog.txt4
-rwxr-xr-xContrib/Modern UI/Language files/Kurdish.nsh13
-rwxr-xr-xContrib/Modern UI/Language files/Luxembourgish.nsh2
-rwxr-xr-xContrib/Modern UI/Language files/Malay.nsh (renamed from Contrib/Modern UI/Language files/Malaysian.nsh)18
-rwxr-xr-xContrib/Modern UI/Language files/Thai.nsh105
-rwxr-xr-xContrib/Modern UI/Readme.html6
-rwxr-xr-xContrib/Modern UI/SConscript2
-rwxr-xr-xContrib/Modern UI/System.nsh29
-rwxr-xr-xContrib/NSISdl/nsisdl.cpp2
-rwxr-xr-xDocs/src/compiler.but2
-rwxr-xr-xDocs/src/compilerflags.but2
-rwxr-xr-xDocs/src/credits.but2
-rwxr-xr-xDocs/src/history.but42
-rwxr-xr-xDocs/src/misc.but4
-rwxr-xr-xDocs/src/plugin.but14
-rwxr-xr-xDocs/src/script.but2
-rwxr-xr-xDocs/src/tutorial.but2
-rwxr-xr-xDocs/src/usefulfunc.but2
-rwxr-xr-xDocs/src/usefulinfos.but4
-rwxr-xr-xDocs/src/var.but9
-rwxr-xr-xExamples/Library.nsi115
-rwxr-xr-xExamples/LogicLib.nsi3
-rwxr-xr-xExamples/Modern UI/MultiLanguage.nsi2
-rwxr-xr-xExamples/SConscript1
-rwxr-xr-xExamples/UserVars.nsi8
-rwxr-xr-xExamples/WordFuncTest.nsi3
-rwxr-xr-xExamples/bigtest.nsi6
-rwxr-xr-xExamples/example1.nsi6
-rwxr-xr-xExamples/example2.nsi10
-rwxr-xr-xExamples/makensis.nsi1
-rwxr-xr-xInclude/FileFunc.nsh18
-rwxr-xr-xInclude/Library.nsh136
-rwxr-xr-xInclude/LogicLib.nsh61
-rwxr-xr-xInclude/UpgradeDLL.nsh36
-rwxr-xr-xInclude/WordFunc.nsh8
-rwxr-xr-xMenu/images/header.gifbin6763 -> 6738 bytes
-rwxr-xr-xSCons/Config/gnu12
-rwxr-xr-xSCons/Config/linker_script214
-rwxr-xr-xSConstruct34
-rwxr-xr-xSource/exehead/Main.c25
-rwxr-xr-xSource/exehead/Ui.c6
-rwxr-xr-xSource/exehead/exec.c12
-rwxr-xr-xSource/exehead/util.c22
-rwxr-xr-xSource/exehead/util.h3
-rwxr-xr-xSource/script.cpp26
-rwxr-xr-xSource/tokens.cpp2
52 files changed, 956 insertions, 348 deletions
diff --git a/Contrib/BgImage/BgImage.cpp b/Contrib/BgImage/BgImage.cpp
index afe1975..28d70dd 100755
--- a/Contrib/BgImage/BgImage.cpp
+++ b/Contrib/BgImage/BgImage.cpp
@@ -637,7 +637,7 @@ int __stdcall myatoi(char *s)
return (int)v;
}
-BOOL WINAPI DllMain(HINSTANCE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) {
+extern "C" BOOL WINAPI DllMain(HINSTANCE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) {
g_hInstance=hInst;
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
diff --git a/Contrib/Graphics/Wizard/arrow.bmp b/Contrib/Graphics/Wizard/arrow.bmp
index 71a1e48..9f7426b 100755
--- a/Contrib/Graphics/Wizard/arrow.bmp
+++ b/Contrib/Graphics/Wizard/arrow.bmp
Binary files differ
diff --git a/Contrib/Language files/Malaysian.nlf b/Contrib/Language files/Malay.nlf
index e1acdf9..1ad0e37 100755
--- a/Contrib/Language files/Malaysian.nlf
+++ b/Contrib/Language files/Malay.nlf
@@ -23,7 +23,7 @@ Uninstall $(^Name)
# ^DirSubCaption
: Folder kemasukan
# ^InstallingSubCaption
-: Menginstall
+: Memasang
# ^CompletedSubCaption
: Selesai
# ^UnComponentsSubCaption
@@ -37,15 +37,15 @@ Uninstall $(^Name)
# ^UnCompletedSubCaption
: Tidak Selesai
# ^BackBtn
-< &Undur
+< &Ke Belakang
# ^NextBtn
-&Maju >
+&Ke Depan >
# ^AgreeBtn
Saya &setuju
# ^AcceptBtn
-Saya bers&umpah
+Saya s&etuju dengan Perlesenan
# ^DontAcceptBtn
-Saya &tidak mahu bersumpah
+Saya &tidak setuju dengan Perlesenan
# ^InstallBtn
&Masukkan
# ^UninstallBtn
@@ -59,9 +59,9 @@ S&elusur...
# ^ShowDetailsBtn
Buka &lagi
# ^ClickNext
-Klik Maju untuk teruskan.
+Klik Ke Depan untuk teruskan.
# ^ClickInstall
-Klik Masukkan untuk kemasukan.
+Klik Masukkan untuk kemasukkan.
# ^ClickUninstall
Klik Uninstall untuk membuang.
# ^Name
@@ -69,7 +69,7 @@ Nama
# ^Completed
Selesai
# ^LicenseText
-$(^NameDA). Jika anda terima perlesenan, klik Saya setuju.
+Sila baca lesen sebelum memasukkan $(^NameDA). Jika anda terima perlesenan, klik Saya setuju.
# ^LicenseTextCB
Sila baca lesen sebelum memasukkan $(^NameDA). Jika terima, beri tanda dicheckbox. $_CLICK
# ^LicenseTextRB
@@ -111,17 +111,17 @@ Setup akan membuang $(^NameDA) dari folder berikut. Untuk memilih folder lainnya
# ^UnDirBrowseText
Pilih folder untuk dibuang $(^NameDA):
# ^SpaceAvailable
-"Ruang disk yang ada: "
+"Ruang cakera keras yang ada: "
# ^SpaceRequired
-"Ruang disk yang diperlukan: "
+"Ruang cakera keras yang diperlukan: "
# ^UninstallingText
$(^NameDA) akan buang dari folder berikut. $_CLICK
# ^UninstallingSubText
Membuang:
# ^FileError
-Tidak dapat menulis pada file: \r\n\t"$0"\r\nKlik abort untuk membatalkan kemasukan,\r\nretry untuk cuba lagi, atau\r\nignore untuk abaikan file ini.
+Tidak dapat menulis pada fail: \r\n\t"$0"\r\nKlik abort untuk membatalkan kemasukan,\r\nretry untuk cuba lagi, atau\r\nignore untuk abaikan fail ini.
# ^FileError_NoIgnore
-Tidak dapat menulis pada file: \r\n\t"$0"\r\nKlik retry untuk cuba lagi, atau\r\ncancel untuk batalkan kemasukan
+Tidak dapat menulis pada fail: \r\n\t"$0"\r\nKlik retry untuk cuba lagi, atau\r\ncancel untuk batalkan kemasukan
# ^CantWrite
"Gagal menulis pada: "
# ^CopyFailed
@@ -131,23 +131,23 @@ Gagal menyalin
# ^Registering
"Mendaftarkan modul: "
# ^Unregistering
-"Melepas modul: "
+"Melepaskan modul: "
# ^SymbolNotFound
-"Tidak jumpa : "
+"Symbol tidak jumpa : "
# ^CouldNotLoad
"Tidak dapat membuka: "
# ^CreateFolder
"Membuat folder: "
# ^CreateShortcut
-"Membuat shortcut: "
+"Membuat pintasan: "
# ^CreatedUninstaller
"Membuat program unistall: "
# ^Delete
-"Memadam file: "
+"Memadam fail: "
# ^DeleteOnReboot
"Akan dipadam ketika reboot: "
# ^ErrorCreatingShortcut
-"Tidak dapat membuat shortcut: "
+"Tidak dapat membuat pintasan: "
# ^ErrorCreating
"Ralat penciptaan: "
# ^ErrorDecompressing
@@ -161,7 +161,7 @@ Ralat mendaftarkan modul DLL
# ^Extract
"Mengekstrak: "
# ^ErrorWriting
-"Ekstrak: error ketika menulis ke file "
+"Ekstrak: ralat ketika menulis ke fail "
# ^InvalidOpcode
Installer rosak: opcode tidak lengkap
# ^NoOLE
@@ -169,15 +169,15 @@ Installer rosak: opcode tidak lengkap
# ^OutputFolder
"Folder tujuan: "
# ^RemoveFolder
-"Menghapus folder: "
+"Menghapuskan folder: "
# ^RenameOnReboot
-"Akan di-Rename pada reboot: "
+"Menamakan semula pada reboot: "
# ^Rename
-"Rename: "
+"Menamakan semula: "
# ^Skipped
"Diabaikan: "
# ^CopyDetails
-Salin details ke clipboard
+Salin terperinci ke clipboard
# ^LogInstall
Catat proses kemasukan
# ^Byte
diff --git a/Contrib/Language files/SConscript b/Contrib/Language files/SConscript
index cdec63f..42fb0d2 100755
--- a/Contrib/Language files/SConscript
+++ b/Contrib/Language files/SConscript
@@ -29,7 +29,7 @@ languages = Split("""
Lithuanian.nlf
Luxembourgish.nlf
Macedonian.nlf
- Malaysian.nlf
+ Malay.nlf
Mongolian.nlf
Norwegian.nlf
Polish.nlf
diff --git a/Contrib/Language files/Thai.nlf b/Contrib/Language files/Thai.nlf
index 12ce2ee..17dec26 100755
--- a/Contrib/Language files/Thai.nlf
+++ b/Contrib/Language files/Thai.nlf
@@ -1,5 +1,6 @@
# Header, don't edit
-NLF v2
+NLF v6
+# Start editing here
# Language ID
1054
# Font and size - dash (-) means default
@@ -9,61 +10,182 @@ NLF v2
-
# RTL - anything else than RTL means LTR
-
-# Translation by TuW@nNu tuwannu@hotmail.com (asdfuae)
+# Translation by SoKoOLz, TuW@nNu (asdfuae)
+# ^Branding
Nullsoft Install System %s
+# ^SetupCaption
$(^Name) µÔ´µÑé§
-$(^Name) ¶Í¹¡ÒõԴµÑé§
+# ^UninstallCaption
+$(^Name) ¡àÅÔ¡¡ÒõԴµÑé§
+# ^LicenseSubCaption
: ¢é͵¡Å§àÃ×èͧÅÔ¢ÊÔ·¸Ôì
+# ^ComponentsSubCaption
: µÑÇàÅ×Í¡¡ÒõԴµÑé§
-: â¿Åà´ÍÃì·ÕèµÔ´µÑé§
-: ä¿Åì·ÕèµÔ´µÑé§
-: àÃÕºÃéÍÂ
-: ¡ÒÃÂ×¹Âѹ
-: ä¿Åì·Õè¶Ù¡¶Í¹ÍÍ¡¨Ò¡¡ÒõԴµÑé§
-: àÃÕºÃéÍÂ
+# ^DirSubCaption
+: á¿éÁ·ÕèµÔ´µÑé§
+# ^InstallingSubCaption
+: ¡ÓÅѧµÔ´µÑé§
+# ^CompletedSubCaption
+: àÊÃç¨ÊÔé¹
+# ^UnComponentsSubCaption
+: µÑÇàÅ×͡¡àÅÔ¡¡ÒõԴµÑé§
+# ^UnDirSubCaption
+: á¿éÁ·Õè¡àÅÔ¡¡ÒõԴµÑé§
+# ^ConfirmSubCaption
+: Â×¹Âѹ
+# ^UninstallingSubCaption
+: ¡ÓÅѧ¡àÅÔ¡¡ÒõԴµÑé§
+# ^UnCompletedSubCaption
+: àÊÃç¨ÊÔé¹
+# ^BackBtn
< &¡ÅѺä»
-&µèÍä» >
-&ÂÍÁÃѺ
+# ^NextBtn
+&·ÓµèÍä» >
+# ^AgreeBtn
+©Ñ¹ &µ¡Å§
+# ^AcceptBtn
+©Ñ¹ &µ¡Å§ÂÍÁÃѺ¢é͵èÒ§æã¹ËÑÇ¢éÍÅÔ¢ÊÔ·¸Ôì
+# ^DontAcceptBtn
+©Ñ¹ &äÁèÂÍÁÃѺ¢é͵èÒ§æã¹ËÑÇ¢éÍÅÔ¢ÊÔ·¸Ôì
+# ^InstallBtn
&µÔ´µÑé§
-&¶Í¹¡ÒõԴµÑé§
+# ^UninstallBtn
+&¡àÅÔ¡¡ÒõԴµÑé§
+# ^CancelBtn
¡àÅÔ¡
+# ^CloseBtn
&»Ô´
-&àÃÕ¡ËÒ...
+# ^BrowseBtn
+à&ÃÕ¡´Ù...
+# ^ShowDetailsBtn
áÊ´§ &ÃÒÂÅÐàÍÕ´
+# ^ClickNext
+¡´ ·ÓµèÍä» à¾×èÍ·ÓµèÍ
+# ^ClickInstall
+¡´ µÔ´µÑé§ à¾×èÍ·Ó¡ÒõԴµÑé§
+# ^ClickUninstall
+¡´ ¡àÅÔ¡¡ÒõԴµÑé§ à¾×èÍ¡àÅÔ¡¡ÒõԴµÑé§
+# ^Name
ª×èÍ
-àÃÕºÃéÍÂ
+# ^Completed
+àÊÃç¨ÊÔé¹áÅéÇ
+# ^LicenseText
+â»Ã´ÍèÒ¹·Ç¹àÃ×èͧ¡ÒÃÂÍÁÃѺã¹ÅÔ¢ÊÔ·¸Ôì¡è͹·Õè¤Ø³¨Ð·Ó¡ÒõԴµÑé§ $(^NameDA). ¶éҤسÂÍÁÃѺ¢é͵¡Å§ã¹·Ø¡æ´éÒ¹, ¡´ ©Ñ¹ÂÍÁÃѺ
+# ^LicenseTextCB
+â»Ã´ÍèÒ¹·Ç¹àÃ×èͧ¡ÒÃÂÍÁÃѺã¹ÅÔ¢ÊÔ·¸Ôì¡è͹·Õè¤Ø³¨Ð·Ó¡ÒõԴµÑé§ $(^NameDA). ¶éҤسÂÍÁÃѺ¢é͵¡Å§ã¹·Ø¡æ´éÒ¹, ¡´àÅ×Í¡·Õè¡Åèͧ´éÒ¹ÅèÒ§. $_CLICK
+# ^LicenseTextRB
+â»Ã´ÍèÒ¹·Ç¹àÃ×èͧ¡ÒÃÂÍÁÃѺã¹ÅÔ¢ÊÔ·¸Ôì¡è͹·Õè¤Ø³¨Ð·Ó¡ÒõԴµÑé§ $(^NameDA). ¶éҤسÂÍÁÃѺ¢é͵¡Å§ã¹·Ø¡æ´éÒ¹, àÅ×Í¡µÑÇàÅ×Í¡áá¢éÒ§ÅèÒ§. $_CLICK
+# ^UnLicenseText
+â»Ã´ÍèÒ¹·Ç¹àÃ×èͧ¡ÒÃÂÍÁÃѺã¹ÅÔ¢ÊÔ·¸Ôì¡è͹·Õè¤Ø³¨Ð·Ó¡ÒáàÅÔ¡µÔ´µÑé§ $(^NameDA). ¶éҤسÂÍÁÃѺ¢é͵¡Å§ã¹·Ø¡æ´éÒ¹, ¡´ ©Ñ¹ÂÍÁÃѺ
+# ^UnLicenseTextCB
+â»Ã´ÍèÒ¹·Ç¹àÃ×èͧ¡ÒÃÂÍÁÃѺã¹ÅÔ¢ÊÔ·¸Ôì¡è͹·Õè¤Ø³¨Ð·Ó¡ÒáàÅÔ¡µÔ´µÑé§ $(^NameDA). ¶éҤسÂÍÁÃѺ¢é͵¡Å§ã¹·Ø¡æ´éÒ¹, ¡´àÅ×Í¡·Õè¡Åèͧ´éÒ¹ÅèÒ§. $_CLICK
+# ^UnLicenseTextRB
+â»Ã´ÍèÒ¹·Ç¹àÃ×èͧ¡ÒÃÂÍÁÃѺã¹ÅÔ¢ÊÔ·¸Ôì¡è͹·Õè¤Ø³¨Ð·Ó¡ÒáàÅÔ¡µÔ´µÑé§ $(^NameDA). ¶éҤسÂÍÁÃѺ¢é͵¡Å§ã¹·Ø¡æ´éÒ¹, àÅ×Í¡µÑÇàÅ×Í¡áá¢éÒ§ÅèÒ§. $_CLICK
+# ^Custom
¡Ó˹´àͧ
-àÅ×Í¡ÃٻẺ¡ÒõԴµÑé§:
-àÅ×Í¡¤ÍÁâ¾à¹¹µì·Õèµéͧ¡ÒõԴµÑé§:
-àÅ×Í¡¤ÍÁâ¾à¹¹µìÍ×è¹æ·Õèµéͧ¡ÒõԴµÑé§:
-ãËéµÔ´µÑé§ $(^NameDA) ŧã¹:
-à¹×éÍ·Õè·ÕèàËÅ×Í:
-à¹×éÍ·Õè·Õèµéͧ¡ÒÃ:
-¶Í¹¡ÒõԴµÑ駨ҡ:
-äÁèÊÒÁÒöà»Ô´ä¿ÅìÊÓËÃѺà¢Õ¹ä´é: \r\n\t"$0"\r\n¤ÅÔê¡ Â¡àÅÔ¡ à¾×èÍ¡àÅÔ¡¡ÒõԴµÑé§,\r\n¤ÅÔê¡ ÅͧãËÁèà¾×èÍÅͧÍÕ¡¤ÃÑé§ ËÃ×Í\r\n¢éÒÁ à¾×èÍ ¢éÒÁä¿Åì
-äÁèÊÒÁÒöà¢Õ¹:
-¤Ñ´ÅÍ¡äÁèä´é
-¤Ñ´ÅÍ¡ä»Âѧ
-äÁèÊÒÁÒöËÒµÑǹÕéä´é:
-äÁèÊÒÁÒöâËÅ´ä´é:
-ÊÃéÒ§â¿Åà´ÍÃì:
-ÊÃéÒ§·Ò§ÅÑ´:
-ÊÃéÒ§µÑÇ͹¡ÒõԴµÑé§:
-źä¿Åì:
-źàÁ×èÍÃÕºÙµà¤Ã×èͧ:
-äÁèÊÒÁÒöÊÃéÒ§·Ò§ÅÑ´:
-äÁèÊÒÁÒöÊÃéÒ§:
-äÁèÊÒÁÒöᵡä¿Åìä´é µéͧ¡ÒáàÅÔ¡¡ÒõԴµÑé§ËÃ×ÍäÁè?
-äÁèÊÒÁÒöŧ·ÐàºÕ¹ DLL ä´é
-ExecShell:
-Execute:
-ᵡä¿Åì:
-ᵡä¿Åì: äÁèÊÒÁöà¢Õ¹ŧä¿Åìä´é
-¡ÒõԴµÑé§ÅéÁàËÅÇ: opcode äÁè¶Ù¡µéͧ
-äÁèÁÕ OLE ÊÓËÃѺ:
-â¿Åà´ÍÃì Output:
-źâ¿Åà´ÍÃì:
-à»ÅÕ蹪×èÍàÁ×èÍÃÕºÙµ:
-à»ÅÕ蹪×èÍ:
-¢éÒÁ:
-¤Ñ´ÅÍ¡ÃÒÂÅÐàÍÕ´ä»Âѧ ¤ÅÔ»ºÍÃì´ \ No newline at end of file
+# ^ComponentsText
+àÅ×èÍ¡ÊÔ觷Õè¤Ø³µéͧ¡ÒõԴµÑé§áÅÐäÁèàÅ×Í¡ÊÔ觷Õè¤Ø³äÁèµéͧ¡ÒõԴµÑé§ $_CLICK
+# ^ComponentsSubText1
+àÅ×Í¡ÇԸáÒõԴµÑé§:
+# ^ComponentsSubText2_NoInstTypes
+àÅ×Í¡ÊÔ觷Õè¤Ø³µéͧ¡ÒõԴµÑé§:
+# ^ComponentsSubText2
+ËÃ×Í, àÅ×Í¡µÑÇàÅ×Í¡·Õè¤Ø³µéͧ¡ÒõԴµÑé§:
+# ^UnComponentsText
+àÅ×Í¡µÑÇàÅ×Í¡·Õè¤Ø³µéͧ¡ÒèСàÅÔ¡¡ÒõԴµÑé§áÅÐäÁèàÅ×Í¡ÊÔ觷Õè¤Ø³äÁèµéͧ¡ÒèСàÅÔ¡¡ÒõԴµÑé§ $_CLICK
+# ^UnComponentsSubText1
+àÅ×Í¡ÇÔ¸Õ¡ÒáàÅÔ¡¡ÒõԴµÑé§:
+# ^UnComponentsSubText2_NoInstTypes
+àÅ×Í¡µÑÇàÅ×Í¡·Õèµéͧ¡ÒèСàÅÔ¡¡ÒõԴµÑé§:
+# ^UnComponentsSubText2
+ËÃ×Í, àÅ×Í¡¨Ò¡µÑÇàÅ×Í¡Í×è¹æ·Õè¤Ø³µéͧ¡ÒèСàÅÔ¡¡ÒõԴµÑé§:
+# ^DirText
+µÑǵԴµÑ駨зӡÒõԴµÑé§ $(^NameDA) ŧã¹á¿éÁ´Ñ§µèÍ仹Õé, ¶éÒµéͧ¡ÒõԴµÑé§Å§ã¹á¿éÁÍ×è¹, ¡´ àÃÕ¡´ÙáÅÐàÅ×Í¡á¿éÁÍ×è¹ $_CLICK
+# ^DirSubText
+á¿éÁ·Õèµéͧ¡ÒõԴµÑé§
+# ^DirBrowseText
+àÅ×Í¡á¿éÁ·Õèµéͧ¡ÒõԴµÑé§ $(^NameDA) ã¹:
+# ^UnDirText
+µÑǵԴµÑ駨зӡÒáàÅÔ¡¡ÒõԴµÑé§ $(^NameDA) ¨Ò¡á¿éÁ´Ñ§µèÍ仹Õé, ¶éÒµéͧ¡ÒáàÅÔ¡¡ÒõԴµÑ駨ҡá¿éÁÍ×è¹, ¡´ àÃÕ¡´Ù áÅÐàÅ×Í¡á¿éÁÍ×è¹ $_CLICK
+# ^UnDirSubText
+""
+# ^UnDirBrowseText
+àÅ×Í¡á¿éÁ·Õèµéͧ¡ÒáàÅÔ¡¡ÒõԴµÑé§ $(^NameDA) ¨Ò¡:
+# ^SpaceAvailable
+"ÁÕ¾×é¹·ÕèàËÅ×Í: "
+# ^SpaceRequired
+"µéÒ§¡Òþ×é¹·Õè: "
+# ^UninstallingText
+$(^NameDA) ¨Ð¶Ù¡Â¡àÅÔ¡¡ÒõԴµÑ駨ҡá¿éÁµèÍ仹Õé. $_CLICK
+# ^UninstallingSubText
+¡àÅÔ¡¡ÒõԴµÑ駨ҡ:
+# ^FileError
+äÁèÊÒÁÒöà»Ô´ä¿ÅìÊÓËÃѺà¢Õ¹ä´é: \r\n\r\n$0\r\n\r\n¡´ ¡àÅÔ¡ à¾×èÍËÂØ´¡ÒõԴµÑé§,\r\nÅͧÍÕ¡¤ÃÑé§ à¾×èÍÅͧÍÕ¡¤ÃÑé§, ËÃ×Í\r\nà¾Ô¡à©Â à¾×èÍ¢éÒÁä¿Åì¹Õé.
+# ^FileError_NoIgnore
+äÁèÊÒÁÒöà»Ô´ä¿ÅìÊÓËÃѺà¢Õ¹ä´é: \r\n\r\n$0\r\n\r\n¡´ ÅͧÍÕ¡¤ÃÑé§ à¾×èÍÅͧÍÕ¡¤ÃÑé§, ËÃ×Í\r\n¡àÅÔ¡à¾×èÍËÂØ´¡ÒõԴµÑé§
+# ^CantWrite
+"äÁèÊÒÁÒöà¢Õ¹: "
+# ^CopyFailed
+¤Ñ´ÅÍ¡¼Ô´¾ÅÒ´
+# ^CopyTo
+"¤Ñ´ÅÍ¡ä»Âѧ "
+# ^Registering
+"¡ÓÅѧŧ·ÐàºÕ¹: "
+# ^Unregistering
+"¡àÅÔ¡¡ÒÃŧ·ÐàºÕ¹: "
+# ^SymbolNotFound
+"äÁèÊÒÁÒöËÒÊÑ­Åѡɳìä´é: "
+# ^CouldNotLoad
+"äÁèÊÒÁÒöâËÅ´ä´é: "
+# ^CreateFolder
+"ÊÃéÒ§á¿éÁ: "
+# ^CreateShortcut
+"ÊÃéÒ§ªÍÃ쵤ѷ: "
+# ^CreatedUninstaller
+"ÊÃéÒ§µÑÇ¡àÅÔ¡¡ÒõԴµÑé§: "
+# ^Delete
+"źä¿Åì: "
+# ^DeleteOnReboot
+"źµÍ¹ÃÕºÙ·: "
+# ^ErrorCreatingShortcut
+"ÁջѭËÒÊÃéÒ§ä¿ÅìªÍÃ쵤ѷ: "
+# ^ErrorCreating
+"ÁջѭËÒ㹡ÒÃÊÃéÒ§ä¿Åì: "
+# ^ErrorDecompressing
+ÁջѭËÒ㹡ÒäÅÒ¢éÍÁÙÅ! à¡Ô´¢éͼԴ¾ÅÒ´¨Ò¡µÑǵԴµÑé§?
+# ^ErrorRegistering
+ÁջѭËÒ㹡ÒÃŧ·ÐàºÕ¹ DLL
+# ^ExecShell
+"ÃѹàªÅÅìä¿Åì: "
+# ^Exec
+"Ãѹä¿Åì: "
+# ^Extract
+"ᵡä¿Åì: "
+# ^ErrorWriting
+"ᵡä¿Åì: à¡Ô´»Ñ­ËÒ㹡ÒÃà¢Õ¹ä¿Åì"
+# ^InvalidOpcode
+µÑǵԴµÑé§ÁջѭËÒ: ÃËÑÊ opcode ¼Ô´¾ÅÒ´
+# ^NoOLE
+"äÁèÁÕ OLE ÊÓËÃѺ: "
+# ^OutputFolder
+"á¿éÁ·ÕµÔ´µÑé§: "
+# ^RemoveFolder
+"źá¿éÁ: "
+# ^RenameOnReboot
+"à»ÅÕ蹪×è͵͹ÃÕºÙ·: "
+# ^Rename
+"à»ÅÕ蹪×èÍ: "
+# ^Skipped
+"¢éÒÁ: "
+# ^CopyDetails
+¤Ñ´ÅͧÃÒÂÅÐàÍÕ´ŧ¤ÅÔ»ºÍÃì´
+# ^LogInstall
+ºÑ¹·Ö¡¡ÒõԴµÑé§
+# ^Byte
+B
+# ^Kilo
+K
+# ^Mega
+M
+# ^Giga
+G \ No newline at end of file
diff --git a/Contrib/Library/TypeLib/TypeLib.cpp b/Contrib/Library/TypeLib/TypeLib.cpp
index 56d8934..2761737 100755
--- a/Contrib/Library/TypeLib/TypeLib.cpp
+++ b/Contrib/Library/TypeLib/TypeLib.cpp
@@ -10,7 +10,7 @@
#define NSISFunction(funcname) extern "C" void __declspec(dllexport) funcname(HWND hwndParent, int string_size, char *variables, stack_t **stacktop)
-BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) {
+extern "C" BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) {
return TRUE;
}
diff --git a/Contrib/Modern UI/Changelog.txt b/Contrib/Modern UI/Changelog.txt
index a24e84b..81ed387 100755
--- a/Contrib/Modern UI/Changelog.txt
+++ b/Contrib/Modern UI/Changelog.txt
@@ -1,5 +1,9 @@
NSIS Modern User Interface - VERSION HISTORY
+1.73 - August 6, 2005
+* The checkboxes to run an application or show a Readme file can now also be used on an uninstaller
+ finish pages or multiple finish pages
+
1.72 - November 27, 2004
* Fixed state of Finish page Cancel button when both an installer and uninstaller page is included
diff --git a/Contrib/Modern UI/Language files/Kurdish.nsh b/Contrib/Modern UI/Language files/Kurdish.nsh
index c08604b..eac20c9 100755
--- a/Contrib/Modern UI/Language files/Kurdish.nsh
+++ b/Contrib/Modern UI/Language files/Kurdish.nsh
@@ -3,13 +3,13 @@
;Language: Kurdish
;By Rêzan Tovjîn
-;Updated by Rêzan Tovjîn (retovjin@hotmail.com)
+;Updated by Erdal Ronahî (erdal.ronahi@gmail.com)
;--------------------------------
!insertmacro MUI_LANGUAGEFILE_BEGIN "Kurdish"
- !define MUI_LANGNAME "Kurdish" ;Use only ASCII characters (if this is not possible, use the English name)
+ !define MUI_LANGNAME "Kurdî" ;Use only ASCII characters (if this is not possible, use the English name)
!define MUI_TEXT_WELCOME_INFO_TITLE "$(^NameDA) Tu bi xêr hatî sêrbaziya sazkirinê"
!define MUI_TEXT_WELCOME_INFO_TEXT "Ev sêrbaz dê di dema sazkirina $(^NameDA) de rêberiya te bike.\r\n\r\nBerî tu dest bi sazkirinê bikî, em pêþniyar dikin tu hemû bernameyên vekirî bigirî. Bi vî rengî beyî tu komputera ji nû ve vekî dê hinek dosiyên pergalê bêpirsgirêk werin sazkirin.\r\n\r\n$_CLICK"
@@ -24,8 +24,11 @@
!define MUI_TEXT_COMPONENTS_TITLE "Hilbijartina pareyan"
!define MUI_TEXT_COMPONENTS_SUBTITLE "Ji bo sazkirina $(^NameDA) pareyên tu dixwazî hilbijêre."
!define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Dazanîn"
- !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ji bo tu der barê pareyan de agahiyan bistînî nîþanekê bibe ser pareyekê."
-
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ji bo tu der barê pareyan de agahiyan bistînî nîþanekê bibe ser pareyekê."
+ !else
+ !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Ji bo tu der barê pareyan de agahiyan bistînî pareyekê hilbijêre."
+ !endif
!define MUI_TEXT_DIRECTORY_TITLE "Hilbijartina peldanka armanckirî"
!define MUI_TEXT_DIRECTORY_SUBTITLE "Peldanka tu dixwazî bernameya $(^NameDA) tê de were sazkirin hilbijêre."
@@ -49,7 +52,7 @@
!define MUI_TEXT_STARTMENU_TITLE "Hilbijartina Peldanka Pêþeka Destpêkê"
!define MUI_TEXT_STARTMENU_SUBTITLE "Peldanka pêþeka destpêkê ya ku dê kineriya $(^NameDA) tê de were bikaranîn hilbijêre."
- !define MUI_INNERTEXT_STARTMENU_TOP "Peldanka pêþeka destpêkê ya ku dê kineriya bernameyê tê de were bicihkirin hilbijêre. Tu dikarî bi navekî nû peldankeke nû ava bikî."
+ !define MUI_INNERTEXT_STARTMENU_TOP "Peldanka pêþeka destpêkê ya ku dê kineriya bernameyê tê de were bicihkirin hilbijêre. Tu dikarî bi navekî nû peldankeke nû ava bikî."
!define MUI_INNERTEXT_STARTMENU_CHECKBOX "Bêyî çêkirina kineriyê bidomîne"
!define MUI_TEXT_ABORTWARNING "Tu bawer î ku dixwazî ji sazkirina $(^Name) derkevî?"
diff --git a/Contrib/Modern UI/Language files/Luxembourgish.nsh b/Contrib/Modern UI/Language files/Luxembourgish.nsh
index 201ea0b..1bb9485 100755
--- a/Contrib/Modern UI/Language files/Luxembourgish.nsh
+++ b/Contrib/Modern UI/Language files/Luxembourgish.nsh
@@ -6,7 +6,7 @@
;--------------------------------
-!insertmacro MUI_LANGUAGEFILE_BEGIN "LUXEMBOURGISH"
+!insertmacro MUI_LANGUAGEFILE_BEGIN "Luxembourgish"
!define MUI_LANGNAME "Lëtzebuergesch" ;Use only ASCII characters (if this is not possible, use the English name)
diff --git a/Contrib/Modern UI/Language files/Malaysian.nsh b/Contrib/Modern UI/Language files/Malay.nsh
index fbe319e..1bee84c 100755
--- a/Contrib/Modern UI/Language files/Malaysian.nsh
+++ b/Contrib/Modern UI/Language files/Malay.nsh
@@ -1,14 +1,14 @@
;NSIS Modern User Interface - Language File
;Compatible with Modern UI 1.68
-;Language: Malaysian (1086)
+;Language: Malay (1086)
;By muhammadazwa@yahoo.com
;--------------------------------
-!insertmacro MUI_LANGUAGEFILE_BEGIN "Malaysian"
+!insertmacro MUI_LANGUAGEFILE_BEGIN "Malay"
- !define MUI_LANGNAME "Malaysian" ;Use only ASCII characters (if this is not possible, use the English name)
+ !define MUI_LANGNAME "Malay" ;Use only ASCII characters (if this is not possible, use the English name)
!define MUI_TEXT_WELCOME_INFO_TITLE "Assalamualaikum, Selamat datang ke $(^NameDA) Setup Wizard"
!define MUI_TEXT_WELCOME_INFO_TEXT "Setup Wizard akan membantu anda untuk memasukkan $(^NameDA).\r\n\r\nSila tutup program aplikasi yang lain sebelum Setup ini dimulakan. Ini supaya tiada proses reboot komputer diperlukan.\r\n\r\n$_CLICK"
@@ -32,7 +32,7 @@
!define MUI_TEXT_DIRECTORY_TITLE "Pilih Lokasi Kemasukan"
!define MUI_TEXT_DIRECTORY_SUBTITLE "Pilih folder untuk memasukkan $(^NameDA)."
- !define MUI_TEXT_INSTALLING_TITLE "Install"
+ !define MUI_TEXT_INSTALLING_TITLE "Pemasangan"
!define MUI_TEXT_INSTALLING_SUBTITLE "Sila tunggu ketika $(^NameDA) sedang dimasukkan."
!define MUI_TEXT_FINISH_TITLE "Proses Selesai"
@@ -44,16 +44,16 @@
!define MUI_BUTTONTEXT_FINISH "&Selesai"
!define MUI_TEXT_FINISH_INFO_TITLE "Menyelesaikan $(^NameDA) Setup Wizard"
!define MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) sudah dimasukkan di komputer anda.\r\n\r\nKlik Selesai untuk menutup Setup Wizard."
- !define MUI_TEXT_FINISH_INFO_REBOOT "Komputer anda harus di reboot untuk menyelesaikan proses memasukkan $(^NameDA). Apakah anda hendak reboot sekarang juga?"
+ !define MUI_TEXT_FINISH_INFO_REBOOT "Komputer anda harus direboot untuk menyelesaikan proses memasukkan $(^NameDA). Apakah anda hendak reboot sekarang juga?"
!define MUI_TEXT_FINISH_REBOOTNOW "Reboot sekarang"
!define MUI_TEXT_FINISH_REBOOTLATER "Reboot nanti"
!define MUI_TEXT_FINISH_RUN "&Jalankan $(^NameDA)"
- !define MUI_TEXT_FINISH_SHOWREADME "&Buka file Readme"
+ !define MUI_TEXT_FINISH_SHOWREADME "&Buka fail Readme"
!define MUI_TEXT_STARTMENU_TITLE "Pilih Folder Start Menu"
- !define MUI_TEXT_STARTMENU_SUBTITLE "Pilih folder Start Menu untuk meletakkan shortcut $(^NameDA)."
- !define MUI_INNERTEXT_STARTMENU_TOP "Pilih folder Start Menu untuk perletakkan shortcut aplikasi ini. Boleh cipta nama folder anda sendiri."
- !define MUI_INNERTEXT_STARTMENU_CHECKBOX "Tidak perlu shortcut"
+ !define MUI_TEXT_STARTMENU_SUBTITLE "Pilih folder Start Menu untuk meletakkan pintasan $(^NameDA)."
+ !define MUI_INNERTEXT_STARTMENU_TOP "Pilih folder Start Menu untuk perletakkan pintasan aplikasi ini. Boleh cipta nama folder anda sendiri."
+ !define MUI_INNERTEXT_STARTMENU_CHECKBOX "Tidak perlu pintasan"
!define MUI_TEXT_ABORTWARNING "Adakan anda yakin ingin membatalkan Setup $(^Name)?"
diff --git a/Contrib/Modern UI/Language files/Thai.nsh b/Contrib/Modern UI/Language files/Thai.nsh
index b3eeae9..4bb0bb3 100755
--- a/Contrib/Modern UI/Language files/Thai.nsh
+++ b/Contrib/Modern UI/Language files/Thai.nsh
@@ -1,63 +1,94 @@
;NSIS Modern User Interface - Language File
-;Compatible with Modern UI 1.63
+;Compatible with Modern UI 1.68
;Language: Thai (1054)
-;By TuW@nNu tuwannu@hotmail.com (asdfuae)
+;By SoKoOLz, TuW@nNu (asdfuae)
;--------------------------------
!insertmacro MUI_LANGUAGEFILE_BEGIN "Thai"
- !define MUI_LANGNAME "Thai" ;(ÀÒÉÒä·Â) Use only ASCII characters (if this is not possible, use the English name)
-
+ !define MUI_LANGNAME "Thai" ;ãªé੾ÒеÑÇÍÑ¡Éà ASCII (¶éÒäÁèÊÒÁÒö·Óä´é, â»Ã´ãªéª×èÍà»ç¹ÀÒÉÒÍѧ¡ÄÉá·¹)
+
!define MUI_TEXT_WELCOME_INFO_TITLE "ÂÔ¹´Õµé͹ÃѺà¢éÒÊÙè¡ÒõԴµÑé§â»Ãá¡ÃÁ $(^NameDA) "
- !define MUI_TEXT_WELCOME_INFO_TEXT "µÑǵԴµÑ駹Õé¨ÐµÔ´µÑé§â»Ãá¡ÃÁ $(^NameDA) ŧº¹¤ÍÁ¾ÔÇàµÍÃì¢Í§¤Ø³\r\n\r\n·Ò§àÃÒ¢Íá¹Ð¹ÓãËé»Ô´â»Ãá¡ÃÁÍ×è¹æãËéËÁ´¡è͹·Õè¨ÐàÃÔèÁµÔ´µÑé§ áÅеÑǵԴµÑ駹ÕéäÁèµéͧ¡ÒáÒÃÃÕºÙµà¤Ã×èͧãËÁè\r\n\r\n$_CLICK"
+ !define MUI_TEXT_WELCOME_INFO_TEXT "µÑǵԴµÑé§ÍѵÔâ¹ÁѵԨйӤسä»ÊÙè¡ÒõԴµÑ駢ͧ $(^NameDA).\r\n\r\nàÃÒ¢Íá¹Ð¹ÓãËé»Ô´â»Ãá¡ÃÁÍ×è¹æãËéËÁ´¡è͹·Õè¨ÐàÃÔèÁµÔ´µÑé§, ¹Õè¨Ðà»ç¹¡ÒÃÍѻഷä¿Åìä´é§èÒ¢Öé¹â´Â¤Ø³äÁè¨Óà»ç¹µéͧ·Ó¡ÒÃÃÕºÙ·¤ÍÁ¾ÔÇàµÍÃì¢Í§¤Ø³\r\n\r\n$_CLICK"
!define MUI_TEXT_LICENSE_TITLE "¢é͵¡Å§àÃ×èͧÅÔ¢ÊÔ·¸Ôì"
- !define MUI_TEXT_LICENSE_SUBTITLE "¡ÃسÒÍèÒ¹¢é͵¡Å§´éÒ¹ÅÔ¢ÊÔ·¸Ôì¡è͹µÔ´µÑé§â»Ãá¡ÃÁ $(^NameDA)."
- !define MUI_INNERTEXT_LICENSE_TOP "¡´»ØèÁ Page Down à¾×èÍÍèÒ¹ÃÒÂÅÐàÍÕ´·ÕèàËÅ×Í"
- !define MUI_INNERTEXT_LICENSE_BOTTOM "¶éҤسÂÍÁÃѺ㹢é͵¡Å§¹Õé ¡Ãسҡ´»ØèÁ ÂÍÁÃѺ áÅФس¨Ðµéͧµ¡Å§¡è͹·Õè¨ÐàÃÔèÁµÔ´µÑé§â»Ãá¡ÃÁ $(^NameDA)."
+ !define MUI_TEXT_LICENSE_SUBTITLE "â»Ã´ÍèÒ¹·Ç¹ÅÔ¢ÊÔ·¸Ôìã¹ËÑÇ¢é͵èÒ§æÍÕ¡¤ÃÑ駡è͹·Õè¤Ø³¨Ð·Ó¡ÒõԴµÑé§ $(^NameDA)."
+ !define MUI_INNERTEXT_LICENSE_TOP "¡´ Page Down à¾×èÍÍèÒ¹¢é͵¡Å§·Ñé§ËÁ´"
+ !define MUI_INNERTEXT_LICENSE_BOTTOM "¶éҤسÂÍÁÃѺ¢é͵¡Å§àÃ×èͧÅÔ¢ÊÔ·¸Ôì, ¡´ ©Ñ¹ÂÍÁÃѺ à¾×èÍ·ÓµèÍä», ¤Ø³µéͧÂÍÁÃѺ㹢é͵¡Å§ÅÔ¢ÊÔ·¸Ôìà¾×èÍ·Õè¨Ð·Ó¡ÒõԴµÑé§ $(^NameDA)."
+ !define MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "¶éҤسÂÍÁÃѺ¢é͵¡Å§àÃ×èͧÅÔ¢ÊÔ·¸, ¡´àÅ×͡㹡Åèͧ¢éÒ§ÅèÒ§¹Õé ¤Ø³µéͧÂÍÁÃѺ㹢é͵¡Å§ÅÔ¢ÊÔ·¸Ôìà¾×èÍ·Õè¨Ð·Ó¡ÒõԴµÑé§ $(^NameDA). $_CLICK"
+ !define MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "¶éҤسÂÍÁÃѺ¢é͵¡Å§àÃ×èͧÅÔ¢ÊÔ·¸, àÅ×Í¡µÑÇàÅ×Í¡áá´éÒ¹ÅèÒ§¹Õé ¤Ø³µéͧÂÍÁÃѺ㹢é͵¡Å§ÅÔ¢ÊÔ·¸Ôìà¾×èÍ·Õè¨Ð·Ó¡ÒõԴµÑé§ $(^NameDA). $_CLICK"
- !define MUI_TEXT_COMPONENTS_TITLE "àÅ×Í¡¤ÍÁâ¾à¹¹µì"
- !define MUI_TEXT_COMPONENTS_SUBTITLE "àÅ×Í¡ features ¢Í§ $(^NameDA) ·Õè¤Ø³µéͧ¡ÒõԴµÑé§"
- !define MUI_INNERTEXT_COMPONENTS_TOP "ãÊèà¤Ã×èͧËÁÒ¶١˹éÒÊÔ觷Õè¤Ø³µéͧ¡ÒõԴµÑé§áÅÐàÍÒà¤Ã×èͧËÁÒ¶١Í͡˹éÒÊÔ觷Õè¤Ø³äÁèµéͧ¡ÒõԴµÑé§"
+ !define MUI_TEXT_COMPONENTS_TITLE "àÅ×Í¡Êèǹ»ÃСͺ"
+ !define MUI_TEXT_COMPONENTS_SUBTITLE "àÅ×Í¡ÊÔ觷Õè¤Ø³µéͧ¡ÒÃãªé§Ò¹¨Ò¡ $(^NameDA) ·Õè¤Ø³µéͧ¡ÒõԴµÑé§"
!define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "ÃÒÂÅÐàÍÕ´"
- !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "àÅ×è͹àÁÒÊì仺¹ª×èͤÍÁâ¾à¹¹µìà¾×èÍ´ÙÃÒÂÅÐàÍÕ´"
+ !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
+ !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "¢ÂѺàÁÒÊì¢Í§¤Ø³à˹×ÍÊèǹ»ÃСͺà¾×èÍ´ÙÃÒÂÅÐàÍÕ´"
+ !else
+ !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "àÅ×Í¡Êèǹ»ÃСͺ·Õè¤Ø³µéͧ¡ÒôÙÃÒÂÅÐàÍÕ´"
+ !endif
- !define MUI_TEXT_DIRECTORY_TITLE "àÅ×Í¡·Õè·Õè¨ÐãËéµÔ´µÑé§"
- !define MUI_TEXT_DIRECTORY_SUBTITLE "àÅ×Í¡â¿Åà´ÍÃì·Õèµéͧ¡ÒÃãËéµÔ´µÑé§Å§ $(^NameDA)."
- !define MUI_INNERTEXT_DIRECTORY_TOP "¡ÓÅѧ·Õè¨ÐµÔ´µÑé§â»Ãá¡ÃÁ $(^NameDA) ŧã¹â¿Åà´ÍÃì´éÒ¹ÅèÒ§¹Õé$\r$\n$\r$\nËÒ¡¤Ø³µéͧ¡ÒÃãËéµÔ´µÑé§Å§â¿Åà´ÍÃìÍ×蹡ÃسҤÅÔê¡»ØèÁàÃÕ¡ËÒáÅéÇàÅ×Í¡â¿Åà´ÍÃì·Õèµéͧ¡ÒÃ"
- !define MUI_INNERTEXT_DIRECTORY_DESTINATION "â¿Åà´ÍÃì¨Ø´ËÁÒÂ"
+ !define MUI_TEXT_DIRECTORY_TITLE "àÅ×Í¡·Õè·Õèµéͧ¡ÒõԴµÑé§"
+ !define MUI_TEXT_DIRECTORY_SUBTITLE "àÅ×Í¡á¼éÁ·Õèµéͧ¡ÒõԴµÑé§ $(^NameDA)."
!define MUI_TEXT_INSTALLING_TITLE "¡ÓÅѧµÔ´µÑé§"
- !define MUI_TEXT_INSTALLING_SUBTITLE "¡ÃسÒÃÍÊÑ¡¤ÃÙèÃÐËÇèÒ§â»Ãá¡ÃÁ $(^NameDA) ¡ÓÅѧµÔ´µÑé§ÍÂÙè"
+ !define MUI_TEXT_INSTALLING_SUBTITLE "â»Ã´ÃÍã¹¢³Ð·Õè $(^NameDA) ¡ÓÅѧ¶Ù¡µÔ´µÑé§"
+
+ !define MUI_TEXT_FINISH_TITLE "¡ÒõԴµÑé§àÊÃç¨ÊÔé¹"
+ !define MUI_TEXT_FINISH_SUBTITLE "¡ÒõԴµÑé§àÊÃç¨ÊÁºÙóì"
+
+ !define MUI_TEXT_ABORT_TITLE "¡ÒõԴµÑ駶١¡àÅÔ¡"
+ !define MUI_TEXT_ABORT_SUBTITLE "¡ÒõԴµÑé§äÁèàÊÃç¨ÊÁºÙóì"
- !define MUI_TEXT_FINISH_TITLE "µÔ´µÑé§àÃÕºÃéÍÂ"
- !define MUI_TEXT_FINISH_SUBTITLE "¡ÒõԴµÑé§àÊÃç¨ÊÁºÙóìáÅéÇ"
!define MUI_BUTTONTEXT_FINISH "&àÊÃç¨ÊÔé¹"
- !define MUI_TEXT_FINISH_INFO_TITLE "¡ÓÅѧ´Óà¹Ô¹¡ÒÃàÃÕ¡â»Ãá¡ÃÁµÔ´µÑé§ $(^NameDA) "
- !define MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ¶Ù¡µÔ´µÑé§àÃÕºÃéÍÂáÅéÇ\r\n\r\n¤ÅÔê¡»ØèÁ àÊÃç¨ÊÔé¹ à¾×èÍÍÍ¡¨Ò¡â»Ãá¡ÃÁ"
- !define MUI_TEXT_FINISH_INFO_REBOOT "à¤Ã×èͧ¢Í§¤Ø³µéͧ¡ÒáÒÃÃÕºÙµËÅѧ¨Ò¡µÔ´µÑé§ $(^NameDA). ¤Ø³µéͧ¡Ò÷Õè¨ÐÃÕºÙµàÅÂËÃ×ÍäÁè"
- !define MUI_TEXT_FINISH_REBOOTNOW "ÃÕºÙµ"
- !define MUI_TEXT_FINISH_REBOOTLATER "ÃÕºÙµ·ÕËÅѧ"
- !define MUI_TEXT_FINISH_RUN "à»Ô´â»Ãá¡ÃÁ $(^NameDA)"
- !define MUI_TEXT_FINISH_SHOWREADME "ÍèÒ¹ Readme"
+ !define MUI_TEXT_FINISH_INFO_TITLE "¡ÒõԴµÑé§ÍѵÔâ¹ÁѵԢͧ $(^NameDA) ¡ÓÅѧàÊÃç¨ÊÔé¹"
+ !define MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ä´é¶Ù¡µÔ´µÑé§Å§ã¹à¤Ã×èͧ¤ÍÁ¾ÔÇàµÍÃì¢Í§¤Ø³áÅéÇ\r\n\r\n¡´ àÊÃç¨ÊÔé¹à¾×èͻԴµÑǵԴµÑé§ÍѵÔâ¹ÁѵÔ"
+ !define MUI_TEXT_FINISH_INFO_REBOOT "à¤Ã×èͧ¤ÍÁ¾ÔÇàµÍÃì¢Í§¤Ø³¨Óà»ç¹µéͧÃÕʵÒ÷ìà¾×èÍ¡ÒõԴµÑ駢ͧ $(^NameDA) ¨ÐàÃÕºÃéÍÂ, ¤Ø³µéͧ¡ÒèРÃÕºÙ· à´ÕëÂǹÕéäËÁ?"
+ !define MUI_TEXT_FINISH_REBOOTNOW "ÃÕºÙ· à´ÕëÂǹÕé"
+ !define MUI_TEXT_FINISH_REBOOTLATER "©Ñ¹µéͧ¡Òà ÃÕºÙ·´éǵ¹àͧ ·ÕËÅѧ"
+ !define MUI_TEXT_FINISH_RUN "&Ãѹ $(^NameDA)"
+ !define MUI_TEXT_FINISH_SHOWREADME "&áÊ´§ÃÒÂÅÐàÍÕ´"
+
+ !define MUI_TEXT_STARTMENU_TITLE "àÅ×Í¡á¿éÁ Start Menu"
+ !define MUI_TEXT_STARTMENU_SUBTITLE "àÅ×Í¡á¿éÁ Start Menu à¾×èÍÊÃéÒ§ªÍÃ쵤ѷ¢Í§ $(^NameDA). "
+ !define MUI_INNERTEXT_STARTMENU_TOP "àÅ×Í¡á¼éÁ Start Menu ·Õè¤Ø³µéͧ¡ÒèÐÊÃéÒ§ªÍÃ쵤ѷ¢Í§â»Ãá¡ÃÁ, ¤Ø³ÂѧÊÒÁÒö¡Ó˹´ª×èÍà¾×èÍÊÃéÒ§á¿éÁãËÁèä´éÍÕ¡´éÇÂ"
+ !define MUI_INNERTEXT_STARTMENU_CHECKBOX "äÁèµéͧÊÃéÒ§ ªÍÃ쵤ѷ"
+
+ !define MUI_TEXT_ABORTWARNING "¤Ø³á¹èã¨ËÃ×ÍÇèҤسµéͧ¡ÒèÐÍÍ¡¨Ò¡¡ÒõԴµÑ駢ͧ $(^Name)?"
- !define MUI_TEXT_STARTMENU_TITLE "àÅ×Í¡â¿ÅàÍÃì Start àÁ¹Ù"
- !define MUI_TEXT_STARTMENU_SUBTITLE "àÅ×Í¡â¿Åà´ÍÃì Start àÁ¹Ù·Õèµéͧ¡ÒÃãËé·Ò§ÅÑ´¢Í§â»Ãá¡ÃÁ¹Õéä»ÍÂÙè"
- !define MUI_INNERTEXT_STARTMENU_TOP "àÅ×Í¡àÁ¹Ù Start ·Õè¤Ø³µéͧ¡ÒÃãËé·Ò§ÅÑ´¢Í§â»Ãá¡ÃÁä»ÍÂÙè ËÃ×ÍÊÃéÒ§â¿Åà´ÍÃì¢Öé¹ÁÒãËÁè"
- !define MUI_INNERTEXT_STARTMENU_CHECKBOX "äÁèµéͧÊÃéÒ§·Ò§ÅÑ´"
- !define MUI_TEXT_ABORTWARNING "¤Ø³á¹èã¨ËÃ×ÍäÁè·Õè¨ÐÍÍ¡¨Ò¡â»Ãá¡ÃÁµÔ´µÑé§ $(^Name) "
+ !define MUI_UNTEXT_WELCOME_INFO_TITLE "ÂÔ¹´Õµé͹ÃѺÊÙè¡ÒáàÅÔ¡¡ÒõԴµÑé§ÍѵÔâ¹ÁѵԢͧ $(^NameDA)"
+ !define MUI_UNTEXT_WELCOME_INFO_TEXT "µÑǵԴµÑé§ÍѵÔâ¹ÁѵԹÕé¨Ð¹Ó¤Ø³ä»ÊÙè¡ÒáàÅÔ¡¡ÒõԴµÑ駢ͧ $(^NameDA).\r\n\r\n¡ÒèÐàÃÔèÁ¡ÒáàÅÔ¡¡ÒõԴµÑ駹Õé, â»Ã´µÃǨÊͺÇèÒ $(^NameDA) äÁèä´éãªéÍÂÙè\r\n\r\n$_CLICK"
+ !define MUI_UNTEXT_CONFIRM_TITLE "¡àÅÔ¡¡ÒõԴµÑé§ $(^NameDA)"
+ !define MUI_UNTEXT_CONFIRM_SUBTITLE "¡àÅÔ¡¡ÒõԴµÑé§ $(^NameDA) ¨Ò¡à¤Ã×èͧ¤ÍÁ¾ÔÇàµÍÃì¢Í§¤Ø³"
- !define MUI_UNTEXT_CONFIRM_TITLE "źâ»Ãá¡ÃÁ $(^NameDA) ÍÍ¡¨Ò¡à¤Ã×èͧ"
- !define MUI_UNTEXT_CONFIRM_SUBTITLE "źâ»Ãá¡ÃÁ $(^NameDA) ÍÍ¡¨Ò¡à¤Ã×èͧ¢Í§¤Ø³"
+ !define MUI_UNTEXT_LICENSE_TITLE "¢é͵¡Å§àÃ×èͧÅÔ¢ÊÔ·¸Ôì"
+ !define MUI_UNTEXT_LICENSE_SUBTITLE "¡ÃسÒÍèÒ¹¢é͵¡Å§´éÒ¹ÅÔ¢ÊÔ·¸Ôì¡è͹µÔ´µÑé§â»Ãá¡ÃÁ $(^NameDA)."
+ !define MUI_UNINNERTEXT_LICENSE_BOTTOM "¶éҤسÂÍÁÃѺ㹢é͵¡Å§¹Õé ¡Ãسҡ´»ØèÁ ©Ñ¹ÂÍÁÃѺ áÅФس¨Ðµéͧµ¡Å§¡è͹·Õè¨ÐàÃÔèÁ¡ÒáàÅÔ¡µÔ´µÑé§â»Ãá¡ÃÁ $(^NameDA)."
+ !define MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "¶éҤسÂÍÁÃѺ¢é͵¡Å§àÃ×èͧÅÔ¢ÊÔ·¸Ôì, ¡´àÅ×͡㹡Åèͧ¢éÒ§ÅèÒ§¹Õé ¤Ø³µéͧÂÍÁÃѺ㹢é͵¡Å§ÅÔ¢ÊÔ·¸Ôìà¾×èÍ·Õè¨Ð·Ó¡ÒõԴµÑé§ $(^NameDA). $_CLICK"
+ !define MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "¶éҤسÂÍÁÃѺ¢é͵¡Å§àÃ×èͧÅÔ¢ÊÔ·¸Ôì, àÅ×Í¡µÑÇàÅ×Í¡áá´éÒ¹ÅèÒ§¹Õé ¤Ø³µéͧÂÍÁÃѺ㹢é͵¡Å§ÅÔ¢ÊÔ·¸Ôìà¾×èÍ·Õè¨Ð·Ó¡ÒõԴµÑé§ $(^NameDA). $_CLICK"
- !define MUI_UNTEXT_UNINSTALLING_TITLE "¡ÓÅѧź"
- !define MUI_UNTEXT_UNINSTALLING_SUBTITLE "¡ÃسÒÃÍ¢³Ð·Õè $(^NameDA) ¡ÓÅѧ¶Ù¡Åº"
+ !define MUI_UNTEXT_COMPONENTS_TITLE "àÅ×Í¡Êèǹ»ÃСͺ"
+ !define MUI_UNTEXT_COMPONENTS_SUBTITLE "àÅ×Í¡ÊÔ觷Õè¤Ø³µéͧ¡ÒÃãªé§Ò¹¨Ò¡ $(^NameDA) ·Õè¤Ø³µéͧ¡àÅÔ¡¡ÒõԴµÑé§"
+
+ !define MUI_UNTEXT_DIRECTORY_TITLE "àÅ×Í¡á¿éÁ·Õèµéͧ¡ÒáàÅÔ¡¡ÒõԴµÑé§"
+ !define MUI_UNTEXT_DIRECTORY_SUBTITLE "àÅ×Í¡á¿éÁ·Õè¤Ø³µéͧ¡ÒáàÅÔ¡¡ÒõԴµÑ駢ͧ $(^NameDA)."
+
+ !define MUI_UNTEXT_UNINSTALLING_TITLE "¡ÓÅѧ¡àÅÔ¡¡ÒõԴµÑé§"
+ !define MUI_UNTEXT_UNINSTALLING_SUBTITLE "â»Ã´ÃÍã¹¢³Ð·Õè $(^NameDA) ¡ÓÅѧ¶Ù¡Â¡àÅÔ¡¡ÒõԴµÑé§."
- !define MUI_UNTEXT_FINISH_TITLE "àÃÕºÃéÍÂ"
- !define MUI_UNTEXT_FINISH_SUBTITLE "¡ÒÃźâ»Ãá¡ÃÁàÊÃç¨ÊÁºÙóìáÅéÇ"
+ !define MUI_UNTEXT_FINISH_TITLE "¡ÒáàÅÔ¡¡ÒõԴµÑé§àÊÃç¨ÊÔé¹"
+ !define MUI_UNTEXT_FINISH_SUBTITLE "¡ÒáàÅÔ¡¡ÒõԴµÑé§àÊÃç¨ÊÔé¹â´ÂÊÁºÙóì"
+
+ !define MUI_UNTEXT_ABORT_TITLE "¡ÒáàÅÔ¡¡ÒõԴµÑ駶١¡àÅÔ¡"
+ !define MUI_UNTEXT_ABORT_SUBTITLE "¡ÒáàÅÔ¡¡ÒõԴµÑé§äÁèÊÓàÃç¨"
+
+ !define MUI_UNTEXT_FINISH_INFO_TITLE "¡ÒáàÅÔ¡¡ÒõԴµÑé§ÍѵÔâ¹ÁѵԢͧ $(^NameDA) ¡ÓÅѧàÊÃç¨ÊÁºÙóì"
+ !define MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ä´é¶Ù¡Â¡àÅÔ¡ÍÍ¡¨Ò¡à¤Ã×èͧ¤ÍÁ¾ÔÇàµÍÃì¢Í§¤Ø³áÅéÇ \r\n\r\n¡´ àÊÃç¨ÊÔé¹ à¾×èͻԴ˹éҨ͵ԴµÑé§ÍѵÔâ¹ÁѵÔ"
+ !define MUI_UNTEXT_FINISH_INFO_REBOOT "à¤Ã×èͧ¤ÍÁ¾ÔÇàµÍÃì¢Í§¤Ø³¨Óà»ç¹µéͧÃÕʵÒÃì·ã¹¡Ò÷Õè¨Ð·Ó¡ÒáàÅÔ¡¡ÒõԴµÑ駢ͧ $(^NameDA) àÊÃç¨ÊÔé¹, ¤Ø³µéͧ¡ÒèÐÃÕºÙ·à´ÕëÂǹÕéäËÁ?"
+
+ !define MUI_UNTEXT_ABORTWARNING "¤Ø³á¹èã¨ËÃ×ÍÇèҤسµéͧ¡ÒÃÍÍ¡¨Ò¡¡ÒáàÅÔ¡¡ÒõԴµÑ駢ͧ $(^Name)?"
!insertmacro MUI_LANGUAGEFILE_END \ No newline at end of file
diff --git a/Contrib/Modern UI/Readme.html b/Contrib/Modern UI/Readme.html
index c3eb586..4faae18 100755
--- a/Contrib/Modern UI/Readme.html
+++ b/Contrib/Modern UI/Readme.html
@@ -1214,10 +1214,10 @@ Start Menu Folder page: <a href=
<h1>Version history</h1>
<div>
<ul>
-<li>1.72 - November 27, 2004
+<li>1.73 - August 6, 2005
<ul>
-<li>Fixed state of Finish page Cancel button when both an installer and
-uninstaller page is included</li>
+<li>The checkboxes to run an application or show a Readme file can now also be
+used on an uninstaller finish pages or multiple finish pages</li>
</ul>
</li>
</ul>
diff --git a/Contrib/Modern UI/SConscript b/Contrib/Modern UI/SConscript
index 50b2662..e36890f 100755
--- a/Contrib/Modern UI/SConscript
+++ b/Contrib/Modern UI/SConscript
@@ -51,7 +51,7 @@ languages = Split("""
Lithuanian.nsh
Luxembourgish.nsh
Macedonian.nsh
- Malaysian.nsh
+ Malay.nsh
Mongolian.nsh
Norwegian.nsh
Polish.nsh
diff --git a/Contrib/Modern UI/System.nsh b/Contrib/Modern UI/System.nsh
index 5d4cdcb..1dd9568 100755
--- a/Contrib/Modern UI/System.nsh
+++ b/Contrib/Modern UI/System.nsh
@@ -1,4 +1,4 @@
-;NSIS Modern User Interface version 1.72
+;NSIS Modern User Interface version 1.73
;Macro System
;Written by Joost Verburg
@@ -8,7 +8,7 @@
;License: License.txt
;Examples: Examples\Modern UI
-!echo "NSIS Modern User Interface version 1.72 - © 2002-2005 Joost Verburg"
+!echo "NSIS Modern User Interface version 1.73 - © 2002-2005 Joost Verburg"
;--------------------------------
@@ -32,10 +32,10 @@
!include "WinMessages.nsh"
!verbose pop
-!define MUI_SYSVERSION "1.72"
+!define MUI_SYSVERSION "1.73"
-Var MUI_TEMP1
-Var MUI_TEMP2
+Var /GLOBAL MUI_TEMP1
+Var /GLOBAL MUI_TEMP2
;--------------------------------
;INSERT CODE
@@ -440,7 +440,7 @@ Var MUI_TEMP2
!verbose ${MUI_VERBOSE}
!ifndef MUI_VAR_TEXT
- Var MUI_TEXT
+ Var /GLOBAL MUI_TEXT
!define MUI_VAR_TEXT
!endif
@@ -662,7 +662,7 @@ Var MUI_TEMP2
!insertmacro MUI_DEFAULT MUI_WELCOMEPAGE_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_WELCOME_INFO_TEXT)"
!ifndef MUI_VAR_HWND
- Var MUI_HWND
+ Var /GLOBAL MUI_HWND
!define MUI_VAR_HWND
!endif
@@ -756,7 +756,7 @@ Var MUI_TEMP2
!insertmacro MUI_DEFAULT MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO "$(MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO)"
!ifndef MUI_VAR_TEXT
- Var MUI_TEXT
+ Var /GLOBAL MUI_TEXT
!define MUI_VAR_TEXT
!endif
@@ -915,12 +915,12 @@ Var MUI_TEMP2
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_INFO_REBOOT)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOTNOW "$(MUI_TEXT_FINISH_REBOOTNOW)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOTLATER "$(MUI_TEXT_FINISH_REBOOTLATER)"
- !insertmacro MUI_DEFAULT MUI_FINISHPAGE_RUN_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_RUN)"
- !insertmacro MUI_DEFAULT MUI_FINISHPAGE_SHOWREADME_TEXT "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}TEXT_FINISH_SHOWREADME)"
+ !insertmacro MUI_DEFAULT MUI_FINISHPAGE_RUN_TEXT "$(MUI_TEXT_FINISH_RUN)"
+ !insertmacro MUI_DEFAULT MUI_FINISHPAGE_SHOWREADME_TEXT "$(MUI_TEXT_FINISH_SHOWREADME)"
!insertmacro MUI_DEFAULT MUI_FINISHPAGE_LINK_COLOR "000080"
!ifndef MUI_VAR_HWND
- Var MUI_HWND
+ Var /GLOBAL MUI_HWND
!define MUI_VAR_HWND
!endif
@@ -931,9 +931,10 @@ Var MUI_TEMP2
!endif
!ifdef MUI_FINISHPAGE_RUN | MUI_FINISHPAGE_SHOWREADME
- !ifndef MUI_FINISHPAGE_ABORTWARNINGCHECK
- !define MUI_FINISHPAGE_ABORTWARNINGCHECK
- Var MUI_NOABORTWARNING
+ !define MUI_FINISHPAGE_ABORTWARNINGCHECK
+ !ifndef MUI_VAR_NOABORTWARNING
+ !define MUI_VAR_NOABORTWARNING
+ Var /GLOBAL MUI_NOABORTWARNING
!endif
!endif
diff --git a/Contrib/NSISdl/nsisdl.cpp b/Contrib/NSISdl/nsisdl.cpp
index 1afae4b..1c9d2eb 100755
--- a/Contrib/NSISdl/nsisdl.cpp
+++ b/Contrib/NSISdl/nsisdl.cpp
@@ -190,7 +190,7 @@ static LRESULT CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LP
return 0;
}
-BOOL APIENTRY DllMain(HINSTANCE _hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
+extern "C" BOOL APIENTRY DllMain(HINSTANCE _hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
hModule = _hModule;
return TRUE;
diff --git a/Docs/src/compiler.but b/Docs/src/compiler.but
index 4ab1945..59d4266 100755
--- a/Docs/src/compiler.but
+++ b/Docs/src/compiler.but
@@ -28,7 +28,7 @@ Adds another include directory to the include directories list. This list is sea
\c directory
-Causes the NSIS compiler to scan the given directory for Plugin DLLs.
+Causes the NSIS compiler to scan the given directory for plug-in DLLs.
\c !addplugindir myplugin
\c MyPlugin::SomeFunction
diff --git a/Docs/src/compilerflags.but b/Docs/src/compilerflags.but
index 4407c2c..d74397c 100755
--- a/Docs/src/compilerflags.but
+++ b/Docs/src/compilerflags.but
@@ -72,7 +72,7 @@ This command sets the overwrite flag which is used by the File command to determ
\c \\<b\\>manual\\</b\\>|alwaysoff
-This command sets the unload plugin flag which is by CallInstDLL and plugin calls (dll::func). Setting this to always off will behave as if you have added the /NOUNLOAD to every CallInstDLL and plugin call. Setting this to manual will only not unload if you specifically use /NOUNLOAD.
+This command sets the unload plug-in flag which is by CallInstDLL and plug-in calls (dll::func). Setting this to always off will behave as if you have added the /NOUNLOAD to every CallInstDLL and plug-in call. Setting this to manual will only not unload if you specifically use /NOUNLOAD.
\S1{versioninfo} Version Information
diff --git a/Docs/src/credits.but b/Docs/src/credits.but
index 59ee5c6..44b5add 100755
--- a/Docs/src/credits.but
+++ b/Docs/src/credits.but
@@ -184,7 +184,7 @@ Spanish - \e{MoNKi, Lobo Lunar}
Swedish - \e{Peter Gustafsson, Magnus Bonnevier, Rickard Angbratt}
-Thai - \e{TuW@nNu (asdfuae)}
+Thai - \e{SoKoOLz, TuW@nNu (asdfuae)}
Traditional & Simplified Chinese - \e{Kii Ali}
diff --git a/Docs/src/history.but b/Docs/src/history.but
index b9add5e..b8b112b 100755
--- a/Docs/src/history.but
+++ b/Docs/src/history.but
@@ -1,5 +1,47 @@
\A{history} Changelog and Release Notes
+\H{v2.09} 2.09
+
+Released on August 26th, 2005
+
+\S1{v2.09-cl} Changelog
+
+\S2{} Major Changes
+
+\b Fixed a bug introduced in 2.08, that prevented uninstallers from deleting $INSTDIR
+
+\b Fixed a bug that caused "C:\\ " to be considered a valid installation directory, even without \R{aallowrootdirinstall}{AllowRootDirInstall}
+
+\S2{} New/Changed Commands
+
+\b \R{var}{Var} can now be used in sections and functions, but only with the /GLOBAL flag
+
+\S2{} Minor Changes
+
+\b Applied \W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373087&aid=1248335}{patch #1248335} for greater portability of examples
+
+\b \R{filefunc}{FileFunc}: workaround for GetLongPathName which is not available on Windows 95 (Instructor)
+
+\b Fixed an unused label warning in \R{library}{Library}
+
+\b Fixed duplicate label errors in \L{../Examples/LogicLib.nsi}{LogicLib} and \R{library}{Library} when used in different files (\W{http://sourceforge.net/tracker/index.php?func=detail&group_id=22049&atid=373085&aid=1243865}{bug #1243865})
+
+\b \L{../Docs/Modern UI/Readme.html}{Modern UI 1.73}: fixed checkboxes on uninstaller finish page or multiple finish pages
+
+\b \R{wordfunc}{WordFunc}: fixed incorrect replacement of first word in WordReplace, under some conditions (Instructor)
+
+\S2{} Translations
+
+\b Renamed Malaysian to Malay
+
+\b Update Thai translation to the latest version
+
+\b Updated Kurdish MUI translation to the latest version
+
+\S2{} Build System
+
+\b Fixed a number of build problems on POSIX platforms which caused plug-ins to malfunction and installers to crash
+
\H{v2.08} 2.08
Released on July 23rd, 2005
diff --git a/Docs/src/misc.but b/Docs/src/misc.but
index 386d020..787b35b 100755
--- a/Docs/src/misc.but
+++ b/Docs/src/misc.but
@@ -47,7 +47,7 @@ Use in the leave function of a directory page. Reads the flag set if '\R{adirver
\S2{initpluginsdir} InitPluginsDir
-Initializes the plugins dir (\R{varconstant}{$PLUGINSDIR}) if not already initialized.
+Initializes the plug-ins dir (\R{varconstant}{$PLUGINSDIR}) if not already initialized.
\c InitPluginsDir
\c File /oname=$PLUGINSDIR\image.bmp image.bmp
@@ -65,7 +65,7 @@ Sets the error level of the installer or uninstaller to \e{error_level}. See \R{
\c \\<b\\>current\\</b\\>|all
-Sets the context of $SMPROGRAMS and other shell folders. If set to 'current' (the default), the current user's shell folders are used. If set to 'all', the 'all users' shell folder is used. The all users folder may not be supported on all OSes. If the all users folder is not found, the current user folder will be used. Please take into consideration that a "normal user" has no rights to write in the all users area. Only admins have full access rights to the all users area. You can check this by using the UserInfo Plugin. See Contrib\\UserInfo\\UserInfo.nsi for an example.
+Sets the context of $SMPROGRAMS and other shell folders. If set to 'current' (the default), the current user's shell folders are used. If set to 'all', the 'all users' shell folder is used. The all users folder may not be supported on all OSes. If the all users folder is not found, the current user folder will be used. Please take into consideration that a "normal user" has no rights to write in the all users area. Only admins have full access rights to the all users area. You can check this by using the UserInfo plug-in. See Contrib\\UserInfo\\UserInfo.nsi for an example.
\c SetShellVarContext current
\c StrCpy $0 $DESKTOP
diff --git a/Docs/src/plugin.but b/Docs/src/plugin.but
index 3b6271a..80c7e48 100755
--- a/Docs/src/plugin.but
+++ b/Docs/src/plugin.but
@@ -1,26 +1,26 @@
-\S0{plugindlls} Plugin DLLs
+\S0{plugindlls} Plug-in DLLs
The abilities of the NSIS scripting language can be extended by utilising functionality provided in a DLL file. Probably the best known example of this is the InstallOptions.dll bundled with every NSIS release.
-When the NSIS compiler starts it scans the plugins directory for DLLs and makes a list of the plugins found and their exported functions. During compilation if a sequence such as fred::flintstone is encountered where the compiler expected to find a language keyword the compiler will look through this list. If a list entry specifies that fred.dll exports function flintstone NSIS will pack the fred.dll file into the created installer binary.
+When the NSIS compiler starts it scans the plug-ins directory for DLLs and makes a list of the plug-ins found and their exported functions. During compilation if a sequence such as fred::flintstone is encountered where the compiler expected to find a language keyword the compiler will look through this list. If a list entry specifies that fred.dll exports function flintstone NSIS will pack the fred.dll file into the created installer binary.
-During execution of a plugin command NSIS will unpack the necessary DLL to a temporary folder ($PLUGINSDIR), push all of the arguments specified (right-to-left order), and then execute the DLL function. If the /NOUNLOAD option is specified the DLL will not be unloaded until the installer exits or the next time you use the DLL without /NOUNLOAD. Please note that the last call to the plugin must not have the /NOUNLOAD flag or the plugin will not be deleted from $PLUGINSDIR, thus garbage will be left on the user's machine.
+During execution of a plug-in command NSIS will unpack the necessary DLL to a temporary folder ($PLUGINSDIR), push all of the arguments specified (right-to-left order), and then execute the DLL function. If the /NOUNLOAD option is specified the DLL will not be unloaded until the installer exits or the next time you use the DLL without /NOUNLOAD. Please note that the last call to the plug-in must not have the /NOUNLOAD flag or the plug-in will not be deleted from $PLUGINSDIR, thus garbage will be left on the user's machine.
-\S1{usingplug} Using Plugin Commands
+\S1{usingplug} Using Plug-in Commands
A plug-in call looks like this:
\c InstallOptions::dialog "ini_file_location.ini"
-All parameters are pushed onto the stack (in this case, the plug-in function only needs one parameter). Some plugin commands may not need any parameters on the stack, others might require more of them. To use a plug-in command you will need to read the documentation for the plug-in so that you know what parameters its functions require.
+All parameters are pushed onto the stack (in this case, the plug-in function only needs one parameter). Some plug-in commands may not need any parameters on the stack, others might require more of them. To use a plug-in command you will need to read the documentation for the plug-in so that you know what parameters its functions require.
-\S1{disablingplug} Disabling Plugin Unloading
+\S1{disablingplug} Disabling Plug-in Unloading
If you don't want to unload the DLL after calling a function, use /NOUNLOAD as the first parameter. For example:
\c dll::function /NOUNLOAD "param"
-You can also use \R{setpluginunload}{SetPluginUnload} alwaysoff to avoid writing /NOUNLOAD each and every time you use the same plugin.
+You can also use \R{setpluginunload}{SetPluginUnload} alwaysoff to avoid writing /NOUNLOAD each and every time you use the same plug-in.
\S1{calldiskplug} Calling plug-ins manually
diff --git a/Docs/src/script.but b/Docs/src/script.but
index 7adf43e..1e9d304 100755
--- a/Docs/src/script.but
+++ b/Docs/src/script.but
@@ -28,7 +28,7 @@ If you want a parameter to start with ; or # put it in quotes.
\\<b\\>Plug-ins\\</b\\>
-To call a plugin, use 'plugin::command [parameters]'. For more info see \R{plugindlls}{Plugin DLLs}.
+To call a plug-in, use 'plugin::command [parameters]'. For more info see \R{plugindlls}{Plug-in DLLs}.
\c nsExec::Exec "myfile"
diff --git a/Docs/src/tutorial.but b/Docs/src/tutorial.but
index bc157a6..0061f1f 100755
--- a/Docs/src/tutorial.but
+++ b/Docs/src/tutorial.but
@@ -128,7 +128,7 @@ After calling the function, the variables contain the same value as before. Note
\S2{tutdebug} Debugging Scripts
-The more you work with NSIS the more complex the scripts will become. This will increase the potential of mistakes, especially when dealing with lots of variables. There are a few possibilities to help you debugging the code. To display the contents of variables you should use \R{messagebox}{MessageBoxes} or \R{detailprint}{DetailPrint}. To get a brief overview about all variables you should use the plugin \W{http://nsis.sourceforge.net/wiki/DumpState}{DumpState}. By default all actions of the Installer are printed out in the Log Window. You can access the log if you right-click in the Log Window and select "Copy Details To Clipboard". There is also a way to write it directly to a file, see \R{dumplogtofile}{here}.
+The more you work with NSIS the more complex the scripts will become. This will increase the potential of mistakes, especially when dealing with lots of variables. There are a few possibilities to help you debugging the code. To display the contents of variables you should use \R{messagebox}{MessageBoxes} or \R{detailprint}{DetailPrint}. To get a brief overview about all variables you should use the plug-in \W{http://nsis.sourceforge.net/wiki/DumpState}{DumpState}. By default all actions of the Installer are printed out in the Log Window. You can access the log if you right-click in the Log Window and select "Copy Details To Clipboard". There is also a way to write it directly to a file, see \R{dumplogtofile}{here}.
\S1{compilercommands} Compiler Commands
diff --git a/Docs/src/usefulfunc.but b/Docs/src/usefulfunc.but
index b74443d..617e986 100755
--- a/Docs/src/usefulfunc.but
+++ b/Docs/src/usefulfunc.but
@@ -389,7 +389,7 @@
\H{connectinternet} Connect to the Internet
-\c ; ConnectInternet (uses Dialer plugin)
+\c ; ConnectInternet (uses Dialer plug-in)
\c ; Written by Joost Verburg
\c ;
\c ; This function attempts to make a connection to the internet if there is no
diff --git a/Docs/src/usefulinfos.but b/Docs/src/usefulinfos.but
index 027600a..92c8e93 100755
--- a/Docs/src/usefulinfos.but
+++ b/Docs/src/usefulinfos.but
@@ -68,7 +68,7 @@ Some of the following values will not be used by older Windows versions.
If both NoModify and NoRepair are set to 1, the button displays "Remove" instead of "Modify/Remove".
-\H{useful_system_plugin} Calling an external DLL using the System.dll plugin
+\H{useful_system_plugin} Calling an external DLL using the System.dll plug-in
Some install processes are required to call functions contained inside third party DLLs. A prime example of this is when installing a Palm(TM) conduit.
@@ -183,7 +183,7 @@ Save this script
\c DetailPrint "Path length: $1"
\c DetailPrint "Return value: $2"
\c
-\c ; last plugin call must not have /NOUNLOAD so NSIS will be able to delete
+\c ; last plug-in call must not have /NOUNLOAD so NSIS will be able to delete
\c ; the temporary DLL
\c
\c SetPluginUnload manual
diff --git a/Docs/src/var.but b/Docs/src/var.but
index 3d54fa1..dae8f1c 100755
--- a/Docs/src/var.but
+++ b/Docs/src/var.but
@@ -10,14 +10,17 @@ User variables can be declared with the \R{var}{Var} command. You can use these
\S2{var} Var
-\c var_name
+\c [/GLOBAL] var_name
-Declare a user variable. Allowed characters for variables names: [a-z][A-Z][0-9] and '_'. Variables cannot be declared in sections or functions.
+Declare a user variable. Allowed characters for variables names: [a-z][A-Z][0-9] and '_'. All defined variables are global, even if defined in a section or a function. To make this clear, variables defined in a section or a function must use the /GLOBAL flag. The /GLOBAL flag is not required outside of sections and functions.
\c Var example
\c
\c Function testVar
+\c Var /GLOBAL example2
+\c
\c StrCpy $example "example value"
+\c StrCpy $example2 "another example value"
\c FunctionEnd
\S1{varother} Other Writable Variables
@@ -228,7 +231,7 @@ The decimal HWND of the parent window.
\e{$PLUGINSDIR}
-The path to a temporary folder created upon the first usage of a plugin or a call to \R{initpluginsdir}{InitPluginsDir}. This folder is automatically deleted when the installer exits. This makes this folder the ideal folder to hold INI files for \L{../Docs/InstallOptions/Readme.html}{InstallOptions}, bitmaps for the splash plugin, or any other file that a plugin needs to work.
+The path to a temporary folder created upon the first usage of a plug-in or a call to \R{initpluginsdir}{InitPluginsDir}. This folder is automatically deleted when the installer exits. This makes this folder the ideal folder to hold INI files for \L{../Docs/InstallOptions/Readme.html}{InstallOptions}, bitmaps for the splash plug-in, or any other file that a plug-in needs to work.
\S1{varstrings} Constants Used in Strings
diff --git a/Examples/Library.nsi b/Examples/Library.nsi
new file mode 100755
index 0000000..0009657
--- /dev/null
+++ b/Examples/Library.nsi
@@ -0,0 +1,115 @@
+# This example tests the compile time aspect of the Library macros
+# more than the runtime aspect. It is more of a syntax example,
+# rather than a usage example.
+
+!include "Library.nsh"
+
+Name "Library Test"
+OutFile "Library Test.exe"
+
+InstallDir "$TEMP\Library Test"
+
+Page directory
+Page instfiles
+
+XPStyle on
+
+!define TestDLL "$%WINDIR%\Explorer.exe"
+
+Section
+
+!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib DLL NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+
+!insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+
+!insertmacro InstallLib TLB NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib TLB NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib TLB NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib TLB NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+
+!insertmacro InstallLib REGDLLTLB NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLLTLB NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLLTLB NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLLTLB NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+
+!insertmacro InstallLib DLL $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib DLL $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib DLL $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib DLL $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+
+!insertmacro InstallLib REGDLL $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLL $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLL $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLL $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+
+!insertmacro InstallLib TLB $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib TLB $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib TLB $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib TLB $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+
+!insertmacro InstallLib REGDLLTLB $0 REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLLTLB $0 NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLLTLB $0 REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+!insertmacro InstallLib REGDLLTLB $0 NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
+
+WriteUninstaller $INSTDIR\uninstall.exe
+
+SectionEnd
+
+Section uninstall
+
+!insertmacro UninstallLib DLL NOTSHARED NOREMOVE $INSTDIR\test.dll
+!insertmacro UninstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib DLL NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll
+
+!insertmacro UninstallLib REGDLL NOTSHARED NOREMOVE $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLL NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll
+
+!insertmacro UninstallLib TLB NOTSHARED NOREMOVE $INSTDIR\test.dll
+!insertmacro UninstallLib TLB NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib TLB NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib TLB NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib TLB NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll
+
+!insertmacro UninstallLib REGDLLTLB NOTSHARED NOREMOVE $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLLTLB NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLLTLB NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLLTLB NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLLTLB NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll
+
+!insertmacro UninstallLib DLL SHARED NOREMOVE $INSTDIR\test.dll
+!insertmacro UninstallLib DLL SHARED REBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib DLL SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib DLL SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib DLL SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll
+
+!insertmacro UninstallLib REGDLL SHARED NOREMOVE $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLL SHARED REBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLL SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLL SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLL SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll
+
+!insertmacro UninstallLib TLB SHARED NOREMOVE $INSTDIR\test.dll
+!insertmacro UninstallLib TLB SHARED REBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib TLB SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib TLB SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib TLB SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll
+
+!insertmacro UninstallLib REGDLLTLB SHARED NOREMOVE $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLLTLB SHARED REBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLLTLB SHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLLTLB SHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
+!insertmacro UninstallLib REGDLLTLB SHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll
+
+SectionEnd
diff --git a/Examples/LogicLib.nsi b/Examples/LogicLib.nsi
index 481729b..a1f17b5 100755
--- a/Examples/LogicLib.nsi
+++ b/Examples/LogicLib.nsi
@@ -4,9 +4,6 @@ Name "NSIS LogicLib Example"
OutFile "LogicLib.exe"
ShowInstDetails show
-!define LOGICLIB_STRCMP
-!define LOGICLIB_INT64CMP
-!define LOGICLIB_SECTIONCMP
!include "LogicLib.nsh"
;!undef LOGICLIB_VERBOSITY
diff --git a/Examples/Modern UI/MultiLanguage.nsi b/Examples/Modern UI/MultiLanguage.nsi
index 9494239..0e8236b 100755
--- a/Examples/Modern UI/MultiLanguage.nsi
+++ b/Examples/Modern UI/MultiLanguage.nsi
@@ -93,7 +93,7 @@
!insertmacro MUI_LANGUAGE "Breton"
!insertmacro MUI_LANGUAGE "Belarusian"
!insertmacro MUI_LANGUAGE "Icelandic"
- !insertmacro MUI_LANGUAGE "Malaysian"
+ !insertmacro MUI_LANGUAGE "Malay"
!insertmacro MUI_LANGUAGE "Bosnian"
!insertmacro MUI_LANGUAGE "Kurdish"
diff --git a/Examples/SConscript b/Examples/SConscript
index 702fa86..bbbfaa6 100755
--- a/Examples/SConscript
+++ b/Examples/SConscript
@@ -7,6 +7,7 @@ examples = Split("""
FileFuncTest.nsi
gfx.nsi
languages.nsi
+ Library.nsi
LogicLib.nsi
makensis.ini
makensis.nsi
diff --git a/Examples/UserVars.nsi b/Examples/UserVars.nsi
index 26884bf..c39f7cb 100755
--- a/Examples/UserVars.nsi
+++ b/Examples/UserVars.nsi
@@ -40,6 +40,14 @@ Section "Dummy Section" SecDummy
SectionEnd
+Section "Another Section"
+
+ Var /GLOBAL "AnotherVar"
+
+ StrCpy $AnotherVar "test"
+
+SectionEnd
+
;--------------------------------
; Uninstaller
diff --git a/Examples/WordFuncTest.nsi b/Examples/WordFuncTest.nsi
index d62ec19..2ffda9e 100755
--- a/Examples/WordFuncTest.nsi
+++ b/Examples/WordFuncTest.nsi
@@ -269,6 +269,9 @@ Section WordReplace
${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' '' '+' $OUT
StrCmp $OUT 'C:\io. C:\logo. C:\WINDOWS' 0 error
+ ${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'C:\io.sys' '' '+' $OUT
+ StrCmp $OUT ' C:\logo.sys C:\WINDOWS' 0 error
+
${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' ' ' ' ' '+1*' $OUT
StrCmp $OUT 'C:\io.sys C:\logo.sys C:\WINDOWS' 0 error
diff --git a/Examples/bigtest.nsi b/Examples/bigtest.nsi
index de86c70..e1d6d0c 100755
--- a/Examples/bigtest.nsi
+++ b/Examples/bigtest.nsi
@@ -16,7 +16,7 @@ SetCompress off
Name "BigNSISTest"
Caption "NSIS Big Test"
-Icon "..\Contrib\Graphics\Icons\nsis1-install.ico"
+Icon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-install.ico"
OutFile "bigtest.exe"
SetDateSave on
@@ -30,7 +30,7 @@ XPStyle on
InstallDir "$PROGRAMFILES\NSISCrap\BigNSISTest"
InstallDirRegKey HKLM "Software\NSISCrap\BigNSISTest" ""
-CheckBitmap "..\Contrib\Graphics\Checks\classic-cross.bmp"
+CheckBitmap "${NSISDIR}\Contrib\Graphics\Checks\classic-cross.bmp"
LicenseText "A test text, make sure it's all there"
LicenseData "bigtest.nsi"
@@ -277,7 +277,7 @@ FunctionEnd
; Uninstaller
UninstallText "This will uninstall example2. Hit next to continue."
-UninstallIcon "..\Contrib\Graphics\Icons\nsis1-uninstall.ico"
+UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\nsis1-uninstall.ico"
Section "Uninstall"
diff --git a/Examples/example1.nsi b/Examples/example1.nsi
index 3557a1b..6930262 100755
--- a/Examples/example1.nsi
+++ b/Examples/example1.nsi
@@ -2,7 +2,7 @@
;
; This script is perhaps one of the simplest NSIs you can make. All of the
; optional settings are left to their default settings. The installer simply
-; prompts the user asking them where to install, and drops a copy of makensisw.exe
+; prompts the user asking them where to install, and drops a copy of example1.nsi
; there.
;--------------------------------
@@ -32,6 +32,6 @@ Section "" ;No components page, name is not important
SetOutPath $INSTDIR
; Put file there
- File ..\makensisw.exe
+ File example1.nsi
-SectionEnd ; end the section \ No newline at end of file
+SectionEnd ; end the section
diff --git a/Examples/example2.nsi b/Examples/example2.nsi
index d8c7f12..2c4a794 100755
--- a/Examples/example2.nsi
+++ b/Examples/example2.nsi
@@ -3,7 +3,7 @@
; This script is based on example1.nsi, but it remember the directory,
; has uninstall support and (optionally) installs start menu shortcuts.
;
-; It will install makensisw.exe into a directory that the user selects,
+; It will install example2.nsi into a directory that the user selects,
;--------------------------------
@@ -42,7 +42,7 @@ Section "Example2 (required)"
SetOutPath $INSTDIR
; Put file there
- File "..\makensisw.exe"
+ File "example2.nsi"
; Write the installation path into the registry
WriteRegStr HKLM SOFTWARE\NSIS_Example2 "Install_Dir" "$INSTDIR"
@@ -61,7 +61,7 @@ Section "Start Menu Shortcuts"
CreateDirectory "$SMPROGRAMS\Example2"
CreateShortCut "$SMPROGRAMS\Example2\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
- CreateShortCut "$SMPROGRAMS\Example2\Example2 (MakeNSISW).lnk" "$INSTDIR\makensisw.exe" "" "$INSTDIR\makensisw.exe" 0
+ CreateShortCut "$SMPROGRAMS\Example2\Example2 (MakeNSISW).lnk" "$INSTDIR\example2.nsi" "" "$INSTDIR\example2.nsi" 0
SectionEnd
@@ -76,7 +76,7 @@ Section "Uninstall"
DeleteRegKey HKLM SOFTWARE\NSIS_Example2
; Remove files and uninstaller
- Delete $INSTDIR\makensisw.exe
+ Delete $INSTDIR\example2.nsi
Delete $INSTDIR\uninstall.exe
; Remove shortcuts, if any
@@ -86,4 +86,4 @@ Section "Uninstall"
RMDir "$SMPROGRAMS\Example2"
RMDir "$INSTDIR"
-SectionEnd \ No newline at end of file
+SectionEnd
diff --git a/Examples/makensis.nsi b/Examples/makensis.nsi
index d1b8567..5fb151e 100755
--- a/Examples/makensis.nsi
+++ b/Examples/makensis.nsi
@@ -211,6 +211,7 @@ Section "Script Examples" SecExample
File ..\Examples\gfx.nsi
File ..\Examples\one-section.nsi
File ..\Examples\languages.nsi
+ File ..\Examples\Library.nsi
File ..\Examples\VersionInfo.nsi
File ..\Examples\UserVars.nsi
File ..\Examples\LogicLib.nsi
diff --git a/Include/FileFunc.nsh b/Include/FileFunc.nsh
index c2ef9de..53db779 100755
--- a/Include/FileFunc.nsh
+++ b/Include/FileFunc.nsh
@@ -1,7 +1,7 @@
/*
_____________________________________________________________________________
- File Functions Header v2.6
+ File Functions Header v2.7
_____________________________________________________________________________
2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
@@ -1365,8 +1365,14 @@ RefreshShellIcons
Function ${_FILEFUNC_UN}GetExeName
Push $0
+ Push $1
+ Push $2
System::Call 'kernel32::GetModuleFileNameA(i 0, t .r0, i 1024)'
- #System::Call 'kernel32::GetLongPathNameA(t r0, t .r0, i 1024)'
+ System::Call 'kernel32::GetLongPathNameA(t r0, t .r1, i 1024)i .r2'
+ StrCmp $2 error +2
+ StrCpy $0 $1
+ Pop $2
+ Pop $1
Exch $0
FunctionEnd
@@ -1384,8 +1390,14 @@ RefreshShellIcons
Function ${_FILEFUNC_UN}GetExePath
Push $0
+ Push $1
+ Push $2
StrCpy $0 $EXEDIR
- #System::Call 'kernel32::GetLongPathNameA(t r0, t .r0, i 1024)'
+ System::Call 'kernel32::GetLongPathNameA(t r0, t .r1, i 1024)i .r2'
+ StrCmp $2 error +2
+ StrCpy $0 $1
+ Pop $2
+ Pop $1
Exch $0
FunctionEnd
diff --git a/Include/Library.nsh b/Include/Library.nsh
index a2a0187..f649511 100755
--- a/Include/Library.nsh
+++ b/Include/Library.nsh
@@ -28,11 +28,17 @@
!define SHCNF_IDLIST 0x0000
!endif
-Var __INSTALLLLIB_SESSIONGUID
-
### Initialize session id (GUID)
!macro __InstallLib_Helper_InitSession
+ !ifndef __InstallLib_SessionGUID_Defined
+
+ !define __InstallLib_SessionGUID_Defined
+
+ Var /GLOBAL __INSTALLLLIB_SESSIONGUID
+
+ !endif
+
StrCmp $__INSTALLLLIB_SESSIONGUID '' 0 +6
System::Alloc 16
@@ -103,7 +109,7 @@ Var __INSTALLLLIB_SESSIONGUID
!macro InstallLib libtype shared install localfile destfile tempbasedir
!verbose push
- #!verbose 3
+ !verbose 3
Push $R0
Push $R1
@@ -115,7 +121,7 @@ Var __INSTALLLLIB_SESSIONGUID
;------------------------
;Define
- !define INSTALLLIB_UNIQUE ${__LINE__}
+ !define INSTALLLIB_UNIQUE "${__FILE__}${__LINE__}"
!define INSTALLLIB_LIBTYPE_${libtype}
!define INSTALLLIB_LIBTYPE_SET INSTALLLIB_LIBTYPE_${libtype}
@@ -149,14 +155,14 @@ Var __INSTALLLLIB_SESSIONGUID
!ifndef INSTALLLIB_SHARED_NOTSHARED
- StrCmp ${shared} "" 0 installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}
+ StrCmp ${shared} "" 0 "installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}"
ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4
ClearErrors
IntOp $R0 $R0 + 1
WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4 $R0
- installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}:
+ "installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}:"
!endif
@@ -169,19 +175,19 @@ Var __INSTALLLLIB_SESSIONGUID
System::Call "sfc::SfcIsFileProtected(i 0, w R4) i.R0"
- StrCmp $R0 "error" installlib.notprotected_${INSTALLLIB_UNIQUE}
- StrCmp $R0 "0" installlib.notprotected_${INSTALLLIB_UNIQUE}
+ StrCmp $R0 "error" "installlib.notprotected_${INSTALLLIB_UNIQUE}"
+ StrCmp $R0 "0" "installlib.notprotected_${INSTALLLIB_UNIQUE}"
- Goto installlib.done_${INSTALLLIB_UNIQUE}
+ Goto "installlib.done_${INSTALLLIB_UNIQUE}"
- installlib.notprotected_${INSTALLLIB_UNIQUE}:
+ "installlib.notprotected_${INSTALLLIB_UNIQUE}:"
!endif
;------------------------
;Check file
- IfFileExists $R4 0 installlib.copy_${INSTALLLIB_UNIQUE}
+ IfFileExists $R4 0 "installlib.copy_${INSTALLLIB_UNIQUE}"
;------------------------
;Get version information
@@ -208,9 +214,9 @@ Var __INSTALLLLIB_SESSIONGUID
!ifndef INSTALLLIB_LIBTYPE_TLB & INSTALLLIB_LIBTYPE_REGDLLTLB
- IntCmpU $R0 $R2 0 installlib.register_${INSTALLLIB_UNIQUE} installlib.upgrade_${INSTALLLIB_UNIQUE}
- IntCmpU $R1 $R3 installlib.register_${INSTALLLIB_UNIQUE} installlib.register_${INSTALLLIB_UNIQUE} \
- installlib.upgrade_${INSTALLLIB_UNIQUE}
+ IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+ IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
+ "installlib.upgrade_${INSTALLLIB_UNIQUE}"
!else
@@ -223,15 +229,15 @@ Var __INSTALLLLIB_SESSIONGUID
!ifndef LIBRARY_VERSION_NONE
- IntCmpU $R0 $R2 0 installlib.register_${INSTALLLIB_UNIQUE} installlib.upgrade_${INSTALLLIB_UNIQUE}
- IntCmpU $R1 $R3 0 installlib.register_${INSTALLLIB_UNIQUE} \
- installlib.upgrade_${INSTALLLIB_UNIQUE}
+ IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+ IntCmpU $R1 $R3 0 "installlib.register_${INSTALLLIB_UNIQUE}" \
+ "installlib.upgrade_${INSTALLLIB_UNIQUE}"
!else
- IntCmpU $R0 $R2 0 installlib.register_${INSTALLLIB_UNIQUE} installlib.upgrade_${INSTALLLIB_UNIQUE}
- IntCmpU $R1 $R3 installlib.register_${INSTALLLIB_UNIQUE} installlib.register_${INSTALLLIB_UNIQUE} \
- installlib.upgrade_${INSTALLLIB_UNIQUE}
+ IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+ IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
+ "installlib.upgrade_${INSTALLLIB_UNIQUE}"
!endif
@@ -273,9 +279,9 @@ Var __INSTALLLLIB_SESSIONGUID
Pop $R2
Pop $R3
- IntCmpU $R0 $R2 0 installlib.register_${INSTALLLIB_UNIQUE} installlib.upgrade_${INSTALLLIB_UNIQUE}
- IntCmpU $R1 $R3 installlib.register_${INSTALLLIB_UNIQUE} installlib.register_${INSTALLLIB_UNIQUE} \
- installlib.upgrade_${INSTALLLIB_UNIQUE}
+ IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
+ IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
+ "installlib.upgrade_${INSTALLLIB_UNIQUE}"
!undef LIBRARY_VERSION_HIGH
!undef LIBRARY_VERSION_LOW
@@ -295,7 +301,7 @@ Var __INSTALLLLIB_SESSIONGUID
!undef LIBRARY_DEFINE_UPGRADE_LABEL
- installlib.upgrade_${INSTALLLIB_UNIQUE}:
+ "installlib.upgrade_${INSTALLLIB_UNIQUE}:"
!endif
@@ -304,10 +310,10 @@ Var __INSTALLLLIB_SESSIONGUID
!ifdef INSTALLLIB_INSTALL_NOREBOOT_PROTECTED | INSTALLLIB_INSTALL_NOREBOOT_NOTPROTECTED
- installlib.copy_${INSTALLLIB_UNIQUE}:
+ "installlib.copy_${INSTALLLIB_UNIQUE}:"
StrCpy $R0 $R4
- Call :installlib.file_${INSTALLLIB_UNIQUE}
+ Call ":installlib.file_${INSTALLLIB_UNIQUE}"
!else
@@ -326,9 +332,9 @@ Var __INSTALLLLIB_SESSIONGUID
ClearErrors
StrCpy $R0 $R4
- Call :installlib.file_${INSTALLLIB_UNIQUE}
+ Call ":installlib.file_${INSTALLLIB_UNIQUE}"
- IfErrors 0 installlib.register_${INSTALLLIB_UNIQUE}
+ IfErrors 0 "installlib.register_${INSTALLLIB_UNIQUE}"
SetOverwrite lastused
@@ -336,19 +342,19 @@ Var __INSTALLLLIB_SESSIONGUID
;Copy on reboot
GetTempFileName $R0 $R5
- Call :installlib.file_${INSTALLLIB_UNIQUE}
+ Call ":installlib.file_${INSTALLLIB_UNIQUE}"
Rename /REBOOTOK $R0 $R4
;------------------------
;Register on reboot
- Call :installlib.regonreboot_${INSTALLLIB_UNIQUE}
+ Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}"
- Goto installlib.done_${INSTALLLIB_UNIQUE}
+ Goto "installlib.done_${INSTALLLIB_UNIQUE}"
- installlib.copy_${INSTALLLIB_UNIQUE}:
+ "installlib.copy_${INSTALLLIB_UNIQUE}:"
StrCpy $R0 $R4
- Call :installlib.file_${INSTALLLIB_UNIQUE}
+ Call ":installlib.file_${INSTALLLIB_UNIQUE}"
!endif
@@ -359,7 +365,7 @@ Var __INSTALLLLIB_SESSIONGUID
!undef LIBRARY_DEFINE_REGISTER_LABEL
- installlib.register_${INSTALLLIB_UNIQUE}:
+ "installlib.register_${INSTALLLIB_UNIQUE}:"
!endif
@@ -367,13 +373,13 @@ Var __INSTALLLLIB_SESSIONGUID
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
- IfRebootFlag 0 installlib.regnoreboot_${INSTALLLIB_UNIQUE}
+ IfRebootFlag 0 "installlib.regnoreboot_${INSTALLLIB_UNIQUE}"
- Call :installlib.regonreboot_${INSTALLLIB_UNIQUE}
+ Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}"
- Goto installlib.registerfinish_${INSTALLLIB_UNIQUE}
+ Goto "installlib.registerfinish_${INSTALLLIB_UNIQUE}"
- installlib.regnoreboot_${INSTALLLIB_UNIQUE}:
+ "installlib.regnoreboot_${INSTALLLIB_UNIQUE}:"
!endif
@@ -391,7 +397,7 @@ Var __INSTALLLLIB_SESSIONGUID
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
- installlib.registerfinish_${INSTALLLIB_UNIQUE}:
+ "installlib.registerfinish_${INSTALLLIB_UNIQUE}:"
!endif
@@ -416,7 +422,7 @@ Var __INSTALLLLIB_SESSIONGUID
!undef LIBRARY_DEFINE_DONE_LABEL
- installlib.done_${INSTALLLIB_UNIQUE}:
+ "installlib.done_${INSTALLLIB_UNIQUE}:"
!endif
@@ -430,7 +436,7 @@ Var __INSTALLLLIB_SESSIONGUID
;------------------------
;End
- Goto installlib.end_${INSTALLLIB_UNIQUE}
+ Goto "installlib.end_${INSTALLLIB_UNIQUE}"
;------------------------
;Extract
@@ -445,7 +451,7 @@ Var __INSTALLLLIB_SESSIONGUID
!endif
- installlib.file_${INSTALLLIB_UNIQUE}:
+ "installlib.file_${INSTALLLIB_UNIQUE}:"
File /oname=$R0 "${LOCALFILE}"
Return
@@ -456,7 +462,7 @@ Var __INSTALLLLIB_SESSIONGUID
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
- installlib.regonreboot_${INSTALLLIB_UNIQUE}:
+ "installlib.regonreboot_${INSTALLLIB_UNIQUE}:"
!ifdef INSTALLLIB_LIBTYPE_REGDLL
!insertmacro __InstallLib_Helper_AddRegToolEntry 'D' "$R4" "$R5"
@@ -478,7 +484,7 @@ Var __INSTALLLLIB_SESSIONGUID
;------------------------
;End label
- installlib.end_${INSTALLLIB_UNIQUE}:
+ "installlib.end_${INSTALLLIB_UNIQUE}:"
;------------------------
;Undefine
@@ -508,7 +514,7 @@ Var __INSTALLLLIB_SESSIONGUID
;------------------------
;Define
- !define UNINSTALLLIB_UNIQUE ${__LINE__}
+ !define UNINSTALLLIB_UNIQUE "${__FILE__}${__LINE__}"
!define UNINSTALLLIB_LIBTYPE_${libtype}
!define UNINSTALLLIB_LIBTYPE_SET UNINSTALLLIB_LIBTYPE_${libtype}
@@ -546,24 +552,26 @@ Var __INSTALLLLIB_SESSIONGUID
!ifdef UNINSTALLLIB_SHARED_SHARED
+ !define UNINSTALLLIB_DONE_LABEL
+
ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
- StrCmp $R0 "" uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}
+ StrCmp $R0 "" "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}"
IntOp $R0 $R0 - 1
- IntCmp $R0 0 uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE} \
- uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE} uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}
+ IntCmp $R0 0 "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" \
+ "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" "uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}"
- uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}:
+ "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}:"
DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
!ifndef UNINSTALLLIB_SHARED_SHAREDNOREMOVE
- Goto uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}
+ Goto "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}"
!endif
- uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}:
+ "uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}:"
WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
- Goto uninstalllib.done_${UNINSTALLLIB_UNIQUE}
+ Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}"
- uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}:
+ "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}:"
!endif
@@ -577,14 +585,20 @@ Var __INSTALLLLIB_SESSIONGUID
!ifdef UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED | UNINSTALLLIB_UNINSTALL_NOREBOOT_PROTECTED
+ !ifndef UNINSTALLLIB_DONE_LABEL
+
+ !define UNINSTALLLIB_DONE_LABEL
+
+ !endif
+
System::Call "sfc::SfcIsFileProtected(i 0, w $R1) i.R0"
- StrCmp $R0 "error" uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}
- StrCmp $R0 "0" uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}
+ StrCmp $R0 "error" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}"
+ StrCmp $R0 "0" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}"
- Goto uninstalllib.done_${UNINSTALLLIB_UNIQUE}
+ Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}"
- uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}:
+ "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}:"
!endif
@@ -633,7 +647,13 @@ Var __INSTALLLLIB_SESSIONGUID
;------------------------
;Done
- uninstalllib.done_${UNINSTALLLIB_UNIQUE}:
+ !ifdef UNINSTALLLIB_DONE_LABEL
+
+ !undef UNINSTALLLIB_DONE_LABEL
+
+ "uninstalllib.done_${UNINSTALLLIB_UNIQUE}:"
+
+ !endif
Pop $R1
Pop $R0
diff --git a/Include/LogicLib.nsh b/Include/LogicLib.nsh
index 77120c7..573e8bd 100755
--- a/Include/LogicLib.nsh
+++ b/Include/LogicLib.nsh
@@ -42,17 +42,14 @@
; a == b; a != b
; Additional case-insensitive string tests (using System.dll):
; a S< b; a S>= b; a S> b; a S<= b
-; - Requires a !define LOGICLIB_STRCMP above !include LogicLib.nsh
; Case-sensitive string tests (using System.dll):
; a S== b; a S!= b
-; - Requires a !define LOGICLIB_STRCMP above !include LogicLib.nsh
; Standard (built-in) signed integer tests:
; a = b; a <> b; a < b; a >= b; a > b; a <= b
; Standard (built-in) unsigned integer tests:
; a U< b; a U>= b; a U> b; a U<= b
; 64-bit integer tests (using System.dll):
; a L= b; a L<> b; a L< b; a L>= b; a L> b; a L<= b
-; - Requires a !define LOGICLIB_INT64CMP above !include LogicLib.nsh
; Built-in NSIS flag tests:
; ${Abort}; ${Errors}; ${RebootFlag}; ${Silent}
; Built-in NSIS other tests:
@@ -83,14 +80,14 @@
!define | "'"
!define || "' '"
- !ifdef LOGICLIB_SECTIONCMP
- !include Sections.nsh
- !endif
+ !include Sections.nsh
- !ifdef LOGICLIB_STRCMP | LOGICLIB_INT64CMP | LOGICLIB_SECTIONCMP
- !define _LOGICLIB_TEMP
- Var _LOGICLIB_TEMP ; Temporary variable to aid the more elaborate logic tests
- !endif
+ !macro _LOGICLIB_TEMP
+ !ifndef _LOGICLIB_TEMP
+ !define _LOGICLIB_TEMP
+ Var /GLOBAL _LOGICLIB_TEMP ; Temporary variable to aid the more elaborate logic tests
+ !endif
+ !macroend
!macro _PushLogic
!insertmacro _PushScope Logic _${__LINE__}
@@ -138,13 +135,10 @@
; Case-sensitive string tests
!macro _StrCmp _a _b _e _l _m
- !ifdef _LOGICLIB_TEMP
- System::Call `kernel32::lstrcmpA(ts, ts) i.s` `${_a}` `${_b}`
- Pop $_LOGICLIB_TEMP
- IntCmp $_LOGICLIB_TEMP 0 `${_e}` `${_l}` `${_m}`
- !else
- !error "Please !define LOGICLIB_STRCMP above !include LogicLib.nsh and recompile"
- !endif
+ !insertmacro _LOGICLIB_TEMP
+ System::Call `kernel32::lstrcmpA(ts, ts) i.s` `${_a}` `${_b}`
+ Pop $_LOGICLIB_TEMP
+ IntCmp $_LOGICLIB_TEMP 0 `${_e}` `${_l}` `${_m}`
!macroend
!macro _S== _a _b _t _f
@@ -157,13 +151,10 @@
; Extra string tests (cannot do these case-sensitively - I tried and lstrcmp still ignored the case)
!macro _StrCmpI _a _b _e _l _m
- !ifdef _LOGICLIB_TEMP
- System::Call `kernel32::lstrcmpiA(ts, ts) i.s` `${_a}` `${_b}`
- Pop $_LOGICLIB_TEMP
- IntCmp $_LOGICLIB_TEMP 0 `${_e}` `${_l}` `${_m}`
- !else
- !error "Please !define LOGICLIB_STRCMP above !include LogicLib.nsh and recompile"
- !endif
+ !insertmacro _LOGICLIB_TEMP
+ System::Call `kernel32::lstrcmpiA(ts, ts) i.s` `${_a}` `${_b}`
+ Pop $_LOGICLIB_TEMP
+ IntCmp $_LOGICLIB_TEMP 0 `${_e}` `${_l}` `${_m}`
!macroend
!macro _S< _a _b _t _f
@@ -226,13 +217,10 @@
; Int64 tests
!macro _Int64Cmp _a _o _b _t _f
- !ifdef _LOGICLIB_TEMP
- System::Int64Op `${_a}` `${_o}` `${_b}`
- Pop $_LOGICLIB_TEMP
- !insertmacro _= $_LOGICLIB_TEMP 0 `${_f}` `${_t}`
- !else
- !error "Please !define LOGICLIB_INT64CMP above !include LogicLib.nsh and recompile"
- !endif
+ !insertmacro _LOGICLIB_TEMP
+ System::Int64Op `${_a}` `${_o}` `${_b}`
+ Pop $_LOGICLIB_TEMP
+ !insertmacro _= $_LOGICLIB_TEMP 0 `${_f}` `${_t}`
!macroend
!macro _L= _a _b _t _f
@@ -309,13 +297,10 @@
; Section flag test
!macro _SectionFlagIsSet _a _b _t _f
- !ifdef _LOGICLIB_TEMP & SF_SELECTED
- SectionGetFlags `${_b}` $_LOGICLIB_TEMP
- IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP & `${_a}`
- !insertmacro _= $_LOGICLIB_TEMP `${_a}` `${_t}` `${_f}`
- !else
- !error "Please !define LOGICLIB_SECTIONCMP above !include LogicLib.nsh and recompile"
- !endif
+ !insertmacro _LOGICLIB_TEMP
+ SectionGetFlags `${_b}` $_LOGICLIB_TEMP
+ IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP & `${_a}`
+ !insertmacro _= $_LOGICLIB_TEMP `${_a}` `${_t}` `${_f}`
!macroend
!define SectionIsSelected `${SF_SELECTED} SectionFlagIsSet`
!define SectionIsSubSection `${SF_SUBSEC} SectionFlagIsSet`
diff --git a/Include/UpgradeDLL.nsh b/Include/UpgradeDLL.nsh
index 0d99dcb..5f9a6a2 100755
--- a/Include/UpgradeDLL.nsh
+++ b/Include/UpgradeDLL.nsh
@@ -96,7 +96,7 @@ Example:
Push $R4
Push $R5
- !define UPGRADEDLL_UNIQUE ${__LINE__}
+ !define UPGRADEDLL_UNIQUE "${__FILE__}${__LINE__}"
SetOverwrite try
@@ -110,21 +110,21 @@ Example:
;------------------------
;Get version information
- IfFileExists $R4 0 upgradedll.copy_${UPGRADEDLL_UNIQUE}
+ IfFileExists $R4 0 "upgradedll.copy_${UPGRADEDLL_UNIQUE}"
ClearErrors
GetDLLVersionLocal "${LOCALFILE}" $R0 $R1
GetDLLVersion $R4 $R2 $R3
- IfErrors upgradedll.upgrade_${UPGRADEDLL_UNIQUE}
+ IfErrors "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
- IntCmpU $R0 $R2 0 upgradedll.done_${UPGRADEDLL_UNIQUE} upgradedll.upgrade_${UPGRADEDLL_UNIQUE}
- IntCmpU $R1 $R3 upgradedll.done_${UPGRADEDLL_UNIQUE} upgradedll.done_${UPGRADEDLL_UNIQUE} \
- upgradedll.upgrade_${UPGRADEDLL_UNIQUE}
+ IntCmpU $R0 $R2 0 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
+ IntCmpU $R1 $R3 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.done_${UPGRADEDLL_UNIQUE}" \
+ "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
;------------------------
;Upgrade
- upgradedll.upgrade_${UPGRADEDLL_UNIQUE}:
+ "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}:"
!ifndef UPGRADEDLL_NOREGISTER
;Unregister the DLL
UnRegDLL $R4
@@ -135,14 +135,14 @@ Example:
ClearErrors
StrCpy $R0 $R4
- Call :upgradedll.file_${UPGRADEDLL_UNIQUE}
- IfErrors 0 upgradedll.noreboot_${UPGRADEDLL_UNIQUE}
+ Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
+ IfErrors 0 "upgradedll.noreboot_${UPGRADEDLL_UNIQUE}"
;------------------------
;Copy on reboot
GetTempFileName $R0 $R5
- Call :upgradedll.file_${UPGRADEDLL_UNIQUE}
+ Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
Rename /REBOOTOK $R0 $R4
;------------------------
@@ -150,19 +150,19 @@ Example:
!insertmacro __UpgradeDLL_Helper_AddRegToolEntry 'D' $R4 $R5
- Goto upgradedll.done_${UPGRADEDLL_UNIQUE}
+ Goto "upgradedll.done_${UPGRADEDLL_UNIQUE}"
;------------------------
;DLL does not exist
- upgradedll.copy_${UPGRADEDLL_UNIQUE}:
+ "upgradedll.copy_${UPGRADEDLL_UNIQUE}:"
StrCpy $R0 $R4
- Call :upgradedll.file_${UPGRADEDLL_UNIQUE}
+ Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
;------------------------
;Register
- upgradedll.noreboot_${UPGRADEDLL_UNIQUE}:
+ "upgradedll.noreboot_${UPGRADEDLL_UNIQUE}:"
!ifndef UPGRADEDLL_NOREGISTER
RegDLL $R4
!endif
@@ -170,7 +170,7 @@ Example:
;------------------------
;Done
- upgradedll.done_${UPGRADEDLL_UNIQUE}:
+ "upgradedll.done_${UPGRADEDLL_UNIQUE}:"
Pop $R5
Pop $R4
@@ -182,16 +182,16 @@ Example:
;------------------------
;End
- Goto upgradedll.end_${UPGRADEDLL_UNIQUE}
+ Goto "upgradedll.end_${UPGRADEDLL_UNIQUE}"
;------------------------
;Extract
- upgradedll.file_${UPGRADEDLL_UNIQUE}:
+ "upgradedll.file_${UPGRADEDLL_UNIQUE}:"
File /oname=$R0 "${LOCALFILE}"
Return
- upgradedll.end_${UPGRADEDLL_UNIQUE}:
+ "upgradedll.end_${UPGRADEDLL_UNIQUE}:"
SetOverwrite lastused
diff --git a/Include/WordFunc.nsh b/Include/WordFunc.nsh
index 3bbae9e..e462a60 100755
--- a/Include/WordFunc.nsh
+++ b/Include/WordFunc.nsh
@@ -1,7 +1,7 @@
/*
_____________________________________________________________________________
- Word Functions Header v3.0
+ Word Functions Header v3.1
_____________________________________________________________________________
2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
@@ -808,11 +808,11 @@ VersionConvert
all:
StrCpy $5 0
StrCpy $2 $R0 $7 $5
- StrCmp $2$3 '' error1
StrCmp $2 '' +4
- StrCmp $2 $0 +5
+ StrCmp $2 $0 +6
IntOp $5 $5 + 1
- goto -5
+ goto -4
+ StrCmp $R0 $R1 error1
StrCpy $R0 '$3$R0'
goto end
StrCpy $2 $R0 $5
diff --git a/Menu/images/header.gif b/Menu/images/header.gif
index 4fc69fb..0c7022c 100755
--- a/Menu/images/header.gif
+++ b/Menu/images/header.gif
Binary files differ
diff --git a/SCons/Config/gnu b/SCons/Config/gnu
index 518d108..09c7fe7 100755
--- a/SCons/Config/gnu
+++ b/SCons/Config/gnu
@@ -16,7 +16,14 @@ def cross_env(env):
### flags
-defenv['ENTRY_FLAG'] = lambda x: '-Wl,-e,_' + x + '@16'
+def entry(x):
+ if x == 'WinMain':
+ x = '_WinMain@16'
+ elif x == 'DllMain':
+ x = '_DllMain@12'
+ return '-Wl,-e%s' % x
+
+defenv['ENTRY_FLAG'] = entry
defenv['MAP_FLAG'] = '-Wl,-Map,${TARGET.base}.map'
defenv['EXCEPTION_FLAG'] = ''
defenv['NODEFLIBS_FLAG'] = '-nostdlib -Wl,--exclude-libs,msvcrt.a'
@@ -65,6 +72,7 @@ plugin_env.Append(CCFLAGS = '-Os') # optimize for size
plugin_env.Append(CCFLAGS = '-Wall') # level 3 warnings
plugin_env.Append(LINKFLAGS = '-s') # strip
+plugin_env.Append(LINKFLAGS = '-mwindows') # build windows executables
plugin_env.Append(LINKFLAGS = '$ALIGN_FLAG') # 512 bytes align
plugin_env.Append(LINKFLAGS = '$MAP_FLAG') # generate map file
@@ -94,7 +102,7 @@ util_env.Append(LINKFLAGS = '$MAP_FLAG') # generate map file
# sure the sections will be written in the correct order.
#
-stub_env.Append(LINKFLAGS = '-Wl,%s' % File('linker_script').abspath)
+stub_env.Append(LINKFLAGS = '-T %s' % File('linker_script').abspath)
#
# GCC requires some functions from the CRT to be present, if certain
diff --git a/SCons/Config/linker_script b/SCons/Config/linker_script
index 41ac86e..d853335 100755
--- a/SCons/Config/linker_script
+++ b/SCons/Config/linker_script
@@ -1,10 +1,210 @@
+OUTPUT_FORMAT(pei-i386)
SECTIONS
{
- .text : { *(.text) }
- .data : { *(.data) }
- .rdata : { *(.rdata) }
- .bss : { *(.bss) }
- .idata : { *(.idata) }
- .ndata BLOCK(__section_alignment__) : { [ .ndata ] }
- .rsrc : { *(.rsrc) }
+ .text __image_base__ + __section_alignment__ :
+ {
+ *(.init)
+ *(.text)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
+ LONG (-1);
+ *(EXCLUDE_FILE (*crtend.o) .ctors);
+ *(.ctor);
+ *(SORT(.ctors.*));
+ *crtend.o (.ctors);
+ LONG (0);
+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
+ LONG (-1);
+ *(EXCLUDE_FILE (*crtend.o) .dtors);
+ *(.dtor);
+ *(SORT(.dtors.*));
+ *crtend.o (.dtors);
+ LONG (0);
+ *(.fini)
+ /* ??? Why is .gcc_exc here? */
+ *(.gcc_exc)
+ PROVIDE (etext = .);
+ *(.gcc_except_table)
+ }
+ /* The Cygwin32 library uses a section to avoid copying certain data
+ on fork. This used to be named ".data". The linker used
+ to include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. Instead, we name the section
+ ".data_cygwin_nocopy" and explictly include it after __data_end__. */
+ .data BLOCK(__section_alignment__) :
+ {
+ __data_start__ = . ;
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ __data_end__ = . ;
+ *(.data_cygwin_nocopy)
+ }
+ .rdata BLOCK(__section_alignment__) :
+ {
+ *(.rdata)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+ ___RUNTIME_PSEUDO_RELOC_LIST__ = .;
+ __RUNTIME_PSEUDO_RELOC_LIST__ = .;
+ *(.rdata_runtime_pseudo_reloc)
+ ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
+ __RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
+ }
+ .pdata BLOCK(__section_alignment__) :
+ {
+ *(.pdata)
+ }
+ .bss BLOCK(__section_alignment__) :
+ {
+ __bss_start__ = . ;
+ *(.bss)
+ *(COMMON)
+ __bss_end__ = . ;
+ }
+ .edata BLOCK(__section_alignment__) :
+ {
+ *(.edata)
+ }
+ /DISCARD/ :
+ {
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+ }
+ .idata BLOCK(__section_alignment__) :
+ {
+ /* This cannot currently be handled with grouped sections.
+ See pe.em:sort_sections. */
+ SORT(*)(.idata$2)
+ SORT(*)(.idata$3)
+ /* These zeroes mark the end of the import list. */
+ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
+ SORT(*)(.idata$4)
+ SORT(*)(.idata$5)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ }
+ .CRT BLOCK(__section_alignment__) :
+ {
+ ___crt_xc_start__ = . ;
+ *(SORT(.CRT$XC*)) /* C initialization */
+ ___crt_xc_end__ = . ;
+ ___crt_xi_start__ = . ;
+ *(SORT(.CRT$XI*)) /* C++ initialization */
+ ___crt_xi_end__ = . ;
+ ___crt_xl_start__ = . ;
+ *(SORT(.CRT$XL*)) /* TLS callbacks */
+ /* ___crt_xl_end__ is defined in the TLS Directory support code */
+ ___crt_xp_start__ = . ;
+ *(SORT(.CRT$XP*)) /* Pre-termination */
+ ___crt_xp_end__ = . ;
+ ___crt_xt_start__ = . ;
+ *(SORT(.CRT$XT*)) /* Termination */
+ ___crt_xt_end__ = . ;
+ }
+ .tls BLOCK(__section_alignment__) :
+ {
+ ___tls_start__ = . ;
+ *(.tls)
+ *(.tls$)
+ *(SORT(.tls$*))
+ ___tls_end__ = . ;
+ }
+ .endjunk BLOCK(__section_alignment__) :
+ {
+ /* end is deprecated, don't use it */
+ PROVIDE (end = .);
+ PROVIDE ( _end = .);
+ __end__ = .;
+ }
+ .ndata BLOCK(__section_alignment__) :
+ {
+ *(.ndata)
+ }
+ .rsrc BLOCK(__section_alignment__) :
+ {
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+ }
+ .reloc BLOCK(__section_alignment__) :
+ {
+ *(.reloc)
+ }
+ .stab BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.stab)
+ }
+ .stabstr BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.stabstr)
+ }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section. Unlike other targets that fake this by putting the
+ section VMA at 0, the PE format will not allow it. */
+ /* DWARF 1.1 and DWARF 2. */
+ .debug_aranges BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_aranges)
+ }
+ .debug_pubnames BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_pubnames)
+ }
+ /* DWARF 2. */
+ .debug_info BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_info) *(.gnu.linkonce.wi.*)
+ }
+ .debug_abbrev BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_abbrev)
+ }
+ .debug_line BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_line)
+ }
+ .debug_frame BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_frame)
+ }
+ .debug_str BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_str)
+ }
+ .debug_loc BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_loc)
+ }
+ .debug_macinfo BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_macinfo)
+ }
+ /* SGI/MIPS DWARF 2 extensions. */
+ .debug_weaknames BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_weaknames)
+ }
+ .debug_funcnames BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_funcnames)
+ }
+ .debug_typenames BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_typenames)
+ }
+ .debug_varnames BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_varnames)
+ }
+ /* DWARF 3. */
+ .debug_ranges BLOCK(__section_alignment__) (NOLOAD) :
+ {
+ *(.debug_ranges)
+ }
}
+
diff --git a/SConstruct b/SConstruct
index 23c89c7..55e7f4e 100755
--- a/SConstruct
+++ b/SConstruct
@@ -7,6 +7,9 @@
#
##
+EnsurePythonVersion(1,6)
+# no revision check yet - EnsureSConsVersion(0,96,90)
+
stubs = [
'bzip2',
'lzma',
@@ -79,6 +82,7 @@ opts.Add(ListOption('SKIPSTUBS', 'A list of stubs that will not be built', 'none
opts.Add(ListOption('SKIPPLUGINS', 'A list of plug-ins that will not be built', 'none', plugins))
opts.Add(ListOption('SKIPUTILS', 'A list of utilities that will not be built', 'none', utils))
opts.Add(ListOption('SKIPMISC', 'A list of plug-ins that will not be built', 'none', misc))
+opts.Add(PathOption('CODESIGNER', 'A program used to sign executables', None))
opts.Update(defenv)
Help(opts.GenerateHelpText(defenv))
@@ -90,6 +94,10 @@ Help(opts.GenerateHelpText(defenv))
defenv['ZIPDISTDIR'] = defenv.Dir('#nsis-$VERSION')
defenv['INSTDISTDIR'] = defenv.Dir('#.instdist')
defenv['TESTDISTDIR'] = defenv.Dir('#.test')
+defenv['DISTSUFFIX'] = ''
+
+if defenv.has_key('CODESIGNER'):
+ defenv['DISTSUFFIX'] = '-signed'
defenv.Execute(Delete('$ZIPDISTDIR'))
defenv.Execute(Delete('$INSTDISTDIR'))
@@ -99,18 +107,22 @@ def Distribute(dir, files):
defenv.Install('$ZIPDISTDIR/%s' % dir, files)
defenv.Install('$INSTDISTDIR/%s' % dir, files)
defenv.Install('$TESTDISTDIR/%s' % dir, files)
+
if defenv.has_key('PREFIX') and defenv['PREFIX']:
ins = defenv.Install('$PREFIX/%s' % dir, files)
return ins
+
return []
def DistributeAs(path, file):
defenv.InstallAs('$ZIPDISTDIR/%s' % path, file)
defenv.InstallAs('$INSTDISTDIR/%s' % path, file)
defenv.InstallAs('$TESTDISTDIR/%s' % path, file)
+
if defenv.has_key('PREFIX') and defenv['PREFIX']:
ins = defenv.InstallAs('$PREFIX/%s' % path, file)
return ins
+
return []
def DistributeExamples(dir, examples):
@@ -122,11 +134,18 @@ def DistributeDocs(dir, docs):
def DistributeContribs(dir, contribs):
return Distribute('Contrib/%s' % dir, contribs)
+def Sign(targets):
+ if defenv.has_key('CODESIGNER'):
+ for t in targets:
+ a = defenv.Action('$CODESIGNER "%s"' % t.path)
+ defenv.AddPostAction(t, a)
+
defenv.Distribute = Distribute
defenv.DistributeAs = DistributeAs
defenv.DistributeExamples = DistributeExamples
defenv.DistributeDocs = DistributeDocs
defenv.DistributeContribs = DistributeContribs
+defenv.Sign = Sign
######################################################################
####### Environments ###
@@ -178,7 +197,7 @@ defenv.Alias('install-includes', '$PREFIX/Include')
####### Distribution ###
######################################################################
-dist_zip = 'nsis-${VERSION}.zip'
+dist_zip = 'nsis-${VERSION}${DISTSUFFIX}.zip'
zip_target = defenv.Zip(dist_zip, '$ZIPDISTDIR')
defenv.Alias('dist-zip', zip_target)
@@ -192,11 +211,12 @@ if defenv.has_key('VER_MAJOR') and defenv.has_key('VER_MINOR') \
defenv['INSTVER'] += ' /DVER_REVISION=$VER_REVISION'
defenv['INSTVER'] += ' /DVER_BUILD=$VER_BUILD'
-installer_target = defenv.Command('nsis-${VERSION}.exe',
+installer_target = defenv.Command('nsis-${VERSION}${DISTSUFFIX}.exe',
'$INSTDISTDIR' + os.sep + 'Examples' + os.sep + 'makensis.nsi',
'$INSTDISTDIR' + os.sep + 'makensis$PROGSUFFIX ' +
'/DOUTFILE=$TARGET.abspath $INSTVER $SOURCE')
defenv.Depends(installer_target, '$INSTDISTDIR')
+defenv.Sign(installer_target)
defenv.Alias('dist-installer', installer_target)
AlwaysBuild(defenv.AddPostAction(installer_target, Delete('$INSTDISTDIR')))
@@ -311,6 +331,8 @@ def BuildPlugin(target, source, libs, examples = None, docs = None,
defenv.Alias(target, plugin)
defenv.Alias('plugins', plugin)
+ defenv.Sign(plugin)
+
CleanMap(env, plugin, target)
env.Distribute('Plugins', plugin)
@@ -345,6 +367,8 @@ def BuildUtil(target, source, libs, entry = None, res = None,
defenv.Alias(target, util)
defenv.Alias('utils', util)
+ defenv.Sign(util)
+
CleanMap(env, util, target)
if install is not None:
@@ -443,6 +467,8 @@ defenv.Ignore('$BUILD_PREFIX', '$BUILD_PREFIX/tests')
# test scripts
+test_env = defenv.Copy(ENV = os.environ) # env needed for some scripts
+
def test_scripts(target, source, env):
from os import walk, sep
@@ -460,8 +486,8 @@ def test_scripts(target, source, env):
return None
-test = defenv.Command('test-scripts.log', '$TESTDISTDIR', test_scripts)
-defenv.Alias('test-scripts', test)
+test = test_env.Command('test-scripts.log', '$TESTDISTDIR', test_scripts)
+test_env.Alias('test-scripts', test)
# test all
diff --git a/Source/exehead/Main.c b/Source/exehead/Main.c
index d6fdec7..637234c 100755
--- a/Source/exehead/Main.c
+++ b/Source/exehead/Main.c
@@ -94,7 +94,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
if (!ValidateTempDir())
{
GetWindowsDirectory(state_temp_dir, NSIS_MAX_STRLEN - 5); // leave space for \Temp
- lstrcat(state_temp_dir, "\\Temp");
+ mystrcat(state_temp_dir, "\\Temp");
if (!ValidateTempDir())
{
goto end;
@@ -193,17 +193,18 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
{
int x;
+ mystrcat(state_temp_dir,"~nsu.tmp\\");
+ CreateDirectory(state_temp_dir,NULL);
+
for (x = 0; x < 26; x ++)
{
static char s[]="Au_.exe";
static char buf2[NSIS_MAX_STRLEN*2];
static char ibuf[NSIS_MAX_STRLEN];
- buf2[0]='\"';
- mystrcpy(buf2+1,state_temp_dir);
- lstrcat(buf2,"~nsu.tmp\\");
- CreateDirectory(buf2+1,NULL);
- lstrcat(buf2,s);
+ *(LPWORD)buf2=CHAR2_TO_WORD('\"',0);
+ mystrcat(buf2,state_temp_dir);
+ mystrcat(buf2,s);
DeleteFile(buf2+1); // clean up after all the other ones if they are there
@@ -211,7 +212,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
{
// get current name
int l=GetModuleFileName(g_hInstance,ibuf,sizeof(ibuf));
- // check if it is ?~NSISu_.exe - if so, fuck it
+ // check if it is ?Au_.exe - if so, fuck it
if (!lstrcmpi(ibuf+l-(sizeof(s)-2),s+1)) break;
// copy file
@@ -223,13 +224,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
#endif
if (state_install_directory[0]) mystrcpy(ibuf,state_install_directory);
else trimslashtoend(ibuf);
- lstrcat(buf2,"\" ");
- lstrcat(buf2,realcmds);
- lstrcat(buf2," _?=");
- lstrcat(buf2,ibuf);
+ mystrcat(buf2,"\" ");
+ mystrcat(buf2,realcmds);
+ mystrcat(buf2," _?=");
+ mystrcat(buf2,ibuf);
// add a trailing backslash to make sure is_valid_instpath will not fail when it shouldn't
addtrailingslash(buf2);
- hProc=myCreateProcess(buf2,state_install_directory);
+ hProc=myCreateProcess(buf2,state_temp_dir);
if (hProc)
{
CloseHandle(hProc);
diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c
index 799d98b..0206451 100755
--- a/Source/exehead/Ui.c
+++ b/Source/exehead/Ui.c
@@ -162,7 +162,7 @@ static BOOL NSISCALL _HandleStaticBkColor(UINT uMsg, WPARAM wParam, LPARAM lPara
#ifndef NSIS_CONFIG_LOG_ODS
void NSISCALL build_g_logfile()
{
- lstrcat(addtrailingslash(mystrcpy(g_log_file,state_install_directory)),"install.log");
+ mystrcat(addtrailingslash(mystrcpy(g_log_file,state_install_directory)),"install.log");
}
#endif
#endif
@@ -882,7 +882,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
// display name gives just the folder name
if (lstrcmpi(post_str, g_tmp))
{
- lstrcat(addtrailingslash(dir), post_str);
+ mystrcat(addtrailingslash(dir), post_str);
}
}
@@ -1383,7 +1383,7 @@ void NSISCALL update_status_text(int strtab, const char *text) {
if (text)
{
if (tmplen + mystrlen(text) >= sizeof(tmp)) return;
- lstrcat(tmp, text);
+ mystrcat(tmp, text);
}
if ((updateflag & 4)) my_SetWindowText(insthwnd2, tmp);
diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c
index 22feb89..32bc690 100755
--- a/Source/exehead/exec.c
+++ b/Source/exehead/exec.c
@@ -333,8 +333,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
mystrcpy(buf1,buf3);
if (mystrlen(buf3)+mystrlen(buf2) < NSIS_MAX_STRLEN-3)
{
- lstrcat(buf1,"->");
- lstrcat(buf1,buf2);
+ mystrcat(buf1,"->");
+ mystrcat(buf1,buf2);
}
log_printf2("Rename: %s",buf1);
if (MoveFile(buf3,buf2))
@@ -420,7 +420,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
{
mystrcpy(buf0,buf3);
}
- else lstrcat(addtrailingslash(mystrcpy(buf0,state_output_directory)),buf3);
+ else mystrcat(addtrailingslash(mystrcpy(buf0,state_output_directory)),buf3);
validate_filename(buf0);
_tryagain:
if (overwriteflag >= 3) // check date and time
@@ -493,7 +493,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
if (ret == -2)
{
GetNSISString(buf0,LANG_ERRORWRITING);
- lstrcat(buf0,buf3);
+ mystrcat(buf0,buf3);
}
else
{
@@ -1057,7 +1057,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
buf1[mystrlen(buf1)+1]=0;
GetNSISString(buf2,LANG_COPYTO);
- lstrcat(buf2,buf1);
+ mystrcat(buf2,buf1);
op.pFrom=buf0;
op.pTo=buf1;
@@ -1403,7 +1403,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
}
else
{
- lstrcat(addtrailingslash(mystrcpy(buf1,state_install_directory)),buf0);
+ mystrcat(addtrailingslash(mystrcpy(buf1,state_install_directory)),buf0);
}
validate_filename(buf1);
diff --git a/Source/exehead/util.c b/Source/exehead/util.c
index f023b14..41af46d 100755
--- a/Source/exehead/util.c
+++ b/Source/exehead/util.c
@@ -116,12 +116,12 @@ void NSISCALL myDelete(char *buf, int flags)
mystrcpy(lbuf,buf);
#ifdef NSIS_SUPPORT_RMDIR
if (flags & DEL_DIR)
- lstrcat(lbuf,"\\*.*");
+ mystrcat(lbuf,"\\*.*");
else
#endif//NSIS_SUPPORT_RMDIR
trimslashtoend(buf);
- lstrcat(buf,"\\");
+ mystrcat(buf,"\\");
fn=buf+mystrlen(buf);
@@ -218,7 +218,7 @@ void NSISCALL myDelete(char *buf, int flags)
char *NSISCALL addtrailingslash(char *str)
{
- if (lastchar(str)!='\\') lstrcat(str,"\\");
+ if (lastchar(str)!='\\') mystrcat(str,"\\");
return str;
}
@@ -289,6 +289,8 @@ int NSISCALL is_valid_instpath(char *s)
mystrcpy(tmp, s);
+ validate_filename(tmp);
+
root = skip_root(tmp);
if (!root)
@@ -417,7 +419,7 @@ void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
cchRenameLine = wsprintf(szRenameLine,"%s=%s\r\n",tmpbuf,wininit);
GetWindowsDirectory(wininit, 1024-16);
- lstrcat(wininit, "\\wininit.ini");
+ mystrcat(wininit, "\\wininit.ini");
hfile = CreateFile(wininit,
GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
@@ -552,6 +554,11 @@ int NSISCALL mystrlen(const char *in)
return lstrlen(in);
}
+char * NSISCALL mystrcat(char *out, const char *concat)
+{
+ return lstrcat(out, concat);
+}
+
char ps_tmpbuf[NSIS_MAX_STRLEN*2];
#define SYSREGKEY "Software\\Microsoft\\Windows\\CurrentVersion"
@@ -640,7 +647,7 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
if (*out && append)
{
- lstrcat(out, append);
+ mystrcat(out, append);
}
validate_filename(out);
@@ -681,7 +688,7 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
return ps_tmpbuf;
}
-char * NSISCALL validate_filename(char *in) {
+void NSISCALL validate_filename(char *in) {
char *nono = "*?|<>/\":";
char *out;
char *out_save;
@@ -715,7 +722,6 @@ char * NSISCALL validate_filename(char *in) {
else
break;
} while (out_save < out);
- return out_save;
}
#ifdef NSIS_CONFIG_LOG
@@ -746,7 +752,7 @@ void NSISCALL log_write(int close)
if (fp!=INVALID_HANDLE_VALUE)
{
DWORD d;
- lstrcat(log_text,"\r\n");
+ mystrcat(log_text,"\r\n");
WriteFile(fp,log_text,mystrlen(log_text),&d,NULL);
}
}
diff --git a/Source/exehead/util.h b/Source/exehead/util.h
index c0cc83a..6fc0eb7 100755
--- a/Source/exehead/util.h
+++ b/Source/exehead/util.h
@@ -12,6 +12,7 @@ int NSISCALL myatoi(char *s);
void NSISCALL myitoa(char *s, int d);
char * NSISCALL mystrcpy(char *out, const char *in);
int NSISCALL mystrlen(const char *in);
+char * NSISCALL mystrcat(char *out, const char *concat);
char * NSISCALL mystrstr(char *a, char *b);
WIN32_FIND_DATA * NSISCALL file_exists(char *buf);
char * NSISCALL my_GetTempFileName(char *buf, const char *dir);
@@ -65,7 +66,7 @@ char * NSISCALL findchar(char *str, char c);
void NSISCALL trimslashtoend(char *buf);
char * NSISCALL skip_root(char *path);
int NSISCALL is_valid_instpath(char *s);
-char * NSISCALL validate_filename(char *fn);
+void NSISCALL validate_filename(char *fn);
void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew);
void NSISCALL mini_memcpy(void *out, const void *in, int len);
diff --git a/Source/script.cpp b/Source/script.cpp
index c02fe43..d6ac085 100755
--- a/Source/script.cpp
+++ b/Source/script.cpp
@@ -5329,10 +5329,28 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
// Added by ramon 3 jun 2003
case TOK_DEFVAR:
{
- SCRIPT_MSG("VAR \"%s\"\n",line.gettoken_str(1));
- int res = DeclaredUserVar(line.gettoken_str(1));
- if (res != PS_OK)
- return res;
+ int a=1;
+
+ if (!strcmpi(line.gettoken_str(1),"/GLOBAL"))
+ {
+ a++;
+ }
+
+ if (build_cursection)
+ {
+ if (a==1)
+ {
+ ERROR_MSG("Var: currently, only global variables can be defined.\n");
+ PRINTHELP();
+ }
+ }
+
+ SCRIPT_MSG("Var: \"%s\"\n",line.gettoken_str(a));
+
+ int res = DeclaredUserVar(line.gettoken_str(a));
+ if (res != PS_OK)
+ return res;
+
}
return PS_OK;
diff --git a/Source/tokens.cpp b/Source/tokens.cpp
index b98008c..188d84b 100755
--- a/Source/tokens.cpp
+++ b/Source/tokens.cpp
@@ -258,7 +258,7 @@ static tokenType tokenlist[TOK__LAST] =
// Added by ramon 23 May 2003
{TOK_ALLOWSKIPFILES,"AllowSkipFiles",1,0,"(off|on)",TP_ALL},
// Added by ramon 3 jun 2003
-{TOK_DEFVAR,"Var",1,0,"VarName",TP_GLOBAL},
+{TOK_DEFVAR,"Var",1,1,"[/GLOBAL] var_name",TP_ALL},
// Added by ramon 6 jun 2003
{TOK_VI_ADDKEY,"VIAddVersionKey",2,1,"/LANG=lang_id keyname value",TP_GLOBAL},
{TOK_VI_SETPRODUCTVERSION,"VIProductVersion",1,0,"[version_string_X.X.X.X]",TP_GLOBAL},