* PageEx - every page can be used everywhere and as many times as needed

* DirVar - easy way to add another dir page
* default strings in the language file (Page directory is enough, no need for DirText)
* strings from the language file are now LangStrings that can be used in the script
* no more /LANG - one string for all languages
* any lang strings can be used everywhere, installer or uninstaller (no un.)
* no more unprocessed strings - variables can be used almost everywhere (except in licenseData and InstallDirRegKey)
* DirText parm for browse dialog text
* SetBkColor -> SetCtlColors - can now set text color too
* fixed SetOutPath and File /r bug
* fixed File /a /oname bug
* added $_CLICK for pages
* added quotes support in lang files (patch #752620)
* extraction progress
* separate RTL dialogs for RTL langs (improved RTL too)
* InstallOptions RTL
* StartMenu RTL
* fixed RegDLL?
* added IfSilent and SetSilent (SetSilent only works from .onInit)
* fixed verify window (it never showed) (bug #792494)
* fixed ifnewer readonly file problem (patch #783782)
* fixed wininit.ini manipulation when there is another section after [rename]
* fixed some ClearType issues
* fixed a minor bug in the resource editor
* fixed !ifdef/!endif stuff, rewritten
* lots of code and comments clean ups
* got rid of some useless exceptions handling and STL classes (still much more to go)
* lots of optimizations, of course ;)
* updated system.dll with support for GUID, WCHAR, and fast VTable calling (i.e. COM ready)
* minor bug fixes


git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2823 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2003-09-04 18:25:57 +00:00
parent bb8879b7ae
commit 74ea2dc585
91 changed files with 5180 additions and 4101 deletions

View file

@ -29,6 +29,17 @@ static int popstring(char *str)
return 0; return 0;
} }
#define CC_TEXT 1
#define CC_BK 4
typedef struct {
COLORREF text;
LOGBRUSH bk;
HBRUSH bkb;
int bkmode;
int flags;
} ctlcolors;
#define strcpy(x,y) lstrcpy(x,y) #define strcpy(x,y) lstrcpy(x,y)
#define strncpy(x,y,z) lstrcpyn(x,y,z) #define strncpy(x,y,z) lstrcpyn(x,y,z)
#define strdup(x) STRDUP(x) #define strdup(x) STRDUP(x)
@ -164,6 +175,8 @@ int bBackEnabled = FALSE;
int bCancelEnabled = FALSE; // by ORTIM: 13-August-2002 int bCancelEnabled = FALSE; // by ORTIM: 13-August-2002
int bCancelShow = FALSE; // by ORTIM: 13-August-2002 int bCancelShow = FALSE; // by ORTIM: 13-August-2002
int bRTL = FALSE;
FieldType *pFields = NULL; FieldType *pFields = NULL;
#define DEFAULT_RECT 1018 #define DEFAULT_RECT 1018
int nRectId = 0; int nRectId = 0;
@ -468,6 +481,8 @@ int ReadSettings(void) {
bCancelEnabled = GetPrivateProfileInt("Settings", "CancelEnabled", 0xFFFF0000, pszFilename); bCancelEnabled = GetPrivateProfileInt("Settings", "CancelEnabled", 0xFFFF0000, pszFilename);
bCancelShow = GetPrivateProfileInt("Settings", "CancelShow", 0xFFFF0000, pszFilename); bCancelShow = GetPrivateProfileInt("Settings", "CancelShow", 0xFFFF0000, pszFilename);
bRTL = GetPrivateProfileInt("Settings", "RTL", 0, pszFilename);
if (nNumFields > 0) { if (nNumFields > 0) {
// make this twice as large for the worst case that every control is a browse button. // make this twice as large for the worst case that every control is a browse button.
// the structure is small enough that this won't waste much memory. // the structure is small enough that this won't waste much memory.
@ -621,21 +636,21 @@ int ReadSettings(void) {
pFields[nIdx].hImage = (HANDLE)GetPrivateProfileInt(szField, "TxtColor", RGB(0,0,255), pszFilename); pFields[nIdx].hImage = (HANDLE)GetPrivateProfileInt(szField, "TxtColor", RGB(0,0,255), pszFilename);
pFields[nIdx].nControlID = 1200 + nIdx; pFields[nIdx].nControlID = 1200 + nIdx;
if ( pFields[nIdx].nType == FIELD_FILEREQUEST || pFields[nIdx].nType == FIELD_DIRREQUEST ) if (pFields[nIdx].nType == FIELD_FILEREQUEST || pFields[nIdx].nType == FIELD_DIRREQUEST)
{ {
FieldType *pNewField = &pFields[nIdx+1]; FieldType *pNewField = &pFields[nIdx+1];
pNewField->nControlID = 1200 + nIdx + 1; pNewField->nControlID = 1200 + nIdx + 1;
pNewField->nParentIdx = nIdx; pNewField->nParentIdx = nIdx;
pNewField->nType = FIELD_BROWSEBUTTON; pNewField->nType = FIELD_BROWSEBUTTON;
pNewField->nFlags = pFields[nIdx].nFlags & (FLAG_DISABLED | FLAG_NOTABSTOP); pNewField->nFlags = pFields[nIdx].nFlags & (FLAG_DISABLED | FLAG_NOTABSTOP);
pNewField->pszText = STRDUP(szBrowseButtonCaption); // needed for generic FREE pNewField->pszText = STRDUP(szBrowseButtonCaption); // needed for generic FREE
pNewField->rect.right = pFields[nIdx].rect.right; pNewField->rect.right = pFields[nIdx].rect.right;
pNewField->rect.left = pNewField->rect.right - BROWSE_WIDTH; pNewField->rect.left = pNewField->rect.right - BROWSE_WIDTH;
pNewField->rect.bottom = pFields[nIdx].rect.bottom; pNewField->rect.bottom = pFields[nIdx].rect.bottom;
pNewField->rect.top = pFields[nIdx].rect.top; pNewField->rect.top = pFields[nIdx].rect.top;
pFields[nIdx].rect.right = pNewField->rect.left - 3; pFields[nIdx].rect.right = pNewField->rect.left - 3;
nNumFields++; nNumFields++;
nIdx++; nIdx++;
} }
} }
@ -753,11 +768,16 @@ BOOL CALLBACK cfgDlgProc(HWND hwndDlg,
case WM_CTLCOLORBTN: case WM_CTLCOLORBTN:
case WM_CTLCOLORLISTBOX: case WM_CTLCOLORLISTBOX:
{ {
BOOL brush = (BOOL)GetWindowLong((HWND)lParam, GWL_USERDATA); ctlcolors *c = (ctlcolors *)GetWindowLong((HWND)lParam, GWL_USERDATA);
if (brush)
{ if (c) {
SetBkMode((HDC)wParam, TRANSPARENT); SetBkMode((HDC)wParam, c->bkmode);
return brush; if (c->flags & CC_BK)
SetBkColor((HDC)wParam, c->bk.lbColor);
if (c->flags & CC_TEXT)
SetTextColor((HDC)wParam, c->text);
return (BOOL)c->bkb;
} }
} }
} }
@ -861,13 +881,23 @@ int createCfgDlg()
HFONT hFont = (HFONT)SendMessage(hMainWindow, WM_GETFONT, 0, 0); HFONT hFont = (HFONT)SendMessage(hMainWindow, WM_GETFONT, 0, 0);
RECT dialog_r; RECT dialog_r;
int width;
hConfigWindow=CreateDialog(m_hInstance,MAKEINTRESOURCE(IDD_DIALOG1),hMainWindow,cfgDlgProc); hConfigWindow=CreateDialog(m_hInstance,MAKEINTRESOURCE(IDD_DIALOG1),hMainWindow,cfgDlgProc);
if (hConfigWindow) if (hConfigWindow)
{ {
GetWindowRect(childwnd,&dialog_r); GetWindowRect(childwnd,&dialog_r);
ScreenToClient(hMainWindow,(LPPOINT)&dialog_r); ScreenToClient(hMainWindow,(LPPOINT)&dialog_r);
ScreenToClient(hMainWindow,((LPPOINT)&dialog_r)+1); ScreenToClient(hMainWindow,((LPPOINT)&dialog_r)+1);
SetWindowPos(hConfigWindow,0,dialog_r.left,dialog_r.top,dialog_r.right-dialog_r.left,dialog_r.bottom-dialog_r.top,SWP_NOZORDER|SWP_NOACTIVATE); width = dialog_r.right-dialog_r.left;
SetWindowPos(
hConfigWindow,
0,
dialog_r.left,
dialog_r.top,
width,
dialog_r.bottom-dialog_r.top,
SWP_NOZORDER|SWP_NOACTIVATE
);
// Sets the font of IO window to be the same as the main window // Sets the font of IO window to be the same as the main window
SendMessage(hConfigWindow, WM_SETFONT, (WPARAM)hFont, TRUE); SendMessage(hConfigWindow, WM_SETFONT, (WPARAM)hFont, TRUE);
} }
@ -899,47 +929,75 @@ int createCfgDlg()
static struct { static struct {
char* pszClass; char* pszClass;
DWORD dwStyle; DWORD dwStyle;
DWORD dwRTLStyle;
DWORD dwExStyle; DWORD dwExStyle;
DWORD dwRTLExStyle;
} ClassTable[] = { } ClassTable[] = {
{ "STATIC", // FIELD_LABEL { "STATIC", // FIELD_LABEL
DEFAULT_STYLES /*| WS_TABSTOP*/, DEFAULT_STYLES /*| WS_TABSTOP*/,
DEFAULT_STYLES | SS_RIGHT /*| WS_TABSTOP*/,
WS_EX_TRANSPARENT,
WS_EX_TRANSPARENT }, WS_EX_TRANSPARENT },
{ "STATIC", // FIELD_ICON { "STATIC", // FIELD_ICON
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_ICON, DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_ICON,
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_ICON,
0,
0 }, 0 },
{ "STATIC", // FIELD_BITMAP { "STATIC", // FIELD_BITMAP
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_BITMAP | SS_CENTERIMAGE, DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_BITMAP | SS_CENTERIMAGE,
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_BITMAP | SS_CENTERIMAGE,
0,
0 }, 0 },
{ "BUTTON", // FIELD_BROWSEBUTTON { "BUTTON", // FIELD_BROWSEBUTTON
DEFAULT_STYLES | WS_TABSTOP, DEFAULT_STYLES | WS_TABSTOP,
DEFAULT_STYLES | WS_TABSTOP,
0,
0 }, 0 },
{ "BUTTON", // FIELD_CHECKBOX { "BUTTON", // FIELD_CHECKBOX
DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTOCHECKBOX | BS_MULTILINE, DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTOCHECKBOX | BS_MULTILINE,
DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTOCHECKBOX | BS_MULTILINE | BS_RIGHT | BS_LEFTTEXT,
0,
0 }, 0 },
{ "BUTTON", // FIELD_RADIOBUTTON { "BUTTON", // FIELD_RADIOBUTTON
DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTORADIOBUTTON | BS_MULTILINE, DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTORADIOBUTTON | BS_MULTILINE,
DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTORADIOBUTTON | BS_MULTILINE | BS_RIGHT | BS_LEFTTEXT,
0,
0 }, 0 },
{ "EDIT", // FIELD_TEXT { "EDIT", // FIELD_TEXT
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL, DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL,
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL | ES_RIGHT,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE }, WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE },
{ "EDIT", // FIELD_FILEREQUEST { "EDIT", // FIELD_FILEREQUEST
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL, DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL,
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL | ES_RIGHT,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE }, WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE },
{ "EDIT", // FIELD_DIRREQUEST { "EDIT", // FIELD_DIRREQUEST
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL, DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL,
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL | ES_RIGHT,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE }, WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE },
{ "COMBOBOX", // FIELD_COMBOBOX { "COMBOBOX", // FIELD_COMBOBOX
DEFAULT_STYLES | WS_TABSTOP | WS_VSCROLL | WS_CLIPCHILDREN | CBS_AUTOHSCROLL | CBS_HASSTRINGS, DEFAULT_STYLES | WS_TABSTOP | WS_VSCROLL | WS_CLIPCHILDREN | CBS_AUTOHSCROLL | CBS_HASSTRINGS,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE }, DEFAULT_STYLES | WS_TABSTOP | WS_VSCROLL | WS_CLIPCHILDREN | CBS_AUTOHSCROLL | CBS_HASSTRINGS,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE | WS_EX_RIGHT | WS_EX_RTLREADING },
{ "LISTBOX", // FIELD_LISTBOX { "LISTBOX", // FIELD_LISTBOX
DEFAULT_STYLES | WS_TABSTOP | WS_VSCROLL | LBS_DISABLENOSCROLL | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT, DEFAULT_STYLES | WS_TABSTOP | WS_VSCROLL | LBS_DISABLENOSCROLL | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE }, DEFAULT_STYLES | WS_TABSTOP | WS_VSCROLL | LBS_DISABLENOSCROLL | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE | WS_EX_RIGHT | WS_EX_RTLREADING },
{ "BUTTON", // FIELD_GROUPBOX { "BUTTON", // FIELD_GROUPBOX
DEFAULT_STYLES | BS_GROUPBOX, DEFAULT_STYLES | BS_GROUPBOX,
DEFAULT_STYLES | BS_GROUPBOX | BS_RIGHT,
WS_EX_TRANSPARENT,
WS_EX_TRANSPARENT }, WS_EX_TRANSPARENT },
{ "BUTTON", // FIELD_LINK { "BUTTON", // FIELD_LINK
DEFAULT_STYLES | WS_TABSTOP | BS_OWNERDRAW DEFAULT_STYLES | WS_TABSTOP | BS_OWNERDRAW,
}, DEFAULT_STYLES | WS_TABSTOP | BS_OWNERDRAW | BS_RIGHT,
0,
0 },
}; };
int nType = pFields[nIdx].nType; int nType = pFields[nIdx].nType;
@ -949,8 +1007,15 @@ int createCfgDlg()
if (nType < 1 || nType > (sizeof(ClassTable) / sizeof(ClassTable[0]))) if (nType < 1 || nType > (sizeof(ClassTable) / sizeof(ClassTable[0])))
continue; continue;
DWORD dwStyle = ClassTable[pFields[nIdx].nType - 1].dwStyle; DWORD dwStyle, dwExStyle;
DWORD dwExStyle = ClassTable[pFields[nIdx].nType - 1].dwExStyle; if (bRTL) {
dwStyle = ClassTable[pFields[nIdx].nType - 1].dwRTLStyle;
dwExStyle = ClassTable[pFields[nIdx].nType - 1].dwRTLExStyle;
}
else {
dwStyle = ClassTable[pFields[nIdx].nType - 1].dwStyle;
dwExStyle = ClassTable[pFields[nIdx].nType - 1].dwExStyle;
}
// Convert from dialog units // Convert from dialog units
@ -970,6 +1035,12 @@ int createCfgDlg()
if (pFields[nIdx].rect.bottom < 0) if (pFields[nIdx].rect.bottom < 0)
rect.bottom += dialog_r.bottom - dialog_r.top; rect.bottom += dialog_r.bottom - dialog_r.top;
if (bRTL) {
int right = rect.right;
rect.right = width - rect.left;
rect.left = width - right;
}
char *title = pFields[nIdx].pszText; char *title = pFields[nIdx].pszText;
switch (nType) { switch (nType) {
case FIELD_CHECKBOX: case FIELD_CHECKBOX:

View file

@ -195,11 +195,16 @@ It can contain the following values:</p>
<td class="lefttable"><span class="italic">(optional)</span></td> <td class="lefttable"><span class="italic">(optional)</span></td>
<td class="righttable">Overrides the text for the back button. If not specified, the back button text <td class="righttable">Overrides the text for the back button. If not specified, the back button text
will not be changed.</td></tr> will not be changed.</td></tr>
<tr> <tr>
<td class="lefttable"><span class="bold">Rect</span></td> <td class="lefttable"><span class="bold">Rect</span></td>
<td class="lefttable"><span class="italic">(optional)</span></td> <td class="lefttable"><span class="italic">(optional)</span></td>
<td class="righttable">Overrides the default rect ID to run over. This will make IO resize itself <td class="righttable">Overrides the default rect ID to run over. This will make IO resize itself
according to a different rect than NSIS's dialogs rect.</td></tr> according to a different rect than NSIS's dialogs rect.</td></tr>
<tr>
<td class="lefttable"><span class="bold">RTL</span></td>
<td class="lefttable"><span class="italic">(optional)</span></td>
<td class="righttable">If 1 is specified the dialog will be mirrored and all texts will be aligned to the
right. Use NSIS's $(^RTL) to fill this field, it's the easiest way.</td></tr>
</table> </table>
<p class="text">Each field section has the heading "Field #" where # must be sequential <p class="text">Each field section has the heading "Field #" where # must be sequential
numbers from 1 to NumFields. Each Field section can contain the following values:</p> numbers from 1 to NumFields. Each Field section can contain the following values:</p>
@ -612,12 +617,13 @@ FunctionEnd
</pre> </pre>
<p class="header">Version history</p> <p class="header">Version history</p>
<ul> <ul>
<li>DLL version 2.2 (6/10/2003) <li>DLL version 2.2 (4/9/2003)
<ul> <ul>
<li>Added new control "link"</li> <li>Added new control "link"</li>
<li>\r\n converts to newline in Multiline edit box</li> <li>\r\n converts to newline in Multiline edit box</li>
<li>Support for multiline edit box</li> <li>Support for multiline edit box</li>
<li>Better tab order in DirRequest and FileRequest</li> <li>Better tab order in DirRequest and FileRequest</li>
<li>Added RTL support</li>
<li>Minor fixes</li> <li>Minor fixes</li>
</ul></li> </ul></li>
</ul> </ul>

View file

@ -7,10 +7,12 @@ NLF v2
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
RTL
# Translation by asdfuae@msn.com # Translation by asdfuae@msn.com
نظام التنصيب نلسوفت %s نظام التنصيب نلسوفت %s
تنصيب %s ÊäÕíÈ $(^Name)
مزيل %s ãÒíá $(^Name)
: اتفاقية‏ الترخيص : اتفاقية‏ الترخيص
: خيارات التنصيب : خيارات التنصيب
: مجلد التنصيب : مجلد التنصيب
@ -34,7 +36,7 @@ NLF v2
أختر نوع التنصيب: أختر نوع التنصيب:
أختر العناصر للتنصيب: أختر العناصر للتنصيب:
أو، أختر العناصر المحددة المراد تنصيبها: أو، أختر العناصر المحددة المراد تنصيبها:
أختر المجلد المراد تنصيب %s فيه: ÃÎÊÑ ÇáãÌáÏ ÇáãÑÇÏ ÊäÕíÈ $(^Name) Ýíå:
المساحة المتاحة: المساحة المتاحة:
المساحة المطلوبة: المساحة المطلوبة:
يزال من: يزال من:

View file

@ -7,10 +7,12 @@ NLF v2
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Asparouh Kalyandjiev <acnapyx@computers.bg> # Translation by Asparouh Kalyandjiev <acnapyx@computers.bg>
Nullsoft инсталатор %s Nullsoft инсталатор %s
%s Инсталиране $(^Name) Èíñòàëèðàíå
%s Деинсталиране $(^Name) Äåèíñòàëèðàíå
: Лицензно споразумение : Лицензно споразумение
: Инсталационни опции : Инсталационни опции
: Инсталационна папка : Инсталационна папка
@ -34,7 +36,7 @@ Nullsoft
Изберете типа инсталация: Изберете типа инсталация:
Изберете компонентите за инсталиране: Изберете компонентите за инсталиране:
Или изберете компонентите, които желаете да бъдат инсталирани: Или изберете компонентите, които желаете да бъдат инсталирани:
Изберете папка, където да се инсталира %s: Èçáåðåòå ïàïêà, êúäåòî äà ñå èíñòàëèðà $(^Name):
Свободно място: Свободно място:
Нужно място: Нужно място:
Деинсталиране от: Деинсталиране от:

View file

@ -8,10 +8,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by falanko # Translation by falanko
Nullsoft Install System %s Nullsoft Install System %s
Instal·lació de %s Instal·lació de $(^Name)
Desinstal·lació de %s Desinstal·lació de $(^Name)
: Acord de Llicència : Acord de Llicència
: Opcions d'Instal·lació : Opcions d'Instal·lació
: Carpeta d'Instal·lació : Carpeta d'Instal·lació
@ -37,7 +39,7 @@ Personalitzada
Indiqui el tipus d'instal·lació: Indiqui el tipus d'instal·lació:
Seleccioni els components: Seleccioni els components:
O seleccioni els components opcionals a instal·lar: O seleccioni els components opcionals a instal·lar:
Seleccioni la carpeta on instal·lar %s: Seleccioni la carpeta on instal·lar $(^Name):
Espai lliure: Espai lliure:
Espai necessari: Espai necessari:
Desinstal·lant de: Desinstal·lant de:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Igor Ostriz # Translation by Igor Ostriz
Nullsoft Install System %s Nullsoft Install System %s
%s Instalacija $(^Name) Instalacija
%s Deinstalacija $(^Name) Deinstalacija
: Licenenèni uvjeti : Licenenèni uvjeti
: Instalacijske opcije : Instalacijske opcije
: Instalacijska mapa : Instalacijska mapa
@ -36,7 +38,7 @@ Posebna
Izaberite tip instalacije: Izaberite tip instalacije:
Odaberite komponente za instalaciju: Odaberite komponente za instalaciju:
Ili po izboru oznaèite komponente koje želite instalirati: Ili po izboru oznaèite komponente koje želite instalirati:
Odaberite mapu u koju želite instalirati program %s: Odaberite mapu u koju želite instalirati program $(^Name):
Slobodno prostora na disku: Slobodno prostora na disku:
Potrebno prostora na disku: Potrebno prostora na disku:
Uklanjam iz: Uklanjam iz:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by T.V. Zuggy (http://zuggy.wz.cz/) # Translation by T.V. Zuggy (http://zuggy.wz.cz/)
Nullsoft Install System %s Nullsoft Install System %s
Instalace programu %s Instalace programu $(^Name)
Odinstalování programu %s Odinstalování programu $(^Name)
: Licenční ujednání : Licenční ujednání
: Možnosti instalace : Možnosti instalace
: Umístění instalace : Umístění instalace
@ -36,7 +38,7 @@ Vlastn
Zvolte typ instalace: Zvolte typ instalace:
Zvolte součásti pro instalaci: Zvolte součásti pro instalaci:
Nebo zvolte jednotlivé součásti, které si přejete nainstalovat: Nebo zvolte jednotlivé součásti, které si přejete nainstalovat:
Zvolte adresář pro instalaci programu %s: Zvolte adresář pro instalaci programu $(^Name):
Dostupné volné místo: Dostupné volné místo:
Potřebné volné místo: Potřebné volné místo:
Odinstalování z: Odinstalování z:

View file

@ -7,10 +7,12 @@ NLF v2
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Casper Bergenstoff # Translation by Casper Bergenstoff
Nullsoft Installerings System %s Nullsoft Installerings System %s
%s Setup $(^Name) Setup
%s Afinstaller $(^Name) Afinstaller
: Licens Aftale : Licens Aftale
: Installations egenskaber : Installations egenskaber
: Installation mappe : Installation mappe
@ -34,7 +36,7 @@ Tilpasset
Vælg hvilken type du vil installere: Vælg hvilken type du vil installere:
Vælg komponenter du vil installere: Vælg komponenter du vil installere:
Eller, Vælg de udvalgte komponenter som du vil installere: Eller, Vælg de udvalgte komponenter som du vil installere:
Vælg mappe du vil installere %s i: Vælg mappe du vil installere $(^Name) i:
Plads til rådighed: Plads til rådighed:
Krævet plads: Krævet plads:
Afinstallerer fra: Afinstallerer fra:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Hendri Adriaens & Joost Verburg # Translation by Hendri Adriaens & Joost Verburg
Nullsoft Install System %s Nullsoft Install System %s
%s Installatie $(^Name) Installatie
%s Deïnstallatie $(^Name) Deïnstallatie
: Licentie Overeenkomst : Licentie Overeenkomst
: Installatie Opties : Installatie Opties
: Installatie Map : Installatie Map
@ -36,7 +38,7 @@ Handmatig
Selecteer het installatietype: Selecteer het installatietype:
Selecteer de installatieonderdelen: Selecteer de installatieonderdelen:
Of selecteer de onderdelen die geïnstalleerd moeten worden: Of selecteer de onderdelen die geïnstalleerd moeten worden:
Selecteer de map om %s in te installeren: Selecteer de map om $(^Name) in te installeren:
Beschikbare ruimte: Beschikbare ruimte:
Vereiste ruimte: Vereiste ruimte:
Uninstallatie vanuit: Uninstallatie vanuit:

View file

@ -1,5 +1,5 @@
# Header, don't edit # Header, don't edit
NLF v5 NLF v6
# Start editing here # Start editing here
# Language ID # Language ID
1033 1033
@ -7,76 +7,185 @@ NLF v5
- -
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
# RTL - anything else than RTL means LTR
-
- -
# Translation by ..... (any credits should go here) # Translation by ..... (any credits should go here)
# ^Branding
Nullsoft Install System %s Nullsoft Install System %s
%s Setup # ^SetupCaption
%s Uninstall $(^Name) Setup
# ^UninstallCaption
$(^Name) Uninstall
# ^LicenseSubCaption
: License Agreement : License Agreement
# ^ComponentsSubCaption
: Installation Options : Installation Options
# ^DirSubCaption
: Installation Folder : Installation Folder
# ^InstallingSubCaption
: Installing : Installing
# ^CompletedSubCaption
: Completed : Completed
# ^UnComponentsSubCaption
: Uninstallation Options
# ^UnDirSubCaption
: Uninstallation Folder
# ^ConfirmSubCaption
: Confirmation : Confirmation
# ^UninstallingSubCaption
: Uninstalling : Uninstalling
# ^UnCompletedSubCaption
: Completed : Completed
# ^BackBtn
< &Back < &Back
# ^NextBtn
&Next > &Next >
# ^AgreeBtn
I &Agree I &Agree
# ^AcceptBtn
I &accept the terms in the License Agreement I &accept the terms in the License Agreement
# ^DontAcceptBtn
I &do not accept the terms in the License Agreement I &do not accept the terms in the License Agreement
# ^InstallBtn
&Install &Install
# ^UninstallBtn
&Uninstall &Uninstall
# ^CancelBtn
Cancel Cancel
# ^CloseBtn
&Close &Close
# ^BrowseBtn
B&rowse... B&rowse...
# ^ShowDetailsBtn
Show &details Show &details
# ^ClickNext
Click Next to continue.
# ^ClickInstall
Click Install to start the installation.
# ^ClickUninstall
Click Uninstall to start the uninstallation.
# ^Name
Name Name
# ^Completed
Completed Completed
# ^LicenseText
Please review the license agreement before installing $(^Name). If you accept all terms of the agreement, click I Agree.
# ^LicenseTextCB
Please review the license agreement before installing $(^Name). If you accept all terms of the agreement, click the check box below. $_CLICK
# ^LicesnseTextRB
Please review the license agreement before installing $(^Name). If you accept all terms of the agreement, select the first option below. $_CLICK
# ^UnLicenseText
Please review the license agreement before uninstalling $(^Name). If you accept all terms of the agreement, click I Agree.
# ^UnLicenseTextCB
Please review the license agreement before uninstalling $(^Name). If you accept all terms of the agreement, click the check box below. $_CLICK
# ^UnLicesnseTextRB
Please review the license agreement before uninstalling $(^Name). If you accept all terms of the agreement, select the first option below. $_CLICK
# ^Custom
Custom Custom
# ^ComponentsText
Check the components you want to install and uncheck the components you don't want to install. $_CLICK
# ^ComponentsSubText1
Select the type of install: Select the type of install:
# ^ComponentsSubText2_NoInstTypes
Select components to install: Select components to install:
# ^ComponentsSubText2
Or, select the optional components you wish to install: Or, select the optional components you wish to install:
Select the folder to install %s in: # ^UnComponentsText
Space available: Check the components you want to uninstall and uncheck the components you don't want to uninstall. $_CLICK
Space required: # ^UnComponentsSubText1
Select the type of uninstall:
# ^UnComponentsSubText2_NoInstTypes
Select components to uninstall:
# ^UnComponentsSubText2
Or, select the optional components you wish to uninstall:
# ^DirText
Setup will install $(^Name) in the following folder. To install in a different folder, click Browse and select another folder. $_CLICK
# ^DirSubText
Destination Folder
# ^DirBrowseText
Select the folder to install $(^Name) in:
# ^UnDirText
Setup will uninstall $(^Name) from the following folder. To uninstall from a different folder, click Browse and select another folder. $_CLICK
# ^UnDirSubText
""
# ^UnDirBrowseText
Select the folder to uninstall $(^Name) from:
# ^SpaceAvailable
"Space available: "
# ^SpaceRequired
"Space required: "
# ^UninstallingText
This wizard will uninstall $(^Name) from your computer. $_CLICK
# ^UninstallingSubText
Uninstalling from: Uninstalling from:
Error opening file for writing: \r\n\t"$0"\r\nHit abort to abort installation,\r\nretry to retry writing the file, or\r\nignore to skip this file # ^FileError
Error opening file for writing: \r\n\t"$0"\r\nHit retry to retry writing the file, or\r\ncancel to abort installation Error opening file for writing: \r\n\t\"$0\"\r\nHit abort to abort installation,\r\nretry to retry writing the file, or\r\nignore to skip this file
Can't write: # ^FileError_NoIgnore
Error opening file for writing: \r\n\t\"$0\"\r\nHit retry to retry writing the file, or\r\ncancel to abort installation
# ^CantWrite
"Can't write: "
# ^CopyFailed
Copy failed Copy failed
Copy to # ^CopyTo
Registering: "Copy to "
Unregistering: # ^Registering
Could not find symbol: "Registering: "
Could not load: # ^Unregistering
Create folder: "Unregistering: "
Create shortcut: # ^SymbolNotFound
Created uninstaller: "Could not find symbol: "
Delete file: # ^CouldNotLoad
Delete on reboot: "Could not load: "
Error creating shortcut: # ^CreateFolder
Error creating: "Create folder: "
# ^CreateShortcut
"Create shortcut: "
# ^CreatedUninstaller
"Created uninstaller: "
# ^Delete
"Delete file: "
# ^DeleteOnReboot
"Delete on reboot: "
# ^ErrorCreatingShortcut
"Error creating shortcut: "
# ^ErrorCreating
"Error creating: "
# ^ErrorDecompressing
Error decompressing data! Corrupted installer? Error decompressing data! Corrupted installer?
# ^ErrorRegistering
Error registering DLL Error registering DLL
ExecShell: # ^ExecShell
Execute: "ExecShell: "
Extract: # ^Exec
Extract: error writing to file "Execute: "
# ^Extract
"Extract: "
# ^ErrorWriting
"Extract: error writing to file "
# ^InvalidOpcode
Installer corrupted: invalid opcode Installer corrupted: invalid opcode
No OLE for: # ^NoOLE
Output folder: "No OLE for: "
Remove folder: # ^OutputFolder
Rename on reboot: "Output folder: "
Rename: # ^RemoveFolder
Skipped: "Remove folder: "
# ^RenameOnReboot
"Rename on reboot: "
# ^Rename
"Rename: "
# ^Skipped
"Skipped: "
# ^CopyDetails
Copy Details To Clipboard Copy Details To Clipboard
# ^LogInstall
Log install process Log install process
# byte # ^Byte
B B
# kilo # ^Kilo
K K
# mega # ^Mega
M M
# giga # ^Giga
G G

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by izzo (izzo@hot.ee) # Translation by izzo (izzo@hot.ee)
Nullsoft Install System %s Nullsoft Install System %s
%s Paigaldamine $(^Name) Paigaldamine
%s Eemaldamine $(^Name) Eemaldamine
: Litsentsileping : Litsentsileping
: Paigaldusvalikud : Paigaldusvalikud
: Paigalduskaust : Paigalduskaust

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by AKX <akx@theakx.tk> - Modifications by Eclipser <Eclipser@pilvikaupunki.net> # Translation by AKX <akx@theakx.tk> - Modifications by Eclipser <Eclipser@pilvikaupunki.net>
Nullsoft Asennusjärjestelmä %s Nullsoft Asennusjärjestelmä %s
%s Asennus $(^Name) Asennus
%s Poisto $(^Name) Poisto
: Lisenssisopimus : Lisenssisopimus
: Asennusvaihtoehdot : Asennusvaihtoehdot
: Asennushakemisto : Asennushakemisto
@ -36,7 +38,7 @@ Oma
Valitse asennustyyppi: Valitse asennustyyppi:
Valitse asennettavat komponentit: Valitse asennettavat komponentit:
Tai, valitse valinnaiset komponentit: Tai, valitse valinnaiset komponentit:
Valitse hakemisto, johon %s asennetaan: Valitse hakemisto, johon $(^Name) asennetaan:
Tilaa vapaana: Tilaa vapaana:
Tarvittava tila: Tarvittava tila:
Poistetaan hakemistosta: Poistetaan hakemistosta:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by the French NSIS team <veekee@winampfr.com> - http://www.winampfr.com/nsis. # Translation by the French NSIS team <veekee@winampfr.com> - http://www.winampfr.com/nsis.
Nullsoft Install System %s Nullsoft Install System %s
Installation de %s Installation de $(^Name)
Désinstallation de %s Désinstallation de $(^Name)
: Licence : Licence
: Options d'installation : Options d'installation
: Dossier d'installation : Dossier d'installation
@ -36,7 +38,7 @@ Personnalis
Sélectionnez le type d'installation : Sélectionnez le type d'installation :
Sélectionnez les composants à installer : Sélectionnez les composants à installer :
Ou, sélectionnez les composants optionnels que vous voulez installer : Ou, sélectionnez les composants optionnels que vous voulez installer :
Sélectionnez le dossier d'installation de %s : Sélectionnez le dossier d'installation de $(^Name) :
Espace disponible : Espace disponible :
Espace requis : Espace requis :
Désinstallation de : Désinstallation de :

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by L.King, changes by R. Bisswanger # Translation by L.King, changes by R. Bisswanger
Nullsoft Install System %s Nullsoft Install System %s
%s Installation $(^Name) Installation
%s Deinstallation $(^Name) Deinstallation
: Lizenzabkommen : Lizenzabkommen
: Installations-Optionen : Installations-Optionen
: Zielverzeichnis : Zielverzeichnis
@ -36,7 +38,7 @@ Benutzerdefiniert
Installations-Typ bestimmen: Installations-Typ bestimmen:
Wählen Sie die Komponenten aus, die Sie installieren möchten: Wählen Sie die Komponenten aus, die Sie installieren möchten:
oder wählen Sie zusätzliche Komponenten aus: oder wählen Sie zusätzliche Komponenten aus:
Wählen Sie das Verzeichnis aus, in das Sie %s installieren möchten: Wählen Sie das Verzeichnis aus, in das Sie $(^Name) installieren möchten:
Verfügbarer Speicher: Verfügbarer Speicher:
Benötigter Speicher: Benötigter Speicher:
Deinstalliere aus: Deinstalliere aus:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Makidis N. Mike # Translation by Makidis N. Mike
Nullsoft Install System %s Nullsoft Install System %s
Εγκατάσταση του '%s' Εγκατάσταση του '$(^Name)'
Απεγκατάσταση του '%s' Απεγκατάσταση του '$(^Name)'
: Συμφωνία ’δειας Χρήσης : Συμφωνία ’δειας Χρήσης
: Επιλογές Εγκατάστασης : Επιλογές Εγκατάστασης
: Φάκελος Εγκατάστασης : Φάκελος Εγκατάστασης
@ -36,7 +38,7 @@ Nullsoft Install System %s
Επιλέξτε τύπο εγκατάστασης: Επιλέξτε τύπο εγκατάστασης:
Επιλέξτε τα στοιχεία που θέλετε να εγκαταστήσετε: Επιλέξτε τα στοιχεία που θέλετε να εγκαταστήσετε:
Ή, επιλέξτε τα προαιρετικά στοιχεία που θέλετε να εγκαταστήσετε: Ή, επιλέξτε τα προαιρετικά στοιχεία που θέλετε να εγκαταστήσετε:
Επιλέξτε το φάκελο εγκατάστασης για το '%s': Επιλέξτε το φάκελο εγκατάστασης για το '$(^Name)':
Διαθέσιμος χώρος: Διαθέσιμος χώρος:
Απαιτούμενος χώρος: Απαιτούμενος χώρος:
Απεγκατάστ. από: Απεγκατάστ. από:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
RTL
# Translation by Amir Szekely (aka KiCHiK) # Translation by Amir Szekely (aka KiCHiK)
Nullsoft Install System %s Nullsoft Install System %s
התקנת %s התקנת $(^Name)
הסרת %s הסרת $(^Name)
: הסכם רישוי : הסכם רישוי
: אפשרויות התקנה : אפשרויות התקנה
: תיקיית התקנה : תיקיית התקנה
@ -19,8 +21,8 @@ Nullsoft Install System %s
: אישור הסרה : אישור הסרה
: מסיר : מסיר
: ההסרה הושלמה : ההסרה הושלמה
< ה&קודם ה&קודם >
ה&בא > < ה&בא
אני &מסכים אני &מסכים
אני &מסכים לתנאי הסכם הרישוי אני &מסכים לתנאי הסכם הרישוי
אני &לא מסכים לתנאי הסכם הרישוי אני &לא מסכים לתנאי הסכם הרישוי
@ -28,20 +30,20 @@ Nullsoft Install System %s
&הסר &הסר
ביטול ביטול
סגור& סגור&
&עיין... ...&עיין
ה&צג פרטים ה&צג פרטים
שם שם
הפעולה הושלמה הפעולה הושלמה
מותאם אישית מותאם אישית
בחר סוג התקנה: :בחר סוג התקנה
בחר רכיבים להתקנה: :בחר רכיבים להתקנה
או, בחר רכיבי רשות להתקנה: :או, בחר רכיבי רשות להתקנה
בחר תיקייה להתקנת %s: :בחר תיקייה להתקנת $(^Name)
מקום פנוי: מקום פנוי:
מקום דרוש: מקום דרוש:
מסיר מ: :מסיר מ
ארעה שגיאה בעת פתיחת קובץ לכתיבה:\r\n\t"$0"\r\nלחץ על ביטול כדי לבטל את ההתקנה,\r\nנסה שנית כדי לנסות לפתוח את הקובץ שוב, או\r\nהתעלם כדי לדלג על הקובץ ארעה שגיאה בעת פתיחת קובץ לכתיבה:\r\n\t"$0"\r\nלחץ על ביטול כדי לבטל את ההתקנה,\r\nנסה שנית כדי לנסות לפתוח את הקובץ שוב, או\r\nהתעלם כדי לדלג על הקובץ
ארעה שגיאה בעת פתיחת קובץ לכתיבה:\r\n\t"$0"\r\nלחץ על נסה שנית כדי לנסות לפתוח את הקובץ שוב, או\r\nביטול עדי לבטל את התתקנה ארעה שגיאה בעת פתיחת קובץ לכתיבה:\r\n\t"$0"\r\nלחץ על נסה שנית כדי לנסות לפתוח את הקובץ שוב, או\r\nביטול כדי לבטל את התתקנה
לא ניתן לכתוב: לא ניתן לכתוב:
ההעתקה נכשלה ההעתקה נכשלה
העתק ל- העתק ל-
@ -74,8 +76,8 @@ Nullsoft Install System %s
# byte # byte
# kilo # kilo
ק ק
# mega # mega
מ מ
# giga # giga
ג ג

View file

@ -7,11 +7,13 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Soft-Trans Bt. (V2) # Translation by Soft-Trans Bt. (V2)
# Translation by Orfanik Kft. (V3-V5) # Translation by Orfanik Kft. (V3-V5)
Nullsoft Telepítőrendszer %s Nullsoft Telepítőrendszer %s
%s Telepítő $(^Name) Telepítő
%s Eltávolító $(^Name) Eltávolító
: Licencszerződés : Licencszerződés
: Telepítési lehetőségek : Telepítési lehetőségek
: Célmappa : Célmappa
@ -37,7 +39,7 @@ Egy
Válassza ki a telepítés típusát: Válassza ki a telepítés típusát:
Válassza ki a telepítendő összetevőket: Válassza ki a telepítendő összetevőket:
vagy, jelölje ki a választható összetevők közül a telepíteni kívánta(ka)t: vagy, jelölje ki a választható összetevők közül a telepíteni kívánta(ka)t:
Melyik mappába telepíti a(z) %s fájlt: Melyik mappába telepíti a(z) $(^Name) fájlt:
Szabad terület: Szabad terület:
Helyigény: Helyigény:
Eltávolítás helye: Eltávolítás helye:

View file

@ -7,10 +7,12 @@ NLF v2
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Orfanik - http://www.orfanik.hu # Translation by Orfanik - http://www.orfanik.hu
Nullsoft Install System %s Nullsoft Install System %s
Installazione di %s Installazione di $(^Name)
Disinstallazione di %s Disinstallazione di $(^Name)
: Licenza d'uso : Licenza d'uso
: Opzioni di installazione : Opzioni di installazione
: Cartella di installazione : Cartella di installazione
@ -34,7 +36,7 @@ Personalizzata
Seleziona il tipo d'installazione : Seleziona il tipo d'installazione :
Seleziona i componenti da installare : Seleziona i componenti da installare :
Oppure, seleziona i componenti opzionali che vuoi installare : Oppure, seleziona i componenti opzionali che vuoi installare :
Seleziona la cartella dove installare %s : Seleziona la cartella dove installare $(^Name) :
Spazio disponibile : Spazio disponibile :
Spazio necessario : Spazio necessario :
Rimozione da : Rimozione da :

View file

@ -7,10 +7,12 @@ NLF v5
9 9
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
932 932
# RTL - anything else than RTL means LTR
-
# Translation by Dnanako, updated by Takahiro Yoshimura <takahiro_y@monolithworks.co.jp> # Translation by Dnanako, updated by Takahiro Yoshimura <takahiro_y@monolithworks.co.jp>
Nullsoft Install System %s Nullsoft Install System %s
%s セットアップ $(^Name) セットアップ
%s アンインストール $(^Name) アンインストール
:ライセンス契約書 :ライセンス契約書
:インストール オプション :インストール オプション
:インストール フォルダ :インストール フォルダ
@ -36,7 +38,7 @@ Nullsoft Install System %s
インストール タイプを選択: インストール タイプを選択:
インストール コンポーネントを選択: インストール コンポーネントを選択:
または、インストール オプション コンポーネントを選択: または、インストール オプション コンポーネントを選択:
%s をインストールするフォルダを選択してください: $(^Name) をインストールするフォルダを選択してください:
利用可能なディスクスペース: 利用可能なディスクスペース:
必要なディスクスペース: 必要なディスクスペース:
アンインストール元: アンインストール元:

View file

@ -8,10 +8,12 @@ NLF v5
9 9
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
949 949
# RTL - anything else than RTL means LTR
-
# Translation by dTomoyo <dtomoyo@empal.com> - http://user.chol.com/~ckgfx / Modified by koder@popdesk.co.kr # Translation by dTomoyo <dtomoyo@empal.com> - http://user.chol.com/~ckgfx / Modified by koder@popdesk.co.kr
널소프트 설치 시스템 %s 널소프트 설치 시스템 %s
%s 설치 $(^Name) 설치
%s 제거 $(^Name) 제거
: 사용 계약 동의 : 사용 계약 동의
: 설치 옵션 : 설치 옵션
: 폴더 지정 : 폴더 지정
@ -37,7 +39,7 @@ NLF v5
설치 형태를 선택하세요: 설치 형태를 선택하세요:
설치하려는 구성 요소를 선택하세요: 설치하려는 구성 요소를 선택하세요:
구성요소 직접 선택: 구성요소 직접 선택:
%s (을)를 다음 폴더에 설치합니다: $(^Name) (을)를 다음 폴더에 설치합니다:
남은 디스크 공간: 남은 디스크 공간:
필요한 디스크 공간: 필요한 디스크 공간:
제거 대상: 제거 대상:

View file

@ -7,10 +7,12 @@ NLF v3
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by NorCis # Translation by NorCis
Nullsoft Install System %s Nullsoft Install System %s
%s Idiegimas $(^Name) Idiegimas
%s Panaikinti $(^Name) Panaikinti
: Naudojimo sutartis : Naudojimo sutartis
: Idiegimo nustatymai : Idiegimo nustatymai
: Idiegimo katalogas : Idiegimo katalogas
@ -36,7 +38,7 @@ Kitoks
Pasirinkite idiegimo tipa: Pasirinkite idiegimo tipa:
Pasirinkite komponentus, kuriuos idiegti: Pasirinkite komponentus, kuriuos idiegti:
Arba, pasirinkite neprivalomus komponentus, kuriuos jus norite idiegti: Arba, pasirinkite neprivalomus komponentus, kuriuos jus norite idiegti:
Pasirinkite kataloga, kur idiegti %s: Pasirinkite kataloga, kur idiegti $(^Name):
Yra vietos: Yra vietos:
Reikia vietos: Reikia vietos:
Trinama iš: Trinama iš:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Sasko Zdravkin [vardarce@mail.com] # Translation by Sasko Zdravkin [vardarce@mail.com]
Nullsoft Install System %s Nullsoft Install System %s
%s Инсталирање $(^Name) Инсталирање
%s Деинсталирање $(^Name) Деинсталирање
: Лиценцен Договор : Лиценцен Договор
: Инсталациони опции : Инсталациони опции
: Инсталационен директориум : Инсталационен директориум
@ -36,7 +38,7 @@ Nullsoft Install System %s
Одберето го видот на инсталацијата: Одберето го видот на инсталацијата:
Одберете компоненти за инсталирање: Одберете компоненти за инсталирање:
Или, одберете одредени компоненти за инсталирање: Или, одберете одредени компоненти за инсталирање:
Одберете го директориумот за инсталирање на %s: Одберете го директориумот за инсталирање на $(^Name):
Слободен простор: Слободен простор:
Потребен простор: Потребен простор:
Деинсталирај од: Деинсталирај од:

View file

@ -7,11 +7,13 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
1250 1250
# RTL - anything else than RTL means LTR
-
# Translation by Piotr Murawski & Rafał Lampe <ppiter@skrzynka.pl> - www.lomsel.prv.pl # Translation by Piotr Murawski & Rafał Lampe <ppiter@skrzynka.pl> - www.lomsel.prv.pl
# corrections, additions, updates by cube cube(at)lp.net.pl # corrections, additions, updates by cube cube(at)lp.net.pl
Nullsoft Install System %s Nullsoft Install System %s
%s Instalator $(^Name) Instalator
%s Odinstaluj $(^Name) Odinstaluj
: Warunki licencji : Warunki licencji
: Opcje instalacji : Opcje instalacji
: Folder instalacji : Folder instalacji
@ -37,7 +39,7 @@ U
Wybierz typ instalacji: Wybierz typ instalacji:
Wybierz komponenty do zainstalowania: Wybierz komponenty do zainstalowania:
lub wybierz opcjonalne komponenty, które chcesz zainstalować: lub wybierz opcjonalne komponenty, które chcesz zainstalować:
Wybierz folder instalacji %s: Wybierz folder instalacji $(^Name):
Dostępne miejsce: Dostępne miejsce:
Wymagane miejsce: Wymagane miejsce:
Odinstalowuje z: Odinstalowuje z:

View file

@ -8,10 +8,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
1252 1252
# RTL - anything else than RTL means LTR
-
# Translation v4.0.3 by DragonSoull <dragonsoull@madalien.tk> with help from Dre` - Updated by Ramon # Translation v4.0.3 by DragonSoull <dragonsoull@madalien.tk> with help from Dre` - Updated by Ramon
Sistema de Instalação Nullsoft %s Sistema de Instalação Nullsoft %s
Instalação de %s Instalação de $(^Name)
Desinstalação de %s Desinstalação de $(^Name)
: Contrato de Licença : Contrato de Licença
: Opções de instalação : Opções de instalação
: Directoria de instalação : Directoria de instalação
@ -37,7 +39,7 @@ Personalizada
Escolha o tipo de instalação: Escolha o tipo de instalação:
Escolha os componentes a instalar: Escolha os componentes a instalar:
Ou, escolha os componentes opcionais que deseja instalar: Ou, escolha os componentes opcionais que deseja instalar:
Escolha a directoria a instalar %s: Escolha a directoria a instalar $(^Name):
Espaço disponível: Espaço disponível:
Espaço necessário: Espaço necessário:
A Desinstalar de: A Desinstalar de:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Diego Marcos <jump@osite.com.br> # Translation by Diego Marcos <jump@osite.com.br>
Sistema de Instalação Nullsoft %s Sistema de Instalação Nullsoft %s
Instalação do %s Instalação do $(^Name)
Desinstalação do %s Desinstalação do $(^Name)
: Contrato de Licença : Contrato de Licença
: Opções de instalação : Opções de instalação
: Diretório de instalação : Diretório de instalação
@ -36,7 +38,7 @@ Personalizado
Escolha o tipo de instalação: Escolha o tipo de instalação:
Escolha os componentes para instalar: Escolha os componentes para instalar:
Ou, selecione os componentes opcionais que deseja instalar: Ou, selecione os componentes opcionais que deseja instalar:
Escolha o diretório para instalar %s: Escolha o diretório para instalar $(^Name):
Espaço disponível: Espaço disponível:
Espaço necessário: Espaço necessário:
Desinstalando de: Desinstalando de:

View file

@ -7,12 +7,14 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
1250 1250
# RTL - anything else than RTL means LTR
-
# Revision by Sorin Sbarnea (sorin@intersol.ro) v5.1 # Revision by Sorin Sbarnea (sorin@intersol.ro) v5.1
# Translation by Cristian Pirvu (pcristip@yahoo.com) v5 # Translation by Cristian Pirvu (pcristip@yahoo.com) v5
# and Sorin Sbarnea INTERSOL SRL (sorin@intersol.ro) v4 # and Sorin Sbarnea INTERSOL SRL (sorin@intersol.ro) v4
Sistem de instalare Nullsoft %s Sistem de instalare Nullsoft %s
Instalare %s Instalare $(^Name)
Dezinstalare %s Dezinstalare $(^Name)
: Licenta de utilizare : Licenta de utilizare
: Optiuni de instalare : Optiuni de instalare
: Directorul de instalare : Directorul de instalare
@ -38,7 +40,7 @@ Nestandard
Alegeti tipul instalarii: Alegeti tipul instalarii:
Alegeti componentele de instalat: Alegeti componentele de instalat:
Sau alegeti componentele optionale pe care vreti sa le instalati: Sau alegeti componentele optionale pe care vreti sa le instalati:
Selectati directorul In care vreti sa instalati %s: Selectati directorul In care vreti sa instalati $(^Name):
Spatiu disponibil: Spatiu disponibil:
Spatiu necesar: Spatiu necesar:
Dezinstaleaza din: Dezinstaleaza din:

View file

@ -8,10 +8,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Timon [ timon@front.ru ] + 20030720 # Translation by Timon [ timon@front.ru ] + 20030720
Nullsoft Install System %s Nullsoft Install System %s
%s Установка $(^Name) Установка
%s Удаление $(^Name) Удаление
: Лицензионное соглашение : Лицензионное соглашение
: Опции установки : Опции установки
: Директория установки : Директория установки
@ -37,7 +39,7 @@ Nullsoft Install System %s
Выберите тип установки: Выберите тип установки:
Выберите компоненты для установки: Выберите компоненты для установки:
Или, выберите вручную компоненты, которые Вы желаете установить: Или, выберите вручную компоненты, которые Вы желаете установить:
Выберите директорию для установки %s в: Выберите директорию для установки $(^Name) в:
Доступно места: Доступно места:
Необходимо места: Необходимо места:
Удаление из: Удаление из:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Vladan "vladano@EUnet.yu" Obradovic # Translation by Vladan "vladano@EUnet.yu" Obradovic
Nullsoft Install System %s Nullsoft Install System %s
%s Instalacija $(^Name) Instalacija
%s Deinstalacija $(^Name) Deinstalacija
: Uslovi Licence : Uslovi Licence
: Installacione Opcije : Installacione Opcije
: Installacioni Direktorijum : Installacioni Direktorijum
@ -36,7 +38,7 @@ Posebno
Odaberi tip instalacije: Odaberi tip instalacije:
Odaberi komponente koje želiš instalirati: Odaberi komponente koje želiš instalirati:
Ili, odaberi opcione komponente koje želiš instalirati: Ili, odaberi opcione komponente koje želiš instalirati:
Odaberi direktorijum u koji želiš instalirati %s: Odaberi direktorijum u koji želiš instalirati $(^Name):
Slobodno na disku: Slobodno na disku:
Potrebno na disku: Potrebno na disku:
Deinstaliram iz: Deinstaliram iz:

View file

@ -7,10 +7,12 @@ NLF v5
9 9
# Codepage - dash (-) means ANSI code page ANSI 字码页 # Codepage - dash (-) means ANSI code page ANSI 字码页
936 936
# RTL - anything else than RTL means LTR
-
# Translation by Kii Ali <kiiali@cpatch.org>, Revision Date: 2003-05-30 # Translation by Kii Ali <kiiali@cpatch.org>, Revision Date: 2003-05-30
Nullsoft Install System %s Nullsoft Install System %s
%s 安装 $(^Name) 安装
%s 解除安装 $(^Name) 解除安装
: 授权条款 : 授权条款
: 安装选项 : 安装选项
: 安装文件夹 : 安装文件夹
@ -36,7 +38,7 @@ Nullsoft Install System %s
选定安装的类型: 选定安装的类型:
选定安装的组件: 选定安装的组件:
或者,自定义选定想安装的组件: 或者,自定义选定想安装的组件:
选定要安装 %s 的文件夹: 选定要安装 $(^Name) 的文件夹:
可用空间: 可用空间:
所需空间: 所需空间:
解除安装目录: 解除安装目录:

View file

@ -7,10 +7,12 @@ NLF v3
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by trace & Kypec # Translation by trace & Kypec
Nullsoft Install System %s Nullsoft Install System %s
Inštalácia %s Inštalácia $(^Name)
Odinštalácia %s Odinštalácia $(^Name)
: Licenèná zmluva : Licenèná zmluva
: Možnosti inštalácie : Možnosti inštalácie
: Adresár inštalácie : Adresár inštalácie
@ -36,7 +38,7 @@ Vlastn
Zvo¾te typ inštalácie: Zvo¾te typ inštalácie:
Zvo¾te komponenty, ktoré sa majú nainštalova<76>: Zvo¾te komponenty, ktoré sa majú nainštalova<76>:
Alebo, vyberte volite¾né komponenty, ktoré sa majú nainštalova<76>: Alebo, vyberte volite¾né komponenty, ktoré sa majú nainštalova<76>:
Zvo¾te adresár do ktorého sa má %s nainštalova<76>: Zvo¾te adresár do ktorého sa má $(^Name) nainštalova<76>:
Vo¾ný priestor: Vo¾ný priestor:
Potrebný priestor: Potrebný priestor:
Odinštalovávam z: Odinštalovávam z:

View file

@ -8,10 +8,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Janez Dolinar # Translation by Janez Dolinar
Nullsoft Install System %s Nullsoft Install System %s
%s Namestitev $(^Name) Namestitev
%s Odstranitev $(^Name) Odstranitev
: Licenčna pogodba : Licenčna pogodba
: Možnosti namestitve : Možnosti namestitve
: Mapa namestitve : Mapa namestitve
@ -37,7 +39,7 @@ Po meri
Izberite tip namestitve: Izberite tip namestitve:
Izberite bloke namestitve: Izberite bloke namestitve:
Ali si izberite bloke namestitve, ki jih želite: Ali si izberite bloke namestitve, ki jih želite:
Izberi mapo za namestitev %s: Izberi mapo za namestitev $(^Name):
Prosto: Prosto:
Zahtevano: Zahtevano:
Odstranjujem iz: Odstranjujem iz:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by MoNKi # Translation by MoNKi
Nullsoft Install System %s Nullsoft Install System %s
Instalación de %s Instalación de $(^Name)
Desinstalación de %s Desinstalación de $(^Name)
: Acuerdo de Licencia : Acuerdo de Licencia
: Opciones de Instalación : Opciones de Instalación
: Directorio de Instalación : Directorio de Instalación
@ -36,7 +38,7 @@ Personalizada
Indique el tipo de instalación: Indique el tipo de instalación:
Seleccione los componentes: Seleccione los componentes:
O seleccione los componentes opcionales a instalar: O seleccione los componentes opcionales a instalar:
Seleccione el directorio en el que instalar %s: Seleccione el directorio en el que instalar $(^Name):
Espacio disponible: Espacio disponible:
Espacio requerido: Espacio requerido:
Desinstalando desde: Desinstalando desde:

View file

@ -8,10 +8,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Magnus Bonnevier (magnus.bonnevier@telia.com) # Translation by Magnus Bonnevier (magnus.bonnevier@telia.com)
Nullsoft Install System %s Nullsoft Install System %s
%s Setup $(^Name) Setup
%s Avinstallation $(^Name) Avinstallation
: Licens Avtal : Licens Avtal
: Installations Val : Installations Val
: Installations Katalog : Installations Katalog
@ -37,7 +39,7 @@ Custom
Välj typ av installation: Välj typ av installation:
Välj komponenter att installera: Välj komponenter att installera:
Eller, välj alternativa komponenter du önskar installera: Eller, välj alternativa komponenter du önskar installera:
Välj katalog att installera %s i: Välj katalog att installera $(^Name) i:
Ytrymme tillgängligt: Ytrymme tillgängligt:
Ytrymme som behövs: Ytrymme som behövs:
Avinstallerar från: Avinstallerar från:

View file

@ -7,10 +7,12 @@ NLF v2
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by TuW@nNu tuwannu@hotmail.com (asdfuae) # Translation by TuW@nNu tuwannu@hotmail.com (asdfuae)
Nullsoft Install System %s Nullsoft Install System %s
%s オヤエオム鬧 $(^Name) µÔ´µÑé§
%s カヘケ。メテオヤエオム鬧 $(^Name) ¶Í¹¡ÒõԴµÑé§
: ㈤偷о米柰<E7B1B3>寓试犯造 : ㈤偷о米柰<E7B1B3>寓试犯造
: 笛青抛汀∫玫源笛椐 : 笛青抛汀∫玫源笛椐
: 饪培赐渺氛璧源笛椐 : 饪培赐渺氛璧源笛椐
@ -34,7 +36,7 @@ Nullsoft Install System %s
嗯淄倩岷骸颐翟吹验<EFBFBD>: 嗯淄倩岷骸颐翟吹验<EFBFBD>:
嗯淄·土饩喙沟旆砧甸艇∫玫源笛椐: 嗯淄·土饩喙沟旆砧甸艇∫玫源笛椐:
嗯淄·土饩喙沟焱阻规氛璧橥А颐翟吹验<EFBFBD>: 嗯淄·土饩喙沟焱阻规氛璧橥А颐翟吹验<EFBFBD>:
耆魴ヤエオム鬧 %s ナァ羯: ãËéµÔ´µÑé§ $(^Name) ŧã¹:
喙组头砧氛栲伺淄: 喙组头砧氛栲伺淄:
喙组头砧氛璧橥А颐: 喙组头砧氛璧橥А颐:
锻埂颐翟吹验Ж摇: 锻埂颐翟吹验Ж摇:

View file

@ -7,10 +7,12 @@ NLF v5
9 9
# Codepage - dash (-) means ANSI code page ANSI 字碼頁 # Codepage - dash (-) means ANSI code page ANSI 字碼頁
950 950
# RTL - anything else than RTL means LTR
-
# Translation by Kii Ali <kiiali@cpatch.org>, Revision Date: 2003-05-30 # Translation by Kii Ali <kiiali@cpatch.org>, Revision Date: 2003-05-30
Nullsoft Install System %s Nullsoft Install System %s
%s 安裝 $(^Name) 安裝
%s 解除安裝 $(^Name) 解除安裝
: 授權條款 : 授權條款
: 安裝選項 : 安裝選項
: 安裝資料夾 : 安裝資料夾
@ -36,7 +38,7 @@ Nullsoft Install System %s
選取安裝的類型: 選取安裝的類型:
選取安裝的元件: 選取安裝的元件:
或者,自訂選取想安裝的元件: 或者,自訂選取想安裝的元件:
選取要安裝 %s 的資料夾: 選取要安裝 $(^Name) 的資料夾:
可用空間: 可用空間:
所需空間: 所需空間:
解除安裝目錄: 解除安裝目錄:

View file

@ -7,10 +7,12 @@ NLF v5
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Fatih BOY (fatih@smartcoding.org) # Translation by Fatih BOY (fatih@smartcoding.org)
Nullsoft Kurulum Sistemi %s Nullsoft Kurulum Sistemi %s
%s Kurulumu $(^Name) Kurulumu
%s Uninstaller $(^Name) Uninstaller
: Sözlesme : Sözlesme
: Kurulum Ayarlari : Kurulum Ayarlari
: Kurulum Dizini : Kurulum Dizini
@ -36,7 +38,7 @@ Tamamlandi
Kurulum seklini seçiniz: Kurulum seklini seçiniz:
Kurulacak paketleri seçiniz: Kurulacak paketleri seçiniz:
Veya, kurmak istediginiz paketleri seçiniz: Veya, kurmak istediginiz paketleri seçiniz:
%s kurulumu için bir dizin seçin: $(^Name) kurulumu için bir dizin seçin:
Kalan bos alan: Kalan bos alan:
Gerekli bos alan: Gerekli bos alan:
Kaldiriliyor: Kaldiriliyor:

View file

@ -7,10 +7,12 @@ NLF v4
- -
# Codepage - dash (-) means ANSI code page # Codepage - dash (-) means ANSI code page
- -
# RTL - anything else than RTL means LTR
-
# Translation by Yuri Holubow, Nash-Soft.com <http://www.Nash-Soft.com/home> # Translation by Yuri Holubow, Nash-Soft.com <http://www.Nash-Soft.com/home>
Nullsoft Install System %s Nullsoft Install System %s
%s Установка $(^Name) Установка
%s Видалення $(^Name) Видалення
: Лiцензiйна угода : Лiцензiйна угода
: Опцiї установки : Опцiї установки
: Директорiя установки : Директорiя установки
@ -36,7 +38,7 @@ I
Виберiть тип установки: Виберiть тип установки:
Виберiть компоненти для установки: Виберiть компоненти для установки:
Чи, виберiть вручну компоненти, якi Ви хочете встановити: Чи, виберiть вручну компоненти, якi Ви хочете встановити:
Виберiть директорiю для установки %s в: Виберiть директорiю для установки $(^Name) в:
Доступно мiсця: Доступно мiсця:
Необхiдно мiсця: Необхiдно мiсця:
Видалення з: Видалення з:

View file

@ -2,7 +2,7 @@ StartMenu.dll shows a custom page that lets the user select a start menu program
folder to put shortcuts in. folder to put shortcuts in.
To show the dialog use the Select function. This function has one required parameter To show the dialog use the Select function. This function has one required parameter
which is the program group default name, and some more optional parameters: which is the program group default name, and some more optional switches:
/autoadd - automatically adds the program name to the selected folder /autoadd - automatically adds the program name to the selected folder
/noicon - doesn't show the icon in the top left corner /noicon - doesn't show the icon in the top left corner
/text [please select...] - sets the top text to something else than /text [please select...] - sets the top text to something else than
@ -14,13 +14,20 @@ which is the program group default name, and some more optional parameters:
the user checks this box, the return value the user checks this box, the return value
will have > as its first character and you will have > as its first character and you
should not create the program group. should not create the program group.
/rtl - sets the direction of every control on the selection dialog
to RTL. This means every text shown on the page will be
justified to the right.
The order of the switches doesn't matter but the required parameter must come after
all of them. Every switch after the required parameter will be ignored and left
on the stack.
The function pushes "success", "cancel" or an error to the stack. If there was no The function pushes "success", "cancel" or an error to the stack. If there was no
error and the user didn't press on cancel it will push the selected folder name error and the user didn't press on cancel it will push the selected folder name
after "success". If the user checked the no shortcuts checkbox the '>' will be after "success". If the user checked the no shortcuts checkbox the result will be
appended to the folder name. The function does not push the full path but only the prefixed with '>'. The function does not push the full path but only the selected
selected sub-folder. It's up to you to decide if to put it in the current user or sub-folder. It's up to you to decide if to put it in the current user or all
all users start menu. users start menu.
Look at Example.nsi for an example. Look at Example.nsi for an example.

View file

@ -22,6 +22,7 @@ char checkbox[1024];
int autoadd = 0; int autoadd = 0;
int g_done = 0; int g_done = 0;
int noicon = 0; int noicon = 0;
int rtl = 0;
void *lpWndProcOld; void *lpWndProcOld;
@ -54,6 +55,10 @@ void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variab
{ {
noicon = 1; noicon = 1;
} }
else if (!lstrcmpi(buf+1, "rtl"))
{
rtl = 1;
}
else if (!lstrcmpi(buf+1, "text")) else if (!lstrcmpi(buf+1, "text"))
{ {
popstring(text); popstring(text);
@ -73,7 +78,8 @@ void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variab
if (popstring(buf)) if (popstring(buf))
*buf = 0; *buf = 0;
} }
if (*buf) lstrcpy(progname, buf); if (*buf)
lstrcpy(progname, buf);
else else
{ {
pushstring("error reading parameters"); pushstring("error reading parameters");
@ -145,16 +151,22 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
int y_offset = 0; int y_offset = 0;
int width, height;
GetWindowRect(hwChild, &dialog_r); GetWindowRect(hwChild, &dialog_r);
ScreenToClient(hwParent, (LPPOINT) &dialog_r); ScreenToClient(hwParent, (LPPOINT) &dialog_r);
ScreenToClient(hwParent, ((LPPOINT) &dialog_r)+1); ScreenToClient(hwParent, ((LPPOINT) &dialog_r)+1);
width = dialog_r.right - dialog_r.left;
height = dialog_r.bottom - dialog_r.top;
SetWindowPos( SetWindowPos(
hwndDlg, hwndDlg,
0, 0,
dialog_r.left, dialog_r.left,
dialog_r.top, dialog_r.top,
dialog_r.right - dialog_r.left, width,
dialog_r.bottom - dialog_r.top, height,
SWP_NOZORDER | SWP_NOACTIVATE SWP_NOZORDER | SWP_NOACTIVATE
); );
@ -171,6 +183,19 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
SendMessage(hwDirList, WM_SETFONT, (WPARAM) hFont, TRUE); SendMessage(hwDirList, WM_SETFONT, (WPARAM) hFont, TRUE);
SendMessage(hwCheckBox, WM_SETFONT, (WPARAM) hFont, TRUE); SendMessage(hwCheckBox, WM_SETFONT, (WPARAM) hFont, TRUE);
if (rtl)
{
long s;
s = GetWindowLong(hwText, GWL_STYLE);
SetWindowLong(hwText, GWL_STYLE, (s & ~SS_LEFT) | SS_RIGHT);
s = GetWindowLong(hwLocation, GWL_STYLE);
SetWindowLong(hwLocation, GWL_STYLE, (s & ~ES_LEFT) | ES_RIGHT);
s = GetWindowLong(hwDirList, GWL_EXSTYLE);
SetWindowLong(hwDirList, GWL_EXSTYLE, s | WS_EX_RIGHT | WS_EX_RTLREADING);
s = GetWindowLong(hwCheckBox, GWL_STYLE);
SetWindowLong(hwCheckBox, GWL_STYLE, s | BS_RIGHT | BS_LEFTTEXT);
}
if (!noicon) if (!noicon)
{ {
SendMessage( SendMessage(
@ -180,39 +205,50 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
(LPARAM)LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(103)) (LPARAM)LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(103))
); );
} }
GetClientRect(hwIcon, &temp_r);
SetWindowPos( SetWindowPos(
hwIcon, hwIcon,
0, 0,
rtl ? width - temp_r.right : 0,
0, 0,
0, temp_r.right,
32, temp_r.bottom,
32,
SWP_NOACTIVATE | (noicon ? SWP_HIDEWINDOW : 0) SWP_NOACTIVATE | (noicon ? SWP_HIDEWINDOW : 0)
); );
if (!*text) //GetWindowRect(hwIcon, &temp_r);
lstrcpy(text, "Select the Start Menu folder in which you would like to create the program's shortcuts:"); //ScreenToClient(hwndDlg, ((LPPOINT) &temp_r));
//ScreenToClient(hwndDlg, ((LPPOINT) &temp_r) + 1);
GetWindowRect(hwIcon, &temp_r); if (rtl)
temp_r.right += 5; {
temp_r.bottom += 5; ProgressiveSetWindowPos(
ScreenToClient(hwndDlg, ((LPPOINT) &temp_r) + 1); hwText,
0,
width - (noicon ? 0 : temp_r.right + 5),
temp_r.bottom + 2
);
}
else
{
ProgressiveSetWindowPos(
hwText,
noicon ? 0 : temp_r.right + 5,
width - (noicon ? 0 : temp_r.right + 5),
temp_r.bottom + 2
);
}
ProgressiveSetWindowPos( SetWindowText(hwText, *text ? text : "Select the Start Menu folder in which you would like to create the program's shortcuts:");
hwText,
noicon ? 0 : temp_r.right,
dialog_r.right - dialog_r.left - (noicon ? 0 : temp_r.right),
temp_r.bottom + 2
);
SetWindowText(hwText, text);
GetWindowRect(hwLocation, &temp_r); GetWindowRect(hwLocation, &temp_r);
ProgressiveSetWindowPos( ProgressiveSetWindowPos(
hwLocation, hwLocation,
0, 0,
dialog_r.right - dialog_r.left, width,
temp_r.bottom - temp_r.top temp_r.bottom - temp_r.top
); );
@ -233,14 +269,14 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
ProgressiveSetWindowPos( ProgressiveSetWindowPos(
hwDirList, hwDirList,
0, 0,
dialog_r.right - dialog_r.left, width,
dialog_r.bottom - dialog_r.top - y_offset - (*checkbox ? temp_r.bottom - temp_r.top + 5 : 0) height - y_offset - (*checkbox ? temp_r.bottom - temp_r.top + 5 : 0)
); );
ProgressiveSetWindowPos( ProgressiveSetWindowPos(
hwCheckBox, hwCheckBox,
0, 0,
dialog_r.right - dialog_r.left, width,
temp_r.bottom - temp_r.top temp_r.bottom - temp_r.top
); );

View file

@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"_DllMainCRTStartup" /dll /machine:I386 /nodefaultlib /out:"../../Plugins/StartMenu.dll" /opt:nowin98 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"_DllMainCRTStartup" /dll /map /machine:I386 /nodefaultlib /out:"../../Plugins/StartMenu.dll" /opt:nowin98
# SUBTRACT LINK32 /pdb:none # SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "StartMenu - Win32 Debug" !ELSEIF "$(CFG)" == "StartMenu - Win32 Debug"

View file

@ -17,11 +17,12 @@
#define PCD_PARAMS 2 #define PCD_PARAMS 2
#define PCD_DONE 3 // Just Continue #define PCD_DONE 3 // Just Continue
int ParamSizeByType[6] = {0, // PAT_VOID (Size will be equal to 1) int ParamSizeByType[7] = {0, // PAT_VOID (Size will be equal to 1)
1, // PAT_INT 1, // PAT_INT
2, // PAT_LONG 2, // PAT_LONG
1, // PAT_STRING 1, // PAT_STRING
1, // PAT_BOOLEAN 1, // PAT_WSTRING
1, // PAT_GUID
0}; // PAT_CALLBACK (Size will be equal to 1) 0}; // PAT_CALLBACK (Size will be equal to 1)
int z1, z2; // I've made them static for easier use at callback procs int z1, z2; // I've made them static for easier use at callback procs
@ -36,7 +37,6 @@ HINSTANCE g_hInstance;
char retexpr[3] = {0xC2, 0x00, 0x00}; char retexpr[3] = {0xC2, 0x00, 0x00};
HANDLE retaddr; HANDLE retaddr;
char *GetResultStr(SystemProc *proc) char *GetResultStr(SystemProc *proc)
{ {
char *buf = AllocString(); char *buf = AllocString();
@ -180,6 +180,7 @@ PLUGINFUNCTION(Call)
proc = CallBack(proc); proc = CallBack(proc);
break; break;
case PT_PROC: case PT_PROC:
case PT_VTABLEPROC:
proc = CallProc(proc); break; proc = CallProc(proc); break;
case PT_STRUCT: case PT_STRUCT:
CallStruct(proc); break; CallStruct(proc); break;
@ -253,7 +254,8 @@ PLUGINFUNCTIONSHORT(Int64Op)
case '%': case '%':
// It's unclear, but in this case compiler will use DivMod rountine // It's unclear, but in this case compiler will use DivMod rountine
// instead of two separate Div and Mod rountines. // instead of two separate Div and Mod rountines.
i3 = i1 / i2; i4 = i1 % i2; if (i2 == 0) { i3 = 0; i4 = i1; }
else {i3 = i1 / i2; i4 = i1 % i2; }
if (*op == '/') i1 = i3; else i1 = i4; if (*op == '/') i1 = i3; else i1 = i4;
break; break;
case '|': if (op[1] == '|') i1 = i1 || i2; else i1 |= i2; break; case '|': if (op[1] == '|') i1 = i1 || i2; else i1 |= i2; break;
@ -306,7 +308,12 @@ SystemProc *PrepareProc(BOOL NeedForCall)
{ {
case 0x0: SectionType = -1; break; case 0x0: SectionType = -1; break;
case '#': SectionType = PST_PROC; ProcType = PT_NOTHING; break; case '#': SectionType = PST_PROC; ProcType = PT_NOTHING; break;
case '(': SectionType = PST_PARAMS; ParamIndex = 1; temp3 = temp = 0; break; case '(':
SectionType = PST_PARAMS;
// fake-real parameter: for COM interfaces first param is Interface Pointer
ParamIndex = ((ProcType == PT_VTABLEPROC)?(2):(1));
temp3 = temp = 0;
break;
case ')': SectionType = PST_RETURN; temp3 = temp = 0; break; case ')': SectionType = PST_RETURN; temp3 = temp = 0; break;
case '?': SectionType = PST_OPTIONS; temp = 1; break; case '?': SectionType = PST_OPTIONS; temp = 1; break;
} }
@ -364,6 +371,7 @@ SystemProc *PrepareProc(BOOL NeedForCall)
} }
break; break;
case PT_PROC: case PT_PROC:
case PT_VTABLEPROC:
lstrcpy(proc->ProcName, cbuf); lstrcpy(proc->ProcName, cbuf);
lstrcpy(proc->DllName, sbuf); lstrcpy(proc->DllName, sbuf);
break; break;
@ -389,8 +397,16 @@ SystemProc *PrepareProc(BOOL NeedForCall)
switch (*ib) switch (*ib)
{ {
case ':': case ':':
case '-':
// Is it '::' // Is it '::'
if (*(ib+1) != ':') break; if ((*(ib) == '-') && (*(ib+1) == '>'))
{
ProcType = PT_VTABLEPROC;
} else
{
if ((*(ib+1) != ':') || (*(ib) == '-')) break;
ProcType = PT_PROC;
}
ib++; // Skip next ':' ib++; // Skip next ':'
if (cb > cbuf) if (cb > cbuf)
@ -400,7 +416,6 @@ SystemProc *PrepareProc(BOOL NeedForCall)
} else *sbuf = 0; // No dll - system proc } else *sbuf = 0; // No dll - system proc
// Ok // Ok
ProcType = PT_PROC;
ChangesDone = PCD_DONE; ChangesDone = PCD_DONE;
break; break;
case '*': case '*':
@ -442,8 +457,10 @@ SystemProc *PrepareProc(BOOL NeedForCall)
case 'L': temp2 = PAT_LONG; break; case 'L': temp2 = PAT_LONG; break;
case 't': case 't':
case 'T': temp2 = PAT_STRING; break; case 'T': temp2 = PAT_STRING; break;
case 'b': case 'g':
case 'B': temp2 = PAT_BOOLEAN; break; case 'G': temp2 = PAT_GUID; break;
case 'w':
case 'W': temp2 = PAT_WSTRING; break;
case 'k': case 'k':
case 'K': temp2 = PAT_CALLBACK; break; case 'K': temp2 = PAT_CALLBACK; break;
@ -589,6 +606,32 @@ SystemProc *PrepareProc(BOOL NeedForCall)
switch (proc->ProcType) switch (proc->ProcType)
{ {
case PT_NOTHING: break; case PT_NOTHING: break;
case PT_VTABLEPROC:
{
// Use direct system proc address
int addr;
if ((proc->Dll = addr = (HANDLE) myatoi(proc->DllName)) == 0)
{
proc->ProcResult = PR_ERROR;
break;
}
// fake-real parameter: for COM interfaces first param is Interface Pointer
proc->Params[1].Output = IOT_NONE;
proc->Params[1].Input = AllocStr(proc->DllName);
proc->Params[1].Size = 1;
proc->Params[1].Type = PAT_INT;
proc->Params[1].Option = 0;
// addr - pointer to interface vtable
addr = *((int *)addr);
// now addr contains the pointer to first item at VTABLE
// add the index of proc
addr = addr + (myatoi(proc->ProcName)*4);
proc->Proc = *((HANDLE*)addr);
}
break;
case PT_PROC: case PT_PROC:
if (*proc->DllName == 0) if (*proc->DllName == 0)
{ {
@ -607,7 +650,12 @@ SystemProc *PrepareProc(BOOL NeedForCall)
// Get proc address // Get proc address
if ((proc->Proc = GetProcAddress(proc->Dll, proc->ProcName)) == NULL) if ((proc->Proc = GetProcAddress(proc->Dll, proc->ProcName)) == NULL)
proc->ProcResult = PR_ERROR; {
// automatic A discover
lstrcat(proc->ProcName, "A");
if ((proc->Proc = GetProcAddress(proc->Dll, proc->ProcName)) == NULL)
proc->ProcResult = PR_ERROR;
}
} }
break; break;
case PT_STRUCT: case PT_STRUCT:
@ -634,6 +682,7 @@ void ParamsIn(SystemProc *proc)
{ {
int i, *place; int i, *place;
char *realbuf; char *realbuf;
LPWSTR wstr;
i = (proc->ParamCount > 0)?(1):(0); i = (proc->ParamCount > 0)?(1):(0);
while (TRUE) while (TRUE)
@ -654,7 +703,10 @@ void ParamsIn(SystemProc *proc)
// Retreive pointer to place // Retreive pointer to place
if (proc->Params[i].Option == -1) place = (int*) proc->Params[i].Value; if (proc->Params[i].Option == -1) place = (int*) proc->Params[i].Value;
else place = (int*) &(proc->Params[i].Value); else place = (int*) &(proc->Params[i].Value);
// by default no blocks are allocated
proc->Params[i].allocatedBlock = NULL;
// Step 2: place it // Step 2: place it
switch (proc->Params[i].Type) switch (proc->Params[i].Type)
{ {
@ -671,10 +723,19 @@ void ParamsIn(SystemProc *proc)
/* if (proc->Params[i].Input == IOT_NONE) /* if (proc->Params[i].Input == IOT_NONE)
*((int*) place) = (int) NULL; *((int*) place) = (int) NULL;
else*/ else*/
*((int*) place) = (int) AllocStr(realbuf); *((int*) place) = (int) (proc->Params[i].allocatedBlock = AllocStr(realbuf));
break; break;
case PAT_BOOLEAN: case PAT_WSTRING:
*((int*) place) = lstrcmpi(realbuf, "true"); case PAT_GUID:
wstr = (LPWSTR) (proc->Params[i].allocatedBlock = GlobalAlloc(GPTR, g_stringsize*2));
MultiByteToWideChar(CP_ACP, 0, realbuf, g_stringsize, wstr, g_stringsize);
if (proc->Params[i].Type == PAT_GUID)
{
*((HGLOBAL*)place) = (proc->Params[i].allocatedBlock = GlobalAlloc(GPTR, 16));
CLSIDFromString(wstr, *((LPCLSID*)place));
GlobalFree((HGLOBAL) wstr);
} else
*((LPWSTR*)place) = wstr;
break; break;
case PAT_CALLBACK: case PAT_CALLBACK:
// Generate new or use old callback // Generate new or use old callback
@ -718,6 +779,7 @@ void ParamsOut(SystemProc *proc)
{ {
int i, *place; int i, *place;
char *realbuf; char *realbuf;
LPWSTR wstr;
i = proc->ParamCount; i = proc->ParamCount;
do do
@ -745,17 +807,29 @@ void ParamsOut(SystemProc *proc)
int num = lstrlen(*((char**) place)); int num = lstrlen(*((char**) place));
if (num >= g_stringsize) num = g_stringsize-1; if (num >= g_stringsize) num = g_stringsize-1;
lstrcpyn(realbuf,*((char**) place), num+1); lstrcpyn(realbuf,*((char**) place), num+1);
realbuf[num] = 0; realbuf[num] = 0;
} }
break; break;
case PAT_BOOLEAN: case PAT_GUID:
lstrcpy(realbuf,(*((int*) place))?("true"):("false")); wstr = (LPWSTR) GlobalAlloc(GPTR, g_stringsize*2);
StringFromGUID2(*((REFGUID*)place), wstr, g_stringsize*2);
WideCharToMultiByte(CP_ACP, 0, wstr, g_stringsize, realbuf, g_stringsize, NULL, NULL);
GlobalFree((HGLOBAL)wstr);
break;
case PAT_WSTRING:
wstr = *((LPWSTR*)place);
WideCharToMultiByte(CP_ACP, 0, wstr, g_stringsize, realbuf, g_stringsize, NULL, NULL);
break; break;
case PAT_CALLBACK: case PAT_CALLBACK:
wsprintf(realbuf, "%d", proc->Params[i].Value); wsprintf(realbuf, "%d", proc->Params[i].Value);
break; break;
} }
// memory cleanup
if ((proc->Params[i].allocatedBlock != NULL) && ((proc->ProcType != PT_STRUCT)
|| (proc->Params[i].Option > 0)))
GlobalFree(proc->Params[i].allocatedBlock);
// Step 2: place it // Step 2: place it
if (proc->Params[i].Output == IOT_NONE); if (proc->Params[i].Output == IOT_NONE);
else if (proc->Params[i].Output == IOT_STACK) pushstring(realbuf); else if (proc->Params[i].Output == IOT_STACK) pushstring(realbuf);
@ -1160,7 +1234,11 @@ void CallStruct(SystemProc *proc)
// pointer // pointer
ptr = (char*) &(proc->Params[i].Value); ptr = (char*) &(proc->Params[i].Value);
break; break;
case PAT_STRING: ptr = (char*) proc->Params[i].Value; break;
case PAT_STRING:
case PAT_GUID:
case PAT_WSTRING:
ptr = (char*) proc->Params[i].Value; break;
} }
} }

View file

@ -18,6 +18,7 @@
#define PT_NOTHING 0 #define PT_NOTHING 0
#define PT_PROC 1 #define PT_PROC 1
#define PT_STRUCT 2 #define PT_STRUCT 2
#define PT_VTABLEPROC 3
// Proc results: // Proc results:
#define PR_OK 0 #define PR_OK 0
@ -29,8 +30,9 @@
#define PAT_INT 1 #define PAT_INT 1
#define PAT_LONG 2 #define PAT_LONG 2
#define PAT_STRING 3 #define PAT_STRING 3
#define PAT_BOOLEAN 4 #define PAT_WSTRING 4
#define PAT_CALLBACK 5 #define PAT_GUID 5
#define PAT_CALLBACK 6
// Input/Output Source/Destination // Input/Output Source/Destination
#define IOT_NONE 0 #define IOT_NONE 0
@ -58,6 +60,7 @@ typedef struct
int Size; // Value real size (should be either 1 or 2 (the number of pushes)) int Size; // Value real size (should be either 1 or 2 (the number of pushes))
int Input; int Input;
int Output; int Output;
HGLOBAL allocatedBlock; // block allocated for passing string, wstring or guid param
} ProcParameter; } ProcParameter;
// Our single proc (Since the user will free proc with GlobalFree, // Our single proc (Since the user will free proc with GlobalFree,

View file

@ -1,12 +1,12 @@
Microsoft Visual Studio Solution File, Format Version 7.00 Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "System", "System.vcproj", "{2FB013AB-6FD4-4239-9974-C999F4DFD70C}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "System", "System.vcproj", "{2FB013AB-6FD4-4239-9974-C999F4DFD70C}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Global Global
GlobalSection(SolutionConfiguration) = preSolution GlobalSection(SolutionConfiguration) = preSolution
ConfigName.0 = Debug Debug = Debug
ConfigName.1 = Release Release = Release
EndGlobalSection
GlobalSection(ProjectDependencies) = postSolution
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution GlobalSection(ProjectConfiguration) = postSolution
{2FB013AB-6FD4-4239-9974-C999F4DFD70C}.Debug.ActiveCfg = Debug|Win32 {2FB013AB-6FD4-4239-9974-C999F4DFD70C}.Debug.ActiveCfg = Debug|Win32

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding = "windows-1251"?> <?xml version="1.0" encoding="windows-1251"?>
<VisualStudioProject <VisualStudioProject
ProjectType="Visual C++" ProjectType="Visual C++"
Version="7.00" Version="7.10"
Name="System" Name="System"
ProjectGUID="{2FB013AB-6FD4-4239-9974-C999F4DFD70C}" ProjectGUID="{2FB013AB-6FD4-4239-9974-C999F4DFD70C}"
Keyword="Win32Proj"> Keyword="Win32Proj">
@ -19,7 +19,7 @@
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
Optimization="0" Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_EXPORTS" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_EXPORTS;SYSTEM_LOG_DEBUG"
MinimalRebuild="TRUE" MinimalRebuild="TRUE"
BasicRuntimeChecks="3" BasicRuntimeChecks="3"
RuntimeLibrary="5" RuntimeLibrary="5"
@ -33,7 +33,7 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib user32.lib RunTmChk.lib libcd.lib" AdditionalDependencies="kernel32.lib user32.lib RunTmChk.lib libcd.lib"
OutputFile="$(OutDir)/System.dll" OutputFile="d:\Program FIles\NSIS\Plugins\System.dll"
LinkIncremental="2" LinkIncremental="2"
IgnoreAllDefaultLibraries="TRUE" IgnoreAllDefaultLibraries="TRUE"
GenerateDebugInformation="TRUE" GenerateDebugInformation="TRUE"
@ -53,15 +53,22 @@
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool <Tool
Name="VCWebDeploymentTool"/> Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration> </Configuration>
<Configuration <Configuration
Name="Release|Win32" Name="Release|Win32"
OutputDirectory="Release" OutputDirectory="Release"
IntermediateDirectory="Release" IntermediateDirectory="Release"
ConfigurationType="2" ConfigurationType="2"
CharacterSet="2"> CharacterSet="2"
WholeProgramOptimization="FALSE">
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
Optimization="1" Optimization="1"
@ -71,20 +78,23 @@
OmitFramePointers="TRUE" OmitFramePointers="TRUE"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTEM_EXPORTS" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTEM_EXPORTS"
StringPooling="TRUE" StringPooling="TRUE"
ExceptionHandling="FALSE"
RuntimeLibrary="4" RuntimeLibrary="4"
StructMemberAlignment="0"
BufferSecurityCheck="FALSE" BufferSecurityCheck="FALSE"
EnableFunctionLevelLinking="TRUE" EnableFunctionLevelLinking="TRUE"
UsePrecompiledHeader="3" UsePrecompiledHeader="3"
AssemblerOutput="2" AssemblerOutput="2"
WarningLevel="3" WarningLevel="3"
Detect64BitPortabilityProblems="TRUE" Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/> DebugInformationFormat="3"
CompileAs="1"/>
<Tool <Tool
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"/>
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib user32.lib vc7ldvrm.obj vc7lmul.obj vc7lshl.obj vc7lshr.obj chkstk.obj" AdditionalDependencies="kernel32.lib user32.lib vc7ldvrm.obj vc7lmul.obj vc7lshl.obj vc7lshr.obj chkstk.obj"
OutputFile="$(OutDir)/System.dll" OutputFile="d:\Program FIles\NSIS\Plugins\System.dll"
LinkIncremental="1" LinkIncremental="1"
IgnoreAllDefaultLibraries="TRUE" IgnoreAllDefaultLibraries="TRUE"
GenerateDebugInformation="FALSE" GenerateDebugInformation="FALSE"
@ -108,10 +118,18 @@
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool <Tool
Name="VCWebDeploymentTool"/> Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration> </Configuration>
</Configurations> </Configurations>
<References>
</References>
<Files> <Files>
<Filter <Filter
Name="Source Files" Name="Source Files"
@ -130,9 +148,6 @@
<File <File
RelativePath="Plugin.c"> RelativePath="Plugin.c">
</File> </File>
<File
RelativePath="System.c">
</File>
<File <File
RelativePath="stdafx.c"> RelativePath="stdafx.c">
<FileConfiguration <FileConfiguration
@ -148,6 +163,15 @@
UsePrecompiledHeader="1"/> UsePrecompiledHeader="1"/>
</FileConfiguration> </FileConfiguration>
</File> </File>
<File
RelativePath="System.c">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ExpandAttributedSource="TRUE"/>
</FileConfiguration>
</File>
</Filter> </Filter>
<Filter <Filter
Name="Header Files" Name="Header Files"
@ -159,10 +183,10 @@
RelativePath="Plugin.h"> RelativePath="Plugin.h">
</File> </File>
<File <File
RelativePath="System.h"> RelativePath="stdafx.h">
</File> </File>
<File <File
RelativePath="stdafx.h"> RelativePath="System.h">
</File> </File>
</Filter> </Filter>
<Filter <Filter

View file

@ -93,6 +93,10 @@
; HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop); ; HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);
!define sysBitBlt "gdi32::BitBlt(i, i, i, i, i, i, i, i, i) i" !define sysBitBlt "gdi32::BitBlt(i, i, i, i, i, i, i, i, i) i"
; proposed by abgandar
; int AddFontResource(LPCTSTR lpszFilename);
!define sysAddFontResource "gdi32::AddFontResourceA(t) i"
; HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint); ; HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint);
!define sysBeginPaint "user32::BeginPaint(i, i) i" !define sysBeginPaint "user32::BeginPaint(i, i) i"

View file

@ -9,7 +9,7 @@ to the people living there, they'll always help you.
By the way, any help in writing complete and easy-to-go System plugin By the way, any help in writing complete and easy-to-go System plugin
documentation will be appreciated. documentation will be appreciated.
Note: it will be best to turn plugin onload off in case of using System Note: it will be best to turn plugin unload off in case of using System
plugin (SetPluginUnload alwaysoff). plugin (SetPluginUnload alwaysoff).
============== Main functions ============== ============== Main functions ==============
@ -78,6 +78,9 @@ Proc:
::addr -> Handle to system proc (memory address) ::addr -> Handle to system proc (memory address)
*addr -> Structure *addr -> Structure
* -> New structure * -> New structure
IPtr->MemberIdx -> Call member with member index from interface given
by interface pointer IPtr (IPtr will be passed to
proc automatically, use like C++ call).
nothing -> Dup proc, usually callback or for future defenition nothing -> Dup proc, usually callback or for future defenition
proc -> Ready proc specification for use or redefinition proc -> Ready proc specification for use or redefinition
@ -109,8 +112,8 @@ Params & Return - Type:
i - int (includes char, byte, short, handles, pointers and so on) i - int (includes char, byte, short, handles, pointers and so on)
l - long & large integer (know as int64) l - long & large integer (know as int64)
t - text, string (LPCSTR, pointer to first character) t - text, string (LPCSTR, pointer to first character)
b - boolean (needs/returns 'true':'false') - by the fact this type is w - WCHAR text, or unicode string.
senseless -> usual integer can be used ('0':'1') g - GUID
k - callback. See Callback section. k - callback. See Callback section.
* - pointer specifier -> the proc needs the pointer to type, affects * - pointer specifier -> the proc needs the pointer to type, affects
@ -124,7 +127,10 @@ For structures:
&i - smaller types: &i4, &i2 (short), &i1 (byte) &i - smaller types: &i4, &i2 (short), &i1 (byte)
&l - cumbersome, but &lN means the structure size (N bytes value), &l - cumbersome, but &lN means the structure size (N bytes value),
calculated automaticaly, outputed always as int (N could be 0). calculated automaticaly, outputed always as int (N could be 0).
&t - structure contains plain text, &tN - lenght == N bytes. &t - structure contains plain text, &tN, where lenght == N bytes.
&w - structure contains plain unicode text, &tN,
where lenght == (N)/2 chars = N bytes.
&g - &gN copy N bytes of plain GUID. in fact guid size is 16 :)
---------------------------------- ----------------------------------
Params & Return - Source / Destination: Params & Return - Source / Destination:

View file

@ -2,35 +2,27 @@
// Microsoft Developer Studio generated include file. // Microsoft Developer Studio generated include file.
// Used by resource.rc // Used by resource.rc
// //
#ifndef DS_SHELLFONT
#define DS_SHELLFONT (DS_SETFONT | DS_FIXEDSYS)
#endif
#define IDC_BACK 3 #define IDC_BACK 3
#define IDD_DIALOG1 101
#define IDI_ICON1 102
#define IDD_DIALOG2 102
#define IDD_LICENSE 102 #define IDD_LICENSE 102
#define IDD_LICENSE_FSRB 108
#define IDD_LICENSE_FSCB 109
#define IDI_ICON2 103 #define IDI_ICON2 103
#define IDD_DIR 103 #define IDD_DIR 103
#define IDD_SELCOM 104 #define IDD_SELCOM 104
#define IDD_INST 105 #define IDD_INST 105
#define IDD_INSTFILES 106 #define IDD_INSTFILES 106
#define IDD_UNINST 107 #define IDD_UNINST 107
#define IDB_BITMAP1 109
#define IDB_BITMAP2 110
#define IDI_ICON3 110
#define IDD_VERIFY 111 #define IDD_VERIFY 111
#define IDB_BITMAP3 111 #define IDB_BITMAP1 110
#define IDC_EDIT1 1000 #define IDC_EDIT1 1000
#define IDC_BROWSE 1001 #define IDC_BROWSE 1001
#define IDC_COPYRIGHT 1003
#define IDC_PROGRESS 1004 #define IDC_PROGRESS 1004
#define IDC_INTROTEXT 1006 #define IDC_INTROTEXT 1006
#define IDC_WMA 1007
#define IDC_CHECK1 1008 #define IDC_CHECK1 1008
#define IDC_MJF 1008
#define IDC_VERSION 1009
#define IDC_EDIT2 1010
#define IDC_DIRCAPTION 1011
#define IDC_STATUSTEXT 1014
#define IDC_LICTEXT 1015
#define IDC_LIST1 1016 #define IDC_LIST1 1016
#define IDC_COMBO1 1017 #define IDC_COMBO1 1017
#define IDC_CHILDRECT 1018 #define IDC_CHILDRECT 1018
@ -40,9 +32,6 @@
#define IDC_TEXT2 1022 #define IDC_TEXT2 1022
#define IDC_SPACEREQUIRED 1023 #define IDC_SPACEREQUIRED 1023
#define IDC_SPACEAVAILABLE 1024 #define IDC_SPACEAVAILABLE 1024
#define IDC_INSTVER 1024
#define IDC_UNINSTTEXT 1025
#define IDC_PROGRESSTEXT 1026
#define IDC_SHOWDETAILS 1027 #define IDC_SHOWDETAILS 1027
#define IDC_VERSTR 1028 #define IDC_VERSTR 1028
#define IDC_UNINSTFROM 1029 #define IDC_UNINSTFROM 1029
@ -50,6 +39,8 @@
#define IDC_ULICON 1031 #define IDC_ULICON 1031
#define IDC_TREE1 1032 #define IDC_TREE1 1032
#define IDC_BRANDIMAGE 1033 #define IDC_BRANDIMAGE 1033
#define IDC_LICENSEAGREE 1034
#define IDC_LICENSEDISAGREE 1035
// Next default values for new objects // Next default values for new objects
// //
@ -57,7 +48,9 @@
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 112 #define _APS_NEXT_RESOURCE_VALUE 112
#define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1034 #define _APS_NEXT_CONTROL_VALUE 1036
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101
#endif #endif
#endif #endif

View file

@ -25,92 +25,156 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// Dialog // Dialog
// //
IDD_LICENSE DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_LICENSE DIALOGEX 0, 0, 266, 130
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
ICON IDI_ICON2,IDC_ULICON,0,0,20,20 ICON IDI_ICON2,IDC_ULICON,0,0,22,20
LTEXT "",IDC_INTROTEXT,25,0,241,23 LTEXT "",IDC_INTROTEXT,25,0,241,23
CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL | CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL |
0x804,0,24,266,105 0x804,0,24,266,105
END END
IDD_DIR DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_LICENSE_FSRB DIALOG DISCARDABLE 0, 0, 266, 130
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CAPTION
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg"
BEGIN
ICON IDI_ICON2,1031,0,0,22,20
LTEXT "",IDC_INTROTEXT,25,0,241,23
CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL |
0x804,0,24,266,85
CONTROL "",IDC_LICENSEDISAGREE,"Button",BS_AUTORADIOBUTTON |
WS_TABSTOP,0,120,266,9
CONTROL "",IDC_LICENSEAGREE,"Button",BS_AUTORADIOBUTTON |
WS_TABSTOP,0,110,266,9
END
IDD_LICENSE_FSCB DIALOG DISCARDABLE 0, 0, 266, 130
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CAPTION
FONT 8, "MS Shell Dlg"
BEGIN
ICON IDI_ICON2,1031,0,0,22,20
LTEXT "",IDC_INTROTEXT,25,0,241,23
CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL |
0x804,0,24,266,95
CONTROL "",IDC_LICENSEAGREE,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,0,120,266,9
END
IDD_DIR DIALOGEX 0, 0, 266, 130
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
EDITTEXT IDC_DIR,8,49,187,12,ES_AUTOHSCROLL EDITTEXT IDC_DIR,8,49,187,12,ES_AUTOHSCROLL
PUSHBUTTON "",IDC_BROWSE,202,48,55,14 PUSHBUTTON "",IDC_BROWSE,202,48,55,14
ICON IDI_ICON2,IDC_ULICON,0,0,20,20 ICON IDI_ICON2,IDC_ULICON,0,0,22,20
CONTROL "",IDC_SELDIRTEXT,"Static",SS_LEFTNOWORDWRAP,
0,36,265,8 CONTROL "",IDC_SPACEAVAILABLE,"Static",SS_LEFTNOWORDWRAP,0,122,
CONTROL "",IDC_SPACEAVAILABLE,"Static",SS_LEFTNOWORDWRAP,0,122,265,8 265,8
CONTROL "",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | CONTROL "",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE |
WS_TABSTOP,8,65,118,10 WS_TABSTOP,8,71,118,10
CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFTNOWORDWRAP,0,111,265,8 CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFTNOWORDWRAP,0,111,
265,8
LTEXT "",IDC_INTROTEXT,25,0,241,34 LTEXT "",IDC_INTROTEXT,25,0,241,34
GROUPBOX "",IDC_SELDIRTEXT,1,38,264,30
END END
IDD_SELCOM DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_SELCOM DIALOGEX 0, 0, 266, 130
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
COMBOBOX IDC_COMBO1,114,25,152,102,CBS_DROPDOWNLIST | WS_VSCROLL | COMBOBOX IDC_COMBO1,114,25,152,102,CBS_DROPDOWNLIST | NOT
WS_TABSTOP | NOT WS_VISIBLE WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
ICON IDI_ICON2,IDC_ULICON,0,0,21,20 ICON IDI_ICON2,IDC_ULICON,0,0,22,20
LTEXT "",IDC_TEXT2,0,40,108,65 LTEXT "",IDC_TEXT2,0,40,108,65
CONTROL "",IDC_TEXT1,"Static",SS_LEFTNOWORDWRAP,0,27,108,8 CONTROL "",IDC_TEXT1,"Static",SS_LEFTNOWORDWRAP,0,27,108,8
CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFTNOWORDWRAP,0,111,111,8 LTEXT "",IDC_SPACEREQUIRED,0,111,111,18,NOT WS_GROUP
LTEXT "",IDC_INTROTEXT,25,0,241,25 LTEXT "",IDC_INTROTEXT,25,0,241,25
CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS |
TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP |
WS_BORDER | WS_TABSTOP,114,39,151,90 WS_BORDER | WS_TABSTOP,114,39,151,90
END END
IDD_INST DIALOGEX DISCARDABLE 0, 0, 280, 162 IDD_INST DIALOGEX 0, 0, 280, 162
STYLE DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_BORDER STYLE DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION |
FONT 8, "MS Shell Dlg" WS_SYSMENU
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
PUSHBUTTON "",IDC_BACK,171,142,50,14,WS_GROUP | NOT WS_VISIBLE PUSHBUTTON "",IDC_BACK,171,142,50,14,NOT WS_VISIBLE | WS_GROUP
PUSHBUTTON "",IDOK,223,142,50,14 PUSHBUTTON "",IDOK,223,142,50,14
PUSHBUTTON "",IDCANCEL,7,142,50,14 PUSHBUTTON "",IDCANCEL,7,142,50,14
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ | WS_GROUP,7,138,267,1 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ | WS_GROUP,7,138,
CONTROL "",IDC_CHILDRECT,"Static",SS_BLACKRECT | NOT WS_VISIBLE | WS_GROUP, 267,1
7,6,266,130 CONTROL "",IDC_CHILDRECT,"Static",SS_BLACKRECT | NOT WS_VISIBLE |
CTEXT "",IDC_VERSTR,59,145,108,8,WS_DISABLED | WS_GROUP WS_GROUP,7,6,266,130
CTEXT "",IDC_VERSTR,59,145,108,8,WS_DISABLED
END END
IDD_INSTFILES DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_INSTFILES DIALOGEX 0, 0, 266, 130
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,24,10,241,11 CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,24,10,241,
CONTROL "",IDC_INTROTEXT,"Static",SS_LEFTNOWORDWRAP, 11
24,0,241,8 CONTROL "",IDC_INTROTEXT,"Static",SS_LEFTNOWORDWRAP,24,0,241,8
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL |
LVS_NOCOLUMNHEADER | NOT WS_VISIBLE | WS_BORDER | LVS_NOCOLUMNHEADER | NOT WS_VISIBLE | WS_BORDER |
WS_TABSTOP,0,25,265,104 WS_TABSTOP,0,25,265,104
ICON IDI_ICON2,IDC_ULICON,0,0,20,20 ICON IDI_ICON2,IDC_ULICON,0,0,22,20
PUSHBUTTON "",IDC_SHOWDETAILS,0,28,60,14,NOT WS_TABSTOP PUSHBUTTON "",IDC_SHOWDETAILS,0,28,60,14,NOT WS_TABSTOP
END END
IDD_UNINST DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_UNINST DIALOGEX 0, 0, 266, 130
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
ICON IDI_ICON2,IDC_ULICON,0,1,20,20 ICON IDI_ICON2,IDC_ULICON,0,1,22,20
LTEXT "",IDC_UNINSTFROM,0,45,55,8 LTEXT "",IDC_UNINSTFROM,0,45,55,8
EDITTEXT IDC_EDIT1,56,43,209,12,ES_AUTOHSCROLL | ES_READONLY EDITTEXT IDC_EDIT1,56,43,209,12,ES_AUTOHSCROLL | ES_READONLY
LTEXT "",IDC_INTROTEXT,25,0,241,34 LTEXT "",IDC_INTROTEXT,25,0,241,34
END END
IDD_VERIFY DIALOGEX DISCARDABLE 0, 0, 162, 22 IDD_VERIFY DIALOGEX 0, 0, 162, 22
STYLE DS_MODALFRAME | DS_SHELLFONT | DS_CENTER | WS_POPUP | WS_VISIBLE STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
CTEXT "",IDC_STR,7,7,148,8 CTEXT "",IDC_STR,7,7,148,8
END END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
"IDD_INST$(NSIS_CONFIG_VISIBLE_SUPPORT)", DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 273
TOPMARGIN, 6
BOTTOMMARGIN, 156
END
"IDD_INSTFILES$(NSIS_CONFIG_VISIBLE_SUPPORT)", DIALOG
BEGIN
RIGHTMARGIN, 246
BOTTOMMARGIN, 125
END
"IDD_VERIFY$(_NSIS_CONFIG_VERIFYDIALOG)", DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 155
TOPMARGIN, 7
BOTTOMMARGIN, 15
END
END
#endif // APSTUDIO_INVOKED
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
@ -125,6 +189,7 @@ END
2 TEXTINCLUDE DISCARDABLE 2 TEXTINCLUDE DISCARDABLE
BEGIN BEGIN
"#include ""afxres.h""\r\n" "#include ""afxres.h""\r\n"
"#include ""config.h""\0"
END END
3 TEXTINCLUDE DISCARDABLE 3 TEXTINCLUDE DISCARDABLE
@ -134,4 +199,7 @@ END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED
#endif #endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////

Binary file not shown.

Binary file not shown.

View file

@ -32,13 +32,13 @@ Specifies whether or not to use a gradient background window. If 'off', the inst
\S2{abrandingtext} BrandingText \S2{abrandingtext} BrandingText
\c [/LANG=lang_id] /TRIM(LEFT|RIGHT|CENTER) text \c /TRIM(LEFT|RIGHT|CENTER) text
Sets the text that is shown (by default it is 'Nullsoft Install System vX.XX') in the bottom of the install window. Setting this to an empty string ("") uses the default; to set the string to blank, use " " (a space). If it doesn't matter to you, leave it the default so that everybody can know why the installer didn't suck. heh. Use /TRIMLEFT, /TRIMRIGHT or /TRIMCENTER to trim down the size of the control to the size of the string. Sets the text that is shown (by default it is 'Nullsoft Install System vX.XX') in the bottom of the install window. Setting this to an empty string ("") uses the default; to set the string to blank, use " " (a space). If it doesn't matter to you, leave it the default so that everybody can know why the installer didn't suck. heh. Use /TRIMLEFT, /TRIMRIGHT or /TRIMCENTER to trim down the size of the control to the size of the string.
\S2{acaption} Caption \S2{acaption} Caption
\c [/LANG=lang_id] caption \c caption
Sets what the titlebars of the installer will display. By default, it is 'Name Setup', where Name is specified with the \R{aname}{Name command}. You can, however, override it with 'MyApp Installer' or whatever. If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string) Sets what the titlebars of the installer will display. By default, it is 'Name Setup', where Name is specified with the \R{aname}{Name command}. You can, however, override it with 'MyApp Installer' or whatever. If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string)
@ -72,13 +72,13 @@ This bitmap should have a size of 96x16 pixels, no more than 8bpp (256 colors) a
\S2{acompletedtext} CompletedText \S2{acompletedtext} CompletedText
\c [/LANG=lang_id] Completed text \c Completed text
Replaces the default text ("Completed") that is printed at the end of the install if parameter is specified. Otherwise, the default is used. Replaces the default text ("Completed") that is printed at the end of the install if parameter is specified. Otherwise, the default is used.
\S2{acomponenttext} ComponentText \S2{acomponenttext} ComponentText
\c [[/LANG=lang_id] text [subtext] [subtext2]] \c [text [subtext] [subtext2]]
Specifies a string that is above the component list. This can be something that notifies the user what it is they are actually installing. Note that if no parameter is specified, or if the ComponentText command is omitted, then the component page will not be visible, and all of the sections will be installed. Note: if text is specified and non-empty and you leave subtext or subtext2 empty, the defaults will be used (to set one to blank, use a string like " "). empty strings mean default on subtext and subtext2. Likewise, if you wish to enable the component page, but don't want any text on the top line, set text to " ". Specifies a string that is above the component list. This can be something that notifies the user what it is they are actually installing. Note that if no parameter is specified, or if the ComponentText command is omitted, then the component page will not be visible, and all of the sections will be installed. Note: if text is specified and non-empty and you leave subtext or subtext2 empty, the defaults will be used (to set one to blank, use a string like " "). empty strings mean default on subtext and subtext2. Likewise, if you wish to enable the component page, but don't want any text on the top line, set text to " ".
@ -90,7 +90,7 @@ Specifies whether or not the installer will perform a CRC on itself before allow
\S2{adetailsbuttontext} DetailsButtonText \S2{adetailsbuttontext} DetailsButtonText
\c [/LANG=lang_id] show details text \c show details text
Replaces the default details button text of "Show details", if parameter is specified (otherwise the default is used). Replaces the default details button text of "Show details", if parameter is specified (otherwise the default is used).
@ -102,13 +102,19 @@ Specifies whether or not the user will see the directory selection page. Note th
\S2{adirtext} DirText \S2{adirtext} DirText
\c [[/LANG=lang_id] text [subtext] [browse text]] \c [text] [subtext] [browse_button_text] [browse_dlg_text]
Specifies a string that is above the directory selection area. If this command is not specified, or no parameter is specified, then the directory page is never visible to the user (even if DirShow show is specified). If subtext is specified and not empty, it overrides the default text above the path entry box ("Select the directory to install MyApp in:"). If browse button text is specified but not empty, it overrides the default browse button text ("Browse..."). Specifies a string that is above the directory selection area. If this command is not specified, or no parameter is specified, then the directory page is never visible to the user (even if DirShow show is specified). If subtext is specified and not empty, it overrides the default text above the path entry box ("Select the directory to install MyApp in:"). If browse button text is specified but not empty, it overrides the default browse button text ("Browse...").
\S2{adirvar} DirVar
\c user_var(dir input/output)
Specifies which variable is to be used to contain the directory selected. This variable should contain the default value too. This allows to easily create two different directory pages that will not require you to move values in and out of $INSTDIR. The default variable is $INSTDIR. This can only be used in \R{pageex}{PageEx} and for directory and uninstConfirm pages.
\S2{a} FileErrorText \S2{a} FileErrorText
\c [/LANG=lang_id] file error text \c file error text
Replaces the default text that comes up when a file cannot be written to. This string can contain a reference to $0, which is the filename ($0 is temporarily changed to this value). Example: "Can not write to file $\\r$\\n$0$\\r$\\ngood luck, bitch.". Replaces the default text that comes up when a file cannot be written to. This string can contain a reference to $0, which is the filename ($0 is temporarily changed to this value). Example: "Can not write to file $\\r$\\n$0$\\r$\\ngood luck, bitch.".
@ -120,7 +126,7 @@ Sets the icon of the installer. Every icon in the icon file will be included in
\S2{ainstallbuttontext} InstallButtonText \S2{ainstallbuttontext} InstallButtonText
\c [/LANG=lang_id] install button text \c install button text
If parameter is specified, overrides the default install button text (of "Install") with the specified text. If parameter is specified, overrides the default install button text (of "Install") with the specified text.
@ -150,7 +156,7 @@ Valid values for flag are "smooth" (smooth the progress bar) or "colored" (color
\S2{ainsttype} InstType \S2{ainsttype} InstType
\c install_type_name | /NOCUSTOM | ([/LANG=lang_id] /CUSTOMSTRING=str) | /COMPONENTSONLYONCUSTOM \c install_type_name | /NOCUSTOM | /CUSTOMSTRING=str | /COMPONENTSONLYONCUSTOM
Adds an install type to the install type list, or disables the custom install type. There can be as many as 32 types, each one specifying the name of the install. Instead of an "hard-coded" name you can use User Variables which are processed at Runtime. This allows you to change InstType name dynamically. Another way of changing the InstType name during runtime is the \R{sinsttypesettext}{InstTypeSetText} command. The difference is that with InstTypeSetText you are saving your precious user variables. The first type is the default (generally 'Typical'). Each type is numbered, starting at 1. See SectionIn for information on how those numbers are used. If the /NOCUSTOM switch is specified, then the "custom" install type is disabled, and the user has to choose one of the pre-defined install types. Alternatively, if the /CUSTOMSTRING switch is specified, the parameter will override the "Custom" install type text. Alternatively, if the /COMPONENTSONLYONCUSTOM flag is specified, the component list will only be show Adds an install type to the install type list, or disables the custom install type. There can be as many as 32 types, each one specifying the name of the install. Instead of an "hard-coded" name you can use User Variables which are processed at Runtime. This allows you to change InstType name dynamically. Another way of changing the InstType name during runtime is the \R{sinsttypesettext}{InstTypeSetText} command. The difference is that with InstTypeSetText you are saving your precious user variables. The first type is the default (generally 'Typical'). Each type is numbered, starting at 1. See SectionIn for information on how those numbers are used. If the /NOCUSTOM switch is specified, then the "custom" install type is disabled, and the user has to choose one of the pre-defined install types. Alternatively, if the /CUSTOMSTRING switch is specified, the parameter will override the "Custom" install type text. Alternatively, if the /COMPONENTSONLYONCUSTOM flag is specified, the component list will only be show
n if the "Custom" install type is selected. n if the "Custom" install type is selected.
@ -163,33 +169,33 @@ Sets the background color of the license data. Color is specified using the form
\S2{alicensedata} LicenseData \S2{alicensedata} LicenseData
\c [/LANG=lang_id] licdata.(txt|rtf) \c licdata.(txt|rtf)
Specifies a text file or a RTF file to use for the license that the user can read. Omit this to not have a license displayed. Note that the file must be in the evil DOS text format (\\r\\n, yeah!) Specifies a text file or a RTF file to use for the license that the user can read. Omit this to not have a license displayed. Note that the file must be in the evil DOS text format (\\r\\n, yeah!). To define a multilingual license data use \R{licenselangstring}{LicenseLangString}.
If you make your license file a RTF file it is recommended you edit it with WordPad and not MS Word. Using WordPad will result in a much smaller file. If you make your license file a RTF file it is recommended you edit it with WordPad and not MS Word. Using WordPad will result in a much smaller file.
\S2{alicenseforceselection} LicenseForceSelection \S2{alicenseforceselection} LicenseForceSelection
\c [/LANG=lang_id] (checkbox [accept_text] | radiobuttons [accept_text] [decline_text] | \\<b\\>off\\</b\\>) \c (checkbox [accept_text] | radiobuttons [accept_text] [decline_text] | \\<b\\>off\\</b\\>)
Specifies if the displayed license must be accept explicit or not. This can be done either by a checkbox or by radiobuttons. By default the "next button" is disabled and will only be enabled if the checkbox is enabled or the right radio button is selected. If off is specified the "next button" is enabled by default. Specifies if the displayed license must be accept explicit or not. This can be done either by a checkbox or by radiobuttons. By default the "next button" is disabled and will only be enabled if the checkbox is enabled or the right radio button is selected. If off is specified the "next button" is enabled by default.
\S2{alicensetext} LicenseText \S2{alicensetext} LicenseText
\c [[/LANG=lang_id] text [button_text]] \c [text [button_text]]
Specifies a string that is above the license text. Omit this to not have a license displayed. If button_text is specified, it will override the default button text of "I Agree". Specifies a string that is above the license text. Omit this to not have a license displayed. If button_text is specified, it will override the default button text of "I Agree".
\S2{amiscbuttontext} MiscButtonText \S2{amiscbuttontext} MiscButtonText
\c [[/LANG=lang_id] back button text [next button text] [cancel button text] [close button text]] \c [back button text [next button text] [cancel button text] [close button text]]
Replaces the default text strings for the four buttons (< Back, Next >, Cancel and Close). If parameters are omitted, the defaults are used. Replaces the default text strings for the four buttons (< Back, Next >, Cancel and Close). If parameters are omitted, the defaults are used.
\S2{aname} Name \S2{aname} Name
\c [/LANG=lang_id] name \c name
Sets the name of the installer. The name is usually simply the product name such as 'MyApp' or 'CrapSoft MyApp'. Sets the name of the installer. The name is usually simply the product name such as 'MyApp' or 'CrapSoft MyApp'.
@ -231,25 +237,25 @@ Specifies whether or not the uninstaller should be silent. If it is 'silent' or
\S2{aspacetexts} SpaceTexts \S2{aspacetexts} SpaceTexts
\c [[/LANG=lang_id] req text [avail text]] \c [req text [avail text]]
If parameters are specified, overrides the space required and space available text ("Space required: " and "Space available: " by default). If 'none' is specified as the required text no space texts will be shown. If parameters are specified, overrides the space required and space available text ("Space required: " and "Space available: " by default). If 'none' is specified as the required text no space texts will be shown.
\S2{asubcaption} SubCaption \S2{asubcaption} SubCaption
\c [[/LANG=lang_id] page_number subcaption] \c [page_number subcaption]
Overrides the subcaptions for each of the installer pages (0=": License Agreement",1=": Installation Options",2=": Installation Directory", 3=": Installing Files", 4=": Completed"). If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string) Overrides the subcaptions for each of the installer pages (0=": License Agreement",1=": Installation Options",2=": Installation Directory", 3=": Installing Files", 4=": Completed"). If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string)
\S2{auninstallbuttontext} UninstallButtonText \S2{auninstallbuttontext} UninstallButtonText
\c [/LANG=lang_id] button text \c button text
Changes the text of the button that by default says "Uninstall" in the uninstaller. If no parameter is specified, the default text is used. See also \R{WriteUninstaller}{WriteUninstaller} (replaces UninstallEXEName). Changes the text of the button that by default says "Uninstall" in the uninstaller. If no parameter is specified, the default text is used. See also \R{WriteUninstaller}{WriteUninstaller} (replaces UninstallEXEName).
\S2{auninstallcaption} UninstallCaption \S2{auninstallcaption} UninstallCaption
\c [/LANG=lang_id] caption \c caption
Sets what the titlebars of the uninstaller will display. By default, it is 'Name Uninstall', where Name is specified with the Name command. You can, however, override it with 'MyApp uninstaller' or whatever. If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string) Sets what the titlebars of the uninstaller will display. By default, it is 'Name Uninstall', where Name is specified with the Name command. You can, however, override it with 'MyApp uninstaller' or whatever. If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string)
@ -261,13 +267,13 @@ Sets the icon of the uninstaller. This icon file \e{must} have the exact same st
\S2{auninstallsubcaption} UninstallSubCaption \S2{auninstallsubcaption} UninstallSubCaption
\c [/LANG=lang_id] page_number subcaption \c page_number subcaption
Overrides the subcaptions for each of the uninstaller pages (0=": Confirmation",1=": Uninstalling Files",2=": Completed"). If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string) Overrides the subcaptions for each of the uninstaller pages (0=": Confirmation",1=": Uninstalling Files",2=": Completed"). If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string)
\S2{auninstalltext} UninstallText \S2{auninstalltext} UninstallText
\c [/LANG=lang_id] text [subtext] \c text [subtext]
Specifies the text on the first page of the uninstaller. If subtext is specified and not empty, it will replace the default secondary text on that page, "Uninstall from:". Specifies the text on the first page of the uninstaller. If subtext is specified and not empty, it will replace the default secondary text on that page, "Uninstall from:".

View file

@ -17,7 +17,8 @@ Example:
\c GetDlgItem $R0 $HWNDPARENT 1028 \c GetDlgItem $R0 $HWNDPARENT 1028
\c CreateFont $R1 "Tahoma" 10 700 \c CreateFont $R1 "Tahoma" 10 700
\c SendMessage $R0 ${WM_SETFONT} $R1 0 \c SendMessage $R0 ${WM_SETFONT} $R1 0
\c SetBkColor $R0 0x00FFFFFF \c # set background color to white and text color to red
\c SetCtlColors $R0 FFFFFF FF0000
\c FunctionEnd \c FunctionEnd
\S3{oninit} .onInit \S3{oninit} .onInit

View file

@ -69,6 +69,12 @@ Checks for existence of file(s) file_to_check_for (which can be a wildcard, or a
Checks the reboot flag, and jumps to jump_if_set if the reboot flag is set, otherwise jumps to jump_if_not_set. The reboot flag can be set by Delete and Rename, or manually with SetRebootFlag. Checks the reboot flag, and jumps to jump_if_set if the reboot flag is set, otherwise jumps to jump_if_not_set. The reboot flag can be set by Delete and Rename, or manually with SetRebootFlag.
\S2{ifsilent} IfSilent
\c [jump_if_silent] [jump_if_not]
Checks the silent flag, and jumps to jump_if_silent if the installer is silent, otherwise jumps to jump_if_not. The silent flag can be set by \R{asilentinstall}{SilentInstall}, \R{asilentuninstall}{SilentUninstall}, \R{setsilent}{SetSilent} and by the user passing /S on the command line.
\S2{intcmp} IntCmp \S2{intcmp} IntCmp
\c val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more] \c val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]

View file

@ -5,6 +5,10 @@
\b User variables ($VARNAME) that can be declared with the \R{var}{Var} command \b User variables ($VARNAME) that can be declared with the \R{var}{Var} command
\b Added \R{pageex}{PageEx}, \R{pagecallbacks}{PageCallbacks} and \R{adirvar}{DirVar} - it's now a lot easier to add the same page type twice
\b Extraction progress
\b \W{../Contrib/Modern UI/Readme.html}{Modern UI 1.65}: Easier page macro system, language specific fonts, \R{alicenseforceselection}{LicenseForceSelection} support, new options for Finish page / language selection dialog, fixes, more \b \W{../Contrib/Modern UI/Readme.html}{Modern UI 1.65}: Easier page macro system, language specific fonts, \R{alicenseforceselection}{LicenseForceSelection} support, new options for Finish page / language selection dialog, fixes, more
\b Added \R{asetallowskipfiles}{AllowSkipFiles}: Set whether the user should be able to skip a file when overwriting failed \b Added \R{asetallowskipfiles}{AllowSkipFiles}: Set whether the user should be able to skip a file when overwriting failed
@ -15,7 +19,19 @@
\b \W{../Contrib/Makensisw/Readme.txt}{MakeNSISW 2.0}: UI to define symbols, toolbar, more \b \W{../Contrib/Makensisw/Readme.txt}{MakeNSISW 2.0}: UI to define symbols, toolbar, more
\b NLF language files (v5): More strings translatable (K/M/G Byte, registering, unregistering), language specific fonts \b NLF language files (v6): language specific fonts, RTL and more strings
\b Full \R{rtl}{RTL} support (set in language file)
\b Inner LangStrings can be used in the script
\b No more /LANG, only LangStrings - easier to set one string to all languages
\b LangStrings are no longer installer/uninstaller specific (no un.)
\b No more unprocessed strings, variables can be used everywhere
\b Added \R{ifsilent}{IfSilent} and \R{setsilent}{SetSilent} to allow better /S interaction
\b /o Switch for \R{ssection}{Section} provides ability to unselect the section by default \b /o Switch for \R{ssection}{Section} provides ability to unselect the section by default
@ -23,6 +39,10 @@
\b Added \R{ssectionsetsize}{SectionSetSize}, \R{ssectiongetsize}{SectionGetSize}, \R{ssetcurinsttype}{SetCurInstType}, \R{sgetcurinsttype}{GetCurInstType} \b Added \R{ssectionsetsize}{SectionSetSize}, \R{ssectiongetsize}{SectionGetSize}, \R{ssetcurinsttype}{SetCurInstType}, \R{sgetcurinsttype}{GetCurInstType}
\b New parameter for DirText to set the browse dialog text
\b Better ClearType support
\b System Plug-in: Fixed a bug with calling proc(void) and added e switch to get GetLastError return value \b System Plug-in: Fixed a bug with calling proc(void) and added e switch to get GetLastError return value
\b Components Tree: Fixed problems with sub-sections with RO sections as children, SF_EXPAND now refreshes the components tree, Added SF_PSELECTED for partially selected sub-sections \b Components Tree: Fixed problems with sub-sections with RO sections as children, SF_EXPAND now refreshes the components tree, Added SF_PSELECTED for partially selected sub-sections
@ -37,7 +57,7 @@
\b Added \R{rmdir}{RMDir /REBOOTOK}: Remove folders on reboot \b Added \R{rmdir}{RMDir /REBOOTOK}: Remove folders on reboot
\b Added \R{setbkcolor}{SetBkColor}: Background colors can be set for non-static controls, transparent background support \b Added \R{setctlcolors}{SetCtlColors}: Sets background and text color for every dialog control
\b \R{ainsttype}{InstType} /NOCUSTOM and /COMPONENTSONLYONCUSTOM work together \b \R{ainsttype}{InstType} /NOCUSTOM and /COMPONENTSONLYONCUSTOM work together
@ -47,9 +67,9 @@
\b Fixed a problem regarding borders in Plug-ins BgImage and InstallOptions \b Fixed a problem regarding borders in Plug-ins BgImage and InstallOptions
\b Fixed plug-ins directory init function generation \b Minor bug fixes
\b Fixed overlapping chars in directory input \b Code clean-ups and some more comments
\\<b\\>Notes:\\</b\\> \\<b\\>Notes:\\</b\\>

View file

@ -6,19 +6,17 @@
Loads a language file for the construction of a language table. All of the language files that come with NSIS are in \W{../Contrib/Language files}{Contrib\\Language Files} Loads a language file for the construction of a language table. All of the language files that come with NSIS are in \W{../Contrib/Language files}{Contrib\\Language Files}
For ease of use LoadLanguageFile defines $\{LANG_language_file\} as the language id. Use it with /LANG, LangString, LangStringUP, and LangDLL. For ease of use LoadLanguageFile defines $\{LANG_language_file\} as the language id. Use it with \R{langstring}{LangString}, LangDLL and \R{viaddversionkey}{VIAddVersionKey}.
\S2{langstring} LangString and LangStringUP \S2{langstring} LangString
\c [un.]name language_id string \c name language_id string
Defines a multilingual string and spares the comparing of $LANGUAGE to every language you have in your installer for every string you use. This also allows you to make section names and install types multilingual. To use in the uninstaller make sure you name the string with the un. prefix before. Defines a multilingual string. This means the its value will be different (or not, it's up to you) for every language. It allows you to easily make your installer multilingual without the need to add massive swithces to the script.
LangStrings can you only be used on their own. You can't include them in other strings. "look at my $(string)! isn't it beautiful?" will be seen exactly as written, $(string) will not be expanded. If you want to use LangStrings in other strings you can first copy the LangString to a variable and then use the variable wherever you want. This is a temporary situation, it will be changed before NSIS 2 final. Each LangString has a name that identifies it and a value for each language used by the installer. To use a LangString you must know its name. LangStrings can be used in any runtime string in the script. To use a LangString all you need to add to the string is $(LangString_name_here) where you want the LangString to be inserted.
\\<b\\>Note #1:\\</b\\> Unlike defines that use curly braces - \{\}, multilingual strings use parenthesis - (). \\<b\\>Note:\\</b\\> Unlike defines that use curly braces - \{\}, multilingual strings use parenthesis - ().
\\<b\\>Note #2:\\</b\\> If you see weird characters between letters in the string when you use LangString, use LangStringUP (LangString for unprocessed string such as InstType)
For example, instead of: For example, instead of:
@ -35,53 +33,42 @@ Use:
\c LangString message ${LANG_FRENCH} "French message" \c LangString message ${LANG_FRENCH} "French message"
\c LangString message ${LANG_KOREAN} "Korean message" \c LangString message ${LANG_KOREAN} "Korean message"
\c \c
\c MessageBox MB_OK $(message) \c MessageBox MB_OK "A translated message: $(message)"
\S2{licenselangstring} LicenseLangString
\c name lang_id license_path
Does the same as \R{langstring}{LangString} only it loads the string from a text/RTF file and defines a special LangString that can be used only by \R{alicensedata}{LicenseData}.
\S0{langs} Multiple Languages \S0{langs} Multiple Languages
As of version 2 NSIS fully supports multiple languages. An installer can have more than one language. Each string in the installer can be easily translated, and so can script strings such as messages in a message box. As of version 2 NSIS fully supports multiple languages. An installer can have more than one language. Each string in the installer can be easily translated using \R{langstring}{LangStrings}.
Each installer has one or more language table which holds references to strings in the strings table. To create a language table all you need to do is use \R{loadlanguagefile}{LoadLanguageFile}, define strings used in your installer for that language such as Name and Caption, message box, install type, and other strings using \R{langstring}{LangString} or \R{langstring}{LangStringUP} and you have built your installer a language table. Each installer has one or more language tables which hold references to strings in the strings table. To create a language table all you need to do is use that language. Either use \R{loadlanguagefile}{LoadLanguageFile} or define a \R{langstring}{LangString} and you have built your installer a language table. To make sure all of the inner strings NSIS uses are there you should load a language file using use \R{loadlanguagefile}{LoadLanguageFile}. The strings from the language file will be used as defaults in case you don't define some strings in the script. The language file strings can be used by the script too, not just internally by NSIS. Each string in the language file is assigned to a specific LangString. That LangString's name is listed as a comment just above the string in the English language file for your convenience. The language file is located in \W{../Contrib/Language files}{Contrib\\Language Files}.
For an example of usage see \W{../Examples/languages.nsi}{languages.nsi}. For an example of usage see \W{../Examples/languages.nsi}{languages.nsi}.
\S1{langselection} Language Selection \S1{langselection} Language Selection
When the installer starts up it goes through these stages to select the interface language: When the installer starts up it goes through these steps to select the interface language:
\n Find a perfect match between the user default language (GetUserDefaultLangID()) \n Get user's default language (GetUserDefaultLangID()) into \R{varconstant}{$LANGUAGE}
\n Find a perfect match for the language id in \R{varconstant}{$LANGUAGE}
\n If there is no perfect match, find a primary language match \n If there is no perfect match, find a primary language match
\n If no match, take the first language defined in the script \n If there is no no match, use the first language defined in the script
\n If \R{varconstant}{$LANGUAGE} has changed during .onInit, go through steps 1 to 3 with the language inside $LANGUAGE instead of the default user language. \n If \R{varconstant}{$LANGUAGE} has changed during .onInit, go through steps 2 to 4 again
\S1{/lang} The /LANG Parameter
All of the installer (and uninstaller) attributes setting commands have an optional parameter /LANG. This parameter tells the script compiler in which language table to put the specified string.
For example:
\c Caption /LANG=${LANG_ENGLISH} "English caption"
\c Caption /LANG=${LANG_FRENCH} "French caption"
\c Caption /LANG=${LANG_DUTCH} "Dutch caption"
When the installer will select the English language the caption will be "English caption", when it selects French the caption will be "French caption" and when it selects Dutch the caption will be "Dutch caption".
If no /LANG parameter is specified, the compiler will assume the last used language, or the last loaded language.
\c LoadLanguageFile "${NSISDIR}\Language files\English.nlf"
\c Name "English name"
\c LoadLanguageFile "${NSISDIR}\Language files\German.nlf"
\c Name "German name"
\c Caption "German caption"
\c Caption /LANG=${LANG_ENGLISH} "English caption"
\c ComponentText "English components text"
\c ComponentText /LANG=${LANG_GERMAN} "German components text"
\S1{langdll} LangDLL Plug-in \S1{langdll} LangDLL Plug-in
The LangDLL plug-in lets you give the user the option to choose the language of the installer. Just push the language id ($\{LANG_*\}) and its name for every language in your installer, then the number of languages pushed, the caption, and the text that tells the user to select the language, call the plug-in function named LangDialog, pop the returned value into $LANGUAGE and you're good to go. If the user click on the cancel button the return value will be "cancel". The LangDLL plug-in allows you to give the user an option to choose the language of the installer. Just push the language id ($\{LANG_*\}) and its name for every language in your installer, then the number of languages pushed, the caption, and the text that tells the user to select the language, call the plug-in function named LangDialog, pop the returned value into $LANGUAGE and you're good to go. If the user clicks on the cancel button the return value will be "cancel".
For an example of usage see \W{../Examples/languages.nsi}{languages.nsi}. For an example of usage see \W{../Examples/languages.nsi}{languages.nsi}.
\S1{rtl} RTL Languages
RTL languages are languages that are written from right to left. NSIS fully supports RTL languages. In the language file there is a place to specify if the language is RTL or not. If it is, NSIS will create another set of dialogs for the language that will be RTL. To find out on runtime if the language you're currently using is RTL or not check the value of the $(^RTL) language string. It will be 1 if the language is RTL and 0 otherwise.

View file

@ -2,30 +2,74 @@
Each (non-silent) NSIS installer has a set of pages. Each page can be a NSIS built-in page or a custom page created by a user's function (with \W{../Contrib/InstallOptions/Readme.html}{InstallOptions} for example). Each (non-silent) NSIS installer has a set of pages. Each page can be a NSIS built-in page or a custom page created by a user's function (with \W{../Contrib/InstallOptions/Readme.html}{InstallOptions} for example).
Using the script you can control the pages' order, appearance, and behavior. You can skip pages, paint them white, force the user to stay in a certain page until a certain condition is met, show a readme page, show custom designed pages for input and more. In this section, you will learn how to control all of the above.
There are two basic commands regarding pages, \R{page}{Page} and \R{uninstpage}{UninstPage}. The first adds a page to the installer, the second adds a page to the uninstaller. On top of those two there is the \R{pageex}{PageEx} command which allows you to add a page to either one and with greater amount of options. \R{pageex}{PageEx} allows you to set options to the specific page you are adding instead of using the default that's set outside of \R{pageex}{PageEx}.
\S{pageoreder} Ordering \S{pageoreder} Ordering
The page order is set simply by the order they are in the script. For example: The page order is set simply by the order \R{page}{Page}, \R{uninstpage}{UninstPage} and \R{pageex}{PageEx} appear in the script. For example:
\c Page license \c Page license
\c Page components \c Page components
\c Page directory \c Page directory
\c Page instfiles \c Page instfiles
\c UninstPage uninstConfirm
\c UninstPage isntfiles
This code will show the license page, then the components selection page, then the directory selection page and then the install log, just like in old installers. This code will tell NSIS to first show the license page, then the components selection page, then the directory selection page and finally the install log where sections are executed, just like in old installers. The uninstaller will first show the uninstall confirmation page and then the uninstallation log.
You can specify the same page type more than once, just make sure you know what you are doing. You can specify the same page type more than once.
Please note that you must still use \R{alicensetext}{LicenseText} and \R{alicensedata}{LicenseData} for the license page to show, \R{acomponenttext}{ComponentText} for the components selection page to show and \R{adirtext}{DirText} for the directory page to show. If you don't use any page command the installer's pages order will be just as in older versions: license (if \R{alicensetext}{LicenseText} and \R{alicensedata}{LicenseData} were specified), components (if \R{acomponenttext}{ComponentText} was specified and there is more than one visible section), directory (if \R{adirtext}{DirText} was specified) and instfiles. The uninstaller's pages order will be: uninstall confirmation page (if \R{auninstalltext}{UninstallText} was specified) and instfiles.
If you don't use any Page command the installer pages order will be just as in older version: license (if \R{alicensetext}{LicenseText} and \R{alicensedata}{LicenseData} were specified), components (if \R{acomponenttext}{ComponentText} was specified and there is more than one visible section), directory (if \R{adirtext}{DirText} was specified), instfiles. \S{pageoptions} Page Options
\S{pagecallbacks} Callbacks Each page has its unique set of data that defines how it will look and act. This section describes what data each type of page uses and how you can set it. \R{pagecallbacks_explain}{Callback functions} are described below and are not dealt with in this section.
Each built-in page has three callback functions. The pre-function, the show-creation function and the leave-function. The pre-function is called right before the page is created, the show-function is called right after it is created and before it is shown so you can tweak its user interface with \R{createfont}{CreateFont}, \R{setbkcolor}{SetBkColor } and \R{sendmessage}{SendMessage}; the leave-function is called right after the user has pressed the next button and before the page is left. The list below lists what commands affect the certain page type. Unless mentioned otherwise, these commands can be used both in and out of a \R{pageex}{PageEx} block. If used inside a \R{pageex}{PageEx} block they will only affect the current page being set by \R{pageex}{PageEx}, else they will set the default for every other page.
A custom page has only two callback functions, one that creates it which is mandatory, and one leave-function that acts just like the leave-function for built-in pages. \e{License page}
Use \R{abort}{Abort} from a built-in page's pre-function to skip the page, and from a built-in page's leave-function to stay in the page. \b \R{alicensetext}{LicenseText}
\b \R{alicensedata}{LicenseData}
\b \R{alicenseforceselection}{LicenseForceSelection}
\e{Components selection page}
\b \R{acomponenttext}{ComponentText}
\e{Directory selection page}
\b \R{adirtext}{DirText}
\b \R{adirvar}{DirVar} - can only be used in \R{pageex}{PageEx}
\e{Un/Installation log page}
\b \R{adetailsbuttontext}{DetailsButtonText}
\b \R{acompletedtext}{CompletedText}
\e{Uninstall confirmation page}
\b \R{adirvar}{DirVar} - can only be used in \R{pageex}{PageEx}
\b \R{auninstalltext}{UninstallText}
\S{pagecallbacks_explain} Callbacks
Each built-in page has three callback functions. The pre-function, the show-creation function and the leave-function. The pre-function is called right before the page is created, the show-function is called right after it is created and before it is shown and the leave-function is called right after the user has pressed the next button and before the page is left.
\b The pre-function allows you to skip the page using \R{abort}{Abort}.
\b The show-function allows you to tweak the page's user interface with \R{createfont}{CreateFont}, \R{setctlcolors}{SetCtlColors}, \R{sendmessage}{SendMessage} and others.
\b The leave-function allows you to force the user to stay on the current page using \R{abort}{Abort}.
A custom page only has two callback functions, one that creates it which is mandatory, and one leave-function that acts just like the leave-function for built-in pages.
Examples: Examples:
@ -59,12 +103,44 @@ Examples:
\S{page} Page \S{page} Page
\c ((custom [creator_function] [leave_function] [caption]) | ((license|components|directory|instfiles) [pre_function] [show_function] [leave_function])) [define_if_last] \c custom [creator_function] [leave_function] [caption]
\c OR
\c (license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]
Adds an installer page. See the above sections for more information about built-in versus custom pages and about callback functions. If define_if_last is specified, the parameter will be !defined if the page turns out to be the last page before a instfiles page. This helps you decide on dynamic scripts (such as the \W{../contrib/Modern UI/Readme.html}{Modern UI script}) what to put in this page's text, "click the install button to start installation" or "click next to continue" for example. Adds an installer page. See the above sections for more information about built-in versus custom pages and about callback functions.
\S{uninstpage} UninstPage \S{uninstpage} UninstPage
\c ((custom [creator_function] [leave_function] [caption]) | ((uninstConfirm|instfiles) [pre_function] [show_function] [leave_function])) [define_if_last] \c custom [creator_function] [leave_function] [caption]
\c OR
\c (license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]
Adds an uninstaller page. See the above sections for more information about built-in versus custom pages and about callback functions. See Page for an explanation about define_if_last. Adds an uninstaller page. See the above sections for more information about built-in versus custom pages and about callback functions.
\S{pageex} PageEx
\c [un.](custom|uninstConfirm|license|components|directory|instfiles)
Adds an installer page or an uninstaller page if the un. prefix was used. Every PageEx must have a matching \R{pageexend}{PageExEnd}. In a PageEx block you can set options that are specific to this page and will not be used for other pages. Options that are not set will revert to what was set outside the PageEx block or the default if nothing was set. To set the callback functions for a page set with PageEx use \R{pagecallbacks}{PageCallbacks}. See the above sections for more information about built-in versus custom pages.
Example usage:
\c PageEx license
\c LicenseText "Readme"
\c LicenseData readme.rtf
\c PageExEnd
\c
\c PageEx license
\c LicenseData license.txt
\c LicenseForceSelection checkbox
\c PageExEnd
\S{pageexend} PageExEnd
Ends a PageEx block.
\S{pagecallbacks} PageCallbacks
\c ([creator_function] [leave_function]) | ([pre_function] [show_function] [leave_function])
Sets the callback functions for a page defined using \R{pageex}{PageEx}. Can only be used inside a \R{pageex}{PageEx} block. See the above sections for more information about callback functions.

View file

@ -27,16 +27,27 @@ The default extension for a script file is .nsi. Header files have the .nsh exte
\H{tutstructure} Scripting structure \H{tutstructure} Scripting structure
A NSIS script can contain Installer Attributes and Sections/Functions. You can also use Compiler Commands for compile-time operations. The minimum is \R{aoutfile}{OutFile}, which tells NSIS where to write the installer, and one section. A NSIS script can contain Installer Attributes and Sections/Functions. You can also use Compiler Commands for compile-time operations. Required is the \R{aoutfile}{OutFile} instruction, which tells NSIS where to write the installer, and one section.
\S1{installerattributes} Installer Attributes \S1{installerattributes} Installer Attributes
Installer Attributes determine the behavior and the look and feel of your installer. With these attributes you can define what pages are shown in which order, texts that will be shown during the installation, the number of installation types etc. Most of these commands can only be set and are not changeable during runtime. Installer Attributes determine the behavior and the look and feel of your installer. With these attributes you can change texts that will be shown during the installation, the number of installation types etc. Most of these commands can only be set and are not changeable during runtime.
The most basic attributes are \R{aname}{Name}, \R{ainstalldir}{InstallDir} and \R{adirtext}{DirText}. Other basic instructions are \R{aname}{Name} and \R{ainstalldir}{InstallDir}.
For more information about installer attributes, have a look at \R{instattribs}{Installer Attributes}. For more information about installer attributes, have a look at \R{instattribs}{Installer Attributes}.
\S1{tut-pages} Pages
An non-silent installer has a set of wizard pages to let the user configure the installer. You can set which pages to display using the \R{page}{Page} command (or \R{pageex}{PageEx} for more advanced settings). A typical set of pages looks like this:
\c Page license
\c Page components
\c Page directory
\c Page instfiles
\c UninstPage uninstConfirm
\c UninstPage isntfiles
\S1{tut-sections} Sections \S1{tut-sections} Sections
In a common installer there are several things the user can install. For example in the NSIS distribution installer you can choose to install the source code, additional plug-ins, examples and more. Each of these components has its own piece of code. If the user selects to install this component, then the installer will execute that code. In the script, that code is in sections. Each visible section is a component for the user to choose from. We will not discuss invisible sections in this tutorial. It is possible to build your installer with only one section, but if you want to use the components page and let the user choose what to install you'll have to use more than one section. In a common installer there are several things the user can install. For example in the NSIS distribution installer you can choose to install the source code, additional plug-ins, examples and more. Each of these components has its own piece of code. If the user selects to install this component, then the installer will execute that code. In the script, that code is in sections. Each visible section is a component for the user to choose from. We will not discuss invisible sections in this tutorial. It is possible to build your installer with only one section, but if you want to use the components page and let the user choose what to install you'll have to use more than one section.
@ -119,7 +130,7 @@ After calling the function, the variables contain the same value as before. Note
\S2{tutdebug} Debugging Scripts \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 debuging 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/archive/viewpage.php?pageid=140}{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}. Very useful if you force to close the installer automatically using \R{setautoclose}{SetAutoClose}. 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 debuging 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/archive/viewpage.php?pageid=140}{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 \S1{compilercommands} Compiler Commands

View file

@ -86,11 +86,19 @@ Shows or hides the details, depending on which parameter you pass. Overrides the
Sets mode at which commands print their status. None has commands be quiet, listonly has status text only added to the listbox, textonly has status text only printed to the status bar, and both enables both (the default). For extracting many small files, textonly is recommended (especially on win9x with smooth scrolling enabled). Sets mode at which commands print their status. None has commands be quiet, listonly has status text only added to the listbox, textonly has status text only printed to the status bar, and both enables both (the default). For extracting many small files, textonly is recommended (especially on win9x with smooth scrolling enabled).
\S2{setbkcolor} SetBkColor \S2{setctlcolors} SetCtlColors
\c hwnd color \c hwnd (branding | (text_color (transparent|bg_color)))
Sets a background color for a static control, edit control, button or a dialog. Use GetDlgItem to get the handle (HWND) of the control. To make the control transparent specify "transparent" as the color value. \e{Do not} use this on branding image controls! Sets a background color and the text color for a static control, edit control, button or a dialog. Use GetDlgItem to get the handle (HWND) of the control. To make the control transparent specify "transparent" as the background color value. You can also specify branding instead of text color and background color to make the control completely gray. This is used by the branding text control in the MUI.
\S2{setsilent} SetSilent
\c silent | normal
Sets the installer to silent mode or normal mode. See \R{asilentinstall}{SilentInstall} for more information about silent installations. Can only be used in \R{oninit}{.onInit}.
Sets the installer
\S2{showwindow} ShowWindow \S2{showwindow} ShowWindow

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -423,26 +423,45 @@ void CDialogTemplate::ConvertToRTL() {
addExStyle = true; addExStyle = true;
// Button // Button
else if (int(m_vItems[i]->szClass) == 0x80) { else if (int(m_vItems[i]->szClass) == 0x80) {
if (m_vItems[i]->dwStyle & BS_LEFTTEXT) addExStyle = true; m_vItems[i]->dwStyle ^= BS_LEFTTEXT;
m_vItems[i]->dwStyle ^= BS_RIGHT;
m_vItems[i]->dwStyle ^= BS_LEFT;
if ((m_vItems[i]->dwStyle & (BS_LEFT|BS_RIGHT)) == (BS_LEFT|BS_RIGHT)) {
m_vItems[i]->dwStyle ^= BS_LEFT;
m_vItems[i]->dwStyle ^= BS_RIGHT;
if (m_vItems[i]->dwStyle & (BS_RADIOBUTTON|BS_CHECKBOX|BS_USERBUTTON))
m_vItems[i]->dwStyle |= BS_RIGHT;
}
} }
// Edit // Edit
else if (int(m_vItems[i]->szClass) == 0x81) { else if (int(m_vItems[i]->szClass) == 0x81) {
if (!(m_vItems[i]->dwStyle & ES_CENTER)) addExStyle = true; if ((m_vItems[i]->dwStyle & ES_CENTER) == 0)
m_vItems[i]->dwStyle ^= ES_RIGHT;
} }
// Static // Static
else if (int(m_vItems[i]->szClass) == 0x82) { else if (int(m_vItems[i]->szClass) == 0x82) {
if (!(m_vItems[i]->dwStyle & (SS_CENTER|SS_RIGHT))) { if ((m_vItems[i]->dwStyle & SS_TYPEMASK) == SS_LEFT || (m_vItems[i]->dwStyle & SS_TYPEMASK) == SS_LEFTNOWORDWRAP)
m_vItems[i]->dwStyle &= ~SS_LEFT; {
m_vItems[i]->dwStyle &= ~SS_LEFTNOWORDWRAP; m_vItems[i]->dwStyle &= ~SS_TYPEMASK;
m_vItems[i]->dwStyle |= SS_RIGHT; m_vItems[i]->dwStyle |= SS_RIGHT;
} }
else if ((m_vItems[i]->dwStyle & SS_TYPEMASK) == SS_ICON) {
m_vItems[i]->dwStyle |= SS_CENTERIMAGE;
}
}
else if (!IS_INTRESOURCE(m_vItems[i]->szClass) && strcmpi(m_vItems[i]->szClass, "RichEdit20A")) {
if ((m_vItems[i]->dwStyle & ES_CENTER) == 0)
m_vItems[i]->dwStyle ^= ES_RIGHT;
} }
else addExStyle = true; else addExStyle = true;
if (addExStyle) if (addExStyle)
m_vItems[i]->dwExtStyle |= WS_EX_RIGHT; m_vItems[i]->dwExtStyle |= WS_EX_RIGHT | WS_EX_RTLREADING;
m_vItems[i]->sX = m_sWidth - m_vItems[i]->sWidth - m_vItems[i]->sX; m_vItems[i]->sX = m_sWidth - m_vItems[i]->sWidth - m_vItems[i]->sX;
} }
m_dwExtStyle |= WS_EX_RIGHT; m_dwExtStyle |= WS_EX_RIGHT | WS_EX_RTLREADING;
} }
// Saves the dialog in the form of DLGTEMPLATE[EX] // Saves the dialog in the form of DLGTEMPLATE[EX]

View file

@ -49,7 +49,7 @@ struct DialogItemTemplate {
short sHeight; short sHeight;
DWORD dwExtStyle; DWORD dwExtStyle;
DWORD dwStyle; DWORD dwStyle;
WORD wId; WORD wId;
char *szClass; char *szClass;
char *szTitle; char *szTitle;

View file

@ -303,7 +303,7 @@ BYTE* CResourceEditor::Save(DWORD &dwSize) {
oldSeeker += dwSectionsSize; oldSeeker += dwSectionsSize;
// Copy data tacked after the PE headers and sections (NSIS installation data for example) // Copy data tacked after the PE headers and sections (NSIS installation data for example)
DWORD dwTackedSize = oldSeeker - m_pbPE - m_iSize; DWORD dwTackedSize = m_iSize - (oldSeeker - m_pbPE);
if (dwTackedSize) if (dwTackedSize)
CopyMemory(seeker, oldSeeker, dwTackedSize); CopyMemory(seeker, oldSeeker, dwTackedSize);

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,7 @@
#ifndef _BUILD_H_ #ifndef _BUILD_H_
#define _BUILD_H_ #define _BUILD_H_
#include <Vector> #include <StdExcept>
#include <List>
using namespace std; using namespace std;
#include "strlist.h" #include "strlist.h"
@ -43,12 +42,8 @@ extern "C"
#define PS_OK 0 #define PS_OK 0
#define PS_EOF 1 #define PS_EOF 1
#define PS_ENDIF 2
#define PS_ELSE 3
#define PS_ELSE_IF0 4
#define PS_ELSE_IF1 5
#define PS_ERROR 50 #define PS_ERROR 50
#define IS_PS_ELSE(x) (( x ) >= PS_ELSE && ( x ) <= PS_ELSE_IF1) #define PS_WARNING 100
enum { enum {
MAKENSIS_NOTIFY_SCRIPT, MAKENSIS_NOTIFY_SCRIPT,
@ -57,6 +52,14 @@ enum {
MAKENSIS_NOTIFY_OUTPUT MAKENSIS_NOTIFY_OUTPUT
}; };
#define PAGE_CUSTOM 0
#define PAGE_LICENSE 1
#define PAGE_COMPONENTS 2
#define PAGE_DIRECTORY 3
#define PAGE_INSTFILES 4
#define PAGE_UNINSTCONFIRM 5
#define PAGE_COMPLETED 6
class CEXEBuild { class CEXEBuild {
public: public:
CEXEBuild(); CEXEBuild();
@ -64,6 +67,8 @@ class CEXEBuild {
// to add a warning to the compiler's warning list. // to add a warning to the compiler's warning list.
void warning(const char *s, ...); void warning(const char *s, ...);
// warning with file name and line count
void warning_fl(const char *s, ...);
// to add a defined thing. // to add a defined thing.
void define(const char *p, const char *v=""); void define(const char *p, const char *v="");
@ -125,6 +130,27 @@ class CEXEBuild {
int do_add_file(const char *lgss, int attrib, int recurse, int linecnt, int *total_files, const char *name_override=0, int generatecode=1, int *data_handle=0, int rec_depth=0); int do_add_file(const char *lgss, int attrib, int recurse, int linecnt, int *total_files, const char *name_override=0, int generatecode=1, int *data_handle=0, int rec_depth=0);
GrowBuf m_linebuild; // used for concatenating lines GrowBuf m_linebuild; // used for concatenating lines
// used by doParse to do preprocessing
struct ifblock
{
int hasexeced;
int elseused;
int ignore;
int inherited_ignore;
} *cur_ifblock;
TinyGrowBuf build_preprocessor_data;
int last_line_had_slash;
void start_ifblock();
void end_ifblock();
int num_ifblock();
/*int ignore;
int if_count;
int ignored_if_count;
int wait_for_endif;*/
bool inside_comment;
void ERROR_MSG(const char *s, ...); void ERROR_MSG(const char *s, ...);
void SCRIPT_MSG(const char *s, ...); void SCRIPT_MSG(const char *s, ...);
void INFO_MSG(const char *s, ...); void INFO_MSG(const char *s, ...);
@ -142,21 +168,22 @@ class CEXEBuild {
void section_add_size_kb(int kb); void section_add_size_kb(int kb);
int section_add_flags(int flags); int section_add_flags(int flags);
int section_add_install_type(int inst_type); int section_add_install_type(int inst_type);
int add_page(int type);
int page_end();
int add_label(const char *name); int add_label(const char *name);
int add_entry(const entry *ent); int add_entry(const entry *ent);
int add_entry_direct(int which, int o0=0, int o1=0, int o2=0, int o3=0, int o4=0, int o5=0); int add_entry_indirect(int which, int o0=0, int o1=0, int o2=0, int o3=0, int o4=0, int o5=0);
int add_data(const char *data, int length, IGrowBuf *dblock=NULL); // returns offset int add_data(const char *data, int length, IGrowBuf *dblock=NULL); // returns offset
int add_string(const char *string); // returns offset (in string table) int add_string(const char *string, int process=1); // returns offset (in string table)
int add_intstring(const int i); // returns offset in stringblock int add_intstring(const int i); // returns offset in stringblock
int add_string_main(const char *string, int process=1); // returns offset (in string table)
int add_string_uninst(const char *string, int process=1); // returns offset (in string table)
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS #ifdef NSIS_SUPPORT_LANG_IN_STRINGS
int preprocess_string(char *out, const char *in, bool bUninstall); int preprocess_string(char *out, const char *in, bool bUninstall);
#else #else
int preprocess_string(char *out, const char *in); int preprocess_string(char *out, const char *in);
#endif #endif
int make_sure_not_in_secorfunc(const char *str); int make_sure_not_in_secorfunc(const char *str, int page_ok=0);
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT #ifdef NSIS_CONFIG_PLUGIN_SUPPORT
// Added by Ximon Eighteen 5th August 2002 // Added by Ximon Eighteen 5th August 2002
@ -171,6 +198,11 @@ class CEXEBuild {
void printline(int l); void printline(int l);
int process_jump(LineParser &line, int wt, int *offs); int process_jump(LineParser &line, int wt, int *offs);
int AddVersionInfo();
int ProcessPages();
void PreperInstTypes();
void PreperHeaders(IGrowBuf *hdrbuf);
int resolve_jump_int(const char *fn, int *a, int offs, int start, int end); int resolve_jump_int(const char *fn, int *a, int offs, int start, int end);
int resolve_call_int(const char *fn, const char *str, int fptr, int *ofs); int resolve_call_int(const char *fn, const char *str, int fptr, int *ofs);
int resolve_instruction(const char *fn, const char *str, entry *w, int offs, int start, int end); int resolve_instruction(const char *fn, const char *str, entry *w, int offs, int start, int end);
@ -180,27 +212,44 @@ class CEXEBuild {
int uninstall_generate(); int uninstall_generate();
void set_uninstall_mode(int un); void set_uninstall_mode(int un);
// lang.cpp functions and vars // lang.cpp functions and variables
StringTable *GetTable(LANGID &lang); void InitLangTables();
int SetString(char *string, int id, int process, LANGID lang=0); LanguageTable *GetLangTable(LANGID &lang);
int SetString(char *string, int id, int process, StringTable *table); int DefineLangString(char *name, int process=-1);
int GetUserString(char *name); int DefineInnerLangString(int id, int process=-1);
int SetUserString(char *name, LANGID lang, char *string, int process=1); int SetLangString(char *name, LANGID lang, char *string);
int WriteStringTables(); int SetInnerString(int id, char *string);
void FillStringTable(StringTable *table, NLF *nlf=0); int GenerateLangTables();
#define IsNotSet(s) _IsNotSet(string_tables.size()?&(string_tables[0]->s):0) void FillLanguageTable(LanguageTable *table);
bool _IsNotSet(int *str); // Checks if a string is not set in all of the string tables int HasUserDefined(int id) {
#define IsSet(s,lang) _IsSet(string_tables.size()?&(string_tables[0]->s):0,lang) const char *us = UserInnerStrings.get(id);
bool _IsSet(int *str, LANGID lang); // Checks if a string is set in a given string table return us && *us;
};
LanguageTable *LoadLangFile(char *filename);
void DeleteLangTable(LanguageTable *table);
NLFRef NLFRefs[NLF_STRINGS];
bool keep_ref;
StringsArray UserInnerStrings;
bool defcodepage_set;
GrowBuf lang_tables;
LANGID last_used_lang;
LangStringList build_langstrings;
int build_langstring_num, ubuild_langstring_num;
unsigned int uDefCodePage; unsigned int uDefCodePage;
bool next_used, install_used, comppage_used, license_force_radio_used, register_used, unregister_used; // pages stuff
int license_res_id;
page *cur_page;
int cur_page_type;
int enable_last_page_cancel, uenable_last_page_cancel;
// User variables stuff
int GetUserVarIndex(LineParser &line, int token); int GetUserVarIndex(LineParser &line, int token);
// Added by ramon 3 jun 2003 // Added by ramon 3 jun 2003
#ifdef NSIS_SUPPORT_NAMED_USERVARS #ifdef NSIS_SUPPORT_NAMED_USERVARS
bool b_abort_compile;
UserVarsStringList m_UserVarNames; UserVarsStringList m_UserVarNames;
int DeclaredUserVar(const char *VarName); int DeclaredUserVar(const char *VarName);
void VerifyDeclaredUserVarRefs(UserVarsStringList *pVarsStringList); void VerifyDeclaredUserVarRefs(UserVarsStringList *pVarsStringList);
@ -216,12 +265,6 @@ class CEXEBuild {
bool build_compressor_set; bool build_compressor_set;
bool build_compress_whole; bool build_compress_whole;
bool use_first_insttype;
vector<NLF*> build_nlfs;
vector<StringTable*> string_tables;
LANGID last_used_lang;
bool no_space_texts; bool no_space_texts;
int has_called_write_output; int has_called_write_output;
@ -231,14 +274,12 @@ class CEXEBuild {
build_datesave, build_optimize_datablock, build_datesave, build_optimize_datablock,
build_allowskipfiles; // Added by ramon 23 May 2003 build_allowskipfiles; // Added by ramon 23 May 2003
header build_header; header build_header, build_uninst, *cur_header;
int uninstall_mode; int uninstall_mode;
uninstall_header build_uninst;
int uninstall_size,uninstall_size_full; int uninstall_size,uninstall_size_full;
int uninstaller_writes_used; int uninstaller_writes_used;
char build_output_filename[1024]; char build_output_filename[1024];
char cur_out_path[1024];
// Added by ramon 6 jun 2003 // Added by ramon 6 jun 2003
#ifdef NSIS_SUPPORT_VERSION_INFO #ifdef NSIS_SUPPORT_VERSION_INFO
@ -262,21 +303,19 @@ class CEXEBuild {
int build_cursection_isfunc; int build_cursection_isfunc;
section *build_cursection; section *build_cursection;
TinyGrowBuf build_sections; TinyGrowBuf build_sections, ubuild_sections, *cur_sections;
GrowBuf build_entries,ubuild_entries, *cur_entries; GrowBuf build_entries,ubuild_entries, *cur_entries;
TinyGrowBuf build_functions, ubuild_functions, *cur_functions; TinyGrowBuf build_functions, ubuild_functions, *cur_functions;
TinyGrowBuf build_labels, ubuild_labels, *cur_labels; TinyGrowBuf build_labels, ubuild_labels, *cur_labels;
StringList build_strlist, ubuild_strlist; StringList build_strlist, ubuild_strlist, *cur_strlist;
GrowBuf build_langtables, ubuild_langtables; GrowBuf build_langtables, ubuild_langtables, *cur_langtables;
LangStringList build_userlangstrings, ubuild_userlangstrings; TinyGrowBuf build_pages, ubuild_pages, *cur_pages;
TinyGrowBuf build_pages, ubuild_pages; TinyGrowBuf build_ctlcolors, ubuild_ctlcolors, *cur_ctlcolors;
char build_last_page_define[1024], ubuild_last_page_define[1024];
int build_custom_used, ubuild_custom_used;
int enable_last_page_cancel, uenable_last_page_cancel;
MMapBuf build_datablock, ubuild_datablock; // use GrowBuf here instead of MMapBuf if you want MMapBuf build_datablock, ubuild_datablock; // use GrowBuf here instead of MMapBuf if you want
IGrowBuf *cur_datablock; IGrowBuf *cur_datablock;
TinyGrowBuf verbose_stack;
unsigned char *header_data_new; unsigned char *header_data_new;
int exeheader_size_new; int exeheader_size_new;

View file

@ -1,5 +1,6 @@
#include "exedata.h" #include "exedata.h"
//#ifndef _DEBUG
#ifdef NSIS_CONFIG_COMPONENTPAGE #ifdef NSIS_CONFIG_COMPONENTPAGE
#include "exehead/Release-zlib/bitmap1.h" #include "exehead/Release-zlib/bitmap1.h"
#endif #endif
@ -7,11 +8,19 @@
#include "exehead/Release-zlib/unicon.h" #include "exehead/Release-zlib/unicon.h"
#include "exehead/Release-zlib/exehead_zlib.h" #include "exehead/Release-zlib/exehead_zlib.h"
#include "exehead/Release-bzip2/exehead_bzip2.h" #include "exehead/Release-bzip2/exehead_bzip2.h"
// Changed by Amir Szekely 31st July 2002 /*#else
#ifdef NSIS_CONFIG_COMPONENTPAGE
#include "exehead/Debug-zlib/bitmap1.h"
#endif
#include "exehead/Debug-zlib/icon.h"
#include "exehead/Debug-zlib/unicon.h"
#include "exehead/Debug-zlib/exehead_zlib.h"
#include "exehead/Debug-bzip2/exehead_bzip2.h"
#endif*/
int zlib_exeheader_size=sizeof(zlib_header_data); int zlib_exeheader_size=sizeof(zlib_header_data);
int bzip2_exeheader_size=sizeof(bzip2_header_data); int bzip2_exeheader_size=sizeof(bzip2_header_data);
int exeheader_size=0; int exeheader_size=0;
// Changed by Amir Szekely 8th July 2002
int icondata_size=sizeof(icon_data)-22; int icondata_size=sizeof(icon_data)-22;
int unicondata_size=sizeof(unicon_data)-22; int unicondata_size=sizeof(unicon_data)-22;

View file

@ -26,6 +26,7 @@
#include <windows.h> #include <windows.h>
#include <commctrl.h> #include <commctrl.h>
#include <shlobj.h>
#include "resource.h" #include "resource.h"
#include "util.h" #include "util.h"
#include "fileform.h" #include "fileform.h"
@ -58,6 +59,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
InitCommonControls(); InitCommonControls();
#if defined(NSIS_SUPPORT_ACTIVEXREG) || defined(NSIS_SUPPORT_CREATESHORTCUT)
{
extern HRESULT g_hres;
g_hres=OleInitialize(NULL);
}
#endif
GetTempPath(sizeof(state_temp_dir), state_temp_dir); GetTempPath(sizeof(state_temp_dir), state_temp_dir);
validate_filename(state_temp_dir); validate_filename(state_temp_dir);
CreateDirectory(state_temp_dir, NULL); CreateDirectory(state_temp_dir, NULL);
@ -127,7 +135,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
while (*p) p++; while (*p) p++;
while (p >= cmdline && (p[0] != '_' || p[1] != '?' || p[2] != '=')) p--; while (p >= cmdline && (p[0] != '_' || p[1] != '?' || p[2] != '=')) p--;
if (p >= cmdline) if (p >= cmdline)
{ {
*(p-1)=0; // terminate before the " _?=" *(p-1)=0; // terminate before the " _?="
@ -200,6 +208,11 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
log_write(1); log_write(1);
#endif//NSIS_CONFIG_LOG #endif//NSIS_CONFIG_LOG
end: end:
#if defined(NSIS_SUPPORT_ACTIVEXREG) || defined(NSIS_SUPPORT_CREATESHORTCUT)
OleUninitialize();
#endif
if (g_db_hFile != INVALID_HANDLE_VALUE) CloseHandle(g_db_hFile); if (g_db_hFile != INVALID_HANDLE_VALUE) CloseHandle(g_db_hFile);
#ifdef NSIS_COMPRESS_WHOLE #ifdef NSIS_COMPRESS_WHOLE
if (dbd_hFile != INVALID_HANDLE_VALUE) CloseHandle(dbd_hFile); if (dbd_hFile != INVALID_HANDLE_VALUE) CloseHandle(dbd_hFile);

File diff suppressed because it is too large Load diff

View file

@ -8,8 +8,8 @@
#ifdef NSIS_SUPPORT_BGBG #ifdef NSIS_SUPPORT_BGBG
#define c1 g_inst_cmnheader->bg_color1 #define c1 g_header->bg_color1
#define c2 g_inst_cmnheader->bg_color2 #define c2 g_header->bg_color2
LRESULT CALLBACK BG_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) LRESULT CALLBACK BG_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
@ -49,7 +49,7 @@ LRESULT CALLBACK BG_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
r.bottom+=4; r.bottom+=4;
} }
if (g_inst_cmnheader->bg_textcolor != -1) if (g_header->bg_textcolor != -1)
{ {
HFONT newFont, oldFont; HFONT newFont, oldFont;
newFont = CreateFont(40,0,0,0,FW_BOLD,TRUE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"Garamond"); newFont = CreateFont(40,0,0,0,FW_BOLD,TRUE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"Garamond");
@ -60,7 +60,7 @@ LRESULT CALLBACK BG_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
r.top=8; r.top=8;
my_GetWindowText(hwnd,buf,sizeof(buf)); my_GetWindowText(hwnd,buf,sizeof(buf));
SetBkMode(hdc,TRANSPARENT); SetBkMode(hdc,TRANSPARENT);
SetTextColor(hdc,g_inst_cmnheader->bg_textcolor); SetTextColor(hdc,g_header->bg_textcolor);
oldFont = SelectObject(hdc,newFont); oldFont = SelectObject(hdc,newFont);
DrawText(hdc,buf,-1,&r,DT_TOP|DT_LEFT|DT_SINGLELINE|DT_NOPREFIX); DrawText(hdc,buf,-1,&r,DT_TOP|DT_LEFT|DT_SINGLELINE|DT_NOPREFIX);
SelectObject(hdc,oldFont); SelectObject(hdc,oldFont);

View file

@ -26,14 +26,18 @@
// really a big deal, but not usually needed). // really a big deal, but not usually needed).
#define NSIS_MAX_STRLEN 1024 #define NSIS_MAX_STRLEN 1024
// NSIS_MAX_INST_TYPES specified the maximum install types. // NSIS_MAX_INST_TYPES define the maximum install types.
// note that this should not exceed 32, ever. // note that this should not exceed 32, ever.
#define NSIS_MAX_INST_TYPES 32 #define NSIS_MAX_INST_TYPES 32
// NSIS_DEFAULT_LANG defines the default language id NSIS will use if nothing
// else is defined in the script. Default value is 1033 which is English.
#define NSIS_DEFAULT_LANG 1033
// NSIS_CONFIG_UNINSTALL_SUPPORT enables the uninstaller // NSIS_CONFIG_UNINSTALL_SUPPORT enables the uninstaller
// support. Comment it out if your installers don't need // support. Comment it out if your installers don't need
// uninstallers // uninstallers
// adds approximately 2kb. // adds less than 1kb.
#define NSIS_CONFIG_UNINSTALL_SUPPORT #define NSIS_CONFIG_UNINSTALL_SUPPORT
// NSIS_CONFIG_LICENSEPAGE enables support for the installer to // NSIS_CONFIG_LICENSEPAGE enables support for the installer to
@ -54,7 +58,7 @@
#define NSIS_CONFIG_VISIBLE_SUPPORT #define NSIS_CONFIG_VISIBLE_SUPPORT
// NSIS_CONFIG_ENHANCEDUI_SUPPORT enables support for CreateFont, // NSIS_CONFIG_ENHANCEDUI_SUPPORT enables support for CreateFont,
// SetBkColor (used by some UIs), SetBrandingImage, .onInitDialog, etc // SetCtlColors (used by some UIs), SetBrandingImage, .onGUIInit, etc
#define NSIS_CONFIG_ENHANCEDUI_SUPPORT #define NSIS_CONFIG_ENHANCEDUI_SUPPORT
// NSIS_CONFIG_COMPRESSION_SUPPORT enables support for making installers // NSIS_CONFIG_COMPRESSION_SUPPORT enables support for making installers
@ -103,9 +107,9 @@
// NSIS_CONFIG_LOG enables the logging facility. // NSIS_CONFIG_LOG enables the logging facility.
// turning this on (by uncommenting it) adds about // turning this on (by uncommenting it) adds about
// 3kb, but can be useful in debugging your installers. // 4kb, but can be useful in debugging your installers.
// NOT ENABLED BY DEFAULT. // NOT ENABLED BY DEFAULT.
// #define NSIS_CONFIG_LOG //#define NSIS_CONFIG_LOG
// NSIS_SUPPORT_BGBG enables support for the blue (well, whatever // NSIS_SUPPORT_BGBG enables support for the blue (well, whatever
// color you want) gradient background window. // color you want) gradient background window.
@ -253,7 +257,7 @@
#undef NSIS_SUPPORT_BGBG #undef NSIS_SUPPORT_BGBG
#endif #endif
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT #ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
#undef NSIS_CONFIG_ENHANCEDUI_SUPPORT #undef NSIS_CONFIG_ENHANCEDUI_SUPPORT
#endif #endif
#endif #endif
@ -354,18 +358,22 @@
#error NSIS_MAX_INST_TYPES > 32 #error NSIS_MAX_INST_TYPES > 32
#endif #endif
#ifndef NSIS_DEFAULT_LANG
#define NSIS_DEFAULT_LANG 1033
#endif
#ifndef INVALID_FILE_ATTRIBUTES #ifndef INVALID_FILE_ATTRIBUTES
#define INVALID_FILE_ATTRIBUTES ((DWORD)-1) #define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
#endif #endif
// This is the old static var count that occupies memory // This is the old static var count that occupies memory
// From $0 to $PLUGINSDIR // From $0 to $PLUGINSDIR, $_CLICK
#define USER_VARS_COUNT 26 #define USER_VARS_COUNT 28
#ifdef NSIS_SUPPORT_NAMED_USERVARS #ifdef NSIS_SUPPORT_NAMED_USERVARS
// This is the total number of old static var // This is the total number of old static var
// From $0 to $HWNDPARENT // From $0 to $HWNDPARENT
#define TOTAL_COMPATIBLE_STATIC_VARS_COUNT 36 #define TOTAL_COMPATIBLE_STATIC_VARS_COUNT 37
#define VARS_SECTION_NAME ".ndata" #define VARS_SECTION_NAME ".ndata"

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
#ifndef _EXEC_H_ #ifndef _EXEC_H_
#define _EXEC_H_ #define _EXEC_H_
extern union installer_flags g_flags; extern union exec_flags g_exec_flags;
int NSISCALL ExecuteCodeSegment(int pos, HWND hwndProgress); // returns 0 on success int NSISCALL ExecuteCodeSegment(int pos, HWND hwndProgress); // returns 0 on success

View file

@ -4,6 +4,8 @@
#include "state.h" #include "state.h"
#include "resource.h" #include "resource.h"
#include "lang.h" #include "lang.h"
#include "ui.h"
#include "exec.h"
#ifdef NSIS_CONFIG_COMPRESSION_SUPPORT #ifdef NSIS_CONFIG_COMPRESSION_SUPPORT
#ifdef NSIS_COMPRESS_USE_ZLIB #ifdef NSIS_COMPRESS_USE_ZLIB
@ -23,11 +25,12 @@
#endif//NSIS_COMPRESS_USE_BZIP2 #endif//NSIS_COMPRESS_USE_BZIP2
#endif//NSIS_CONFIG_COMPRESSION_SUPPORT #endif//NSIS_CONFIG_COMPRESSION_SUPPORT
#include "ui.h" struct block_header g_blocks[BLOCKS_NUM];
header *g_header;
int g_flags;
int g_filehdrsize;
int g_is_uninstaller;
char *g_db_strtab;
static int g_db_offset;
HANDLE g_db_hFile; HANDLE g_db_hFile;
#if defined(NSIS_CONFIG_COMPRESSION_SUPPORT) && defined(NSIS_COMPRESS_WHOLE) #if defined(NSIS_CONFIG_COMPRESSION_SUPPORT) && defined(NSIS_COMPRESS_WHOLE)
@ -46,24 +49,42 @@ BOOL CALLBACK verProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (uMsg == WM_INITDIALOG) if (uMsg == WM_INITDIALOG)
{ {
SetTimer(hwndDlg,1,250,NULL); SetTimer(hwndDlg,1,250,NULL);
msg = (char*)lParam; msg = (char *) lParam;
uMsg = WM_TIMER; uMsg = WM_TIMER;
} }
if (uMsg == WM_TIMER) if (uMsg == WM_TIMER
#ifdef NSIS_COMPRESS_WHOLE
|| uMsg == WM_DESTROY
#endif
)
{ {
static char bt[64]; static char bt[64];
wsprintf(bt,msg,MulDiv(m_pos,100,m_length)); int percent=MulDiv(m_pos,100,m_length);
#ifdef NSIS_COMPRESS_WHOLE
if (msg)
#endif
{
wsprintf(bt,msg,percent);
my_SetWindowText(hwndDlg,bt); my_SetWindowText(hwndDlg,bt);
my_SetDialogItemText(hwndDlg,IDC_STR,bt); my_SetDialogItemText(hwndDlg,IDC_STR,bt);
ShowWindow(hwndDlg, SW_SHOW);
}
#ifdef NSIS_COMPRESS_WHOLE
if (ui_st_updateflag & 1)
{
wsprintf(bt, "... %d%%", percent);
update_status_text(0, bt);
}
#endif
} }
return 0; return 0;
} }
#endif//NSIS_CONFIG_CRC_SUPPORT || NSIS_COMPRESS_WHOLE #endif//NSIS_CONFIG_CRC_SUPPORT || NSIS_COMPRESS_WHOLE
#endif//NSIS_CONFIG_VISIBLE_SUPPORT #endif//NSIS_CONFIG_VISIBLE_SUPPORT
int inst_flags;
#ifdef NSIS_CONFIG_COMPRESSION_SUPPORT #ifdef NSIS_CONFIG_COMPRESSION_SUPPORT
static z_stream g_inflate_stream; static z_stream g_inflate_stream;
#endif #endif
@ -84,11 +105,14 @@ const char * NSISCALL loadHeaders(int cl_flags)
void *data; void *data;
firstheader h; firstheader h;
header *header;
HANDLE db_hFile;
GetModuleFileName(g_hInstance, state_exe_directory, NSIS_MAX_STRLEN); GetModuleFileName(g_hInstance, state_exe_directory, NSIS_MAX_STRLEN);
g_db_hFile = myOpenFile(state_exe_directory, GENERIC_READ, OPEN_EXISTING); g_db_hFile = db_hFile = myOpenFile(state_exe_directory, GENERIC_READ, OPEN_EXISTING);
if (g_db_hFile == INVALID_HANDLE_VALUE) if (db_hFile == INVALID_HANDLE_VALUE)
{ {
return _LANG_CANTOPENSELF; return _LANG_CANTOPENSELF;
} }
@ -97,7 +121,7 @@ const char * NSISCALL loadHeaders(int cl_flags)
trimslashtoend(state_exe_directory); trimslashtoend(state_exe_directory);
left = m_length = GetFileSize(g_db_hFile,NULL); left = m_length = GetFileSize(db_hFile,NULL);
while (left > 0) while (left > 0)
{ {
static char temp[512]; static char temp[512];
@ -160,7 +184,7 @@ const char * NSISCALL loadHeaders(int cl_flags)
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT #ifdef NSIS_CONFIG_VISIBLE_SUPPORT
#ifdef NSIS_CONFIG_SILENT_SUPPORT #ifdef NSIS_CONFIG_SILENT_SUPPORT
else if (cl_flags & FH_FLAGS_SILENT == 0) else if ((cl_flags & FH_FLAGS_SILENT) == 0)
#endif//NSIS_CONFIG_SILENT_SUPPORT #endif//NSIS_CONFIG_SILENT_SUPPORT
{ {
if (hwnd) if (hwnd)
@ -200,7 +224,7 @@ const char * NSISCALL loadHeaders(int cl_flags)
if (do_crc) if (do_crc)
{ {
int fcrc; int fcrc;
SetSelfFilePointer(m_pos, FILE_BEGIN); SetSelfFilePointer(m_pos);
if (!ReadSelfFile(&fcrc, sizeof(int)) || crc != fcrc) if (!ReadSelfFile(&fcrc, sizeof(int)) || crc != fcrc)
return _LANG_INVALIDCRC; return _LANG_INVALIDCRC;
} }
@ -218,10 +242,10 @@ const char * NSISCALL loadHeaders(int cl_flags)
if (dbd_hFile == INVALID_HANDLE_VALUE) if (dbd_hFile == INVALID_HANDLE_VALUE)
return _LANG_ERRORWRITINGTEMP; return _LANG_ERRORWRITINGTEMP;
} }
dbd_srcpos = SetSelfFilePointer(g_filehdrsize + sizeof(firstheader), FILE_BEGIN); dbd_srcpos = SetSelfFilePointer(g_filehdrsize + sizeof(firstheader));
dbd_fulllen = dbd_srcpos - sizeof(h) + h.length_of_all_following_data - ((cl_flags & FH_FLAGS_NO_CRC) ? 0 : sizeof(int)); dbd_fulllen = dbd_srcpos - sizeof(h) + h.length_of_all_following_data - ((cl_flags & FH_FLAGS_NO_CRC) ? 0 : sizeof(int));
#else #else
SetSelfFilePointer(g_filehdrsize + sizeof(firstheader), FILE_BEGIN); SetSelfFilePointer(g_filehdrsize + sizeof(firstheader));
#endif #endif
if (GetCompressedDataFromDataBlockToMemory(-1, data, h.length_of_header) != h.length_of_header) if (GetCompressedDataFromDataBlockToMemory(-1, data, h.length_of_header) != h.length_of_header)
@ -230,40 +254,35 @@ const char * NSISCALL loadHeaders(int cl_flags)
return _LANG_INVALIDCRC; return _LANG_INVALIDCRC;
} }
#if !defined(NSIS_COMPRESS_WHOLE) || !defined(NSIS_CONFIG_COMPRESSION_SUPPORT) header = g_header = data;
g_db_offset = SetSelfFilePointer(0,FILE_CURRENT);
#else
g_db_offset = dbd_pos;
#endif
g_inst_combinedheader = data;
inst_flags = g_inst_cmnheader->flags;
#ifdef NSIS_CONFIG_SILENT_SUPPORT #ifdef NSIS_CONFIG_SILENT_SUPPORT
if (cl_flags & FH_FLAGS_SILENT) inst_flags |= CH_FLAGS_SILENT; if (cl_flags & FH_FLAGS_SILENT)
header->flags |= CH_FLAGS_SILENT;
g_exec_flags.silent = header->flags & (CH_FLAGS_SILENT | CH_FLAGS_SILENT_LOG);
#endif #endif
g_flags = header->flags;
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
if (h.flags & FH_FLAGS_UNINSTALL) if (h.flags & FH_FLAGS_UNINSTALL)
{
g_is_uninstaller++; g_is_uninstaller++;
g_inst_page = (page *) (g_inst_uninstheader + 1);
}
else
#endif #endif
{
g_inst_section=(section *) (g_inst_header + 1);
num_sections=g_inst_header->num_sections;
g_inst_page=(page *) (g_inst_section + num_sections);
}
g_inst_entry = (entry *) (g_inst_page + g_inst_cmnheader->num_pages);
g_db_strtab = (char *) (g_inst_entry + g_inst_cmnheader->num_entries);
return 0;
}
const char * NSISCALL GetStringFromStringTab(int offs) crc = BLOCKS_NUM;
{ while (crc--)
return g_db_strtab+(offs < 0 ? LANG_STR_TAB(offs) : offs); header->blocks[crc].offset += (int)data;
#ifdef NSIS_COMPRESS_WHOLE
header->blocks[NB_DATA].offset = dbd_pos;
#else
header->blocks[NB_DATA].offset = SetFilePointer(db_hFile,0,NULL,FILE_CURRENT);
#endif
mini_memcpy(&g_blocks, &header->blocks, sizeof(g_blocks));
return 0;
} }
#define IBUFSIZE 16384 #define IBUFSIZE 16384
@ -285,16 +304,7 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
if (offset>=0) if (offset>=0)
{ {
/* SetSelfFilePointer(g_blocks[NB_DATA].offset+offset);
int lp=SetSelfFilePointer(0,FILE_CURRENT);
if (lp > g_db_offset+offset)
{
char buf[1023];
wsprintf(buf,"going from %d to %d",lp,g_db_offset+offset);
MessageBox(NULL,buf,"seeking back",MB_OK);
}
*/
SetSelfFilePointer(g_db_offset+offset,FILE_BEGIN);
} }
if (!ReadSelfFile((LPVOID)&input_len,sizeof(int))) return -3; if (!ReadSelfFile((LPVOID)&input_len,sizeof(int))) return -3;
@ -302,8 +312,12 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
#ifdef NSIS_CONFIG_COMPRESSION_SUPPORT #ifdef NSIS_CONFIG_COMPRESSION_SUPPORT
if (input_len & 0x80000000) // compressed if (input_len & 0x80000000) // compressed
{ {
char progress[64];
int input_len_total;
DWORD ltc = GetTickCount(), tc;
inflateReset(&g_inflate_stream); inflateReset(&g_inflate_stream);
input_len &= 0x7fffffff; // take off top bit. input_len_total = input_len &= 0x7fffffff; // take off top bit.
while (input_len > 0) while (input_len > 0)
{ {
@ -328,6 +342,14 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
u=(char*)g_inflate_stream.next_out - outbuffer; u=(char*)g_inflate_stream.next_out - outbuffer;
tc = GetTickCount();
if (tc - ltc > 200 || !input_len)
{
wsprintf(progress, "... %d%%", MulDiv(input_len_total - input_len, 100, input_len_total));
update_status_text(0, progress);
ltc = tc;
}
if (!u) break; if (!u) break;
if (!outbuf) if (!outbuf)
@ -386,7 +408,7 @@ static int NSISCALL __ensuredata(int amount)
int needed=amount-(dbd_size-dbd_pos); int needed=amount-(dbd_size-dbd_pos);
if (needed>0) if (needed>0)
{ {
SetSelfFilePointer(dbd_srcpos,FILE_BEGIN); SetSelfFilePointer(dbd_srcpos);
SetFilePointer(dbd_hFile,dbd_size,NULL,FILE_BEGIN); SetFilePointer(dbd_hFile,dbd_size,NULL,FILE_BEGIN);
m_length=needed; m_length=needed;
m_pos=0; m_pos=0;
@ -402,9 +424,9 @@ static int NSISCALL __ensuredata(int amount)
{ {
DWORD r,t; DWORD r,t;
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT #ifdef NSIS_CONFIG_VISIBLE_SUPPORT
if (g_inst_cmnheader) if (g_header)
#ifdef NSIS_CONFIG_SILENT_SUPPORT #ifdef NSIS_CONFIG_SILENT_SUPPORT
if (!(inst_flags&(CH_FLAGS_SILENT|CH_FLAGS_SILENT_LOG))) if (!g_exec_flags.silent)
#endif #endif
{ {
if (hwnd) { if (hwnd) {
@ -412,13 +434,13 @@ static int NSISCALL __ensuredata(int amount)
m_pos=m_length-(amount-(dbd_size-dbd_pos)); m_pos=m_length-(amount-(dbd_size-dbd_pos));
while (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) DispatchMessage(&msg); while (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) DispatchMessage(&msg);
} }
else if (g_hwnd && GetTickCount() > verify_time) else if (GetTickCount() > verify_time)
hwnd = CreateDialogParam( hwnd = CreateDialogParam(
g_hInstance, g_hInstance,
MAKEINTRESOURCE(IDD_VERIFY), MAKEINTRESOURCE(IDD_VERIFY),
0, 0,
verProc, verProc,
(LPARAM)_LANG_UNPACKING g_hwnd ? 0 : (LPARAM)_LANG_UNPACKING
); );
} }
#endif//NSIS_CONFIG_VISIBLE_SUPPORT #endif//NSIS_CONFIG_VISIBLE_SUPPORT
@ -458,7 +480,7 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
int retval; int retval;
if (offset>=0) if (offset>=0)
{ {
dbd_pos=g_db_offset+offset; dbd_pos=g_blocks[NB_DATA].offset+offset;
SetFilePointer(dbd_hFile,dbd_pos,NULL,FILE_BEGIN); SetFilePointer(dbd_hFile,dbd_pos,NULL,FILE_BEGIN);
} }
retval=__ensuredata(sizeof(int)); retval=__ensuredata(sizeof(int));
@ -499,7 +521,7 @@ BOOL NSISCALL ReadSelfFile(LPVOID lpBuffer, DWORD nNumberOfBytesToRead)
return ReadFile(g_db_hFile,lpBuffer,nNumberOfBytesToRead,&rd,NULL) && (rd == nNumberOfBytesToRead); return ReadFile(g_db_hFile,lpBuffer,nNumberOfBytesToRead,&rd,NULL) && (rd == nNumberOfBytesToRead);
} }
DWORD NSISCALL SetSelfFilePointer(LONG lDistanceToMove, DWORD dwMoveMethod) DWORD NSISCALL SetSelfFilePointer(LONG lDistanceToMove)
{ {
return SetFilePointer(g_db_hFile,lDistanceToMove,NULL,dwMoveMethod); return SetFilePointer(g_db_hFile,lDistanceToMove,NULL,FILE_BEGIN);
} }

View file

@ -4,22 +4,23 @@
#define _FILEFORM_H_ #define _FILEFORM_H_
// stored in file: // * the installer is compsed of the following parts:
// exehead (~34k) // exehead (~34kb)
// firstheader (~28 bytes) // firstheader (struct firstheader)
// hdrinfo (4 bytes describing length/compression):: // * headers (compressed together):
// (if install) // header (struct header)
// header (~228 bytes) // * nsis blocks (described in header->blocks)
// sections (20 bytes each) // pages (struct page)
// (if uninstall) // section headers (struct section)
// uninstall_header (~116 bytes) // entries/instructions (struct entry)
// pages (12 bytes each) // strings (null seperated)
// entries (24 bytes each) // language tables (language id, dialog offset, language strings)
// string table // colors (struct color)
// language tables // data block (files and uninstaller data)
// datablock // * not compressed
// (hdrinfo+datablock is at least 512 bytes if CRC enabled)
// CRC (optional - 4 bytes) // CRC (optional - 4 bytes)
//
// headers + datablock is at least 512 bytes if CRC enabled
#define MAX_ENTRY_OFFSETS 6 #define MAX_ENTRY_OFFSETS 6
@ -92,8 +93,7 @@ enum
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT #ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
EW_GETDLGITEM, // GetDlgItem: 3: [outputvar, dialog, item_id] EW_GETDLGITEM, // GetDlgItem: 3: [outputvar, dialog, item_id]
EW_GETWINTEXT, // GetWindowText: 2: [outputvar, hwnd] EW_SETCTLCOLORS, // SerCtlColors: 3: [hwnd, pointer to struct colors]
EW_SETBKCOLOR, // SerBkColor: 2: [hwnd, color]
EW_SETBRANDINGIMAGE, // SetBrandingImage: 1: [Bitmap file] EW_SETBRANDINGIMAGE, // SetBrandingImage: 1: [Bitmap file]
EW_CREATEFONT, // CreateFont: 5: [handle output, face name, height, weight, flags] EW_CREATEFONT, // CreateFont: 5: [handle output, face name, height, weight, flags]
EW_SHOWWINDOW, // ShowWindow: 2: [hwnd, show state] EW_SHOWWINDOW, // ShowWindow: 2: [hwnd, show state]
@ -211,96 +211,6 @@ typedef struct
int length_of_all_following_data; int length_of_all_following_data;
} firstheader; } firstheader;
// Strings common to both installers and uninstallers
typedef struct
{
int name; // name of installer
// unprocessed strings
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
int branding;
int backbutton;
int nextbutton;
int cancelbutton;
int showdetailsbutton;
int closebutton; // "Close"
int completed;
int copy_details;
int byte;
int kilo;
int mega;
int giga;
// processed strings
int subcaptions[5];
#endif
int caption; // name of installer + " Setup" or whatever.
#ifdef NSIS_SUPPORT_FILE
int fileerrtext;
int fileerrtext_noignore;
#endif
#if defined(NSIS_SUPPORT_DELETE) || defined(NSIS_SUPPORT_RMDIR) || defined(NSIS_SUPPORT_FILE)
int cant_write;
#endif
#ifdef NSIS_SUPPORT_RMDIR
int remove_dir;
#endif
#ifdef NSIS_SUPPORT_COPYFILES
int copy_failed;
int copy_to;
#endif
#ifdef NSIS_SUPPORT_ACTIVEXREG
int registering;
int unregistering;
int symbol_not_found;
int could_not_load;
int no_ole;
// not used anywhere - int err_reg_dll;
#endif
#ifdef NSIS_SUPPORT_CREATESHORTCUT
int create_shortcut;
int err_creating_shortcut;
#endif
#ifdef NSIS_SUPPORT_DELETE
int del_file;
#ifdef NSIS_SUPPORT_MOVEONREBOOT
int del_on_reboot;
#endif
#endif
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
int created_uninst;
int err_creating;
#endif
#ifdef NSIS_SUPPORT_SHELLEXECUTE
int exec_shell;
#endif
#ifdef NSIS_SUPPORT_EXECUTE
int exec;
#endif
#ifdef NSIS_SUPPORT_MOVEONREBOOT
int rename_on_reboot;
#endif
#ifdef NSIS_SUPPORT_RENAME
int rename;
#endif
#ifdef NSIS_SUPPORT_FILE
int extract;
int err_writing;
int err_decompressing;
int skipped;
#endif
int inst_corrupted;
int output_dir;
int create_dir;
#ifdef NSIS_CONFIG_LOG
int log_install_process;
#endif
} common_strings;
// Flags for common_header.flags // Flags for common_header.flags
#define CH_FLAGS_DETAILS_SHOWDETAILS 1 #define CH_FLAGS_DETAILS_SHOWDETAILS 1
#define CH_FLAGS_DETAILS_NEVERSHOW 2 #define CH_FLAGS_DETAILS_NEVERSHOW 2
@ -316,25 +226,54 @@ typedef struct
#define CH_FLAGS_COMP_ONLY_ON_CUSTOM 256 #define CH_FLAGS_COMP_ONLY_ON_CUSTOM 256
#define CH_FLAGS_NO_CUSTOM 512 #define CH_FLAGS_NO_CUSTOM 512
#endif #endif
#ifdef NSIS_CONFIG_LICENSEPAGE
#define CH_FLAGS_LICENSE_FORCE_SELECTION 1024 // nsis blocks
struct block_header {
int offset;
int num;
};
enum {
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
NB_PAGES,
#endif #endif
NB_SECTIONS,
NB_ENTRIES,
NB_STRINGS,
NB_LANGTABLES,
NB_CTLCOLORS,
NB_DATA,
BLOCKS_NUM
};
// Settings common to both installers and uninstallers // Settings common to both installers and uninstallers
typedef struct typedef struct
{ {
int language_tables_num; // number of strings tables in array int flags; // CH_FLAGS_*
int language_table_size; // size of each language table struct block_header blocks[BLOCKS_NUM];
int num_entries; // total number of entries // InstallDirRegKey stuff
int num_string_bytes; // total number of bytes taken by strings int install_reg_rootkey;
// these two are not processed!
int num_pages; // number of used pages (including custom pages) int install_reg_key_ptr, install_reg_value_ptr;
#ifdef NSIS_SUPPORT_BGBG #ifdef NSIS_SUPPORT_BGBG
int bg_color1, bg_color2, bg_textcolor; int bg_color1, bg_color2, bg_textcolor;
#endif #endif
int lb_bg, lb_fg, license_bg;
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
// installation log window colors
int lb_bg, lb_fg;
#endif
// langtable size
int langtable_size;
#ifdef NSIS_CONFIG_LICENSEPAGE
// license background color
int license_bg;
#endif//NSIS_CONFIG_LICENSEPAGE
#ifdef NSIS_SUPPORT_CODECALLBACKS #ifdef NSIS_SUPPORT_CODECALLBACKS
// .on* calls // .on* calls
@ -346,69 +285,6 @@ typedef struct
int code_onGUIInit; int code_onGUIInit;
int code_onGUIEnd; int code_onGUIEnd;
#endif #endif
#endif//NSIS_SUPPORT_CODECALLBACKS
int flags; // CH_FLAGS_*
} common_header;
// Strings specific to installers
typedef struct
{
// these first strings are literals (should not be encoded)
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
int browse; // "Browse..."
int installbutton; // "Install"
int spacerequired; // "Space required: "
int spaceavailable; // "Space available: "
int custom; // Custom
int text; // directory page text
int dirsubtext; // directory text2
#ifdef NSIS_CONFIG_COMPONENTPAGE
int componenttext; // component page text
int componentsubtext[4];
#endif
#ifdef NSIS_CONFIG_LICENSEPAGE
int licensetext; // license page text
int licensedata; // license text
int licensebutton; // license button text
int licensebuttonagree; // agree check box/radio button
int licensebuttondisagree; // disagree check box/radio button
#endif//NSIS_CONFIG_LICENSEPAGE
#else
int foo;
#endif
} installer_strings;
// Settings specific to installers
typedef struct
{
// common settings
common_header common;
int install_reg_rootkey;
// these two are not processed!
int install_reg_key_ptr, install_reg_value_ptr;
#ifdef NSIS_CONFIG_COMPONENTPAGE
int install_types[NSIS_MAX_INST_TYPES+1];
#endif
#ifdef NSIS_CONFIG_LICENSEPAGE
int license_bg; // license background color
#endif//NSIS_CONFIG_LICENSEPAGE
int install_directory_ptr; // default install dir.
int install_directory_auto_append; // auto append part
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
int uninstdata_offset; // -1 if no uninst data.
int uninsticon_size;
#endif
int num_sections; // total number of sections
#ifdef NSIS_SUPPORT_CODECALLBACKS
// .on* calls
int code_onVerifyInstDir; int code_onVerifyInstDir;
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT #ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
int code_onMouseOverSection; int code_onMouseOverSection;
@ -417,26 +293,20 @@ typedef struct
int code_onSelChange; int code_onSelChange;
#endif//NSIS_CONFIG_COMPONENTPAGE #endif//NSIS_CONFIG_COMPONENTPAGE
#endif//NSIS_SUPPORT_CODECALLBACKS #endif//NSIS_SUPPORT_CODECALLBACKS
#ifdef NSIS_CONFIG_COMPONENTPAGE
int install_types[NSIS_MAX_INST_TYPES+1];
#endif
int install_directory_ptr; // default install dir.
int install_directory_auto_append; // auto append part
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
int uninstdata_offset; // -1 if no uninst data.
int uninsticon_size;
#endif
} header; } header;
// Strings specific to uninstallers
typedef struct
{
int uninstbutton;
int uninstalltext;
int uninstalltext2;
} uninstall_strings;
// Settings specific to uninstallers
typedef struct
{
// common settings
common_header common;
int code;
int code_size;
} uninstall_header;
// used for section->flags // used for section->flags
#define SF_SELECTED 1 #define SF_SELECTED 1
#define SF_SUBSEC 2 #define SF_SUBSEC 2
@ -462,36 +332,77 @@ typedef struct
int offsets[MAX_ENTRY_OFFSETS]; // count and meaning of offsets depend on 'which' int offsets[MAX_ENTRY_OFFSETS]; // count and meaning of offsets depend on 'which'
} entry; } entry;
// page window proc
enum enum
{ {
NSIS_PAGE_CUSTOM = -1,
#ifdef NSIS_CONFIG_LICENSEPAGE #ifdef NSIS_CONFIG_LICENSEPAGE
NSIS_PAGE_LICENSE, PWP_LICENSE,
#endif #endif
#ifdef NSIS_CONFIG_COMPONENTPAGE #ifdef NSIS_CONFIG_COMPONENTPAGE
NSIS_PAGE_SELCOM, PWP_SELCOM,
#endif #endif
NSIS_PAGE_DIR, PWP_DIR,
NSIS_PAGE_INSTFILES, PWP_INSTFILES,
NSIS_PAGE_COMPLETED,
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
NSIS_PAGE_UNINST PWP_UNINST,
#endif #endif
PWP_COMPLETED,
PWP_CUSTOM
}; };
// page flags
#define PF_BACK_ENABLE 256
#define PF_NEXT_ENABLE 2
#define PF_CANCEL_ENABLE 4
#define PF_BACK_SHOW 8 // must be SW_SHOWNA, don't change
#define PF_LICENSE_STREAM 16
#define PF_LICENSE_FORCE_SELECTION 32
#define PF_LICENSE_NO_FORCE_SELECTION 64
#define PF_LICENSE_SELECTED 1 // must be 1
#define PF_NO_NEXT_FOCUS 128
#define PF_PAGE_EX 512
typedef struct typedef struct
{ {
int id; // index in the pages array int dlg_id; // dialog resource id
int wndproc_id;
#ifdef NSIS_SUPPORT_CODECALLBACKS #ifdef NSIS_SUPPORT_CODECALLBACKS
int prefunc; // called before the page is created, or if custom to show the it. Allows to skip the page using Abort. // called before the page is created, or if custom to show the page
int showfunc; // function to do stuff right before page is shown // use Abort to skip the page
int leavefunc; // function to do stuff after the page is shown int prefunc;
// called right before page is shown
int showfunc;
// called when the user leaves to the next page
// use Abort to force the user to stay on this page
int leavefunc;
#endif //NSIS_SUPPORT_CODECALLBACKS #endif //NSIS_SUPPORT_CODECALLBACKS
int caption; // caption tab
int flags;
int caption;
int back;
int next; int next;
int button_states; int clicknext;
int cancel;
int parms[5];
} page; } page;
#define CC_TEXT 1
#define CC_TEXT_SYS 2
#define CC_BK 4
#define CC_BK_SYS 8
#define CC_BKB 16
typedef struct {
COLORREF text;
LOGBRUSH bk;
HBRUSH bkb;
int bkmode;
int flags;
} ctlcolors;
// the following are only used/implemented in exehead, not makensis. // the following are only used/implemented in exehead, not makensis.
int NSISCALL isheader(firstheader *h); // returns 0 on not header, length_of_datablock on success int NSISCALL isheader(firstheader *h); // returns 0 on not header, length_of_datablock on success
@ -510,9 +421,8 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
extern HANDLE g_db_hFile; extern HANDLE g_db_hFile;
extern int g_quit_flag; extern int g_quit_flag;
const char * NSISCALL GetStringFromStringTab(int offs);
BOOL NSISCALL ReadSelfFile(LPVOID lpBuffer, DWORD nNumberOfBytesToRead); BOOL NSISCALL ReadSelfFile(LPVOID lpBuffer, DWORD nNumberOfBytesToRead);
DWORD NSISCALL SetSelfFilePointer(LONG lDistanceToMove, DWORD dwMoveMethod); DWORD NSISCALL SetSelfFilePointer(LONG lDistanceToMove);
// $0..$9, $INSTDIR, etc are encoded as ASCII bytes starting from this value. // $0..$9, $INSTDIR, etc are encoded as ASCII bytes starting from this value.
// Added by ramon 3 jun 2003 // Added by ramon 3 jun 2003
@ -539,7 +449,7 @@ DWORD NSISCALL SetSelfFilePointer(LONG lDistanceToMove, DWORD dwMoveMethod);
#endif #endif
#endif #endif
union installer_flags { union exec_flags {
struct { struct {
int autoclose; int autoclose;
int all_user_var; int all_user_var;
@ -550,8 +460,39 @@ union installer_flags {
#endif #endif
int cur_insttype; int cur_insttype;
int insttype_changed; int insttype_changed;
#ifdef NSIS_CONFIG_SILENT_SUPPORT
int silent;
#endif
}; };
int flags[1]; int flags[1];
}; };
#ifdef EXEHEAD
extern struct block_header g_blocks[BLOCKS_NUM];
extern header *g_header;
extern int g_flags;
extern int g_filehdrsize;
extern int g_is_uninstaller;
#define g_pages ((page*)g_blocks[NB_PAGES].offset)
#define g_sections ((section*)g_blocks[NB_SECTIONS].offset)
#define num_sections (g_blocks[NB_SECTIONS].num)
#define g_entries ((entry*)g_blocks[NB_ENTRIES].offset)
/*extern int num_sections;
//extern int g_autoclose;
extern void *g_inst_combinedheader;
extern page *g_inst_page;
extern section *g_inst_section;
extern entry *g_inst_entry;
#define g_inst_header ((header *)g_inst_combinedheader)
#define g_inst_cmnheader ((common_header *)g_inst_combinedheader)
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
#define g_inst_uninstheader ((uninstall_header *)g_inst_combinedheader)
extern int g_is_uninstaller;
#endif*/
#endif
#endif //_FILEFORM_H_ #endif //_FILEFORM_H_

View file

@ -24,99 +24,43 @@
#define _LANG_GENERIC_ERROR "NSIS ERROR" #define _LANG_GENERIC_ERROR "NSIS ERROR"
#define LANG_STR_TAB(x) cur_langtable[-((int)x+1)]
// Changed by Amir Szekely 3rd August 2002 #define LANG_BRANDING -1
// Now supports more than one language in each installer #define LANG_CAPTION -2
#define LANG_NAME -3
// Modified by Dave Laundon 10th August 2002 #define LANG_SPACE_AVAIL -4
// In many places, these strings are now referenced by an ID (just their offsets #define LANG_SPACE_REQ -5
// into the (common|installer|uninstall)_strings structures) through *_from_lang #define LANG_CANTWRITE -6
// and *FromLang functions - removing code-costly references to the #define LANG_COPYFAILED -7
// cur_(common|install|uninstall)_strings_table globals. Common strings are #define LANG_COPYTO -8
// identified by IDs >=0 and install/uninstall strings by IDs <0. What's more, #define LANG_CANNOTFINDSYMBOL -9
// these IDs fall between -128 to +127 and compile to tiny 2-byte PUSH <8-bit> #define LANG_COULDNOTLOAD -10
// instructions when being passed to the functions. #define LANG_CREATEDIR -11
#define LANG_CREATESHORTCUT -12
// Please note that all LANG_* define the offset not the string itself. #define LANG_CREATEDUNINST -13
// To get the string itself use process_string_fromtab, GetStringFromStringTab or LANG_STR(). #define LANG_DELETEFILE -14
#define LANG_DELETEONREBOOT -15
#define LANG_STR(x) GetStringFromStringTab(x) #define LANG_ERRORCREATINGSHORTCUT -16
#define LANG_STR_TAB(x) cur_language_table[-((int)x+1)] #define LANG_ERRORCREATING -17
#define LANG_ERRORDECOMPRESSING -18
#define INSTALL_STR(x) (~((sizeof(common_strings) + FIELD_OFFSET(installer_strings, x)) / sizeof(int))) #define LANG_DLLREGERROR -19
#define LANG_EXECSHELL -20
// Installer specific strings #define LANG_EXECUTE -21
#define LANG_BTN_BROWSE (INSTALL_STR(browse)) #define LANG_EXTRACT -22
#define LANG_BTN_INSTALL (INSTALL_STR(installbutton)) #define LANG_ERRORWRITING -23
#define LANG_SPACE_REQ (INSTALL_STR(spacerequired)) #define LANG_INSTCORRUPTED -24
#define LANG_SPACE_AVAIL (INSTALL_STR(spaceavailable)) #define LANG_NOOLE -25
#define LANG_COMP_CUSTOM (INSTALL_STR(custom)) #define LANG_OUTPUTDIR -26
#define LANG_DIR_TEXT (INSTALL_STR(text)) #define LANG_REMOVEDIR -27
#define LANG_DIR_SUBTEXT (INSTALL_STR(dirsubtext)) #define LANG_RENAMEONREBOOT -28
#define LANG_COMP_TEXT (INSTALL_STR(componenttext)) #define LANG_RENAME -29
#define LANG_COMP_SUBTEXT(x) (INSTALL_STR(componentsubtext[x])) #define LANG_SKIPPED -30
#define LANG_LICENSE_TEXT (INSTALL_STR(licensetext)) #define LANG_COPYDETAILS -31
#define LANG_LICENSE_DATA (INSTALL_STR(licensedata)) #define LANG_LOG_INSTALL_PROCESS -32
#define LANG_BTN_LICENSE (INSTALL_STR(licensebutton)) #define LANG_BYTE -33
#define LANG_BTN_LICENSE_AGREE (INSTALL_STR(licensebuttonagree)) #define LANG_KILO -34
#define LANG_BTN_LICENSE_DISAGREE (INSTALL_STR(licensebuttondisagree)) #define LANG_MEGA -35
#define LANG_GIGA -36
#define UNINSTALL_STR(x) (~((sizeof(common_strings) + FIELD_OFFSET(uninstall_strings, x)) / sizeof(int)))
// Uninstall specific strings
#define LANG_BTN_UNINST (UNINSTALL_STR(uninstbutton))
#define LANG_UNINST_TEXT (UNINSTALL_STR(uninstalltext))
#define LANG_UNINST_SUBTEXT (UNINSTALL_STR(uninstalltext2))
#define COMMON_STR(x) (~(FIELD_OFFSET(common_strings, x) / sizeof(int)))
// Common strings
#define LANG_BTN_NEXT (COMMON_STR(nextbutton))
#define LANG_BTN_BACK (COMMON_STR(backbutton))
#define LANG_BRANDING (COMMON_STR(branding))
#define LANG_BTN_CANCEL (COMMON_STR(cancelbutton))
#define LANG_BTN_DETAILS (COMMON_STR(showdetailsbutton))
#define LANG_COMPLETED (COMMON_STR(completed))
#define LANG_BTN_CLOSE (COMMON_STR(closebutton))
#define LANG_NAME (COMMON_STR(name))
#define LANG_CAPTION (COMMON_STR(caption))
#define LANG_SUBCAPTION(x) (COMMON_STR(subcaptions[x]))
#define LANG_INSTCORRUPTED (COMMON_STR(inst_corrupted))
#define LANG_COPYDETAILS (COMMON_STR(copy_details))
#define LANG_LOG_INSTALL_PROCESS (COMMON_STR(log_install_process))
#define LANG_BYTE (COMMON_STR(byte))
#define LANG_KILO (COMMON_STR(kilo))
#define LANG_MEGA (COMMON_STR(mega))
#define LANG_GIGA (COMMON_STR(giga))
// instruction strings
#define LANG_FILEERR (COMMON_STR(fileerrtext))
#define LANG_FILEERR_NOIGNORE (COMMON_STR(fileerrtext_noignore))
#define LANG_DELETEFILE (COMMON_STR(del_file))
#define LANG_DLLREGERROR (COMMON_STR(err_reg_dll))
#define LANG_REMOVEDIR (COMMON_STR(remove_dir))
#define LANG_OUTPUTDIR (COMMON_STR(output_dir))
#define LANG_CREATEDIR (COMMON_STR(create_dir))
#define LANG_RENAME (COMMON_STR(rename))
#define LANG_RENAMEONREBOOT (COMMON_STR(rename_on_reboot))
#define LANG_SKIPPED (COMMON_STR(skipped))
#define LANG_CANTWRITE (COMMON_STR(cant_write))
#define LANG_EXTRACT (COMMON_STR(extract))
#define LANG_ERRORWRITING (COMMON_STR(err_writing))
#define LANG_ERRORDECOMPRESSING (COMMON_STR(err_decompressing))
#define LANG_DELETEONREBOOT (COMMON_STR(del_on_reboot))
#define LANG_EXECSHELL (COMMON_STR(exec_shell))
#define LANG_EXECUTE (COMMON_STR(exec))
#define LANG_CANNOTFINDSYMBOL (COMMON_STR(symbol_not_found))
#define LANG_COULDNOTLOAD (COMMON_STR(could_not_load))
#define LANG_NOOLE (COMMON_STR(no_ole))
#define LANG_ERRORCREATINGSHORTCUT (COMMON_STR(err_creating_shortcut))
#define LANG_CREATESHORTCUT (COMMON_STR(create_shortcut))
#define LANG_COPYTO (COMMON_STR(copy_to))
#define LANG_COPYFAILED (COMMON_STR(copy_failed))
#define LANG_ERRORCREATING (COMMON_STR(err_creating))
#define LANG_CREATEDUNINST (COMMON_STR(created_uninst))
#define LANG_REGISTERING (COMMON_STR(registering))
#define LANG_UNREGISTERING (COMMON_STR(unregistering))
#endif//_NSIS_LANG_H_ #endif//_NSIS_LANG_H_

View file

@ -8,6 +8,8 @@
#define IDC_BACK 3 #define IDC_BACK 3
#define IDD_LICENSE 102 #define IDD_LICENSE 102
#define IDD_LICENSE_FSRB 108
#define IDD_LICENSE_FSCB 109
#define IDI_ICON2 103 #define IDI_ICON2 103
#define IDD_DIR 103 #define IDD_DIR 103
#define IDD_SELCOM 104 #define IDD_SELCOM 104
@ -15,7 +17,7 @@
#define IDD_INSTFILES 106 #define IDD_INSTFILES 106
#define IDD_UNINST 107 #define IDD_UNINST 107
#define IDD_VERIFY 111 #define IDD_VERIFY 111
#define IDB_BITMAP1 109 #define IDB_BITMAP1 110
#define IDC_EDIT1 1000 #define IDC_EDIT1 1000
#define IDC_BROWSE 1001 #define IDC_BROWSE 1001
#define IDC_PROGRESS 1004 #define IDC_PROGRESS 1004

View file

@ -28,57 +28,97 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_LICENSEPAGE) #if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_LICENSEPAGE)
#if defined(APSTUDIO_INVOKED) #if defined(APSTUDIO_INVOKED)
IDD_LICENSE$(NSIS_CONFIG_LICENSEPAGE) DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_LICENSE$(NSIS_CONFIG_LICENSEPAGE) DIALOGEX 0, 0, 266, 130
#else #else
IDD_LICENSE DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_LICENSE DIALOGEX 0, 0, 266, 130
#endif #endif
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
ICON IDI_ICON2,IDC_ULICON,0,0,20,20 ICON IDI_ICON2,IDC_ULICON,0,0,22,20
LTEXT "",IDC_INTROTEXT,25,0,241,23 LTEXT "",IDC_INTROTEXT,25,0,241,23
CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL | CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL |
0x804,0,24,266,105 0x804,0,24,266,105
END END
#endif #endif
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_LICENSEPAGE)
#if defined(APSTUDIO_INVOKED)
IDD_LICENSE_FSRB$(NSIS_CONFIG_LICENSEPAGE) DIALOG DISCARDABLE 0, 0, 266, 130
#else
IDD_LICENSE_FSRB DIALOG DISCARDABLE 0, 0, 266, 130
#endif
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CAPTION
FONT 8, "MS Shell Dlg"
BEGIN
ICON IDI_ICON2,1031,0,0,22,20
LTEXT "",IDC_INTROTEXT,25,0,241,23
CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL |
0x804,0,24,266,85
CONTROL "",IDC_LICENSEDISAGREE,"Button",BS_AUTORADIOBUTTON |
WS_TABSTOP,0,120,266,9
CONTROL "",IDC_LICENSEAGREE,"Button",BS_AUTORADIOBUTTON |
WS_TABSTOP,0,110,266,9
END
#endif
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_LICENSEPAGE)
#if defined(APSTUDIO_INVOKED)
IDD_LICENSE_FSCB$(NSIS_CONFIG_LICENSEPAGE) DIALOG DISCARDABLE 0, 0, 266, 130
#else
IDD_LICENSE_FSCB DIALOG DISCARDABLE 0, 0, 266, 130
#endif
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CAPTION
FONT 8, "MS Shell Dlg"
BEGIN
ICON IDI_ICON2,1031,0,0,22,20
LTEXT "",IDC_INTROTEXT,25,0,241,23
CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL |
0x804,0,24,266,95
CONTROL "",IDC_LICENSEAGREE,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,0,120,266,9
END
#endif
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_VISIBLE_SUPPORT) #if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_VISIBLE_SUPPORT)
#if defined(APSTUDIO_INVOKED) #if defined(APSTUDIO_INVOKED)
IDD_DIR$(NSIS_CONFIG_VISIBLE_SUPPORT) DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_DIR$(NSIS_CONFIG_VISIBLE_SUPPORT) DIALOGEX 0, 0, 266, 130
#else #else
IDD_DIR DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_DIR DIALOGEX 0, 0, 266, 130
#endif #endif
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
EDITTEXT IDC_DIR,8,49,187,12,ES_AUTOHSCROLL EDITTEXT IDC_DIR,8,49,187,12,ES_AUTOHSCROLL
PUSHBUTTON "",IDC_BROWSE,202,48,55,14 PUSHBUTTON "",IDC_BROWSE,202,48,55,14
ICON IDI_ICON2,IDC_ULICON,0,0,20,20 ICON IDI_ICON2,IDC_ULICON,0,0,22,20
CONTROL "",IDC_SELDIRTEXT,"Static",SS_LEFTNOWORDWRAP,
0,36,265,8 CONTROL "",IDC_SPACEAVAILABLE,"Static",SS_LEFTNOWORDWRAP,0,122,
CONTROL "",IDC_SPACEAVAILABLE,"Static",SS_LEFTNOWORDWRAP,0,122,265,8 265,8
CONTROL "",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | CONTROL "",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE |
WS_TABSTOP,8,65,118,10 WS_TABSTOP,8,71,118,10
CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFTNOWORDWRAP,0,111,265,8 CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFTNOWORDWRAP,0,111,
265,8
LTEXT "",IDC_INTROTEXT,25,0,241,34 LTEXT "",IDC_INTROTEXT,25,0,241,34
GROUPBOX "",IDC_SELDIRTEXT,1,38,264,30
END END
#endif #endif
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_COMPONENTPAGE) #if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_COMPONENTPAGE)
#if defined(APSTUDIO_INVOKED) #if defined(APSTUDIO_INVOKED)
IDD_SELCOM$(NSIS_CONFIG_COMPONENTPAGE) DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_SELCOM$(NSIS_CONFIG_COMPONENTPAGE) DIALOGEX 0, 0, 266, 130
#else #else
IDD_SELCOM DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_SELCOM DIALOGEX 0, 0, 266, 130
#endif #endif
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
COMBOBOX IDC_COMBO1,114,25,152,102,CBS_DROPDOWNLIST | WS_VSCROLL | COMBOBOX IDC_COMBO1,114,25,152,102,CBS_DROPDOWNLIST | NOT
WS_TABSTOP | NOT WS_VISIBLE WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
ICON IDI_ICON2,IDC_ULICON,0,0,21,20 ICON IDI_ICON2,IDC_ULICON,0,0,22,20
LTEXT "",IDC_TEXT2,0,40,108,65 LTEXT "",IDC_TEXT2,0,40,108,65
CONTROL "",IDC_TEXT1,"Static",SS_LEFTNOWORDWRAP,0,27,108,8 CONTROL "",IDC_TEXT1,"Static",SS_LEFTNOWORDWRAP,0,27,108,8
CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFT,0,111,111,18 LTEXT "",IDC_SPACEREQUIRED,0,111,111,18,NOT WS_GROUP
LTEXT "",IDC_INTROTEXT,25,0,241,25 LTEXT "",IDC_INTROTEXT,25,0,241,25
CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS |
TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP |
@ -88,53 +128,55 @@ END
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_VISIBLE_SUPPORT) #if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_VISIBLE_SUPPORT)
#if defined(APSTUDIO_INVOKED) #if defined(APSTUDIO_INVOKED)
IDD_INST$(NSIS_CONFIG_VISIBLE_SUPPORT) DIALOGEX DISCARDABLE 0, 0, 280, 162 IDD_INST$(NSIS_CONFIG_VISIBLE_SUPPORT) DIALOGEX 0, 0, 280, 162
#else #else
IDD_INST DIALOGEX DISCARDABLE 0, 0, 280, 162 IDD_INST DIALOGEX 0, 0, 280, 162
#endif #endif
STYLE DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_BORDER STYLE DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION |
FONT 8, "MS Shell Dlg" WS_SYSMENU
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
PUSHBUTTON "",IDC_BACK,171,142,50,14,WS_GROUP | NOT WS_VISIBLE PUSHBUTTON "",IDC_BACK,171,142,50,14,NOT WS_VISIBLE | WS_GROUP
PUSHBUTTON "",IDOK,223,142,50,14 PUSHBUTTON "",IDOK,223,142,50,14
PUSHBUTTON "",IDCANCEL,7,142,50,14 PUSHBUTTON "",IDCANCEL,7,142,50,14
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ | WS_GROUP,7,138,267,1 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ | WS_GROUP,7,138,
CONTROL "",IDC_CHILDRECT,"Static",SS_BLACKRECT | NOT WS_VISIBLE | WS_GROUP, 267,1
7,6,266,130 CONTROL "",IDC_CHILDRECT,"Static",SS_BLACKRECT | NOT WS_VISIBLE |
CTEXT "",IDC_VERSTR,59,145,108,8,WS_DISABLED | WS_GROUP WS_GROUP,7,6,266,130
CTEXT "",IDC_VERSTR,59,145,108,8,WS_DISABLED
END END
#endif #endif
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_VISIBLE_SUPPORT) #if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_VISIBLE_SUPPORT)
#if defined(APSTUDIO_INVOKED) #if defined(APSTUDIO_INVOKED)
IDD_INSTFILES$(NSIS_CONFIG_VISIBLE_SUPPORT) DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_INSTFILES$(NSIS_CONFIG_VISIBLE_SUPPORT) DIALOGEX 0, 0, 266, 130
#else #else
IDD_INSTFILES DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_INSTFILES DIALOGEX 0, 0, 266, 130
#endif #endif
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,24,10,241,11 CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,24,10,241,
CONTROL "",IDC_INTROTEXT,"Static",SS_LEFTNOWORDWRAP, 11
24,0,241,8 CONTROL "",IDC_INTROTEXT,"Static",SS_LEFTNOWORDWRAP,24,0,241,8
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL |
LVS_NOCOLUMNHEADER | NOT WS_VISIBLE | WS_BORDER | LVS_NOCOLUMNHEADER | NOT WS_VISIBLE | WS_BORDER |
WS_TABSTOP,0,25,265,104 WS_TABSTOP,0,25,265,104
ICON IDI_ICON2,IDC_ULICON,0,0,20,20 ICON IDI_ICON2,IDC_ULICON,0,0,22,20
PUSHBUTTON "",IDC_SHOWDETAILS,0,28,60,14,NOT WS_TABSTOP PUSHBUTTON "",IDC_SHOWDETAILS,0,28,60,14,NOT WS_TABSTOP
END END
#endif #endif
#if defined(APSTUDIO_INVOKED) || defined(_NSIS_CONFIG_UNINSTDLG) #if defined(APSTUDIO_INVOKED) || defined(_NSIS_CONFIG_UNINSTDLG)
#if defined(APSTUDIO_INVOKED) #if defined(APSTUDIO_INVOKED)
IDD_UNINST$(_NSIS_CONFIG_UNINSTDLG) DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_UNINST$(_NSIS_CONFIG_UNINSTDLG) DIALOGEX 0, 0, 266, 130
#else #else
IDD_UNINST DIALOGEX DISCARDABLE 0, 0, 266, 130 IDD_UNINST DIALOGEX 0, 0, 266, 130
#endif #endif
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
ICON IDI_ICON2,IDC_ULICON,0,1,20,20 ICON IDI_ICON2,IDC_ULICON,0,1,22,20
LTEXT "",IDC_UNINSTFROM,0,45,55,8 LTEXT "",IDC_UNINSTFROM,0,45,55,8
EDITTEXT IDC_EDIT1,56,43,209,12,ES_AUTOHSCROLL | ES_READONLY EDITTEXT IDC_EDIT1,56,43,209,12,ES_AUTOHSCROLL | ES_READONLY
LTEXT "",IDC_INTROTEXT,25,0,241,34 LTEXT "",IDC_INTROTEXT,25,0,241,34
@ -143,12 +185,12 @@ END
#if defined(APSTUDIO_INVOKED) || defined(_NSIS_CONFIG_VERIFYDIALOG) #if defined(APSTUDIO_INVOKED) || defined(_NSIS_CONFIG_VERIFYDIALOG)
#if defined(APSTUDIO_INVOKED) #if defined(APSTUDIO_INVOKED)
IDD_VERIFY$(_NSIS_CONFIG_VERIFYDIALOG) DIALOGEX DISCARDABLE 0, 0, 162, 22 IDD_VERIFY$(_NSIS_CONFIG_VERIFYDIALOG) DIALOGEX 0, 0, 162, 22
#else #else
IDD_VERIFY DIALOGEX DISCARDABLE 0, 0, 162, 22 IDD_VERIFY DIALOGEX 0, 0, 162, 22
#endif #endif
STYLE DS_MODALFRAME | DS_SHELLFONT | DS_CENTER | WS_POPUP | WS_VISIBLE STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
CTEXT "",IDC_STR,7,7,148,8 CTEXT "",IDC_STR,7,7,148,8
END END

View file

@ -1,33 +1,22 @@
#ifdef NSIS_SUPPORT_NAMED_USERVARS #ifdef NSIS_SUPPORT_NAMED_USERVARS
extern NSIS_STRING g_usrvars[TOTAL_COMPATIBLE_STATIC_VARS_COUNT]; extern NSIS_STRING g_usrvars[TOTAL_COMPATIBLE_STATIC_VARS_COUNT];
#define state_command_line g_usrvars[20]
#define state_install_directory g_usrvars[21]
#define state_output_directory g_usrvars[22]
#define state_exe_directory g_usrvars[23]
#define state_language g_usrvars[24]
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT
#define state_plugins_dir g_usrvars[25]
#endif
#define state_temp_dir g_usrvars[32]
#else #else
extern char temp_directory[NSIS_MAX_STRLEN];
extern char g_usrvars[USER_VARS_COUNT][NSIS_MAX_STRLEN]; extern char g_usrvars[USER_VARS_COUNT][NSIS_MAX_STRLEN];
extern char *state_command_line; #endif
extern char *state_install_directory;
extern char *state_output_directory; #define state_command_line g_usrvars[20]
extern char *state_exe_directory; #define state_install_directory g_usrvars[21]
extern char *state_language; #define state_output_directory g_usrvars[22]
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT #define state_exe_directory g_usrvars[23]
extern char *state_plugins_dir; #define state_language g_usrvars[24]
#endif #define state_temp_dir g_usrvars[25]
#define state_temp_dir temp_directory #define state_click_next g_usrvars[26]
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT
#define state_plugins_dir g_usrvars[27]
#endif #endif
extern char g_caption[NSIS_MAX_STRLEN*2]; extern char g_caption[NSIS_MAX_STRLEN*2];
extern HWND g_hwnd; extern HWND g_hwnd;
extern int g_filehdrsize;
extern HANDLE g_hInstance; extern HANDLE g_hInstance;
extern HWND insthwnd,insthwndbutton; extern HWND insthwnd,insthwndbutton;
extern HICON g_hIcon; extern HICON g_hIcon;
extern int inst_flags;

View file

@ -1,29 +1,11 @@
#ifndef _UI_H_ #ifndef _UI_H_
#define _UI_H_ #define _UI_H_
// Added by Amir Szekely 3rd August 2002 extern int *cur_langtable;
extern char *language_tables;
extern int *cur_language_table;
int NSISCALL ui_doinstall(void); int NSISCALL ui_doinstall(void);
void NSISCALL update_status_text_from_lang(int id, const char *text2); void NSISCALL update_status_text(int strtab, const char *text2);
void NSISCALL update_status_text(const char *text1, const char *text2);
extern int ui_st_updateflag; extern int ui_st_updateflag;
extern int num_sections;
//extern int g_autoclose;
extern void *g_inst_combinedheader;
extern page *g_inst_page;
extern section *g_inst_section;
extern entry *g_inst_entry;
#define g_inst_header ((header *)g_inst_combinedheader)
#define g_inst_cmnheader ((common_header *)g_inst_combinedheader)
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
#define g_inst_uninstheader ((uninstall_header *)g_inst_combinedheader)
extern int g_is_uninstaller;
#endif
#ifdef NSIS_CONFIG_LOG #ifdef NSIS_CONFIG_LOG
void NSISCALL build_g_logfile(void); void NSISCALL build_g_logfile(void);

View file

@ -37,6 +37,7 @@ char g_log_file[1024];
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT #ifdef NSIS_CONFIG_PLUGIN_SUPPORT
char *state_plugins_dir=g_usrvars[25]; char *state_plugins_dir=g_usrvars[25];
#endif #endif
char *state_plugins_dir=g_usrvars[36];
#endif #endif
HANDLE g_hInstance; HANDLE g_hInstance;
@ -109,7 +110,7 @@ void NSISCALL doRMDir(char *buf, int flags) // 1 - recurse, 2 - rebootok
else if (!RemoveDirectory(buf) && flags&2) { else if (!RemoveDirectory(buf) && flags&2) {
log_printf2("Remove folder on reboot: %s",buf); log_printf2("Remove folder on reboot: %s",buf);
#ifdef NSIS_SUPPORT_REBOOT #ifdef NSIS_SUPPORT_REBOOT
g_flags.exec_reboot++; g_exec_flags.exec_reboot++;
#endif #endif
MoveFileOnReboot(buf,0); MoveFileOnReboot(buf,0);
} }
@ -163,7 +164,7 @@ int NSISCALL is_valid_instpath(char *s)
{ {
int ivp=0; int ivp=0;
// if CH_FLAGS_NO_ROOT_DIR is set, req is 0, which means rootdirs are not allowed. // if CH_FLAGS_NO_ROOT_DIR is set, req is 0, which means rootdirs are not allowed.
int req=!(inst_flags&CH_FLAGS_NO_ROOT_DIR); int req=!(g_flags&CH_FLAGS_NO_ROOT_DIR);
if (*(WORD*)s == CHAR2_TO_WORD('\\','\\')) // \\ path if (*(WORD*)s == CHAR2_TO_WORD('\\','\\')) // \\ path
{ {
if (lastchar(s)!='\\') ivp++; if (lastchar(s)!='\\') ivp++;
@ -243,7 +244,7 @@ char * NSISCALL my_GetTempFileName(char *buf, const char *dir)
BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew) BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
{ {
BOOL fOk = 0; BOOL fOk = 0;
HMODULE hLib=LoadLibrary("kernel32.dll"); HMODULE hLib=GetModuleHandle("kernel32.dll");
if (hLib) if (hLib)
{ {
typedef BOOL (WINAPI *mfea_t)(LPCSTR lpExistingFileName,LPCSTR lpNewFileName,DWORD dwFlags); typedef BOOL (WINAPI *mfea_t)(LPCSTR lpExistingFileName,LPCSTR lpNewFileName,DWORD dwFlags);
@ -253,7 +254,6 @@ BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
{ {
fOk=mfea(pszExisting, pszNew, MOVEFILE_DELAY_UNTIL_REBOOT|MOVEFILE_REPLACE_EXISTING); fOk=mfea(pszExisting, pszNew, MOVEFILE_DELAY_UNTIL_REBOOT|MOVEFILE_REPLACE_EXISTING);
} }
FreeLibrary(hLib);
} }
if (!fOk) if (!fOk)
@ -270,7 +270,7 @@ BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
if (pszNew) { if (pszNew) {
// create the file if it's not already there to prevent GetShortPathName from failing // create the file if it's not already there to prevent GetShortPathName from failing
CloseHandle(myOpenFile(pszNew, 0, CREATE_NEW)); CloseHandle(myOpenFile(pszNew,0,CREATE_NEW));
GetShortPathName(pszNew,tmpbuf,1024); GetShortPathName(pszNew,tmpbuf,1024);
} }
// wininit is used as a temporary here // wininit is used as a temporary here
@ -307,11 +307,11 @@ BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
char *pszNextSec = mystrstr(pszFirstRenameLine,"\n["); char *pszNextSec = mystrstr(pszFirstRenameLine,"\n[");
if (pszNextSec) if (pszNextSec)
{ {
int l=dwFileSize - (pszNextSec - pszWinInit); char *p = ++pszNextSec;
void* data=(void*)my_GlobalAlloc(l); while (p < pszWinInit + dwFileSize) {
mini_memcpy(data, pszNextSec, l); p[cchRenameLine] = *p;
mini_memcpy(pszNextSec + cchRenameLine, data, l); p++;
GlobalFree((HGLOBAL)data); }
dwRenameLinePos = pszNextSec - pszWinInit; dwRenameLinePos = pszNextSec - pszWinInit;
} }
@ -351,21 +351,11 @@ void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *ou
} }
} }
char ps_tmpbuf[NSIS_MAX_STRLEN*2]; void NSISCALL myitoa(char *s, int d)
char * NSISCALL process_string_fromtab(char *out, int offs)
{ {
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS wsprintf(s,"%d",d);
char *p=process_string(GetStringFromStringTab(offs), 0);
#else
char *p=process_string(GetStringFromStringTab(offs));
#endif
if (!out) return p;
return lstrcpyn(out,p,NSIS_MAX_STRLEN);
} }
void NSISCALL myitoa(char *s, int d) { wsprintf(s,"%d",d); }
int NSISCALL myatoi(char *s) int NSISCALL myatoi(char *s)
{ {
unsigned int v=0; unsigned int v=0;
@ -419,18 +409,20 @@ int NSISCALL mystrlen(const char *in)
return lstrlen(in); return lstrlen(in);
} }
// Dave Laundon's simplified process_string char ps_tmpbuf[NSIS_MAX_STRLEN*2];
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS
char * NSISCALL process_string(const char *in, int iStartIdx ) // Based on Dave Laundon's simplified process_string
#else char * NSISCALL GetNSISString(char *outbuf, int strtab)
char * NSISCALL process_string(const char *in)
#endif
{ {
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS char *in = (char*)GetNSISStringNP(GetNSISTab(strtab));
char *out = ps_tmpbuf+iStartIdx; char *out;
#else if (outbuf >= ps_tmpbuf && outbuf < ps_tmpbuf+sizeof(ps_tmpbuf))
char *out = ps_tmpbuf; {
#endif out = outbuf;
outbuf = 0;
}
else
out = ps_tmpbuf;
while (*in && out - ps_tmpbuf < NSIS_MAX_STRLEN) while (*in && out - ps_tmpbuf < NSIS_MAX_STRLEN)
{ {
int nVarIdx = (unsigned char)*in++; int nVarIdx = (unsigned char)*in++;
@ -446,9 +438,9 @@ char * NSISCALL process_string(const char *in)
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS #ifdef NSIS_SUPPORT_LANG_IN_STRINGS
else if (nVarIdx == LANG_CODES_START) else if (nVarIdx == LANG_CODES_START)
{ {
nVarIdx = *(short*)in; in+=sizeof(WORD); nVarIdx = *(short*)in; in+=sizeof(short);
process_string(GetStringFromStringTab(nVarIdx), out-ps_tmpbuf); GetNSISString(out, nVarIdx);
out+=mystrlen(out); out+=mystrlen(out);
} }
#endif #endif
else else
@ -485,22 +477,24 @@ char * NSISCALL process_string(const char *in)
case VAR_CODES_START + 23: // OUTDIR case VAR_CODES_START + 23: // OUTDIR
case VAR_CODES_START + 24: // EXEDIR case VAR_CODES_START + 24: // EXEDIR
case VAR_CODES_START + 25: // LANGUAGE case VAR_CODES_START + 25: // LANGUAGE
case VAR_CODES_START + 26: // PLUGINSDIR case VAR_CODES_START + 26: // TEMP
case VAR_CODES_START + 27: // _CLICK
case VAR_CODES_START + 28: // PLUGINSDIR
mystrcpy(out, g_usrvars[nVarIdx - (VAR_CODES_START + 1)]); mystrcpy(out, g_usrvars[nVarIdx - (VAR_CODES_START + 1)]);
break; break;
case VAR_CODES_START + 27: // PROGRAMFILES case VAR_CODES_START + 29: // PROGRAMFILES
smwcvesf[41]=0; smwcvesf[41]=0;
myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "ProgramFilesDir", out); myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "ProgramFilesDir", out);
if (!*out) if (!*out)
mystrcpy(out, "C:\\Program Files"); mystrcpy(out, "C:\\Program Files");
break; break;
case VAR_CODES_START + 28: // SMPROGRAMS case VAR_CODES_START + 30: // SMPROGRAMS
case VAR_CODES_START + 29: // SMSTARTUP case VAR_CODES_START + 31: // SMSTARTUP
case VAR_CODES_START + 30: // DESKTOP case VAR_CODES_START + 32: // DESKTOP
case VAR_CODES_START + 31: // STARTMENU case VAR_CODES_START + 33: // STARTMENU
case VAR_CODES_START + 32: // QUICKLAUNCH case VAR_CODES_START + 34: // QUICKLAUNCH
{ {
static const char *tab[]={ static const char *tab[]={
"Programs", "Programs",
@ -510,9 +504,9 @@ char * NSISCALL process_string(const char *in)
"AppData" "AppData"
}; };
static char name[20]="Common "; static char name[20]="Common ";
const char *name_=tab[nVarIdx-(VAR_CODES_START+28)]; const char *name_=tab[nVarIdx-(VAR_CODES_START+30)];
mystrcpy(name+7,name_); mystrcpy(name+7,name_);
f=g_flags.all_user_var & (nVarIdx != VAR_CODES_START + 32); f=g_exec_flags.all_user_var & (nVarIdx != VAR_CODES_START + 34);
again: again:
@ -529,7 +523,7 @@ char * NSISCALL process_string(const char *in)
mystrcpy(out,temp_directory); mystrcpy(out,temp_directory);
} }
if (nVarIdx == VAR_CODES_START + 32) { if (nVarIdx == VAR_CODES_START + 34) {
lstrcat(out, "\\Microsoft\\Internet Explorer\\Quick Launch"); lstrcat(out, "\\Microsoft\\Internet Explorer\\Quick Launch");
f = GetFileAttributes(out); f = GetFileAttributes(out);
if (f != (DWORD)-1 && (f & FILE_ATTRIBUTE_DIRECTORY)) if (f != (DWORD)-1 && (f & FILE_ATTRIBUTE_DIRECTORY))
@ -538,24 +532,25 @@ char * NSISCALL process_string(const char *in)
else break; else break;
} }
case VAR_CODES_START + 33: // TEMP case VAR_CODES_START + 35: // TEMP
mystrcpy(out,temp_directory); mystrcpy(out,temp_directory);
break; break;
case VAR_CODES_START + 34: // WINDIR case VAR_CODES_START + 36: // WINDIR
GetWindowsDirectory(out, NSIS_MAX_STRLEN); GetWindowsDirectory(out, NSIS_MAX_STRLEN);
break; break;
case VAR_CODES_START + 35: // SYSDIR case VAR_CODES_START + 37: // SYSDIR
GetSystemDirectory(out, NSIS_MAX_STRLEN); GetSystemDirectory(out, NSIS_MAX_STRLEN);
break; break;
#if VAR_CODES_START + 35 >= 255 #if VAR_CODES_START + 37 >= 255
#error "Too many variables! Extend VAR_CODES_START!" #error "Too many variables! Extend VAR_CODES_START!"
#endif #endif
} // switch } // switch
// validate the directory name // validate the directory name
if (nVarIdx > 21+VAR_CODES_START ) { // only if not $0 to $R9, $CMDLINE, or $HWNDPARENT if (nVarIdx > 21+VAR_CODES_START && nVarIdx != VAR_CODES_START+27) {
// only if not $0 to $R9, $CMDLINE, $HWNDPARENT, or $_CLICK
// ($LANGUAGE can't have trailing backslash anyway...) // ($LANGUAGE can't have trailing backslash anyway...)
validate_filename(out); validate_filename(out);
} }
@ -574,18 +569,18 @@ char * NSISCALL process_string(const char *in)
nVarIdx = (*(WORD*)in & 0x0FFF)-1; in+=sizeof(WORD); nVarIdx = (*(WORD*)in & 0x0FFF)-1; in+=sizeof(WORD);
switch (nVarIdx) // The order of this list must match that in ..\strlist.cpp (err, build.cpp -J) switch (nVarIdx) // The order of this list must match that in ..\strlist.cpp (err, build.cpp -J)
{ {
case 26: // PROGRAMFILES case 28: // PROGRAMFILES
smwcvesf[41]=0; smwcvesf[41]=0;
myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "ProgramFilesDir", out); myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "ProgramFilesDir", out);
if (!*out) if (!*out)
mystrcpy(out, "C:\\Program Files"); mystrcpy(out, "C:\\Program Files");
break; break;
case 27: // SMPROGRAMS case 29: // SMPROGRAMS
case 28: // SMSTARTUP case 30: // SMSTARTUP
case 29: // DESKTOP case 31: // DESKTOP
case 30: // STARTMENU case 32: // STARTMENU
case 31: // QUICKLAUNCH case 33: // QUICKLAUNCH
{ {
static const char *tab[]={ static const char *tab[]={
"Programs", "Programs",
@ -595,9 +590,9 @@ char * NSISCALL process_string(const char *in)
"AppData" "AppData"
}; };
static char name[20]="Common "; static char name[20]="Common ";
const char *name_=tab[nVarIdx-27]; const char *name_=tab[nVarIdx-29];
mystrcpy(name+7,name_); mystrcpy(name+7,name_);
f=g_flags.all_user_var & (nVarIdx != 31); f=g_exec_flags.all_user_var & (nVarIdx != 33);
again: again:
@ -614,7 +609,7 @@ char * NSISCALL process_string(const char *in)
mystrcpy(out,state_temp_dir); mystrcpy(out,state_temp_dir);
} }
if (nVarIdx == 31) { if (nVarIdx == 33) {
lstrcat(out, "\\Microsoft\\Internet Explorer\\Quick Launch"); lstrcat(out, "\\Microsoft\\Internet Explorer\\Quick Launch");
f = GetFileAttributes(out); f = GetFileAttributes(out);
if (f != (DWORD)-1 && (f & FILE_ATTRIBUTE_DIRECTORY)) if (f != (DWORD)-1 && (f & FILE_ATTRIBUTE_DIRECTORY))
@ -623,15 +618,15 @@ char * NSISCALL process_string(const char *in)
else break; else break;
} }
case 33: // WINDIR case 34: // WINDIR
GetWindowsDirectory(out, NSIS_MAX_STRLEN); GetWindowsDirectory(out, NSIS_MAX_STRLEN);
break; break;
case 34: // SYSDIR case 35: // SYSDIR
GetSystemDirectory(out, NSIS_MAX_STRLEN); GetSystemDirectory(out, NSIS_MAX_STRLEN);
break; break;
case 35: // HWNDPARENT case 36: // HWNDPARENT
myitoa(out, (unsigned int)g_hwnd); myitoa(out, (unsigned int)g_hwnd);
break; break;
@ -639,17 +634,18 @@ char * NSISCALL process_string(const char *in)
mystrcpy(out, g_usrvars[nVarIdx]); mystrcpy(out, g_usrvars[nVarIdx]);
} // switch } // switch
// validate the directory name // validate the directory name
if (nVarIdx > 21 && nVarIdx < TOTAL_COMPATIBLE_STATIC_VARS_COUNT ) { // only if not $0 to $R9, $CMDLINE, or $HWNDPARENT and not great than $SYSDIR if (nVarIdx > 20 && nVarIdx < TOTAL_COMPATIBLE_STATIC_VARS_COUNT && nVarIdx != 26) {
// only if not $0 to $R9, $CMDLINE or $_CLICK and not great than $HWNDPARENT
// ($LANGUAGE can't have trailing backslash anyway...) // ($LANGUAGE can't have trailing backslash anyway...)
validate_filename(out); validate_filename(out);
} }
out+=mystrlen(out); out+=mystrlen(out);
} // == VAR_CODES_START } // == VAR_CODES_START
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS #ifdef NSIS_SUPPORT_LANG_IN_STRINGS
else if ( nVarIdx == LANG_CODES_START ) else if (nVarIdx == LANG_CODES_START)
{ {
nVarIdx = *(short*)in; in+=sizeof(WORD); nVarIdx = *(short*)in; in+=sizeof(short);
process_string(GetStringFromStringTab(nVarIdx), out-ps_tmpbuf); GetNSISString(out, nVarIdx);
out+=mystrlen(out); out+=mystrlen(out);
} }
#endif #endif
@ -660,6 +656,8 @@ char * NSISCALL process_string(const char *in)
#endif #endif
} // while } // while
*out = 0; *out = 0;
if (outbuf)
return lstrcpyn(outbuf, ps_tmpbuf, NSIS_MAX_STRLEN);
return ps_tmpbuf; return ps_tmpbuf;
} }

View file

@ -1,12 +1,10 @@
#include "config.h" #include "config.h"
extern char ps_tmpbuf[NSIS_MAX_STRLEN*2]; extern char ps_tmpbuf[NSIS_MAX_STRLEN*2];
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS char * NSISCALL GetNSISString(char *outbuf, int strtab);
char * NSISCALL process_string(const char *in, int iStartIdx); #define GetNSISStringTT(strtab) GetNSISString(0, (strtab))
#else #define GetNSISStringNP(strtab) ((const char *)g_blocks[NB_STRINGS].offset+(strtab))
char * NSISCALL process_string(const char *in); #define GetNSISTab(strtab) (strtab < 0 ? LANG_STR_TAB(strtab) : strtab)
#endif
char * NSISCALL process_string_fromtab(char *out, int offs);
void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out); void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out);
int NSISCALL myatoi(char *s); int NSISCALL myatoi(char *s);
void NSISCALL myitoa(char *s, int d); void NSISCALL myitoa(char *s, int d);

File diff suppressed because it is too large Load diff

View file

@ -1,86 +1,188 @@
// Lang.h by Amir Szekely 3rd August 2002
#ifndef ___NLF___H_____ #ifndef ___NLF___H_____
#define ___NLF___H_____ #define ___NLF___H_____
#include "exehead/fileform.h" #include "exehead/fileform.h"
#include <StdExcept>
using namespace std; struct NLFRef {
int iRef;
int iUnRef;
};
struct langstring { struct langstring {
int name; int name;
int sn;
int index; int index;
int uindex;
int process;
}; };
class LangStringList : public SortedStringListND<struct langstring> class LangStringList : public SortedStringListND<struct langstring>
{ {
public: public:
LangStringList() LangStringList() {
{ count = 0;
index = 0;
} }
~LangStringList() { } ~LangStringList() { }
int add(const char *name) int add(const char *name, int *sn=0)
{ {
int pos=SortedStringListND<struct langstring>::add(name); int pos = SortedStringListND<struct langstring>::add(name);
if (pos == -1) return -1; if (pos == -1) return -1;
((struct langstring*)gr.get())[pos].index = index; ((struct langstring*)gr.get())[pos].sn = count;
if (sn) *sn = count;
count++;
((struct langstring*)gr.get())[pos].index = -1;
((struct langstring*)gr.get())[pos].uindex = -1;
((struct langstring*)gr.get())[pos].process = 1;
int temp = index; return pos;
index++;
return temp;
} }
int get(char *name) int get(char *name, int *sn=0, int *index=0, int *uindex=0, int *process=0)
{ {
if (index) *index = -1;
if (uindex) *uindex = -1;
if (sn) *sn = -1;
int v=SortedStringListND<struct langstring>::find(name); int v=SortedStringListND<struct langstring>::find(name);
if (v==-1) return -1; if (v==-1) return -1;
return ((struct langstring*)gr.get())[v].index; if (index) *index = ((struct langstring*)gr.get())[v].index;
if (uindex) *uindex = ((struct langstring*)gr.get())[v].uindex;
if (sn) *sn = ((struct langstring*)gr.get())[v].sn;
if (process) *process = ((struct langstring*)gr.get())[v].process;
return v;
}
void set(int pos, int index=-1, int uindex=-1, int process=-1)
{
if ((unsigned int)pos > (gr.getlen() / sizeof(struct langstring)))
return;
struct langstring *data=(struct langstring *)gr.get();
if (index >= 0)
data[pos].index = index;
if (uindex >= 0)
data[pos].uindex = uindex;
if (process >= 0)
data[pos].process = process;
}
void set(char *name, int index, int uindex=-1, int process=-1)
{
set(get(name), index, uindex, process);
}
const char *pos2name(int pos)
{
struct langstring *data=(struct langstring *)gr.get();
if ((unsigned int)pos > (gr.getlen() / sizeof(struct langstring)))
return 0;
return ((const char*)strings.get() + data[pos].name);
}
const char *offset2name(int name)
{
if ((unsigned int)name > strings.getlen())
return 0;
return (const char*)strings.get() + name;
} }
int getnum() int getnum()
{ {
return index; return gr.getlen() / sizeof(struct langstring);
} }
char *idx2name(int idx) static int compare_index(const void *item1, const void *item2)
{ {
struct langstring *data=(struct langstring *)gr.get(); struct langstring *ls1 = (struct langstring *)item1;
struct langstring *ls2 = (struct langstring *)item2;
for (int i = 0; i < index; i++)
{
if (data[i].index == idx)
{
return ((char*)strings.get() + data[i].name);
}
}
return NULL; return ls1->index - ls2->index;
}
struct langstring *sort_index(int *num)
{
if (!num) return 0;
sortbuf.resize(0);
sortbuf.add(gr.get(), gr.getlen());
*num = sortbuf.getlen() / sizeof(struct langstring);
qsort(sortbuf.get(), *num, sizeof(struct langstring), compare_index);
return (struct langstring*) sortbuf.get();
}
static int compare_uindex(const void *item1, const void *item2)
{
struct langstring *ls1 = (struct langstring *)item1;
struct langstring *ls2 = (struct langstring *)item2;
return ls1->uindex - ls2->uindex;
}
struct langstring *sort_uindex(int *num)
{
if (!num) return 0;
sortbuf.resize(0);
sortbuf.add(gr.get(), gr.getlen());
*num = sortbuf.getlen() / sizeof(struct langstring);
qsort(sortbuf.get(), *num, sizeof(struct langstring), compare_uindex);
return (struct langstring*) sortbuf.get();
} }
private: private:
int index; int count;
TinyGrowBuf sortbuf;
}; };
class NLF; class StringsArray
{
private:
TinyGrowBuf offsets;
GrowBuf strings;
struct StringTable { public:
LANGID lang_id; StringsArray()
int dlg_offset; {
common_strings common; offsets.set_zeroing(1);
common_strings ucommon;
installer_strings installer;
uninstall_strings uninstall;
TinyGrowBuf user_strings;
TinyGrowBuf user_ustrings;
NLF *nlf; strings.add("", sizeof(""));
}
~StringsArray() { }
void resize(int num)
{
offsets.resize(num * sizeof(int));
}
int set(int idx, char *str)
{
if (idx < 0)
return 0;
if (idx >= (offsets.getlen() / sizeof(int)))
resize(idx+1);
int old = ((int*)offsets.get())[idx];
((int*)offsets.get())[idx] = strings.add(str, strlen(str) + 1);
return old;
}
const char *get(int idx)
{
if ((unsigned int)idx >= (offsets.getlen() / sizeof(int)))
return 0;
return (const char *)strings.get() + ((int*)offsets.get())[idx];
}
}; };
#define NLF_VERSION 5 #define NLF_VERSION 6
enum { enum {
NLF_BRANDING, NLF_BRANDING,
@ -91,6 +193,8 @@ enum {
NLF_SUBCAPTION_DIR, NLF_SUBCAPTION_DIR,
NLF_SUBCAPTION_INSTFILES, NLF_SUBCAPTION_INSTFILES,
NLF_SUBCAPTION_COMPLETED, NLF_SUBCAPTION_COMPLETED,
NLF_USUBCAPTION_OPTIONS,
NLF_USUBCAPTION_DIR,
NLF_USUBCAPTION_CONFIRM, NLF_USUBCAPTION_CONFIRM,
NLF_USUBCAPTION_INSTFILES, NLF_USUBCAPTION_INSTFILES,
NLF_USUBCAPTION_COMPLETED, NLF_USUBCAPTION_COMPLETED,
@ -105,15 +209,36 @@ enum {
NLF_BTN_CLOSE, NLF_BTN_CLOSE,
NLF_BTN_BROWSE, NLF_BTN_BROWSE,
NLF_BTN_DETAILS, NLF_BTN_DETAILS,
NLF_DEF_NAME, NLF_CLICK_NEXT,
NLF_CLICK_INSTALL,
NLF_CLICK_UNINSTALL,
NLF_NAME,
NLF_COMPLETED, NLF_COMPLETED,
NLF_LICENSE_TEXT,
NLF_LICENSE_TEXT_FSCB,
NLF_LICENSE_TEXT_FSRB,
NLF_ULICENSE_TEXT,
NLF_ULICENSE_TEXT_FSCB,
NLF_ULICENSE_TEXT_FSRB,
NLF_LICENSE_DATA, // virtual
NLF_COMP_CUSTOM, NLF_COMP_CUSTOM,
NLF_COMP_TEXT,
NLF_COMP_SUBTEXT1, NLF_COMP_SUBTEXT1,
NLF_COMP_SUBTEXT1_NO_INST_TYPES, NLF_COMP_SUBTEXT1_NO_INST_TYPES,
NLF_COMP_SUBTEXT2, NLF_COMP_SUBTEXT2,
NLF_UCOMP_TEXT,
NLF_UCOMP_SUBTEXT1,
NLF_UCOMP_SUBTEXT1_NO_INST_TYPES,
NLF_UCOMP_SUBTEXT2,
NLF_DIR_TEXT,
NLF_DIR_SUBTEXT, NLF_DIR_SUBTEXT,
NLF_DIR_BROWSETEXT,
NLF_UDIR_TEXT,
NLF_UDIR_SUBTEXT,
NLF_UDIR_BROWSETEXT,
NLF_SPACE_AVAIL, NLF_SPACE_AVAIL,
NLF_SPACE_REQ, NLF_SPACE_REQ,
NLF_UNINST_TEXT,
NLF_UNINST_SUBTEXT, NLF_UNINST_SUBTEXT,
NLF_FILE_ERROR, NLF_FILE_ERROR,
NLF_FILE_ERROR_NOIGNORE, NLF_FILE_ERROR_NOIGNORE,
@ -150,36 +275,32 @@ enum {
NLF_KILO, NLF_KILO,
NLF_MEGA, NLF_MEGA,
NLF_GIGA, NLF_GIGA,
NLF_RTL,
NLF_STRINGS, NLF_STRINGS
SLANG_NAME,
SLANG_COMP_TEXT,
SLANG_LICENSE_TEXT,
SLANG_LICENSE_DATA,
SLANG_DIR_TEXT,
SLANG_UNINST_TEXT
}; };
extern char *english_strings[NLF_STRINGS]; struct NLF {
bool m_bLoaded;
// NSIS Language File parser
class NLF {
public:
NLF(char *filename);
~NLF();
char *GetString(int idx);
char *m_szName; char *m_szName;
LANGID m_wLangId;
char *m_szFont; char *m_szFont;
int m_iFontSize; int m_iFontSize;
unsigned int m_uCodePage; unsigned int m_uCodePage;
bool m_bRTL;
private:
char *m_szStrings[NLF_STRINGS]; char *m_szStrings[NLF_STRINGS];
}; };
struct LanguageTable {
LANGID lang_id;
int dlg_offset;
GrowBuf *strlist;
StringsArray *lang_strings;
NLF nlf;
};
#endif #endif

View file

@ -214,7 +214,7 @@ int main(int argc, char **argv)
{ {
fprintf(g_output,"Size of EXE header is %d bytes for zlib, %d bytes for bzip2.\n", zlib_exeheader_size,bzip2_exeheader_size); fprintf(g_output,"Size of EXE header is %d bytes for zlib, %d bytes for bzip2.\n", zlib_exeheader_size,bzip2_exeheader_size);
fprintf(g_output,"Size of info header is %d bytes.\n",sizeof(firstheader)); fprintf(g_output,"Size of info header is %d bytes.\n",sizeof(firstheader));
fprintf(g_output,"Size of install header is %d bytes, uninstall header is %d bytes.\n",sizeof(header),sizeof(uninstall_header)); fprintf(g_output,"Size of [un]install header is %d bytes,\n",sizeof(header));
fprintf(g_output,"Size of each section is %d bytes.\n",sizeof(section)); fprintf(g_output,"Size of each section is %d bytes.\n",sizeof(section));
fprintf(g_output,"Size of each page is %d bytes.\n",sizeof(page)); fprintf(g_output,"Size of each page is %d bytes.\n",sizeof(page));
fprintf(g_output,"Size of each instruction is %d bytes.\n",sizeof(entry)); fprintf(g_output,"Size of each instruction is %d bytes.\n",sizeof(entry));

View file

@ -69,8 +69,7 @@ LINK32=link.exe
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /Ob2 /D "_CONSOLE" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "WIN32_LEAN_AND_MEAN" /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /Ob2 /D "_CONSOLE" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "WIN32_LEAN_AND_MEAN" /FD /c
# SUBTRACT BASE CPP /Fr /YX /Yc /Yu # SUBTRACT BASE CPP /Fr /YX /Yc /Yu
# ADD CPP /nologo /MLd /W3 /GX /ZI /Od /D "_CONSOLE" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "WIN32_LEAN_AND_MEAN" /Fr /FD /c # ADD CPP /nologo /MLd /W3 /GX /ZI /Od /D "_CONSOLE" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "WIN32_LEAN_AND_MEAN" /Fr /FD /Zm200 /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe BSC32=bscmake.exe

File diff suppressed because it is too large Load diff

View file

@ -481,7 +481,7 @@ class MMapBuf : public IGrowBuf
int add(const void *data, int len) int add(const void *data, int len)
{ {
if (len<=0) return 0; if (len<=0) return 0;
resize(getlen()+len); resize(getlen()+len);
memcpy((char*)get()+getlen()-len,data,len); memcpy((char*)get()+getlen()-len,data,len);
return getlen()-len; return getlen()-len;
} }
@ -507,7 +507,7 @@ class MMapBuf : public IGrowBuf
char buf[MAX_PATH],buf2[MAX_PATH]; char buf[MAX_PATH],buf2[MAX_PATH];
GetTempPath(MAX_PATH,buf); GetTempPath(MAX_PATH,buf);
GetTempFileName(buf,"nsd",0,buf2); GetTempFileName(buf,"nsd",0,buf2);
m_hFile=CreateFile(buf2,GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE,NULL); m_hFile=CreateFile(buf2,GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
} }
if (m_hFile != INVALID_HANDLE_VALUE) if (m_hFile != INVALID_HANDLE_VALUE)
m_hFileMap=CreateFileMapping(m_hFile,NULL,PAGE_READWRITE,0,m_alloc,NULL); m_hFileMap=CreateFileMapping(m_hFile,NULL,PAGE_READWRITE,0,m_alloc,NULL);

View file

@ -22,14 +22,14 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_ADDSIZE,"AddSize",1,0,"size_to_add_to_section_in_kb"}, {TOK_ADDSIZE,"AddSize",1,0,"size_to_add_to_section_in_kb"},
{TOK_AUTOCLOSE,"AutoCloseWindow",1,0,"(false|true)"}, {TOK_AUTOCLOSE,"AutoCloseWindow",1,0,"(false|true)"},
{TOK_BGGRADIENT,"BGGradient",0,3,"(off | [top_color [bottom_color [text_color]]])"}, {TOK_BGGRADIENT,"BGGradient",0,3,"(off | [top_color [bottom_color [text_color]]])"},
{TOK_BRANDINGTEXT,"BrandingText",1,2,"[/LANG=lang_id] [/TRIM(LEFT|RIGHT|CENTER)] installer_text"}, {TOK_BRANDINGTEXT,"BrandingText",1,1,"[/TRIM(LEFT|RIGHT|CENTER)] installer_text"},
{TOK_BRINGTOFRONT,"BringToFront",0,0,""}, {TOK_BRINGTOFRONT,"BringToFront",0,0,""},
{TOK_CALL,"Call",1,0,"function_name | [:label_name]"}, {TOK_CALL,"Call",1,0,"function_name | [:label_name]"},
{TOK_CALLINSTDLL,"CallInstDLL",2,1,"dll_path_on_target.dll [/NOUNLOAD] function"}, {TOK_CALLINSTDLL,"CallInstDLL",2,1,"dll_path_on_target.dll [/NOUNLOAD] function"},
{TOK_CAPTION,"Caption",1,1,"[/LANG=lang_id] installer_caption"}, {TOK_CAPTION,"Caption",1,0,"installer_caption"},
{TOK_CHANGEUI,"ChangeUI",2,1,"/RTL (all|dlg_id) ui_file.exe"}, {TOK_CHANGEUI,"ChangeUI",1,1,"[/RTL] (all|dlg_id) ui_file.exe"},
{TOK_CLEARERRORS,"ClearErrors",0,0,""}, {TOK_CLEARERRORS,"ClearErrors",0,0,""},
{TOK_COMPTEXT,"ComponentText",0,4,"[/LANG=lang_id] [component_page_description] [component_subtext1] [component_subtext2]"}, {TOK_COMPTEXT,"ComponentText",0,3,"[component_page_description] [component_subtext1] [component_subtext2]"},
{TOK_GETDLLVERSION,"GetDLLVersion",3,0,"filename $(user_var: high output) $(user_var: low output)"}, {TOK_GETDLLVERSION,"GetDLLVersion",3,0,"filename $(user_var: high output) $(user_var: low output)"},
{TOK_GETDLLVERSIONLOCAL,"GetDLLVersionLocal",3,0,"localfilename $(user_var: high output) $(user_var: low output)"}, {TOK_GETDLLVERSIONLOCAL,"GetDLLVersionLocal",3,0,"localfilename $(user_var: high output) $(user_var: low output)"},
{TOK_GETFILETIME,"GetFileTime",3,0,"file $(user_var: high output) $(user_var: low output)"}, {TOK_GETFILETIME,"GetFileTime",3,0,"file $(user_var: high output) $(user_var: low output)"},
@ -46,8 +46,9 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_DELETEREGVALUE,"DeleteRegValue",3,0,"root_key subkey entry_name\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD)"}, {TOK_DELETEREGVALUE,"DeleteRegValue",3,0,"root_key subkey entry_name\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD)"},
{TOK_DELETE,"Delete",1,1,"[/REBOOTOK] filespec"}, {TOK_DELETE,"Delete",1,1,"[/REBOOTOK] filespec"},
{TOK_DETAILPRINT,"DetailPrint",1,0,"message"}, {TOK_DETAILPRINT,"DetailPrint",1,0,"message"},
{TOK_DIRTEXT,"DirText",0,4,"[/LANG=lang_id] [directory_page_description] [directory_page_subtext] [browse button text]"}, {TOK_DIRTEXT,"DirText",0,3,"[directory_page_description] [directory_page_subtext] [browse_button_text] [browse_dlg_text]"},
{TOK_DIRSHOW,"DirShow",1,0,"(show|hide)"}, {TOK_DIRSHOW,"DirShow",1,0,"(show|hide)"},
{TOK_DIRVAR,"DirVar",1,0,"$(user_var: dir in/out))"},
{TOK_ROOTDIRINST,"AllowRootDirInstall",1,0,"(true|false)"}, {TOK_ROOTDIRINST,"AllowRootDirInstall",1,0,"(true|false)"},
{TOK_CHECKBITMAP,"CheckBitmap",1,0,"local_bitmap.bmp"}, {TOK_CHECKBITMAP,"CheckBitmap",1,0,"local_bitmap.bmp"},
{TOK_ENABLEWINDOW,"EnableWindow",2,0,"hwnd (1|0)"}, {TOK_ENABLEWINDOW,"EnableWindow",2,0,"hwnd (1|0)"},
@ -66,7 +67,7 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_FLUSHINI,"FlushINI",1,0,"ini_file"}, {TOK_FLUSHINI,"FlushINI",1,0,"ini_file"},
{TOK_RESERVEFILE,"ReserveFile",1,-1,"[/nonfatal] [/r] file [file...]"}, {TOK_RESERVEFILE,"ReserveFile",1,-1,"[/nonfatal] [/r] file [file...]"},
{TOK_FILECLOSE,"FileClose",1,0,"$(user_var: handle input)"}, {TOK_FILECLOSE,"FileClose",1,0,"$(user_var: handle input)"},
{TOK_FILEERRORTEXT,"FileErrorText",0,3,"[/LANG=lang_id] [text (can contain $0)] [text without ignore (can contain $0)]"}, {TOK_FILEERRORTEXT,"FileErrorText",0,2,"[text (can contain $0)] [text without ignore (can contain $0)]"},
{TOK_FILEOPEN,"FileOpen",3,0,"$(user_var: handle output) filename openmode\n openmode=r|w|a"}, {TOK_FILEOPEN,"FileOpen",3,0,"$(user_var: handle output) filename openmode\n openmode=r|w|a"},
{TOK_FILEREAD,"FileRead",2,1,"$(user_var: handle input) $(user_var: text output) [maxlen]"}, {TOK_FILEREAD,"FileRead",2,1,"$(user_var: handle input) $(user_var: text output) [maxlen]"},
{TOK_FILEWRITE,"FileWrite",2,0,"$(user_var: handle input) text"}, {TOK_FILEWRITE,"FileWrite",2,0,"$(user_var: handle input) text"},
@ -78,18 +79,18 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_GETDLGITEM,"GetDlgItem",3,0,"$(user_var: handle output) dialog item_id"}, {TOK_GETDLGITEM,"GetDlgItem",3,0,"$(user_var: handle output) dialog item_id"},
{TOK_GETFULLPATHNAME,"GetFullPathName",2,1,"[/SHORT] $(user_var: result) path_or_file"}, {TOK_GETFULLPATHNAME,"GetFullPathName",2,1,"[/SHORT] $(user_var: result) path_or_file"},
{TOK_GETTEMPFILENAME,"GetTempFileName",1,1,"$(user_var: name output) [base_dir]"}, {TOK_GETTEMPFILENAME,"GetTempFileName",1,1,"$(user_var: name output) [base_dir]"},
{TOK_GETWINTEXT,"GetWindowText",2,0,"$(user_var: handle output) hwnd"},
{TOK_HIDEWINDOW,"HideWindow",0,0,""}, {TOK_HIDEWINDOW,"HideWindow",0,0,""},
{TOK_ICON,"Icon",1,0,"local_icon.ico"}, {TOK_ICON,"Icon",1,0,"local_icon.ico"},
{TOK_IFABORT,"IfAbort",1,1,"label_to_goto_if_abort [label_to_goto_if_no_abort]"}, {TOK_IFABORT,"IfAbort",1,1,"label_to_goto_if_abort [label_to_goto_if_no_abort]"},
{TOK_IFERRORS,"IfErrors",1,1,"label_to_goto_if_errors [label_to_goto_if_no_errors]"}, {TOK_IFERRORS,"IfErrors",1,1,"label_to_goto_if_errors [label_to_goto_if_no_errors]"},
{TOK_IFFILEEXISTS,"IfFileExists",2,1,"filename label_to_goto_if_file_exists [label_to_goto_otherwise]"}, {TOK_IFFILEEXISTS,"IfFileExists",2,1,"filename label_to_goto_if_file_exists [label_to_goto_otherwise]"},
{TOK_IFREBOOTFLAG,"IfRebootFlag",1,1,"jump_if_set [jump_if_not_set]"}, {TOK_IFREBOOTFLAG,"IfRebootFlag",1,1,"jump_if_set [jump_if_not_set]"},
{TOK_IFSILENT,"IfSilent",1,1,"jump_if_silent [jump_if_not_silent]"},
{TOK_INSTALLDIRREGKEY,"InstallDirRegKey",3,0,"root_key subkey entry_name\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD)"}, {TOK_INSTALLDIRREGKEY,"InstallDirRegKey",3,0,"root_key subkey entry_name\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD)"},
{TOK_INSTCOLORS,"InstallColors",1,1,"(/windows | (foreground_color background_color))"}, {TOK_INSTCOLORS,"InstallColors",1,1,"(/windows | (foreground_color background_color))"},
{TOK_INSTDIR,"InstallDir",1,0,"default_install_directory"}, {TOK_INSTDIR,"InstallDir",1,0,"default_install_directory"},
{TOK_INSTPROGRESSFLAGS,"InstProgressFlags",0,-1,"[flag [...]]\n flag={smooth|colored}"}, {TOK_INSTPROGRESSFLAGS,"InstProgressFlags",0,-1,"[flag [...]]\n flag={smooth|colored}"},
{TOK_INSTTYPE,"InstType",1,1,"install_type_name | /NOCUSTOM | ([/LANG=lang_id] /CUSTOMSTRING=str) | /COMPONENTSONLYONCUSTOM"}, {TOK_INSTTYPE,"InstType",1,0,"install_type_name | /NOCUSTOM | /CUSTOMSTRING=str | /COMPONENTSONLYONCUSTOM"},
{TOK_INTOP,"IntOp",3,1,"$(user_var: result) val1 OP [val2]\n OP=(+ - * / % | & ^ ~ ! || &&)"}, {TOK_INTOP,"IntOp",3,1,"$(user_var: result) val1 OP [val2]\n OP=(+ - * / % | & ^ ~ ! || &&)"},
{TOK_INTCMP,"IntCmp",3,2,"val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]"}, {TOK_INTCMP,"IntCmp",3,2,"val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]"},
{TOK_INTCMPU,"IntCmpU",3,2,"val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]"}, {TOK_INTCMPU,"IntCmpU",3,2,"val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]"},
@ -97,10 +98,11 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_ISWINDOW,"IsWindow",2,1,"hwnd jump_if_window [jump_if_not_window]"}, {TOK_ISWINDOW,"IsWindow",2,1,"hwnd jump_if_window [jump_if_not_window]"},
{TOK_GOTO,"Goto",1,0,"label"}, {TOK_GOTO,"Goto",1,0,"label"},
{TOK_LANGSTRING,"LangString",3,0,"[un.]name lang_id string"}, {TOK_LANGSTRING,"LangString",3,0,"[un.]name lang_id string"},
{TOK_LANGSTRINGUP,"LangStringUP",3,0,"[un.]name lang_id string"}, {TOK_LANGSTRINGUP,"LangStringUP",0,0,"obsolete, use LangString."},
{TOK_LICENSEDATA,"LicenseData",1,1,"[/LANG=lang_id] local_file_that_has_license_text.txt"}, {TOK_LICENSEDATA,"LicenseData",1,0,"local_file_that_has_license_text | license_lang_string"},
{TOK_LICENSEFORCESELECTION,"LicenseForceSelection",1,3,"[/LANG=lang_id] (checkbox [accept_text] | radiobuttons [accept_text] [decline_text] | off)"}, {TOK_LICENSEFORCESELECTION,"LicenseForceSelection",1,2,"(checkbox [accept_text] | radiobuttons [accept_text] [decline_text] | off)"},
{TOK_LICENSETEXT,"LicenseText",1,2,"[/LANG=lang_id] license_page_description [license_button_text]"}, {TOK_LICENSELANGSTRING,"LicenseLangString",3,0,"name lang_id license_path"},
{TOK_LICENSETEXT,"LicenseText",1,1,"license_page_description [license_button_text]"},
{TOK_LICENSEBKCOLOR,"LicenseBkColor",1,0,"background_color"}, {TOK_LICENSEBKCOLOR,"LicenseBkColor",1,0,"background_color"},
{TOK_LOADNLF,"LoadLanguageFile",1,0,"language.nlf"}, {TOK_LOADNLF,"LoadLanguageFile",1,0,"language.nlf"},
{TOK_LOGSET,"LogSet",1,0,"on|off"}, {TOK_LOGSET,"LogSet",1,0,"on|off"},
@ -108,13 +110,16 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_MESSAGEBOX,"MessageBox",2,4,"mode messagebox_text [return_check label_to_goto_if_equal [return_check2 label2]]\n mode=modeflag[|modeflag[|modeflag[...]]]\n " {TOK_MESSAGEBOX,"MessageBox",2,4,"mode messagebox_text [return_check label_to_goto_if_equal [return_check2 label2]]\n mode=modeflag[|modeflag[|modeflag[...]]]\n "
"modeflag=(MB_ABORTRETRYIGNORE|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_YESNO|MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND|MB_RIGHT"}, "modeflag=(MB_ABORTRETRYIGNORE|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_YESNO|MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND|MB_RIGHT"},
{TOK_NOP,"Nop",0,0,""}, {TOK_NOP,"Nop",0,0,""},
{TOK_NAME,"Name",1,1,"[/LANG=lang_id] installer_name"}, {TOK_NAME,"Name",1,0,"installer_name"},
{TOK_OUTFILE,"OutFile",1,0,"install_output.exe"}, {TOK_OUTFILE,"OutFile",1,0,"install_output.exe"},
#ifdef NSIS_SUPPORT_CODECALLBACKS #ifdef NSIS_SUPPORT_CODECALLBACKS
{TOK_PAGE,"Page",1,5,"((custom [creator_function] [leave_function] [caption]) | ((license|components|directory|instfiles) [pre_function] [show_function] [leave_function])) [define_if_last]"}, {TOK_PAGE,"Page",1,4,"((custom [creator_function] [leave_function] [caption]) | ((license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]))"},
#else #else
{TOK_PAGE,"Page",1,1,"license|components|directory|instfiles"}, {TOK_PAGE,"Page",1,1,"license|components|directory|instfiles|uninstConfirm"},
#endif #endif
{TOK_PAGECALLBACKS,"PageCallbacks",0,3,"([creator_function] [leave_function]) | ([pre_function] [show_function] [leave_function])"},
{TOK_PAGEEX,"PageEx",1,0,"[un.](custom|uninstConfirm|license|components|directory|instfiles)"},
{TOK_PAGEEXEND,"PageExEnd",0,0,""},
{TOK_POP,"Pop",1,0,"$(user_var: output)"}, {TOK_POP,"Pop",1,0,"$(user_var: output)"},
{TOK_PUSH,"Push",1,0,"string"}, {TOK_PUSH,"Push",1,0,"string"},
{TOK_QUIT,"Quit",0,0,""}, {TOK_QUIT,"Quit",0,0,""},
@ -147,7 +152,7 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_INSTTYPEGETTEXT,"InstTypeGetText",2,0,"insttype_index $(user_var: output flags)"}, {TOK_INSTTYPEGETTEXT,"InstTypeGetText",2,0,"insttype_index $(user_var: output flags)"},
{TOK_SENDMESSAGE,"SendMessage",4,2,"hwnd message [wparam|STR:wParam] [lparam|STR:lParam] [$(user_var: return value)] [/TIMEOUT=X]"}, {TOK_SENDMESSAGE,"SendMessage",4,2,"hwnd message [wparam|STR:wParam] [lparam|STR:lParam] [$(user_var: return value)] [/TIMEOUT=X]"},
{TOK_SETAUTOCLOSE,"SetAutoClose",1,0,"(false|true)"}, {TOK_SETAUTOCLOSE,"SetAutoClose",1,0,"(false|true)"},
{TOK_SETBKCOLOR,"SetBkColor",2,0,"hwnd color"}, {TOK_SETCTLCOLORS,"SetCtlColors",2,1,"hwnd (branding | (text_color (transparent|bg_color)))"},
{TOK_SETBRANDINGIMAGE,"SetBrandingImage",1,2,"[/IMGID=image_item_id_in_dialog] [/RESIZETOFIT] bitmap.bmp"}, {TOK_SETBRANDINGIMAGE,"SetBrandingImage",1,2,"[/IMGID=image_item_id_in_dialog] [/RESIZETOFIT] bitmap.bmp"},
{TOK_SETCOMPRESS,"SetCompress",1,0,"(off|auto|force)"}, {TOK_SETCOMPRESS,"SetCompress",1,0,"(off|auto|force)"},
{TOK_SETCOMPRESSOR,"SetCompressor",1,0,"(zlib|bzip2)"}, {TOK_SETCOMPRESSOR,"SetCompressor",1,0,"(zlib|bzip2)"},
@ -162,6 +167,7 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_SETPLUGINUNLOAD,"SetPluginUnload",1,0,"(manual|alwaysoff)"}, {TOK_SETPLUGINUNLOAD,"SetPluginUnload",1,0,"(manual|alwaysoff)"},
{TOK_SETREBOOTFLAG,"SetRebootFlag",1,0,"true|false"}, {TOK_SETREBOOTFLAG,"SetRebootFlag",1,0,"true|false"},
{TOK_SETSHELLVARCONTEXT,"SetShellVarContext",1,0,"all|current"}, {TOK_SETSHELLVARCONTEXT,"SetShellVarContext",1,0,"all|current"},
{TOK_SETSILENT,"SetSilent",1,0,"silent|normal"},
{TOK_SHOWDETAILS,"ShowInstDetails",1,0,"(hide|show|nevershow)"}, {TOK_SHOWDETAILS,"ShowInstDetails",1,0,"(hide|show|nevershow)"},
{TOK_SHOWDETAILSUNINST,"ShowUninstDetails",1,0,"(hide|show|nevershow)"}, {TOK_SHOWDETAILSUNINST,"ShowUninstDetails",1,0,"(hide|show|nevershow)"},
{TOK_SHOWWINDOW,"ShowWindow",2,0,"hwnd show_state"}, {TOK_SHOWWINDOW,"ShowWindow",2,0,"hwnd show_state"},
@ -171,17 +177,17 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_STRCMP,"StrCmp",3,1,"str1 str2 label_to_goto_if_equal [label_to_goto_if_not]"}, {TOK_STRCMP,"StrCmp",3,1,"str1 str2 label_to_goto_if_equal [label_to_goto_if_not]"},
{TOK_STRCPY,"StrCpy",2,2,"$(user_var: output) str [maxlen] [startoffset]"}, {TOK_STRCPY,"StrCpy",2,2,"$(user_var: output) str [maxlen] [startoffset]"},
{TOK_STRLEN,"StrLen",2,0,"$(user_var: length output) str"}, {TOK_STRLEN,"StrLen",2,0,"$(user_var: length output) str"},
{TOK_SUBCAPTION,"SubCaption",2,1,"[/LANG=lang_id] page_number(0-4) new_subcaption"}, {TOK_SUBCAPTION,"SubCaption",2,0,"page_number(0-4) new_subcaption"},
{TOK_UNINSTALLEXENAME,"UninstallExeName",0,0,"no longer supported, use WriteUninstaller from section."}, {TOK_UNINSTALLEXENAME,"UninstallExeName",0,0,"no longer supported, use WriteUninstaller from section."},
{TOK_UNINSTCAPTION,"UninstallCaption",1,1,"[/LANG=lang_id] uninstaller_caption"}, {TOK_UNINSTCAPTION,"UninstallCaption",1,0,"uninstaller_caption"},
{TOK_UNINSTICON,"UninstallIcon",1,0,"icon_on_local_system.ico"}, {TOK_UNINSTICON,"UninstallIcon",1,0,"icon_on_local_system.ico"},
#ifdef NSIS_SUPPORT_CODECALLBACKS #ifdef NSIS_SUPPORT_CODECALLBACKS
{TOK_UNINSTPAGE,"UninstPage",1,5,"((custom [creator_function] [leave_function] [caption]) | ((uninstConfirm|instfiles) [pre_function] [show_function] [leave_function])) [define_if_last]"}, {TOK_UNINSTPAGE,"UninstPage",1,4,"((custom [creator_function] [leave_function] [caption]) | ((license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]))"},
#else #else
{TOK_UNINSTPAGE,"UninstPage",1,1,"uninstConfirm|instfiles"}, {TOK_UNINSTPAGE,"UninstPage",1,1,"license|components|directory|instfiles|uninstConfirm"},
#endif #endif
{TOK_UNINSTTEXT,"UninstallText",1,2,"[/LANG=lang_id] Text_to_go_on_uninstall page [subtext]"}, {TOK_UNINSTTEXT,"UninstallText",1,1,"Text_to_go_on_uninstall_page [subtext]"},
{TOK_UNINSTSUBCAPTION,"UninstallSubCaption",2,1,"[/LANG=lang_id] page_number(0-2) new_subcaption"}, {TOK_UNINSTSUBCAPTION,"UninstallSubCaption",2,0,"page_number(0-2) new_subcaption"},
{TOK_UNREGDLL,"UnRegDLL",1,0,"dll_path_on_target.dll"}, {TOK_UNREGDLL,"UnRegDLL",1,0,"dll_path_on_target.dll"},
// useless - {TOK_USEOUTERUIITEM,"UseOuterUIItem",2,0,"item id"}, // useless - {TOK_USEOUTERUIITEM,"UseOuterUIItem",2,0,"item id"},
{TOK_WINDOWICON,"WindowIcon",1,0,"on|off"}, {TOK_WINDOWICON,"WindowIcon",1,0,"on|off"},
@ -207,18 +213,18 @@ static tokenType tokenlist[TOK__LAST] =
{TOK_P_WARNING,"!warning",0,1,"[warning_message]"}, {TOK_P_WARNING,"!warning",0,1,"[warning_message]"},
{TOK_P_ERROR,"!error",0,1,"[error_message]"}, {TOK_P_ERROR,"!error",0,1,"[error_message]"},
{TOK_P_VERBOSE,"!verbose",1,0,"verbose_level"}, {TOK_P_VERBOSE,"!verbose",1,0,"verbose_level | push | pop"},
{TOK_P_MACRO,"!macro",1,-1,"macroname [parms ...]"}, {TOK_P_MACRO,"!macro",1,-1,"macroname [parms ...]"},
{TOK_P_MACROEND,"!macroend",0,0,""}, {TOK_P_MACROEND,"!macroend",0,0,""},
{TOK_P_INSERTMACRO,"!insertmacro",1,-1,"macroname [parms ...]"}, {TOK_P_INSERTMACRO,"!insertmacro",1,-1,"macroname [parms ...]"},
{TOK_MISCBUTTONTEXT,"MiscButtonText",0,5,"[/LANG=lang_id] [back button text] [next button text] [cancel button text] [close button text]"}, {TOK_MISCBUTTONTEXT,"MiscButtonText",0,4,"[back button text] [next button text] [cancel button text] [close button text]"},
{TOK_DETAILSBUTTONTEXT,"DetailsButtonText",0,2,"[/LANG=lang_id] [details button text]"}, {TOK_DETAILSBUTTONTEXT,"DetailsButtonText",0,1,"[details button text]"},
{TOK_UNINSTBUTTONTEXT,"UninstallButtonText",0,2,"[/LANG=lang_id] [uninstall button text]"}, {TOK_UNINSTBUTTONTEXT,"UninstallButtonText",0,1,"[uninstall button text]"},
{TOK_INSTBUTTONTEXT,"InstallButtonText",0,2,"[/LANG=lang_id] [install button text]"}, {TOK_INSTBUTTONTEXT,"InstallButtonText",0,1,"[install button text]"},
{TOK_SPACETEXTS,"SpaceTexts",0,3,"[/LANG=lang_id] [space required text] [space available text]"}, {TOK_SPACETEXTS,"SpaceTexts",0,2,"none | ([space required text] [space available text])"},
{TOK_COMPLETEDTEXT,"CompletedText",0,2,"[/LANG=lang_id] [completed text]"}, {TOK_COMPLETEDTEXT,"CompletedText",0,2,"[completed text]"},
{TOK_GETFUNCTIONADDR,"GetFunctionAddress",2,0,"output function"}, {TOK_GETFUNCTIONADDR,"GetFunctionAddress",2,0,"output function"},
{TOK_GETLABELADDR,"GetLabelAddress",2,0,"output label"}, {TOK_GETLABELADDR,"GetLabelAddress",2,0,"output label"},
@ -231,8 +237,8 @@ static tokenType tokenlist[TOK__LAST] =
// Added by ramon 3 jun 2003 // Added by ramon 3 jun 2003
{TOK_DEFVAR,"Var",1,0,"VarName"}, {TOK_DEFVAR,"Var",1,0,"VarName"},
// Added by ramon 6 jun 2003 // Added by ramon 6 jun 2003
{TOK_VI_ADDKEY,"VIAddVersionKey", 2, 1, "[/LANG=lang_id] keyname value"}, {TOK_VI_ADDKEY,"VIAddVersionKey",2,1,"/LANG=lang_id keyname value"},
{TOK_VI_SETPRODUCTVERSION,"VIProductVersion", 1, 0, "[version_string_X.X.X.X]"}, {TOK_VI_SETPRODUCTVERSION,"VIProductVersion",1,0,"[version_string_X.X.X.X]"},
}; };
void CEXEBuild::print_help(char *commandname) void CEXEBuild::print_help(char *commandname)

View file

@ -14,10 +14,11 @@ enum
TOK_WINDOWICON, TOK_WINDOWICON,
TOK_DIRTEXT, TOK_DIRTEXT,
TOK_COMPTEXT, TOK_COMPTEXT,
TOK_LICENSETEXT, TOK_LICENSEBKCOLOR,
TOK_LICENSEDATA, TOK_LICENSEDATA,
TOK_LICENSEFORCESELECTION, TOK_LICENSEFORCESELECTION,
TOK_LICENSEBKCOLOR, TOK_LICENSELANGSTRING,
TOK_LICENSETEXT,
TOK_UNINSTTEXT, TOK_UNINSTTEXT,
TOK_SILENTINST, TOK_SILENTINST,
TOK_SILENTUNINST, TOK_SILENTUNINST,
@ -46,6 +47,10 @@ enum
TOK_SETCOMPRESSOR, TOK_SETCOMPRESSOR,
TOK_LOADNLF, TOK_LOADNLF,
TOK_RESERVEFILE, TOK_RESERVEFILE,
TOK_ALLOWSKIPFILES,
TOK_DEFVAR,
TOK_VI_ADDKEY,
TOK_VI_SETPRODUCTVERSION,
TOK_MISCBUTTONTEXT, TOK_MISCBUTTONTEXT,
TOK_DETAILSBUTTONTEXT, TOK_DETAILSBUTTONTEXT,
@ -89,9 +94,15 @@ enum
TOK_FUNCTIONEND, TOK_FUNCTIONEND,
TOK_ADDSIZE, TOK_ADDSIZE,
// Page oredering shit // page oredering shit
TOK_PAGE, TOK_PAGE,
TOK_UNINSTPAGE, TOK_UNINSTPAGE,
TOK_PAGEEX,
TOK_PAGECALLBACKS,
TOK_PAGEEXEND,
// PageEx stuff
TOK_DIRVAR,
// flag setters // flag setters
TOK_SETDATESAVE, TOK_SETDATESAVE,
@ -175,8 +186,7 @@ enum
TOK_SENDMESSAGE, TOK_SENDMESSAGE,
TOK_ISWINDOW, TOK_ISWINDOW,
TOK_GETDLGITEM, TOK_GETDLGITEM,
TOK_GETWINTEXT, TOK_SETCTLCOLORS,
TOK_SETBKCOLOR,
TOK_FINDFIRST, TOK_FINDFIRST,
TOK_FINDNEXT, TOK_FINDNEXT,
TOK_FINDCLOSE, TOK_FINDCLOSE,
@ -213,12 +223,8 @@ enum
TOK_CREATEFONT, TOK_CREATEFONT,
TOK_SHOWWINDOW, TOK_SHOWWINDOW,
TOK_ENABLEWINDOW, TOK_ENABLEWINDOW,
// Added by ramon 23 May 2003 TOK_SETSILENT,
TOK_ALLOWSKIPFILES, TOK_IFSILENT,
// Added by ramon 3 jun 2003
TOK_DEFVAR,
TOK_VI_ADDKEY,
TOK_VI_SETPRODUCTVERSION,
TOK__LAST, TOK__LAST,
TOK__PLUGINCOMMAND TOK__PLUGINCOMMAND

View file

@ -1,42 +1,30 @@
TODO TODO
-- NSIS 2 Beta 4 --
NSIS NSIS
* SetCurInstType should work without the components page * SetCurInstType should work without the components page
* component page for uninstaller, multiple sections
* more default texts in NLF language files
* all installer strings should be language strings
* move no custom to compiler (custom as just another inst type)
* empty subsections should not show * empty subsections should not show
-- Before NSIS 2 Final -- * start optimizing datablock after file mapping was released
* map files part by part to save memory
* compressor from command line
* skip plugin calls, file instructions that add more than one file with +1 with goto
* more powerful plug-ins (access to ExecFunc and flags and even more)
* LZMA compression
* stop using static variables so CEXEBuild can be used as a real class
EXAMPLES EXAMPLES
* write an advanced paging example showing multiple components page with multiple * write an advanced paging example showing multiple components page with multiple
instfiles pages instfiles pages
NSIS
* skip plugin calls, file instructions that add more than one file with +1 with goto
* different color for the drive space when there is not enough space
* more powerful plug-ins (access to ExecFunc and flags and even more)
* ChangeUI RTL full support
* LZMA compression
* stop using static variables so CEXEBuild can be used as a real class
PLUGINS PLUGINS
* InstallOptions - custom class names so you can include whatever control you want * InstallOptions - custom class names so you can include whatever control you want