* 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:
parent
bb8879b7ae
commit
74ea2dc585
91 changed files with 5180 additions and 4101 deletions
|
@ -29,6 +29,17 @@ static int popstring(char *str)
|
|||
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 strncpy(x,y,z) lstrcpyn(x,y,z)
|
||||
#define strdup(x) STRDUP(x)
|
||||
|
@ -164,6 +175,8 @@ int bBackEnabled = FALSE;
|
|||
int bCancelEnabled = FALSE; // by ORTIM: 13-August-2002
|
||||
int bCancelShow = FALSE; // by ORTIM: 13-August-2002
|
||||
|
||||
int bRTL = FALSE;
|
||||
|
||||
FieldType *pFields = NULL;
|
||||
#define DEFAULT_RECT 1018
|
||||
int nRectId = 0;
|
||||
|
@ -468,6 +481,8 @@ int ReadSettings(void) {
|
|||
bCancelEnabled = GetPrivateProfileInt("Settings", "CancelEnabled", 0xFFFF0000, pszFilename);
|
||||
bCancelShow = GetPrivateProfileInt("Settings", "CancelShow", 0xFFFF0000, pszFilename);
|
||||
|
||||
bRTL = GetPrivateProfileInt("Settings", "RTL", 0, pszFilename);
|
||||
|
||||
if (nNumFields > 0) {
|
||||
// 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.
|
||||
|
@ -621,21 +636,21 @@ int ReadSettings(void) {
|
|||
pFields[nIdx].hImage = (HANDLE)GetPrivateProfileInt(szField, "TxtColor", RGB(0,0,255), pszFilename);
|
||||
|
||||
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];
|
||||
pNewField->nControlID = 1200 + nIdx + 1;
|
||||
pNewField->nParentIdx = nIdx;
|
||||
pNewField->nType = FIELD_BROWSEBUTTON;
|
||||
pNewField->nFlags = pFields[nIdx].nFlags & (FLAG_DISABLED | FLAG_NOTABSTOP);
|
||||
pNewField->pszText = STRDUP(szBrowseButtonCaption); // needed for generic FREE
|
||||
pNewField->rect.right = pFields[nIdx].rect.right;
|
||||
pNewField->rect.left = pNewField->rect.right - BROWSE_WIDTH;
|
||||
pNewField->rect.bottom = pFields[nIdx].rect.bottom;
|
||||
pNewField->rect.top = pFields[nIdx].rect.top;
|
||||
pFields[nIdx].rect.right = pNewField->rect.left - 3;
|
||||
nNumFields++;
|
||||
nIdx++;
|
||||
FieldType *pNewField = &pFields[nIdx+1];
|
||||
pNewField->nControlID = 1200 + nIdx + 1;
|
||||
pNewField->nParentIdx = nIdx;
|
||||
pNewField->nType = FIELD_BROWSEBUTTON;
|
||||
pNewField->nFlags = pFields[nIdx].nFlags & (FLAG_DISABLED | FLAG_NOTABSTOP);
|
||||
pNewField->pszText = STRDUP(szBrowseButtonCaption); // needed for generic FREE
|
||||
pNewField->rect.right = pFields[nIdx].rect.right;
|
||||
pNewField->rect.left = pNewField->rect.right - BROWSE_WIDTH;
|
||||
pNewField->rect.bottom = pFields[nIdx].rect.bottom;
|
||||
pNewField->rect.top = pFields[nIdx].rect.top;
|
||||
pFields[nIdx].rect.right = pNewField->rect.left - 3;
|
||||
nNumFields++;
|
||||
nIdx++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -753,11 +768,16 @@ BOOL CALLBACK cfgDlgProc(HWND hwndDlg,
|
|||
case WM_CTLCOLORBTN:
|
||||
case WM_CTLCOLORLISTBOX:
|
||||
{
|
||||
BOOL brush = (BOOL)GetWindowLong((HWND)lParam, GWL_USERDATA);
|
||||
if (brush)
|
||||
{
|
||||
SetBkMode((HDC)wParam, TRANSPARENT);
|
||||
return brush;
|
||||
ctlcolors *c = (ctlcolors *)GetWindowLong((HWND)lParam, GWL_USERDATA);
|
||||
|
||||
if (c) {
|
||||
SetBkMode((HDC)wParam, c->bkmode);
|
||||
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);
|
||||
|
||||
RECT dialog_r;
|
||||
int width;
|
||||
hConfigWindow=CreateDialog(m_hInstance,MAKEINTRESOURCE(IDD_DIALOG1),hMainWindow,cfgDlgProc);
|
||||
if (hConfigWindow)
|
||||
{
|
||||
GetWindowRect(childwnd,&dialog_r);
|
||||
ScreenToClient(hMainWindow,(LPPOINT)&dialog_r);
|
||||
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
|
||||
SendMessage(hConfigWindow, WM_SETFONT, (WPARAM)hFont, TRUE);
|
||||
}
|
||||
|
@ -899,47 +929,75 @@ int createCfgDlg()
|
|||
static struct {
|
||||
char* pszClass;
|
||||
DWORD dwStyle;
|
||||
DWORD dwRTLStyle;
|
||||
DWORD dwExStyle;
|
||||
DWORD dwRTLExStyle;
|
||||
} ClassTable[] = {
|
||||
{ "STATIC", // FIELD_LABEL
|
||||
DEFAULT_STYLES /*| WS_TABSTOP*/,
|
||||
DEFAULT_STYLES | SS_RIGHT /*| WS_TABSTOP*/,
|
||||
WS_EX_TRANSPARENT,
|
||||
WS_EX_TRANSPARENT },
|
||||
{ "STATIC", // FIELD_ICON
|
||||
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_ICON,
|
||||
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_ICON,
|
||||
0,
|
||||
0 },
|
||||
{ "STATIC", // FIELD_BITMAP
|
||||
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_BITMAP | SS_CENTERIMAGE,
|
||||
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_BITMAP | SS_CENTERIMAGE,
|
||||
0,
|
||||
0 },
|
||||
{ "BUTTON", // FIELD_BROWSEBUTTON
|
||||
DEFAULT_STYLES | WS_TABSTOP,
|
||||
DEFAULT_STYLES | WS_TABSTOP,
|
||||
0,
|
||||
0 },
|
||||
{ "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 | BS_RIGHT | BS_LEFTTEXT,
|
||||
0,
|
||||
0 },
|
||||
{ "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 | BS_RIGHT | BS_LEFTTEXT,
|
||||
0,
|
||||
0 },
|
||||
{ "EDIT", // FIELD_TEXT
|
||||
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 },
|
||||
{ "EDIT", // FIELD_FILEREQUEST
|
||||
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 },
|
||||
{ "EDIT", // FIELD_DIRREQUEST
|
||||
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 },
|
||||
{ "COMBOBOX", // FIELD_COMBOBOX
|
||||
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
|
||||
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
|
||||
DEFAULT_STYLES | BS_GROUPBOX,
|
||||
DEFAULT_STYLES | BS_GROUPBOX | BS_RIGHT,
|
||||
WS_EX_TRANSPARENT,
|
||||
WS_EX_TRANSPARENT },
|
||||
{ "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;
|
||||
|
@ -949,8 +1007,15 @@ int createCfgDlg()
|
|||
if (nType < 1 || nType > (sizeof(ClassTable) / sizeof(ClassTable[0])))
|
||||
continue;
|
||||
|
||||
DWORD dwStyle = ClassTable[pFields[nIdx].nType - 1].dwStyle;
|
||||
DWORD dwExStyle = ClassTable[pFields[nIdx].nType - 1].dwExStyle;
|
||||
DWORD dwStyle, 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
|
||||
|
||||
|
@ -970,6 +1035,12 @@ int createCfgDlg()
|
|||
if (pFields[nIdx].rect.bottom < 0)
|
||||
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;
|
||||
switch (nType) {
|
||||
case FIELD_CHECKBOX:
|
||||
|
|
|
@ -195,11 +195,16 @@ It can contain the following values:</p>
|
|||
<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
|
||||
will not be changed.</td></tr>
|
||||
<tr>
|
||||
<tr>
|
||||
<td class="lefttable"><span class="bold">Rect</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
|
||||
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>
|
||||
<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>
|
||||
|
@ -612,12 +617,13 @@ FunctionEnd
|
|||
</pre>
|
||||
<p class="header">Version history</p>
|
||||
<ul>
|
||||
<li>DLL version 2.2 (6/10/2003)
|
||||
<li>DLL version 2.2 (4/9/2003)
|
||||
<ul>
|
||||
<li>Added new control "link"</li>
|
||||
<li>\r\n converts to newline in Multiline edit box</li>
|
||||
<li>Support for multiline edit box</li>
|
||||
<li>Better tab order in DirRequest and FileRequest</li>
|
||||
<li>Added RTL support</li>
|
||||
<li>Minor fixes</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v2
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
RTL
|
||||
# Translation by asdfuae@msn.com
|
||||
نظام التنصيب نلسوفت %s
|
||||
تنصيب %s
|
||||
مزيل %s
|
||||
ÊäÕíÈ $(^Name)
|
||||
ãÒíá $(^Name)
|
||||
: اتفاقية الترخيص
|
||||
: خيارات التنصيب
|
||||
: مجلد التنصيب
|
||||
|
@ -34,7 +36,7 @@ NLF v2
|
|||
أختر نوع التنصيب:
|
||||
أختر العناصر للتنصيب:
|
||||
أو، أختر العناصر المحددة المراد تنصيبها:
|
||||
أختر المجلد المراد تنصيب %s فيه:
|
||||
ÃÎÊÑ ÇáãÌáÏ ÇáãÑÇÏ ÊäÕíÈ $(^Name) Ýíå:
|
||||
المساحة المتاحة:
|
||||
المساحة المطلوبة:
|
||||
يزال من:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v2
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Asparouh Kalyandjiev <acnapyx@computers.bg>
|
||||
Nullsoft инсталатор %s
|
||||
%s Инсталиране
|
||||
%s Деинсталиране
|
||||
$(^Name) Èíñòàëèðàíå
|
||||
$(^Name) Äåèíñòàëèðàíå
|
||||
: Лицензно споразумение
|
||||
: Инсталационни опции
|
||||
: Инсталационна папка
|
||||
|
@ -34,7 +36,7 @@ Nullsoft
|
|||
Изберете типа инсталация:
|
||||
Изберете компонентите за инсталиране:
|
||||
Или изберете компонентите, които желаете да бъдат инсталирани:
|
||||
Изберете папка, където да се инсталира %s:
|
||||
Èçáåðåòå ïàïêà, êúäåòî äà ñå èíñòàëèðà $(^Name):
|
||||
Свободно място:
|
||||
Нужно място:
|
||||
Деинсталиране от:
|
||||
|
|
|
@ -8,10 +8,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by falanko
|
||||
Nullsoft Install System %s
|
||||
Instal·lació de %s
|
||||
Desinstal·lació de %s
|
||||
Instal·lació de $(^Name)
|
||||
Desinstal·lació de $(^Name)
|
||||
: Acord de Llicència
|
||||
: Opcions d'Instal·lació
|
||||
: Carpeta d'Instal·lació
|
||||
|
@ -37,7 +39,7 @@ Personalitzada
|
|||
Indiqui el tipus d'instal·lació:
|
||||
Seleccioni els components:
|
||||
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 necessari:
|
||||
Desinstal·lant de:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Igor Ostriz
|
||||
Nullsoft Install System %s
|
||||
%s Instalacija
|
||||
%s Deinstalacija
|
||||
$(^Name) Instalacija
|
||||
$(^Name) Deinstalacija
|
||||
: Licenenèni uvjeti
|
||||
: Instalacijske opcije
|
||||
: Instalacijska mapa
|
||||
|
@ -36,7 +38,7 @@ Posebna
|
|||
Izaberite tip instalacije:
|
||||
Odaberite komponente za instalaciju:
|
||||
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:
|
||||
Potrebno prostora na disku:
|
||||
Uklanjam iz:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by T.V. Zuggy (http://zuggy.wz.cz/)
|
||||
Nullsoft Install System %s
|
||||
Instalace programu %s
|
||||
Odinstalování programu %s
|
||||
Instalace programu $(^Name)
|
||||
Odinstalování programu $(^Name)
|
||||
: Licenční ujednání
|
||||
: Možnosti instalace
|
||||
: Umístění instalace
|
||||
|
@ -36,7 +38,7 @@ Vlastn
|
|||
Zvolte typ instalace:
|
||||
Zvolte součásti pro instalaci:
|
||||
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:
|
||||
Potřebné volné místo:
|
||||
Odinstalování z:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v2
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Casper Bergenstoff
|
||||
Nullsoft Installerings System %s
|
||||
%s Setup
|
||||
%s Afinstaller
|
||||
$(^Name) Setup
|
||||
$(^Name) Afinstaller
|
||||
: Licens Aftale
|
||||
: Installations egenskaber
|
||||
: Installation mappe
|
||||
|
@ -34,7 +36,7 @@ Tilpasset
|
|||
Vælg hvilken type du vil installere:
|
||||
Vælg komponenter 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:
|
||||
Krævet plads:
|
||||
Afinstallerer fra:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Hendri Adriaens & Joost Verburg
|
||||
Nullsoft Install System %s
|
||||
%s Installatie
|
||||
%s Deïnstallatie
|
||||
$(^Name) Installatie
|
||||
$(^Name) Deïnstallatie
|
||||
: Licentie Overeenkomst
|
||||
: Installatie Opties
|
||||
: Installatie Map
|
||||
|
@ -36,7 +38,7 @@ Handmatig
|
|||
Selecteer het installatietype:
|
||||
Selecteer de installatieonderdelen:
|
||||
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:
|
||||
Vereiste ruimte:
|
||||
Uninstallatie vanuit:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Header, don't edit
|
||||
NLF v5
|
||||
NLF v6
|
||||
# Start editing here
|
||||
# Language ID
|
||||
1033
|
||||
|
@ -7,76 +7,185 @@ NLF v5
|
|||
-
|
||||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
-
|
||||
# Translation by ..... (any credits should go here)
|
||||
# ^Branding
|
||||
Nullsoft Install System %s
|
||||
%s Setup
|
||||
%s Uninstall
|
||||
# ^SetupCaption
|
||||
$(^Name) Setup
|
||||
# ^UninstallCaption
|
||||
$(^Name) Uninstall
|
||||
# ^LicenseSubCaption
|
||||
: License Agreement
|
||||
# ^ComponentsSubCaption
|
||||
: Installation Options
|
||||
# ^DirSubCaption
|
||||
: Installation Folder
|
||||
# ^InstallingSubCaption
|
||||
: Installing
|
||||
# ^CompletedSubCaption
|
||||
: Completed
|
||||
# ^UnComponentsSubCaption
|
||||
: Uninstallation Options
|
||||
# ^UnDirSubCaption
|
||||
: Uninstallation Folder
|
||||
# ^ConfirmSubCaption
|
||||
: Confirmation
|
||||
# ^UninstallingSubCaption
|
||||
: Uninstalling
|
||||
# ^UnCompletedSubCaption
|
||||
: Completed
|
||||
# ^BackBtn
|
||||
< &Back
|
||||
# ^NextBtn
|
||||
&Next >
|
||||
# ^AgreeBtn
|
||||
I &Agree
|
||||
# ^AcceptBtn
|
||||
I &accept the terms in the License Agreement
|
||||
# ^DontAcceptBtn
|
||||
I &do not accept the terms in the License Agreement
|
||||
# ^InstallBtn
|
||||
&Install
|
||||
# ^UninstallBtn
|
||||
&Uninstall
|
||||
# ^CancelBtn
|
||||
Cancel
|
||||
# ^CloseBtn
|
||||
&Close
|
||||
# ^BrowseBtn
|
||||
B&rowse...
|
||||
# ^ShowDetailsBtn
|
||||
Show &details
|
||||
# ^ClickNext
|
||||
Click Next to continue.
|
||||
# ^ClickInstall
|
||||
Click Install to start the installation.
|
||||
# ^ClickUninstall
|
||||
Click Uninstall to start the uninstallation.
|
||||
# ^Name
|
||||
Name
|
||||
# ^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
|
||||
# ^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:
|
||||
# ^ComponentsSubText2_NoInstTypes
|
||||
Select components to install:
|
||||
# ^ComponentsSubText2
|
||||
Or, select the optional components you wish to install:
|
||||
Select the folder to install %s in:
|
||||
Space available:
|
||||
Space required:
|
||||
# ^UnComponentsText
|
||||
Check the components you want to uninstall and uncheck the components you don't want to uninstall. $_CLICK
|
||||
# ^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:
|
||||
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
|
||||
Error opening file for writing: \r\n\t"$0"\r\nHit retry to retry writing the file, or\r\ncancel to abort installation
|
||||
Can't write:
|
||||
# ^FileError
|
||||
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_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 to
|
||||
Registering:
|
||||
Unregistering:
|
||||
Could not find symbol:
|
||||
Could not load:
|
||||
Create folder:
|
||||
Create shortcut:
|
||||
Created uninstaller:
|
||||
Delete file:
|
||||
Delete on reboot:
|
||||
Error creating shortcut:
|
||||
Error creating:
|
||||
# ^CopyTo
|
||||
"Copy to "
|
||||
# ^Registering
|
||||
"Registering: "
|
||||
# ^Unregistering
|
||||
"Unregistering: "
|
||||
# ^SymbolNotFound
|
||||
"Could not find symbol: "
|
||||
# ^CouldNotLoad
|
||||
"Could not load: "
|
||||
# ^CreateFolder
|
||||
"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?
|
||||
# ^ErrorRegistering
|
||||
Error registering DLL
|
||||
ExecShell:
|
||||
Execute:
|
||||
Extract:
|
||||
Extract: error writing to file
|
||||
# ^ExecShell
|
||||
"ExecShell: "
|
||||
# ^Exec
|
||||
"Execute: "
|
||||
# ^Extract
|
||||
"Extract: "
|
||||
# ^ErrorWriting
|
||||
"Extract: error writing to file "
|
||||
# ^InvalidOpcode
|
||||
Installer corrupted: invalid opcode
|
||||
No OLE for:
|
||||
Output folder:
|
||||
Remove folder:
|
||||
Rename on reboot:
|
||||
Rename:
|
||||
Skipped:
|
||||
# ^NoOLE
|
||||
"No OLE for: "
|
||||
# ^OutputFolder
|
||||
"Output folder: "
|
||||
# ^RemoveFolder
|
||||
"Remove folder: "
|
||||
# ^RenameOnReboot
|
||||
"Rename on reboot: "
|
||||
# ^Rename
|
||||
"Rename: "
|
||||
# ^Skipped
|
||||
"Skipped: "
|
||||
# ^CopyDetails
|
||||
Copy Details To Clipboard
|
||||
# ^LogInstall
|
||||
Log install process
|
||||
# byte
|
||||
# ^Byte
|
||||
B
|
||||
# kilo
|
||||
# ^Kilo
|
||||
K
|
||||
# mega
|
||||
# ^Mega
|
||||
M
|
||||
# giga
|
||||
# ^Giga
|
||||
G
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by izzo (izzo@hot.ee)
|
||||
Nullsoft Install System %s
|
||||
%s Paigaldamine
|
||||
%s Eemaldamine
|
||||
$(^Name) Paigaldamine
|
||||
$(^Name) Eemaldamine
|
||||
: Litsentsileping
|
||||
: Paigaldusvalikud
|
||||
: Paigalduskaust
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# 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>
|
||||
Nullsoft Asennusjärjestelmä %s
|
||||
%s Asennus
|
||||
%s Poisto
|
||||
$(^Name) Asennus
|
||||
$(^Name) Poisto
|
||||
: Lisenssisopimus
|
||||
: Asennusvaihtoehdot
|
||||
: Asennushakemisto
|
||||
|
@ -36,7 +38,7 @@ Oma
|
|||
Valitse asennustyyppi:
|
||||
Valitse asennettavat komponentit:
|
||||
Tai, valitse valinnaiset komponentit:
|
||||
Valitse hakemisto, johon %s asennetaan:
|
||||
Valitse hakemisto, johon $(^Name) asennetaan:
|
||||
Tilaa vapaana:
|
||||
Tarvittava tila:
|
||||
Poistetaan hakemistosta:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# 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.
|
||||
Nullsoft Install System %s
|
||||
Installation de %s
|
||||
Désinstallation de %s
|
||||
Installation de $(^Name)
|
||||
Désinstallation de $(^Name)
|
||||
: Licence
|
||||
: Options d'installation
|
||||
: Dossier d'installation
|
||||
|
@ -36,7 +38,7 @@ Personnalis
|
|||
Sélectionnez le type d'installation :
|
||||
Sélectionnez les composants à 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 requis :
|
||||
Désinstallation de :
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by L.King, changes by R. Bisswanger
|
||||
Nullsoft Install System %s
|
||||
%s Installation
|
||||
%s Deinstallation
|
||||
$(^Name) Installation
|
||||
$(^Name) Deinstallation
|
||||
: Lizenzabkommen
|
||||
: Installations-Optionen
|
||||
: Zielverzeichnis
|
||||
|
@ -36,7 +38,7 @@ Benutzerdefiniert
|
|||
Installations-Typ bestimmen:
|
||||
Wählen Sie die Komponenten aus, die Sie installieren möchten:
|
||||
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:
|
||||
Benötigter Speicher:
|
||||
Deinstalliere aus:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Makidis N. Mike
|
||||
Nullsoft Install System %s
|
||||
Εγκατάσταση του '%s'
|
||||
Απεγκατάσταση του '%s'
|
||||
Εγκατάσταση του '$(^Name)'
|
||||
Απεγκατάσταση του '$(^Name)'
|
||||
: Συμφωνία ’δειας Χρήσης
|
||||
: Επιλογές Εγκατάστασης
|
||||
: Φάκελος Εγκατάστασης
|
||||
|
@ -36,7 +38,7 @@ Nullsoft Install System %s
|
|||
Επιλέξτε τύπο εγκατάστασης:
|
||||
Επιλέξτε τα στοιχεία που θέλετε να εγκαταστήσετε:
|
||||
Ή, επιλέξτε τα προαιρετικά στοιχεία που θέλετε να εγκαταστήσετε:
|
||||
Επιλέξτε το φάκελο εγκατάστασης για το '%s':
|
||||
Επιλέξτε το φάκελο εγκατάστασης για το '$(^Name)':
|
||||
Διαθέσιμος χώρος:
|
||||
Απαιτούμενος χώρος:
|
||||
Απεγκατάστ. από:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
RTL
|
||||
# Translation by Amir Szekely (aka KiCHiK)
|
||||
Nullsoft Install System %s
|
||||
התקנת %s
|
||||
הסרת %s
|
||||
התקנת $(^Name)
|
||||
הסרת $(^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\t"$0"\r\nלחץ על נסה שנית כדי לנסות לפתוח את הקובץ שוב, או\r\nביטול כדי לבטל את התתקנה
|
||||
לא ניתן לכתוב:
|
||||
ההעתקה נכשלה
|
||||
העתק ל-
|
||||
|
@ -74,8 +76,8 @@ Nullsoft Install System %s
|
|||
# byte
|
||||
"ב
|
||||
# kilo
|
||||
ק
|
||||
ק
|
||||
# mega
|
||||
מ
|
||||
מ
|
||||
# giga
|
||||
ג
|
||||
ג
|
|
@ -7,11 +7,13 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Soft-Trans Bt. (V2)
|
||||
# Translation by Orfanik Kft. (V3-V5)
|
||||
Nullsoft Telepítőrendszer %s
|
||||
%s Telepítő
|
||||
%s Eltávolító
|
||||
$(^Name) Telepítő
|
||||
$(^Name) Eltávolító
|
||||
: Licencszerződés
|
||||
: Telepítési lehetőségek
|
||||
: Célmappa
|
||||
|
@ -37,7 +39,7 @@ Egy
|
|||
Válassza ki a telepítés típusát:
|
||||
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:
|
||||
Melyik mappába telepíti a(z) %s fájlt:
|
||||
Melyik mappába telepíti a(z) $(^Name) fájlt:
|
||||
Szabad terület:
|
||||
Helyigény:
|
||||
Eltávolítás helye:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v2
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Orfanik - http://www.orfanik.hu
|
||||
Nullsoft Install System %s
|
||||
Installazione di %s
|
||||
Disinstallazione di %s
|
||||
Installazione di $(^Name)
|
||||
Disinstallazione di $(^Name)
|
||||
: Licenza d'uso
|
||||
: Opzioni di installazione
|
||||
: Cartella di installazione
|
||||
|
@ -34,7 +36,7 @@ Personalizzata
|
|||
Seleziona il tipo d'installazione :
|
||||
Seleziona i componenti da installare :
|
||||
Oppure, seleziona i componenti opzionali che vuoi installare :
|
||||
Seleziona la cartella dove installare %s :
|
||||
Seleziona la cartella dove installare $(^Name) :
|
||||
Spazio disponibile :
|
||||
Spazio necessario :
|
||||
Rimozione da :
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
9
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
932
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Dnanako, updated by Takahiro Yoshimura <takahiro_y@monolithworks.co.jp>
|
||||
Nullsoft Install System %s
|
||||
%s セットアップ
|
||||
%s アンインストール
|
||||
$(^Name) セットアップ
|
||||
$(^Name) アンインストール
|
||||
:ライセンス契約書
|
||||
:インストール オプション
|
||||
:インストール フォルダ
|
||||
|
@ -36,7 +38,7 @@ Nullsoft Install System %s
|
|||
インストール タイプを選択:
|
||||
インストール コンポーネントを選択:
|
||||
または、インストール オプション コンポーネントを選択:
|
||||
%s をインストールするフォルダを選択してください:
|
||||
$(^Name) をインストールするフォルダを選択してください:
|
||||
利用可能なディスクスペース:
|
||||
必要なディスクスペース:
|
||||
アンインストール元:
|
||||
|
|
|
@ -8,10 +8,12 @@ NLF v5
|
|||
9
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
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
|
||||
널소프트 설치 시스템 %s
|
||||
%s 설치
|
||||
%s 제거
|
||||
$(^Name) 설치
|
||||
$(^Name) 제거
|
||||
: 사용 계약 동의
|
||||
: 설치 옵션
|
||||
: 폴더 지정
|
||||
|
@ -37,7 +39,7 @@ NLF v5
|
|||
설치 형태를 선택하세요:
|
||||
설치하려는 구성 요소를 선택하세요:
|
||||
구성요소 직접 선택:
|
||||
%s (을)를 다음 폴더에 설치합니다:
|
||||
$(^Name) (을)를 다음 폴더에 설치합니다:
|
||||
남은 디스크 공간:
|
||||
필요한 디스크 공간:
|
||||
제거 대상:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v3
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by NorCis
|
||||
Nullsoft Install System %s
|
||||
%s Idiegimas
|
||||
%s Panaikinti
|
||||
$(^Name) Idiegimas
|
||||
$(^Name) Panaikinti
|
||||
: Naudojimo sutartis
|
||||
: Idiegimo nustatymai
|
||||
: Idiegimo katalogas
|
||||
|
@ -36,7 +38,7 @@ Kitoks
|
|||
Pasirinkite idiegimo tipa:
|
||||
Pasirinkite komponentus, kuriuos idiegti:
|
||||
Arba, pasirinkite neprivalomus komponentus, kuriuos jus norite idiegti:
|
||||
Pasirinkite kataloga, kur idiegti %s:
|
||||
Pasirinkite kataloga, kur idiegti $(^Name):
|
||||
Yra vietos:
|
||||
Reikia vietos:
|
||||
Trinama iš:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Sasko Zdravkin [vardarce@mail.com]
|
||||
Nullsoft Install System %s
|
||||
%s Инсталирање
|
||||
%s Деинсталирање
|
||||
$(^Name) Инсталирање
|
||||
$(^Name) Деинсталирање
|
||||
: Лиценцен Договор
|
||||
: Инсталациони опции
|
||||
: Инсталационен директориум
|
||||
|
@ -36,7 +38,7 @@ Nullsoft Install System %s
|
|||
Одберето го видот на инсталацијата:
|
||||
Одберете компоненти за инсталирање:
|
||||
Или, одберете одредени компоненти за инсталирање:
|
||||
Одберете го директориумот за инсталирање на %s:
|
||||
Одберете го директориумот за инсталирање на $(^Name):
|
||||
Слободен простор:
|
||||
Потребен простор:
|
||||
Деинсталирај од:
|
||||
|
|
|
@ -7,11 +7,13 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
1250
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Piotr Murawski & Rafał Lampe <ppiter@skrzynka.pl> - www.lomsel.prv.pl
|
||||
# corrections, additions, updates by cube cube(at)lp.net.pl
|
||||
Nullsoft Install System %s
|
||||
%s Instalator
|
||||
%s Odinstaluj
|
||||
$(^Name) Instalator
|
||||
$(^Name) Odinstaluj
|
||||
: Warunki licencji
|
||||
: Opcje instalacji
|
||||
: Folder instalacji
|
||||
|
@ -37,7 +39,7 @@ U
|
|||
Wybierz typ instalacji:
|
||||
Wybierz komponenty do zainstalowania:
|
||||
lub wybierz opcjonalne komponenty, które chcesz zainstalować:
|
||||
Wybierz folder instalacji %s:
|
||||
Wybierz folder instalacji $(^Name):
|
||||
Dostępne miejsce:
|
||||
Wymagane miejsce:
|
||||
Odinstalowuje z:
|
||||
|
|
|
@ -8,10 +8,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
1252
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation v4.0.3 by DragonSoull <dragonsoull@madalien.tk> with help from Dre` - Updated by Ramon
|
||||
Sistema de Instalação Nullsoft %s
|
||||
Instalação de %s
|
||||
Desinstalação de %s
|
||||
Instalação de $(^Name)
|
||||
Desinstalação de $(^Name)
|
||||
: Contrato de Licença
|
||||
: Opções de instalação
|
||||
: Directoria de instalação
|
||||
|
@ -37,7 +39,7 @@ Personalizada
|
|||
Escolha o tipo de instalação:
|
||||
Escolha os componentes a 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 necessário:
|
||||
A Desinstalar de:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Diego Marcos <jump@osite.com.br>
|
||||
Sistema de Instalação Nullsoft %s
|
||||
Instalação do %s
|
||||
Desinstalação do %s
|
||||
Instalação do $(^Name)
|
||||
Desinstalação do $(^Name)
|
||||
: Contrato de Licença
|
||||
: Opções de instalação
|
||||
: Diretório de instalação
|
||||
|
@ -36,7 +38,7 @@ Personalizado
|
|||
Escolha o tipo de instalação:
|
||||
Escolha os componentes para 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 necessário:
|
||||
Desinstalando de:
|
||||
|
|
|
@ -7,12 +7,14 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
1250
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Revision by Sorin Sbarnea (sorin@intersol.ro) v5.1
|
||||
# Translation by Cristian Pirvu (pcristip@yahoo.com) v5
|
||||
# and Sorin Sbarnea INTERSOL SRL (sorin@intersol.ro) v4
|
||||
Sistem de instalare Nullsoft %s
|
||||
Instalare %s
|
||||
Dezinstalare %s
|
||||
Instalare $(^Name)
|
||||
Dezinstalare $(^Name)
|
||||
: Licenta de utilizare
|
||||
: Optiuni de instalare
|
||||
: Directorul de instalare
|
||||
|
@ -38,7 +40,7 @@ Nestandard
|
|||
Alegeti tipul instalarii:
|
||||
Alegeti componentele de instalat:
|
||||
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 necesar:
|
||||
Dezinstaleaza din:
|
||||
|
|
|
@ -8,10 +8,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Timon [ timon@front.ru ] + 20030720
|
||||
Nullsoft Install System %s
|
||||
%s Установка
|
||||
%s Удаление
|
||||
$(^Name) Установка
|
||||
$(^Name) Удаление
|
||||
: Лицензионное соглашение
|
||||
: Опции установки
|
||||
: Директория установки
|
||||
|
@ -37,7 +39,7 @@ Nullsoft Install System %s
|
|||
Выберите тип установки:
|
||||
Выберите компоненты для установки:
|
||||
Или, выберите вручную компоненты, которые Вы желаете установить:
|
||||
Выберите директорию для установки %s в:
|
||||
Выберите директорию для установки $(^Name) в:
|
||||
Доступно места:
|
||||
Необходимо места:
|
||||
Удаление из:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Vladan "vladano@EUnet.yu" Obradovic
|
||||
Nullsoft Install System %s
|
||||
%s Instalacija
|
||||
%s Deinstalacija
|
||||
$(^Name) Instalacija
|
||||
$(^Name) Deinstalacija
|
||||
: Uslovi Licence
|
||||
: Installacione Opcije
|
||||
: Installacioni Direktorijum
|
||||
|
@ -36,7 +38,7 @@ Posebno
|
|||
Odaberi tip instalacije:
|
||||
Odaberi 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:
|
||||
Potrebno na disku:
|
||||
Deinstaliram iz:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
9
|
||||
# Codepage - dash (-) means ANSI code page ANSI 字码页
|
||||
936
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Kii Ali <kiiali@cpatch.org>, Revision Date: 2003-05-30
|
||||
Nullsoft Install System %s
|
||||
%s 安装
|
||||
%s 解除安装
|
||||
$(^Name) 安装
|
||||
$(^Name) 解除安装
|
||||
: 授权条款
|
||||
: 安装选项
|
||||
: 安装文件夹
|
||||
|
@ -36,7 +38,7 @@ Nullsoft Install System %s
|
|||
选定安装的类型:
|
||||
选定安装的组件:
|
||||
或者,自定义选定想安装的组件:
|
||||
选定要安装 %s 的文件夹:
|
||||
选定要安装 $(^Name) 的文件夹:
|
||||
可用空间:
|
||||
所需空间:
|
||||
解除安装目录:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v3
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by trace & Kypec
|
||||
Nullsoft Install System %s
|
||||
Inštalácia %s
|
||||
Odinštalácia %s
|
||||
Inštalácia $(^Name)
|
||||
Odinštalácia $(^Name)
|
||||
: Licenèná zmluva
|
||||
: Možnosti inštalácie
|
||||
: Adresár inštalácie
|
||||
|
@ -36,7 +38,7 @@ Vlastn
|
|||
Zvo¾te typ inštalácie:
|
||||
Zvo¾te 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:
|
||||
Potrebný priestor:
|
||||
Odinštalovávam z:
|
||||
|
|
|
@ -8,10 +8,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Janez Dolinar
|
||||
Nullsoft Install System %s
|
||||
%s Namestitev
|
||||
%s Odstranitev
|
||||
$(^Name) Namestitev
|
||||
$(^Name) Odstranitev
|
||||
: Licenčna pogodba
|
||||
: Možnosti namestitve
|
||||
: Mapa namestitve
|
||||
|
@ -37,7 +39,7 @@ Po meri
|
|||
Izberite tip namestitve:
|
||||
Izberite bloke namestitve:
|
||||
Ali si izberite bloke namestitve, ki jih želite:
|
||||
Izberi mapo za namestitev %s:
|
||||
Izberi mapo za namestitev $(^Name):
|
||||
Prosto:
|
||||
Zahtevano:
|
||||
Odstranjujem iz:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by MoNKi
|
||||
Nullsoft Install System %s
|
||||
Instalación de %s
|
||||
Desinstalación de %s
|
||||
Instalación de $(^Name)
|
||||
Desinstalación de $(^Name)
|
||||
: Acuerdo de Licencia
|
||||
: Opciones de Instalación
|
||||
: Directorio de Instalación
|
||||
|
@ -36,7 +38,7 @@ Personalizada
|
|||
Indique el tipo de instalación:
|
||||
Seleccione los componentes:
|
||||
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 requerido:
|
||||
Desinstalando desde:
|
||||
|
|
|
@ -8,10 +8,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Magnus Bonnevier (magnus.bonnevier@telia.com)
|
||||
Nullsoft Install System %s
|
||||
%s Setup
|
||||
%s Avinstallation
|
||||
$(^Name) Setup
|
||||
$(^Name) Avinstallation
|
||||
: Licens Avtal
|
||||
: Installations Val
|
||||
: Installations Katalog
|
||||
|
@ -37,7 +39,7 @@ Custom
|
|||
Välj typ av installation:
|
||||
Välj komponenter att 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 som behövs:
|
||||
Avinstallerar från:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v2
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by TuW@nNu tuwannu@hotmail.com (asdfuae)
|
||||
Nullsoft Install System %s
|
||||
%s オヤエオム鬧
|
||||
%s カヘケ。メテオヤエオム鬧
|
||||
$(^Name) µÔ´µÑé§
|
||||
$(^Name) ¶Í¹¡ÒõԴµÑé§
|
||||
: ㈤偷∨о米柰<E7B1B3>寓试犯造
|
||||
: 笛青抛汀∫玫源笛椐
|
||||
: 饪培赐渺氛璧源笛椐
|
||||
|
@ -34,7 +36,7 @@ Nullsoft Install System %s
|
|||
嗯淄∶倩岷骸颐翟吹验<EFBFBD>:
|
||||
嗯淄·土饩喙沟旆砧甸艇∫玫源笛椐:
|
||||
嗯淄·土饩喙沟焱阻规氛璧橥А颐翟吹验<EFBFBD>:
|
||||
耆魴ヤエオム鬧 %s ナァ羯:
|
||||
ãËéµÔ´µÑé§ $(^Name) ŧã¹:
|
||||
喙组头砧氛栲伺淄:
|
||||
喙组头砧氛璧橥А颐:
|
||||
锻埂颐翟吹验Ж摇:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
9
|
||||
# Codepage - dash (-) means ANSI code page ANSI 字碼頁
|
||||
950
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Kii Ali <kiiali@cpatch.org>, Revision Date: 2003-05-30
|
||||
Nullsoft Install System %s
|
||||
%s 安裝
|
||||
%s 解除安裝
|
||||
$(^Name) 安裝
|
||||
$(^Name) 解除安裝
|
||||
: 授權條款
|
||||
: 安裝選項
|
||||
: 安裝資料夾
|
||||
|
@ -36,7 +38,7 @@ Nullsoft Install System %s
|
|||
選取安裝的類型:
|
||||
選取安裝的元件:
|
||||
或者,自訂選取想安裝的元件:
|
||||
選取要安裝 %s 的資料夾:
|
||||
選取要安裝 $(^Name) 的資料夾:
|
||||
可用空間:
|
||||
所需空間:
|
||||
解除安裝目錄:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v5
|
|||
-
|
||||
# Codepage - dash (-) means ANSI code page
|
||||
-
|
||||
# RTL - anything else than RTL means LTR
|
||||
-
|
||||
# Translation by Fatih BOY (fatih@smartcoding.org)
|
||||
Nullsoft Kurulum Sistemi %s
|
||||
%s Kurulumu
|
||||
%s Uninstaller
|
||||
$(^Name) Kurulumu
|
||||
$(^Name) Uninstaller
|
||||
: Sözlesme
|
||||
: Kurulum Ayarlari
|
||||
: Kurulum Dizini
|
||||
|
@ -36,7 +38,7 @@ Tamamlandi
|
|||
Kurulum seklini seçiniz:
|
||||
Kurulacak 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:
|
||||
Gerekli bos alan:
|
||||
Kaldiriliyor:
|
||||
|
|
|
@ -7,10 +7,12 @@ NLF v4
|
|||
-
|
||||
# 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>
|
||||
Nullsoft Install System %s
|
||||
%s Установка
|
||||
%s Видалення
|
||||
$(^Name) Установка
|
||||
$(^Name) Видалення
|
||||
: Лiцензiйна угода
|
||||
: Опцiї установки
|
||||
: Директорiя установки
|
||||
|
@ -36,7 +38,7 @@ I
|
|||
Виберiть тип установки:
|
||||
Виберiть компоненти для установки:
|
||||
Чи, виберiть вручну компоненти, якi Ви хочете встановити:
|
||||
Виберiть директорiю для установки %s в:
|
||||
Виберiть директорiю для установки $(^Name) в:
|
||||
Доступно мiсця:
|
||||
Необхiдно мiсця:
|
||||
Видалення з:
|
||||
|
|
|
@ -2,7 +2,7 @@ StartMenu.dll shows a custom page that lets the user select a start menu program
|
|||
folder to put shortcuts in.
|
||||
|
||||
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
|
||||
/noicon - doesn't show the icon in the top left corner
|
||||
/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
|
||||
will have > as its first character and you
|
||||
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
|
||||
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
|
||||
appended to the folder name. The function does not push the full path but only the
|
||||
selected sub-folder. It's up to you to decide if to put it in the current user or
|
||||
all users start menu.
|
||||
after "success". If the user checked the no shortcuts checkbox the result will be
|
||||
prefixed with '>'. The function does not push the full path but only the selected
|
||||
sub-folder. It's up to you to decide if to put it in the current user or all
|
||||
users start menu.
|
||||
|
||||
Look at Example.nsi for an example.
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ char checkbox[1024];
|
|||
int autoadd = 0;
|
||||
int g_done = 0;
|
||||
int noicon = 0;
|
||||
int rtl = 0;
|
||||
|
||||
void *lpWndProcOld;
|
||||
|
||||
|
@ -54,6 +55,10 @@ void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variab
|
|||
{
|
||||
noicon = 1;
|
||||
}
|
||||
else if (!lstrcmpi(buf+1, "rtl"))
|
||||
{
|
||||
rtl = 1;
|
||||
}
|
||||
else if (!lstrcmpi(buf+1, "text"))
|
||||
{
|
||||
popstring(text);
|
||||
|
@ -73,7 +78,8 @@ void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variab
|
|||
if (popstring(buf))
|
||||
*buf = 0;
|
||||
}
|
||||
if (*buf) lstrcpy(progname, buf);
|
||||
if (*buf)
|
||||
lstrcpy(progname, buf);
|
||||
else
|
||||
{
|
||||
pushstring("error reading parameters");
|
||||
|
@ -145,16 +151,22 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
|
||||
int y_offset = 0;
|
||||
|
||||
int width, height;
|
||||
|
||||
GetWindowRect(hwChild, &dialog_r);
|
||||
ScreenToClient(hwParent, (LPPOINT) &dialog_r);
|
||||
ScreenToClient(hwParent, ((LPPOINT) &dialog_r)+1);
|
||||
|
||||
width = dialog_r.right - dialog_r.left;
|
||||
height = dialog_r.bottom - dialog_r.top;
|
||||
|
||||
SetWindowPos(
|
||||
hwndDlg,
|
||||
0,
|
||||
dialog_r.left,
|
||||
dialog_r.top,
|
||||
dialog_r.right - dialog_r.left,
|
||||
dialog_r.bottom - dialog_r.top,
|
||||
width,
|
||||
height,
|
||||
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(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)
|
||||
{
|
||||
SendMessage(
|
||||
|
@ -180,39 +205,50 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
(LPARAM)LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(103))
|
||||
);
|
||||
}
|
||||
|
||||
GetClientRect(hwIcon, &temp_r);
|
||||
|
||||
SetWindowPos(
|
||||
hwIcon,
|
||||
0,
|
||||
rtl ? width - temp_r.right : 0,
|
||||
0,
|
||||
0,
|
||||
32,
|
||||
32,
|
||||
temp_r.right,
|
||||
temp_r.bottom,
|
||||
SWP_NOACTIVATE | (noicon ? SWP_HIDEWINDOW : 0)
|
||||
);
|
||||
|
||||
if (!*text)
|
||||
lstrcpy(text, "Select the Start Menu folder in which you would like to create the program's shortcuts:");
|
||||
//GetWindowRect(hwIcon, &temp_r);
|
||||
//ScreenToClient(hwndDlg, ((LPPOINT) &temp_r));
|
||||
//ScreenToClient(hwndDlg, ((LPPOINT) &temp_r) + 1);
|
||||
|
||||
GetWindowRect(hwIcon, &temp_r);
|
||||
temp_r.right += 5;
|
||||
temp_r.bottom += 5;
|
||||
ScreenToClient(hwndDlg, ((LPPOINT) &temp_r) + 1);
|
||||
if (rtl)
|
||||
{
|
||||
ProgressiveSetWindowPos(
|
||||
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(
|
||||
hwText,
|
||||
noicon ? 0 : temp_r.right,
|
||||
dialog_r.right - dialog_r.left - (noicon ? 0 : temp_r.right),
|
||||
temp_r.bottom + 2
|
||||
);
|
||||
|
||||
SetWindowText(hwText, text);
|
||||
SetWindowText(hwText, *text ? text : "Select the Start Menu folder in which you would like to create the program's shortcuts:");
|
||||
|
||||
GetWindowRect(hwLocation, &temp_r);
|
||||
|
||||
ProgressiveSetWindowPos(
|
||||
hwLocation,
|
||||
0,
|
||||
dialog_r.right - dialog_r.left,
|
||||
width,
|
||||
temp_r.bottom - temp_r.top
|
||||
);
|
||||
|
||||
|
@ -233,14 +269,14 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
ProgressiveSetWindowPos(
|
||||
hwDirList,
|
||||
0,
|
||||
dialog_r.right - dialog_r.left,
|
||||
dialog_r.bottom - dialog_r.top - y_offset - (*checkbox ? temp_r.bottom - temp_r.top + 5 : 0)
|
||||
width,
|
||||
height - y_offset - (*checkbox ? temp_r.bottom - temp_r.top + 5 : 0)
|
||||
);
|
||||
|
||||
ProgressiveSetWindowPos(
|
||||
hwCheckBox,
|
||||
0,
|
||||
dialog_r.right - dialog_r.left,
|
||||
width,
|
||||
temp_r.bottom - temp_r.top
|
||||
);
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ BSC32=bscmake.exe
|
|||
# ADD BSC32 /nologo
|
||||
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 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
|
||||
|
||||
!ELSEIF "$(CFG)" == "StartMenu - Win32 Debug"
|
||||
|
|
|
@ -17,11 +17,12 @@
|
|||
#define PCD_PARAMS 2
|
||||
#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
|
||||
2, // PAT_LONG
|
||||
1, // PAT_STRING
|
||||
1, // PAT_BOOLEAN
|
||||
1, // PAT_WSTRING
|
||||
1, // PAT_GUID
|
||||
0}; // PAT_CALLBACK (Size will be equal to 1)
|
||||
|
||||
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};
|
||||
HANDLE retaddr;
|
||||
|
||||
|
||||
char *GetResultStr(SystemProc *proc)
|
||||
{
|
||||
char *buf = AllocString();
|
||||
|
@ -180,6 +180,7 @@ PLUGINFUNCTION(Call)
|
|||
proc = CallBack(proc);
|
||||
break;
|
||||
case PT_PROC:
|
||||
case PT_VTABLEPROC:
|
||||
proc = CallProc(proc); break;
|
||||
case PT_STRUCT:
|
||||
CallStruct(proc); break;
|
||||
|
@ -253,7 +254,8 @@ PLUGINFUNCTIONSHORT(Int64Op)
|
|||
case '%':
|
||||
// It's unclear, but in this case compiler will use DivMod rountine
|
||||
// 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;
|
||||
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 '#': 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_OPTIONS; temp = 1; break;
|
||||
}
|
||||
|
@ -364,6 +371,7 @@ SystemProc *PrepareProc(BOOL NeedForCall)
|
|||
}
|
||||
break;
|
||||
case PT_PROC:
|
||||
case PT_VTABLEPROC:
|
||||
lstrcpy(proc->ProcName, cbuf);
|
||||
lstrcpy(proc->DllName, sbuf);
|
||||
break;
|
||||
|
@ -389,8 +397,16 @@ SystemProc *PrepareProc(BOOL NeedForCall)
|
|||
switch (*ib)
|
||||
{
|
||||
case ':':
|
||||
case '-':
|
||||
// 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 ':'
|
||||
|
||||
if (cb > cbuf)
|
||||
|
@ -400,7 +416,6 @@ SystemProc *PrepareProc(BOOL NeedForCall)
|
|||
} else *sbuf = 0; // No dll - system proc
|
||||
|
||||
// Ok
|
||||
ProcType = PT_PROC;
|
||||
ChangesDone = PCD_DONE;
|
||||
break;
|
||||
case '*':
|
||||
|
@ -442,8 +457,10 @@ SystemProc *PrepareProc(BOOL NeedForCall)
|
|||
case 'L': temp2 = PAT_LONG; break;
|
||||
case 't':
|
||||
case 'T': temp2 = PAT_STRING; break;
|
||||
case 'b':
|
||||
case 'B': temp2 = PAT_BOOLEAN; break;
|
||||
case 'g':
|
||||
case 'G': temp2 = PAT_GUID; break;
|
||||
case 'w':
|
||||
case 'W': temp2 = PAT_WSTRING; break;
|
||||
case 'k':
|
||||
case 'K': temp2 = PAT_CALLBACK; break;
|
||||
|
||||
|
@ -589,6 +606,32 @@ SystemProc *PrepareProc(BOOL NeedForCall)
|
|||
switch (proc->ProcType)
|
||||
{
|
||||
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:
|
||||
if (*proc->DllName == 0)
|
||||
{
|
||||
|
@ -607,7 +650,12 @@ SystemProc *PrepareProc(BOOL NeedForCall)
|
|||
|
||||
// Get proc address
|
||||
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;
|
||||
case PT_STRUCT:
|
||||
|
@ -634,6 +682,7 @@ void ParamsIn(SystemProc *proc)
|
|||
{
|
||||
int i, *place;
|
||||
char *realbuf;
|
||||
LPWSTR wstr;
|
||||
|
||||
i = (proc->ParamCount > 0)?(1):(0);
|
||||
while (TRUE)
|
||||
|
@ -654,7 +703,10 @@ void ParamsIn(SystemProc *proc)
|
|||
// Retreive pointer to place
|
||||
if (proc->Params[i].Option == -1) 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
|
||||
switch (proc->Params[i].Type)
|
||||
{
|
||||
|
@ -671,10 +723,19 @@ void ParamsIn(SystemProc *proc)
|
|||
/* if (proc->Params[i].Input == IOT_NONE)
|
||||
*((int*) place) = (int) NULL;
|
||||
else*/
|
||||
*((int*) place) = (int) AllocStr(realbuf);
|
||||
*((int*) place) = (int) (proc->Params[i].allocatedBlock = AllocStr(realbuf));
|
||||
break;
|
||||
case PAT_BOOLEAN:
|
||||
*((int*) place) = lstrcmpi(realbuf, "true");
|
||||
case PAT_WSTRING:
|
||||
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;
|
||||
case PAT_CALLBACK:
|
||||
// Generate new or use old callback
|
||||
|
@ -718,6 +779,7 @@ void ParamsOut(SystemProc *proc)
|
|||
{
|
||||
int i, *place;
|
||||
char *realbuf;
|
||||
LPWSTR wstr;
|
||||
|
||||
i = proc->ParamCount;
|
||||
do
|
||||
|
@ -745,17 +807,29 @@ void ParamsOut(SystemProc *proc)
|
|||
int num = lstrlen(*((char**) place));
|
||||
if (num >= g_stringsize) num = g_stringsize-1;
|
||||
lstrcpyn(realbuf,*((char**) place), num+1);
|
||||
realbuf[num] = 0;
|
||||
realbuf[num] = 0;
|
||||
}
|
||||
break;
|
||||
case PAT_BOOLEAN:
|
||||
lstrcpy(realbuf,(*((int*) place))?("true"):("false"));
|
||||
case PAT_GUID:
|
||||
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;
|
||||
case PAT_CALLBACK:
|
||||
wsprintf(realbuf, "%d", proc->Params[i].Value);
|
||||
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
|
||||
if (proc->Params[i].Output == IOT_NONE);
|
||||
else if (proc->Params[i].Output == IOT_STACK) pushstring(realbuf);
|
||||
|
@ -1160,7 +1234,11 @@ void CallStruct(SystemProc *proc)
|
|||
// pointer
|
||||
ptr = (char*) &(proc->Params[i].Value);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#define PT_NOTHING 0
|
||||
#define PT_PROC 1
|
||||
#define PT_STRUCT 2
|
||||
#define PT_VTABLEPROC 3
|
||||
|
||||
// Proc results:
|
||||
#define PR_OK 0
|
||||
|
@ -29,8 +30,9 @@
|
|||
#define PAT_INT 1
|
||||
#define PAT_LONG 2
|
||||
#define PAT_STRING 3
|
||||
#define PAT_BOOLEAN 4
|
||||
#define PAT_CALLBACK 5
|
||||
#define PAT_WSTRING 4
|
||||
#define PAT_GUID 5
|
||||
#define PAT_CALLBACK 6
|
||||
|
||||
// Input/Output Source/Destination
|
||||
#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 Input;
|
||||
int Output;
|
||||
HGLOBAL allocatedBlock; // block allocated for passing string, wstring or guid param
|
||||
} ProcParameter;
|
||||
|
||||
// Our single proc (Since the user will free proc with GlobalFree,
|
||||
|
|
|
@ -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}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfiguration) = preSolution
|
||||
ConfigName.0 = Debug
|
||||
ConfigName.1 = Release
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectDependencies) = postSolution
|
||||
Debug = Debug
|
||||
Release = Release
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfiguration) = postSolution
|
||||
{2FB013AB-6FD4-4239-9974-C999F4DFD70C}.Debug.ActiveCfg = Debug|Win32
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding = "windows-1251"?>
|
||||
<?xml version="1.0" encoding="windows-1251"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.00"
|
||||
Version="7.10"
|
||||
Name="System"
|
||||
ProjectGUID="{2FB013AB-6FD4-4239-9974-C999F4DFD70C}"
|
||||
Keyword="Win32Proj">
|
||||
|
@ -19,7 +19,7 @@
|
|||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_EXPORTS"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_EXPORTS;SYSTEM_LOG_DEBUG"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="5"
|
||||
|
@ -33,7 +33,7 @@
|
|||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="kernel32.lib user32.lib RunTmChk.lib libcd.lib"
|
||||
OutputFile="$(OutDir)/System.dll"
|
||||
OutputFile="d:\Program FIles\NSIS\Plugins\System.dll"
|
||||
LinkIncremental="2"
|
||||
IgnoreAllDefaultLibraries="TRUE"
|
||||
GenerateDebugInformation="TRUE"
|
||||
|
@ -53,15 +53,22 @@
|
|||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="Release"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2">
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="FALSE">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="1"
|
||||
|
@ -71,20 +78,23 @@
|
|||
OmitFramePointers="TRUE"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTEM_EXPORTS"
|
||||
StringPooling="TRUE"
|
||||
ExceptionHandling="FALSE"
|
||||
RuntimeLibrary="4"
|
||||
StructMemberAlignment="0"
|
||||
BufferSecurityCheck="FALSE"
|
||||
EnableFunctionLevelLinking="TRUE"
|
||||
UsePrecompiledHeader="3"
|
||||
AssemblerOutput="2"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
DebugInformationFormat="3"
|
||||
CompileAs="1"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="kernel32.lib user32.lib vc7ldvrm.obj vc7lmul.obj vc7lshl.obj vc7lshr.obj chkstk.obj"
|
||||
OutputFile="$(OutDir)/System.dll"
|
||||
AdditionalDependencies="kernel32.lib user32.lib vc7ldvrm.obj vc7lmul.obj vc7lshl.obj vc7lshr.obj chkstk.obj"
|
||||
OutputFile="d:\Program FIles\NSIS\Plugins\System.dll"
|
||||
LinkIncremental="1"
|
||||
IgnoreAllDefaultLibraries="TRUE"
|
||||
GenerateDebugInformation="FALSE"
|
||||
|
@ -108,10 +118,18 @@
|
|||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
|
@ -130,9 +148,6 @@
|
|||
<File
|
||||
RelativePath="Plugin.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="System.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="stdafx.c">
|
||||
<FileConfiguration
|
||||
|
@ -148,6 +163,15 @@
|
|||
UsePrecompiledHeader="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="System.c">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
ExpandAttributedSource="TRUE"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
|
@ -159,10 +183,10 @@
|
|||
RelativePath="Plugin.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="System.h">
|
||||
RelativePath="stdafx.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="stdafx.h">
|
||||
RelativePath="System.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
|
|
|
@ -93,6 +93,10 @@
|
|||
; HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);
|
||||
!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);
|
||||
!define sysBeginPaint "user32::BeginPaint(i, i) i"
|
||||
|
||||
|
|
|
@ -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
|
||||
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).
|
||||
|
||||
============== Main functions ==============
|
||||
|
@ -78,6 +78,9 @@ Proc:
|
|||
::addr -> Handle to system proc (memory address)
|
||||
*addr -> 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
|
||||
|
||||
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)
|
||||
l - long & large integer (know as int64)
|
||||
t - text, string (LPCSTR, pointer to first character)
|
||||
b - boolean (needs/returns 'true':'false') - by the fact this type is
|
||||
senseless -> usual integer can be used ('0':'1')
|
||||
w - WCHAR text, or unicode string.
|
||||
g - GUID
|
||||
k - callback. See Callback section.
|
||||
|
||||
* - pointer specifier -> the proc needs the pointer to type, affects
|
||||
|
@ -124,7 +127,10 @@ For structures:
|
|||
&i - smaller types: &i4, &i2 (short), &i1 (byte)
|
||||
&l - cumbersome, but &lN means the structure size (N bytes value),
|
||||
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:
|
||||
|
|
|
@ -2,35 +2,27 @@
|
|||
// Microsoft Developer Studio generated include file.
|
||||
// Used by resource.rc
|
||||
//
|
||||
#ifndef DS_SHELLFONT
|
||||
#define DS_SHELLFONT (DS_SETFONT | DS_FIXEDSYS)
|
||||
#endif
|
||||
|
||||
#define IDC_BACK 3
|
||||
#define IDD_DIALOG1 101
|
||||
#define IDI_ICON1 102
|
||||
#define IDD_DIALOG2 102
|
||||
#define IDD_LICENSE 102
|
||||
#define IDD_LICENSE_FSRB 108
|
||||
#define IDD_LICENSE_FSCB 109
|
||||
#define IDI_ICON2 103
|
||||
#define IDD_DIR 103
|
||||
#define IDD_SELCOM 104
|
||||
#define IDD_INST 105
|
||||
#define IDD_INSTFILES 106
|
||||
#define IDD_UNINST 107
|
||||
#define IDB_BITMAP1 109
|
||||
#define IDB_BITMAP2 110
|
||||
#define IDI_ICON3 110
|
||||
#define IDD_VERIFY 111
|
||||
#define IDB_BITMAP3 111
|
||||
#define IDB_BITMAP1 110
|
||||
#define IDC_EDIT1 1000
|
||||
#define IDC_BROWSE 1001
|
||||
#define IDC_COPYRIGHT 1003
|
||||
#define IDC_PROGRESS 1004
|
||||
#define IDC_INTROTEXT 1006
|
||||
#define IDC_WMA 1007
|
||||
#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_COMBO1 1017
|
||||
#define IDC_CHILDRECT 1018
|
||||
|
@ -40,9 +32,6 @@
|
|||
#define IDC_TEXT2 1022
|
||||
#define IDC_SPACEREQUIRED 1023
|
||||
#define IDC_SPACEAVAILABLE 1024
|
||||
#define IDC_INSTVER 1024
|
||||
#define IDC_UNINSTTEXT 1025
|
||||
#define IDC_PROGRESSTEXT 1026
|
||||
#define IDC_SHOWDETAILS 1027
|
||||
#define IDC_VERSTR 1028
|
||||
#define IDC_UNINSTFROM 1029
|
||||
|
@ -50,6 +39,8 @@
|
|||
#define IDC_ULICON 1031
|
||||
#define IDC_TREE1 1032
|
||||
#define IDC_BRANDIMAGE 1033
|
||||
#define IDC_LICENSEAGREE 1034
|
||||
#define IDC_LICENSEDISAGREE 1035
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
|
@ -57,7 +48,9 @@
|
|||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 112
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1034
|
||||
#define _APS_NEXT_CONTROL_VALUE 1036
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -25,92 +25,156 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
|||
// Dialog
|
||||
//
|
||||
|
||||
IDD_LICENSE DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg"
|
||||
IDD_LICENSE DIALOGEX 0, 0, 266, 130
|
||||
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
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
|
||||
CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL |
|
||||
0x804,0,24,266,105
|
||||
END
|
||||
|
||||
IDD_DIR DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
IDD_LICENSE_FSRB 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,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
|
||||
EDITTEXT IDC_DIR,8,49,187,12,ES_AUTOHSCROLL
|
||||
PUSHBUTTON "",IDC_BROWSE,202,48,55,14
|
||||
ICON IDI_ICON2,IDC_ULICON,0,0,20,20
|
||||
CONTROL "",IDC_SELDIRTEXT,"Static",SS_LEFTNOWORDWRAP,
|
||||
0,36,265,8
|
||||
CONTROL "",IDC_SPACEAVAILABLE,"Static",SS_LEFTNOWORDWRAP,0,122,265,8
|
||||
ICON IDI_ICON2,IDC_ULICON,0,0,22,20
|
||||
|
||||
CONTROL "",IDC_SPACEAVAILABLE,"Static",SS_LEFTNOWORDWRAP,0,122,
|
||||
265,8
|
||||
CONTROL "",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE |
|
||||
WS_TABSTOP,8,65,118,10
|
||||
CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFTNOWORDWRAP,0,111,265,8
|
||||
WS_TABSTOP,8,71,118,10
|
||||
CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFTNOWORDWRAP,0,111,
|
||||
265,8
|
||||
LTEXT "",IDC_INTROTEXT,25,0,241,34
|
||||
GROUPBOX "",IDC_SELDIRTEXT,1,38,264,30
|
||||
END
|
||||
|
||||
IDD_SELCOM DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg"
|
||||
IDD_SELCOM DIALOGEX 0, 0, 266, 130
|
||||
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
COMBOBOX IDC_COMBO1,114,25,152,102,CBS_DROPDOWNLIST | WS_VSCROLL |
|
||||
WS_TABSTOP | NOT WS_VISIBLE
|
||||
ICON IDI_ICON2,IDC_ULICON,0,0,21,20
|
||||
COMBOBOX IDC_COMBO1,114,25,152,102,CBS_DROPDOWNLIST | NOT
|
||||
WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
|
||||
ICON IDI_ICON2,IDC_ULICON,0,0,22,20
|
||||
LTEXT "",IDC_TEXT2,0,40,108,65
|
||||
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
|
||||
CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS |
|
||||
TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP |
|
||||
WS_BORDER | WS_TABSTOP,114,39,151,90
|
||||
END
|
||||
|
||||
IDD_INST DIALOGEX DISCARDABLE 0, 0, 280, 162
|
||||
STYLE DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_BORDER
|
||||
FONT 8, "MS Shell Dlg"
|
||||
IDD_INST DIALOGEX 0, 0, 280, 162
|
||||
STYLE DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
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 "",IDCANCEL,7,142,50,14
|
||||
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ | WS_GROUP,7,138,267,1
|
||||
CONTROL "",IDC_CHILDRECT,"Static",SS_BLACKRECT | NOT WS_VISIBLE | WS_GROUP,
|
||||
7,6,266,130
|
||||
CTEXT "",IDC_VERSTR,59,145,108,8,WS_DISABLED | WS_GROUP
|
||||
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ | WS_GROUP,7,138,
|
||||
267,1
|
||||
CONTROL "",IDC_CHILDRECT,"Static",SS_BLACKRECT | NOT WS_VISIBLE |
|
||||
WS_GROUP,7,6,266,130
|
||||
CTEXT "",IDC_VERSTR,59,145,108,8,WS_DISABLED
|
||||
END
|
||||
|
||||
IDD_INSTFILES DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg"
|
||||
IDD_INSTFILES DIALOGEX 0, 0, 266, 130
|
||||
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,24,10,241,11
|
||||
CONTROL "",IDC_INTROTEXT,"Static",SS_LEFTNOWORDWRAP,
|
||||
24,0,241,8
|
||||
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,24,10,241,
|
||||
11
|
||||
CONTROL "",IDC_INTROTEXT,"Static",SS_LEFTNOWORDWRAP,24,0,241,8
|
||||
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL |
|
||||
LVS_NOCOLUMNHEADER | NOT WS_VISIBLE | WS_BORDER |
|
||||
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
|
||||
END
|
||||
|
||||
IDD_UNINST DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg"
|
||||
IDD_UNINST DIALOGEX 0, 0, 266, 130
|
||||
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
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
|
||||
EDITTEXT IDC_EDIT1,56,43,209,12,ES_AUTOHSCROLL | ES_READONLY
|
||||
LTEXT "",IDC_INTROTEXT,25,0,241,34
|
||||
END
|
||||
|
||||
IDD_VERIFY DIALOGEX DISCARDABLE 0, 0, 162, 22
|
||||
STYLE DS_MODALFRAME | DS_SHELLFONT | DS_CENTER | WS_POPUP | WS_VISIBLE
|
||||
FONT 8, "MS Shell Dlg"
|
||||
IDD_VERIFY DIALOGEX 0, 0, 162, 22
|
||||
STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
CTEXT "",IDC_STR,7,7,148,8
|
||||
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
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
@ -125,6 +189,7 @@ END
|
|||
2 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"#include ""config.h""\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE DISCARDABLE
|
||||
|
@ -134,4 +199,7 @@ END
|
|||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
#endif
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -32,13 +32,13 @@ Specifies whether or not to use a gradient background window. If 'off', the inst
|
|||
|
||||
\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.
|
||||
|
||||
\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)
|
||||
|
||||
|
@ -72,13 +72,13 @@ This bitmap should have a size of 96x16 pixels, no more than 8bpp (256 colors) a
|
|||
|
||||
\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.
|
||||
|
||||
\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 " ".
|
||||
|
||||
|
@ -90,7 +90,7 @@ Specifies whether or not the installer will perform a CRC on itself before allow
|
|||
|
||||
\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).
|
||||
|
||||
|
@ -102,13 +102,19 @@ Specifies whether or not the user will see the directory selection page. Note th
|
|||
|
||||
\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...").
|
||||
|
||||
\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
|
||||
|
||||
\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.".
|
||||
|
||||
|
@ -120,7 +126,7 @@ Sets the icon of the installer. Every icon in the icon file will be included in
|
|||
|
||||
\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.
|
||||
|
||||
|
@ -150,7 +156,7 @@ Valid values for flag are "smooth" (smooth the progress bar) or "colored" (color
|
|||
|
||||
\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
|
||||
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
|
||||
|
||||
\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.
|
||||
|
||||
\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.
|
||||
|
||||
\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".
|
||||
|
||||
\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.
|
||||
|
||||
\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'.
|
||||
|
||||
|
@ -231,25 +237,25 @@ Specifies whether or not the uninstaller should be silent. If it is 'silent' or
|
|||
|
||||
\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.
|
||||
|
||||
\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)
|
||||
|
||||
\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).
|
||||
|
||||
\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)
|
||||
|
||||
|
@ -261,13 +267,13 @@ Sets the icon of the uninstaller. This icon file \e{must} have the exact same st
|
|||
|
||||
\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)
|
||||
|
||||
\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:".
|
||||
|
||||
|
|
|
@ -17,7 +17,8 @@ Example:
|
|||
\c GetDlgItem $R0 $HWNDPARENT 1028
|
||||
\c CreateFont $R1 "Tahoma" 10 700
|
||||
\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
|
||||
|
||||
\S3{oninit} .onInit
|
||||
|
|
|
@ -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.
|
||||
|
||||
\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
|
||||
|
||||
\c val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]
|
||||
|
|
|
@ -5,6 +5,10 @@
|
|||
|
||||
\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 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 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
|
||||
|
||||
|
@ -23,6 +39,10 @@
|
|||
|
||||
\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 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{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
|
||||
|
||||
|
@ -47,9 +67,9 @@
|
|||
|
||||
\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\\>
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
||||
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 #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)
|
||||
\\<b\\>Note:\\</b\\> Unlike defines that use curly braces - \{\}, multilingual strings use parenthesis - ().
|
||||
|
||||
For example, instead of:
|
||||
|
||||
|
@ -35,53 +33,42 @@ Use:
|
|||
\c LangString message ${LANG_FRENCH} "French message"
|
||||
\c LangString message ${LANG_KOREAN} "Korean message"
|
||||
\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
|
||||
|
||||
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}.
|
||||
|
||||
\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 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.
|
||||
|
||||
\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"
|
||||
\n If \R{varconstant}{$LANGUAGE} has changed during .onInit, go through steps 2 to 4 again
|
||||
|
||||
\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.
|
|
@ -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).
|
||||
|
||||
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
|
||||
|
||||
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 components
|
||||
\c Page directory
|
||||
\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:
|
||||
|
||||
|
@ -59,12 +103,44 @@ Examples:
|
|||
|
||||
\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
|
||||
|
||||
\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.
|
|
@ -27,16 +27,27 @@ The default extension for a script file is .nsi. Header files have the .nsh exte
|
|||
|
||||
\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
|
||||
|
||||
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}.
|
||||
|
||||
\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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
|
|
@ -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).
|
||||
|
||||
\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
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -423,26 +423,45 @@ void CDialogTemplate::ConvertToRTL() {
|
|||
addExStyle = true;
|
||||
// Button
|
||||
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
|
||||
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
|
||||
else if (int(m_vItems[i]->szClass) == 0x82) {
|
||||
if (!(m_vItems[i]->dwStyle & (SS_CENTER|SS_RIGHT))) {
|
||||
m_vItems[i]->dwStyle &= ~SS_LEFT;
|
||||
m_vItems[i]->dwStyle &= ~SS_LEFTNOWORDWRAP;
|
||||
if ((m_vItems[i]->dwStyle & SS_TYPEMASK) == SS_LEFT || (m_vItems[i]->dwStyle & SS_TYPEMASK) == SS_LEFTNOWORDWRAP)
|
||||
{
|
||||
m_vItems[i]->dwStyle &= ~SS_TYPEMASK;
|
||||
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;
|
||||
|
||||
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_dwExtStyle |= WS_EX_RIGHT;
|
||||
m_dwExtStyle |= WS_EX_RIGHT | WS_EX_RTLREADING;
|
||||
}
|
||||
|
||||
// Saves the dialog in the form of DLGTEMPLATE[EX]
|
||||
|
|
|
@ -49,7 +49,7 @@ struct DialogItemTemplate {
|
|||
short sHeight;
|
||||
DWORD dwExtStyle;
|
||||
DWORD dwStyle;
|
||||
WORD wId;
|
||||
WORD wId;
|
||||
|
||||
char *szClass;
|
||||
char *szTitle;
|
||||
|
|
|
@ -303,7 +303,7 @@ BYTE* CResourceEditor::Save(DWORD &dwSize) {
|
|||
oldSeeker += dwSectionsSize;
|
||||
|
||||
// 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)
|
||||
CopyMemory(seeker, oldSeeker, dwTackedSize);
|
||||
|
||||
|
|
1752
Source/build.cpp
1752
Source/build.cpp
File diff suppressed because it is too large
Load diff
129
Source/build.h
129
Source/build.h
|
@ -1,8 +1,7 @@
|
|||
#ifndef _BUILD_H_
|
||||
#define _BUILD_H_
|
||||
|
||||
#include <Vector>
|
||||
#include <List>
|
||||
#include <StdExcept>
|
||||
using namespace std;
|
||||
|
||||
#include "strlist.h"
|
||||
|
@ -43,12 +42,8 @@ extern "C"
|
|||
|
||||
#define PS_OK 0
|
||||
#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 IS_PS_ELSE(x) (( x ) >= PS_ELSE && ( x ) <= PS_ELSE_IF1)
|
||||
#define PS_WARNING 100
|
||||
|
||||
enum {
|
||||
MAKENSIS_NOTIFY_SCRIPT,
|
||||
|
@ -57,6 +52,14 @@ enum {
|
|||
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 {
|
||||
public:
|
||||
CEXEBuild();
|
||||
|
@ -64,6 +67,8 @@ class CEXEBuild {
|
|||
|
||||
// to add a warning to the compiler's warning list.
|
||||
void warning(const char *s, ...);
|
||||
// warning with file name and line count
|
||||
void warning_fl(const char *s, ...);
|
||||
|
||||
// to add a defined thing.
|
||||
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);
|
||||
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 SCRIPT_MSG(const char *s, ...);
|
||||
void INFO_MSG(const char *s, ...);
|
||||
|
@ -142,21 +168,22 @@ class CEXEBuild {
|
|||
void section_add_size_kb(int kb);
|
||||
int section_add_flags(int flags);
|
||||
int section_add_install_type(int inst_type);
|
||||
int add_page(int type);
|
||||
int page_end();
|
||||
int add_label(const char *name);
|
||||
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_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_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
|
||||
int preprocess_string(char *out, const char *in, bool bUninstall);
|
||||
#else
|
||||
int preprocess_string(char *out, const char *in);
|
||||
#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
|
||||
// Added by Ximon Eighteen 5th August 2002
|
||||
|
@ -171,6 +198,11 @@ class CEXEBuild {
|
|||
void printline(int l);
|
||||
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_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);
|
||||
|
@ -180,27 +212,44 @@ class CEXEBuild {
|
|||
int uninstall_generate();
|
||||
void set_uninstall_mode(int un);
|
||||
|
||||
// lang.cpp functions and vars
|
||||
StringTable *GetTable(LANGID &lang);
|
||||
int SetString(char *string, int id, int process, LANGID lang=0);
|
||||
int SetString(char *string, int id, int process, StringTable *table);
|
||||
int GetUserString(char *name);
|
||||
int SetUserString(char *name, LANGID lang, char *string, int process=1);
|
||||
int WriteStringTables();
|
||||
void FillStringTable(StringTable *table, NLF *nlf=0);
|
||||
#define IsNotSet(s) _IsNotSet(string_tables.size()?&(string_tables[0]->s):0)
|
||||
bool _IsNotSet(int *str); // Checks if a string is not set in all of the string tables
|
||||
#define IsSet(s,lang) _IsSet(string_tables.size()?&(string_tables[0]->s):0,lang)
|
||||
bool _IsSet(int *str, LANGID lang); // Checks if a string is set in a given string table
|
||||
// lang.cpp functions and variables
|
||||
void InitLangTables();
|
||||
LanguageTable *GetLangTable(LANGID &lang);
|
||||
int DefineLangString(char *name, int process=-1);
|
||||
int DefineInnerLangString(int id, int process=-1);
|
||||
int SetLangString(char *name, LANGID lang, char *string);
|
||||
int SetInnerString(int id, char *string);
|
||||
int GenerateLangTables();
|
||||
void FillLanguageTable(LanguageTable *table);
|
||||
int HasUserDefined(int id) {
|
||||
const char *us = UserInnerStrings.get(id);
|
||||
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;
|
||||
|
||||
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);
|
||||
// Added by ramon 3 jun 2003
|
||||
#ifdef NSIS_SUPPORT_NAMED_USERVARS
|
||||
bool b_abort_compile;
|
||||
UserVarsStringList m_UserVarNames;
|
||||
int DeclaredUserVar(const char *VarName);
|
||||
void VerifyDeclaredUserVarRefs(UserVarsStringList *pVarsStringList);
|
||||
|
@ -216,12 +265,6 @@ class CEXEBuild {
|
|||
bool build_compressor_set;
|
||||
bool build_compress_whole;
|
||||
|
||||
bool use_first_insttype;
|
||||
|
||||
vector<NLF*> build_nlfs;
|
||||
vector<StringTable*> string_tables;
|
||||
LANGID last_used_lang;
|
||||
|
||||
bool no_space_texts;
|
||||
|
||||
int has_called_write_output;
|
||||
|
@ -231,14 +274,12 @@ class CEXEBuild {
|
|||
build_datesave, build_optimize_datablock,
|
||||
build_allowskipfiles; // Added by ramon 23 May 2003
|
||||
|
||||
header build_header;
|
||||
header build_header, build_uninst, *cur_header;
|
||||
int uninstall_mode;
|
||||
uninstall_header build_uninst;
|
||||
int uninstall_size,uninstall_size_full;
|
||||
int uninstaller_writes_used;
|
||||
|
||||
char build_output_filename[1024];
|
||||
char cur_out_path[1024];
|
||||
|
||||
// Added by ramon 6 jun 2003
|
||||
#ifdef NSIS_SUPPORT_VERSION_INFO
|
||||
|
@ -262,21 +303,19 @@ class CEXEBuild {
|
|||
|
||||
int build_cursection_isfunc;
|
||||
section *build_cursection;
|
||||
TinyGrowBuf build_sections;
|
||||
TinyGrowBuf build_sections, ubuild_sections, *cur_sections;
|
||||
GrowBuf build_entries,ubuild_entries, *cur_entries;
|
||||
TinyGrowBuf build_functions, ubuild_functions, *cur_functions;
|
||||
TinyGrowBuf build_labels, ubuild_labels, *cur_labels;
|
||||
StringList build_strlist, ubuild_strlist;
|
||||
GrowBuf build_langtables, ubuild_langtables;
|
||||
LangStringList build_userlangstrings, ubuild_userlangstrings;
|
||||
TinyGrowBuf build_pages, ubuild_pages;
|
||||
|
||||
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;
|
||||
StringList build_strlist, ubuild_strlist, *cur_strlist;
|
||||
GrowBuf build_langtables, ubuild_langtables, *cur_langtables;
|
||||
TinyGrowBuf build_pages, ubuild_pages, *cur_pages;
|
||||
TinyGrowBuf build_ctlcolors, ubuild_ctlcolors, *cur_ctlcolors;
|
||||
|
||||
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;
|
||||
int exeheader_size_new;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "exedata.h"
|
||||
|
||||
//#ifndef _DEBUG
|
||||
#ifdef NSIS_CONFIG_COMPONENTPAGE
|
||||
#include "exehead/Release-zlib/bitmap1.h"
|
||||
#endif
|
||||
|
@ -7,11 +8,19 @@
|
|||
#include "exehead/Release-zlib/unicon.h"
|
||||
#include "exehead/Release-zlib/exehead_zlib.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 bzip2_exeheader_size=sizeof(bzip2_header_data);
|
||||
int exeheader_size=0;
|
||||
|
||||
// Changed by Amir Szekely 8th July 2002
|
||||
int icondata_size=sizeof(icon_data)-22;
|
||||
int unicondata_size=sizeof(unicon_data)-22;
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include <windows.h>
|
||||
#include <commctrl.h>
|
||||
#include <shlobj.h>
|
||||
#include "resource.h"
|
||||
#include "util.h"
|
||||
#include "fileform.h"
|
||||
|
@ -58,6 +59,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
|
||||
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);
|
||||
validate_filename(state_temp_dir);
|
||||
CreateDirectory(state_temp_dir, NULL);
|
||||
|
@ -127,7 +135,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
while (*p) p++;
|
||||
|
||||
while (p >= cmdline && (p[0] != '_' || p[1] != '?' || p[2] != '=')) p--;
|
||||
|
||||
|
||||
if (p >= cmdline)
|
||||
{
|
||||
*(p-1)=0; // terminate before the " _?="
|
||||
|
@ -200,6 +208,11 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam,
|
|||
log_write(1);
|
||||
#endif//NSIS_CONFIG_LOG
|
||||
end:
|
||||
|
||||
#if defined(NSIS_SUPPORT_ACTIVEXREG) || defined(NSIS_SUPPORT_CREATESHORTCUT)
|
||||
OleUninitialize();
|
||||
#endif
|
||||
|
||||
if (g_db_hFile != INVALID_HANDLE_VALUE) CloseHandle(g_db_hFile);
|
||||
#ifdef NSIS_COMPRESS_WHOLE
|
||||
if (dbd_hFile != INVALID_HANDLE_VALUE) CloseHandle(dbd_hFile);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -8,8 +8,8 @@
|
|||
|
||||
#ifdef NSIS_SUPPORT_BGBG
|
||||
|
||||
#define c1 g_inst_cmnheader->bg_color1
|
||||
#define c2 g_inst_cmnheader->bg_color2
|
||||
#define c1 g_header->bg_color1
|
||||
#define c2 g_header->bg_color2
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
if (g_inst_cmnheader->bg_textcolor != -1)
|
||||
if (g_header->bg_textcolor != -1)
|
||||
{
|
||||
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");
|
||||
|
@ -60,7 +60,7 @@ LRESULT CALLBACK BG_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
r.top=8;
|
||||
my_GetWindowText(hwnd,buf,sizeof(buf));
|
||||
SetBkMode(hdc,TRANSPARENT);
|
||||
SetTextColor(hdc,g_inst_cmnheader->bg_textcolor);
|
||||
SetTextColor(hdc,g_header->bg_textcolor);
|
||||
oldFont = SelectObject(hdc,newFont);
|
||||
DrawText(hdc,buf,-1,&r,DT_TOP|DT_LEFT|DT_SINGLELINE|DT_NOPREFIX);
|
||||
SelectObject(hdc,oldFont);
|
||||
|
|
|
@ -26,14 +26,18 @@
|
|||
// really a big deal, but not usually needed).
|
||||
#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.
|
||||
#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
|
||||
// support. Comment it out if your installers don't need
|
||||
// uninstallers
|
||||
// adds approximately 2kb.
|
||||
// adds less than 1kb.
|
||||
#define NSIS_CONFIG_UNINSTALL_SUPPORT
|
||||
|
||||
// NSIS_CONFIG_LICENSEPAGE enables support for the installer to
|
||||
|
@ -54,7 +58,7 @@
|
|||
#define NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
|
||||
// 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
|
||||
|
||||
// NSIS_CONFIG_COMPRESSION_SUPPORT enables support for making installers
|
||||
|
@ -103,9 +107,9 @@
|
|||
|
||||
// NSIS_CONFIG_LOG enables the logging facility.
|
||||
// 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.
|
||||
// #define NSIS_CONFIG_LOG
|
||||
//#define NSIS_CONFIG_LOG
|
||||
|
||||
// NSIS_SUPPORT_BGBG enables support for the blue (well, whatever
|
||||
// color you want) gradient background window.
|
||||
|
@ -253,7 +257,7 @@
|
|||
#undef NSIS_SUPPORT_BGBG
|
||||
#endif
|
||||
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
||||
#undef NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
||||
#undef NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -354,18 +358,22 @@
|
|||
#error NSIS_MAX_INST_TYPES > 32
|
||||
#endif
|
||||
|
||||
#ifndef NSIS_DEFAULT_LANG
|
||||
#define NSIS_DEFAULT_LANG 1033
|
||||
#endif
|
||||
|
||||
#ifndef INVALID_FILE_ATTRIBUTES
|
||||
#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
|
||||
#endif
|
||||
|
||||
// This is the old static var count that occupies memory
|
||||
// From $0 to $PLUGINSDIR
|
||||
#define USER_VARS_COUNT 26
|
||||
// From $0 to $PLUGINSDIR, $_CLICK
|
||||
#define USER_VARS_COUNT 28
|
||||
|
||||
#ifdef NSIS_SUPPORT_NAMED_USERVARS
|
||||
// This is the total number of old static var
|
||||
// From $0 to $HWNDPARENT
|
||||
#define TOTAL_COMPATIBLE_STATIC_VARS_COUNT 36
|
||||
#define TOTAL_COMPATIBLE_STATIC_VARS_COUNT 37
|
||||
|
||||
#define VARS_SECTION_NAME ".ndata"
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
#ifndef _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
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include "state.h"
|
||||
#include "resource.h"
|
||||
#include "lang.h"
|
||||
#include "ui.h"
|
||||
#include "exec.h"
|
||||
|
||||
#ifdef NSIS_CONFIG_COMPRESSION_SUPPORT
|
||||
#ifdef NSIS_COMPRESS_USE_ZLIB
|
||||
|
@ -23,11 +25,12 @@
|
|||
#endif//NSIS_COMPRESS_USE_BZIP2
|
||||
#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;
|
||||
|
||||
#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)
|
||||
{
|
||||
SetTimer(hwndDlg,1,250,NULL);
|
||||
msg = (char*)lParam;
|
||||
msg = (char *) lParam;
|
||||
uMsg = WM_TIMER;
|
||||
}
|
||||
if (uMsg == WM_TIMER)
|
||||
if (uMsg == WM_TIMER
|
||||
#ifdef NSIS_COMPRESS_WHOLE
|
||||
|| uMsg == WM_DESTROY
|
||||
#endif
|
||||
)
|
||||
{
|
||||
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_SetDialogItemText(hwndDlg,IDC_STR,bt);
|
||||
my_SetWindowText(hwndDlg,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;
|
||||
}
|
||||
#endif//NSIS_CONFIG_CRC_SUPPORT || NSIS_COMPRESS_WHOLE
|
||||
#endif//NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
|
||||
int inst_flags;
|
||||
|
||||
#ifdef NSIS_CONFIG_COMPRESSION_SUPPORT
|
||||
static z_stream g_inflate_stream;
|
||||
#endif
|
||||
|
@ -84,11 +105,14 @@ const char * NSISCALL loadHeaders(int cl_flags)
|
|||
|
||||
void *data;
|
||||
firstheader h;
|
||||
header *header;
|
||||
|
||||
HANDLE db_hFile;
|
||||
|
||||
GetModuleFileName(g_hInstance, state_exe_directory, NSIS_MAX_STRLEN);
|
||||
|
||||
g_db_hFile = myOpenFile(state_exe_directory, GENERIC_READ, OPEN_EXISTING);
|
||||
if (g_db_hFile == INVALID_HANDLE_VALUE)
|
||||
g_db_hFile = db_hFile = myOpenFile(state_exe_directory, GENERIC_READ, OPEN_EXISTING);
|
||||
if (db_hFile == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
return _LANG_CANTOPENSELF;
|
||||
}
|
||||
|
@ -97,7 +121,7 @@ const char * NSISCALL loadHeaders(int cl_flags)
|
|||
|
||||
trimslashtoend(state_exe_directory);
|
||||
|
||||
left = m_length = GetFileSize(g_db_hFile,NULL);
|
||||
left = m_length = GetFileSize(db_hFile,NULL);
|
||||
while (left > 0)
|
||||
{
|
||||
static char temp[512];
|
||||
|
@ -160,7 +184,7 @@ const char * NSISCALL loadHeaders(int cl_flags)
|
|||
#ifdef NSIS_CONFIG_VISIBLE_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
|
||||
{
|
||||
if (hwnd)
|
||||
|
@ -200,7 +224,7 @@ const char * NSISCALL loadHeaders(int cl_flags)
|
|||
if (do_crc)
|
||||
{
|
||||
int fcrc;
|
||||
SetSelfFilePointer(m_pos, FILE_BEGIN);
|
||||
SetSelfFilePointer(m_pos);
|
||||
if (!ReadSelfFile(&fcrc, sizeof(int)) || crc != fcrc)
|
||||
return _LANG_INVALIDCRC;
|
||||
}
|
||||
|
@ -218,10 +242,10 @@ const char * NSISCALL loadHeaders(int cl_flags)
|
|||
if (dbd_hFile == INVALID_HANDLE_VALUE)
|
||||
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));
|
||||
#else
|
||||
SetSelfFilePointer(g_filehdrsize + sizeof(firstheader), FILE_BEGIN);
|
||||
SetSelfFilePointer(g_filehdrsize + sizeof(firstheader));
|
||||
#endif
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
#if !defined(NSIS_COMPRESS_WHOLE) || !defined(NSIS_CONFIG_COMPRESSION_SUPPORT)
|
||||
g_db_offset = SetSelfFilePointer(0,FILE_CURRENT);
|
||||
#else
|
||||
g_db_offset = dbd_pos;
|
||||
#endif
|
||||
header = g_header = data;
|
||||
|
||||
g_inst_combinedheader = data;
|
||||
|
||||
inst_flags = g_inst_cmnheader->flags;
|
||||
#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
|
||||
|
||||
g_flags = header->flags;
|
||||
|
||||
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
|
||||
if (h.flags & FH_FLAGS_UNINSTALL)
|
||||
{
|
||||
g_is_uninstaller++;
|
||||
g_inst_page = (page *) (g_inst_uninstheader + 1);
|
||||
}
|
||||
else
|
||||
#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)
|
||||
{
|
||||
return g_db_strtab+(offs < 0 ? LANG_STR_TAB(offs) : offs);
|
||||
crc = BLOCKS_NUM;
|
||||
while (crc--)
|
||||
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
|
||||
|
@ -285,16 +304,7 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
|
|||
|
||||
if (offset>=0)
|
||||
{
|
||||
/*
|
||||
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);
|
||||
SetSelfFilePointer(g_blocks[NB_DATA].offset+offset);
|
||||
}
|
||||
|
||||
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
|
||||
if (input_len & 0x80000000) // compressed
|
||||
{
|
||||
char progress[64];
|
||||
int input_len_total;
|
||||
DWORD ltc = GetTickCount(), tc;
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -328,6 +342,14 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
|
|||
|
||||
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 (!outbuf)
|
||||
|
@ -386,7 +408,7 @@ static int NSISCALL __ensuredata(int amount)
|
|||
int needed=amount-(dbd_size-dbd_pos);
|
||||
if (needed>0)
|
||||
{
|
||||
SetSelfFilePointer(dbd_srcpos,FILE_BEGIN);
|
||||
SetSelfFilePointer(dbd_srcpos);
|
||||
SetFilePointer(dbd_hFile,dbd_size,NULL,FILE_BEGIN);
|
||||
m_length=needed;
|
||||
m_pos=0;
|
||||
|
@ -402,9 +424,9 @@ static int NSISCALL __ensuredata(int amount)
|
|||
{
|
||||
DWORD r,t;
|
||||
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
if (g_inst_cmnheader)
|
||||
if (g_header)
|
||||
#ifdef NSIS_CONFIG_SILENT_SUPPORT
|
||||
if (!(inst_flags&(CH_FLAGS_SILENT|CH_FLAGS_SILENT_LOG)))
|
||||
if (!g_exec_flags.silent)
|
||||
#endif
|
||||
{
|
||||
if (hwnd) {
|
||||
|
@ -412,13 +434,13 @@ static int NSISCALL __ensuredata(int amount)
|
|||
m_pos=m_length-(amount-(dbd_size-dbd_pos));
|
||||
while (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) DispatchMessage(&msg);
|
||||
}
|
||||
else if (g_hwnd && GetTickCount() > verify_time)
|
||||
else if (GetTickCount() > verify_time)
|
||||
hwnd = CreateDialogParam(
|
||||
g_hInstance,
|
||||
MAKEINTRESOURCE(IDD_VERIFY),
|
||||
0,
|
||||
verProc,
|
||||
(LPARAM)_LANG_UNPACKING
|
||||
g_hwnd ? 0 : (LPARAM)_LANG_UNPACKING
|
||||
);
|
||||
}
|
||||
#endif//NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
|
@ -458,7 +480,7 @@ int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen)
|
|||
int retval;
|
||||
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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -4,22 +4,23 @@
|
|||
#define _FILEFORM_H_
|
||||
|
||||
|
||||
// stored in file:
|
||||
// exehead (~34k)
|
||||
// firstheader (~28 bytes)
|
||||
// hdrinfo (4 bytes describing length/compression)::
|
||||
// (if install)
|
||||
// header (~228 bytes)
|
||||
// sections (20 bytes each)
|
||||
// (if uninstall)
|
||||
// uninstall_header (~116 bytes)
|
||||
// pages (12 bytes each)
|
||||
// entries (24 bytes each)
|
||||
// string table
|
||||
// language tables
|
||||
// datablock
|
||||
// (hdrinfo+datablock is at least 512 bytes if CRC enabled)
|
||||
// * the installer is compsed of the following parts:
|
||||
// exehead (~34kb)
|
||||
// firstheader (struct firstheader)
|
||||
// * headers (compressed together):
|
||||
// header (struct header)
|
||||
// * nsis blocks (described in header->blocks)
|
||||
// pages (struct page)
|
||||
// section headers (struct section)
|
||||
// entries/instructions (struct entry)
|
||||
// strings (null seperated)
|
||||
// language tables (language id, dialog offset, language strings)
|
||||
// colors (struct color)
|
||||
// data block (files and uninstaller data)
|
||||
// * not compressed
|
||||
// CRC (optional - 4 bytes)
|
||||
//
|
||||
// headers + datablock is at least 512 bytes if CRC enabled
|
||||
|
||||
|
||||
#define MAX_ENTRY_OFFSETS 6
|
||||
|
@ -92,8 +93,7 @@ enum
|
|||
|
||||
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
||||
EW_GETDLGITEM, // GetDlgItem: 3: [outputvar, dialog, item_id]
|
||||
EW_GETWINTEXT, // GetWindowText: 2: [outputvar, hwnd]
|
||||
EW_SETBKCOLOR, // SerBkColor: 2: [hwnd, color]
|
||||
EW_SETCTLCOLORS, // SerCtlColors: 3: [hwnd, pointer to struct colors]
|
||||
EW_SETBRANDINGIMAGE, // SetBrandingImage: 1: [Bitmap file]
|
||||
EW_CREATEFONT, // CreateFont: 5: [handle output, face name, height, weight, flags]
|
||||
EW_SHOWWINDOW, // ShowWindow: 2: [hwnd, show state]
|
||||
|
@ -211,96 +211,6 @@ typedef struct
|
|||
int length_of_all_following_data;
|
||||
} 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
|
||||
#define CH_FLAGS_DETAILS_SHOWDETAILS 1
|
||||
#define CH_FLAGS_DETAILS_NEVERSHOW 2
|
||||
|
@ -316,25 +226,54 @@ typedef struct
|
|||
#define CH_FLAGS_COMP_ONLY_ON_CUSTOM 256
|
||||
#define CH_FLAGS_NO_CUSTOM 512
|
||||
#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
|
||||
NB_SECTIONS,
|
||||
NB_ENTRIES,
|
||||
NB_STRINGS,
|
||||
NB_LANGTABLES,
|
||||
NB_CTLCOLORS,
|
||||
NB_DATA,
|
||||
|
||||
BLOCKS_NUM
|
||||
};
|
||||
|
||||
// Settings common to both installers and uninstallers
|
||||
typedef struct
|
||||
{
|
||||
int language_tables_num; // number of strings tables in array
|
||||
int language_table_size; // size of each language table
|
||||
int flags; // CH_FLAGS_*
|
||||
struct block_header blocks[BLOCKS_NUM];
|
||||
|
||||
int num_entries; // total number of entries
|
||||
int num_string_bytes; // total number of bytes taken by strings
|
||||
|
||||
int num_pages; // number of used pages (including custom pages)
|
||||
// InstallDirRegKey stuff
|
||||
int install_reg_rootkey;
|
||||
// these two are not processed!
|
||||
int install_reg_key_ptr, install_reg_value_ptr;
|
||||
|
||||
#ifdef NSIS_SUPPORT_BGBG
|
||||
int bg_color1, bg_color2, bg_textcolor;
|
||||
#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
|
||||
// .on* calls
|
||||
|
@ -346,69 +285,6 @@ typedef struct
|
|||
int code_onGUIInit;
|
||||
int code_onGUIEnd;
|
||||
#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;
|
||||
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
||||
int code_onMouseOverSection;
|
||||
|
@ -417,26 +293,20 @@ typedef struct
|
|||
int code_onSelChange;
|
||||
#endif//NSIS_CONFIG_COMPONENTPAGE
|
||||
#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;
|
||||
|
||||
// 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
|
||||
#define SF_SELECTED 1
|
||||
#define SF_SUBSEC 2
|
||||
|
@ -462,36 +332,77 @@ typedef struct
|
|||
int offsets[MAX_ENTRY_OFFSETS]; // count and meaning of offsets depend on 'which'
|
||||
} entry;
|
||||
|
||||
// page window proc
|
||||
enum
|
||||
{
|
||||
NSIS_PAGE_CUSTOM = -1,
|
||||
#ifdef NSIS_CONFIG_LICENSEPAGE
|
||||
NSIS_PAGE_LICENSE,
|
||||
PWP_LICENSE,
|
||||
#endif
|
||||
#ifdef NSIS_CONFIG_COMPONENTPAGE
|
||||
NSIS_PAGE_SELCOM,
|
||||
PWP_SELCOM,
|
||||
#endif
|
||||
NSIS_PAGE_DIR,
|
||||
NSIS_PAGE_INSTFILES,
|
||||
NSIS_PAGE_COMPLETED,
|
||||
PWP_DIR,
|
||||
PWP_INSTFILES,
|
||||
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
|
||||
NSIS_PAGE_UNINST
|
||||
PWP_UNINST,
|
||||
#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
|
||||
{
|
||||
int id; // index in the pages array
|
||||
int dlg_id; // dialog resource id
|
||||
int wndproc_id;
|
||||
|
||||
#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.
|
||||
int showfunc; // function to do stuff right before page is shown
|
||||
int leavefunc; // function to do stuff after the page is shown
|
||||
// called before the page is created, or if custom to show the page
|
||||
// use Abort to skip the page
|
||||
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
|
||||
int caption; // caption tab
|
||||
|
||||
int flags;
|
||||
|
||||
int caption;
|
||||
int back;
|
||||
int next;
|
||||
int button_states;
|
||||
int clicknext;
|
||||
int cancel;
|
||||
|
||||
int parms[5];
|
||||
} 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.
|
||||
|
||||
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 int g_quit_flag;
|
||||
|
||||
const char * NSISCALL GetStringFromStringTab(int offs);
|
||||
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.
|
||||
// Added by ramon 3 jun 2003
|
||||
|
@ -539,7 +449,7 @@ DWORD NSISCALL SetSelfFilePointer(LONG lDistanceToMove, DWORD dwMoveMethod);
|
|||
#endif
|
||||
#endif
|
||||
|
||||
union installer_flags {
|
||||
union exec_flags {
|
||||
struct {
|
||||
int autoclose;
|
||||
int all_user_var;
|
||||
|
@ -550,8 +460,39 @@ union installer_flags {
|
|||
#endif
|
||||
int cur_insttype;
|
||||
int insttype_changed;
|
||||
#ifdef NSIS_CONFIG_SILENT_SUPPORT
|
||||
int silent;
|
||||
#endif
|
||||
};
|
||||
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_
|
||||
|
|
|
@ -24,99 +24,43 @@
|
|||
|
||||
#define _LANG_GENERIC_ERROR "NSIS ERROR"
|
||||
|
||||
#define LANG_STR_TAB(x) cur_langtable[-((int)x+1)]
|
||||
|
||||
// Changed by Amir Szekely 3rd August 2002
|
||||
// Now supports more than one language in each installer
|
||||
|
||||
// Modified by Dave Laundon 10th August 2002
|
||||
// In many places, these strings are now referenced by an ID (just their offsets
|
||||
// into the (common|installer|uninstall)_strings structures) through *_from_lang
|
||||
// and *FromLang functions - removing code-costly references to the
|
||||
// cur_(common|install|uninstall)_strings_table globals. Common strings are
|
||||
// identified by IDs >=0 and install/uninstall strings by IDs <0. What's more,
|
||||
// these IDs fall between -128 to +127 and compile to tiny 2-byte PUSH <8-bit>
|
||||
// instructions when being passed to the functions.
|
||||
|
||||
// Please note that all LANG_* define the offset not the string itself.
|
||||
// To get the string itself use process_string_fromtab, GetStringFromStringTab or LANG_STR().
|
||||
|
||||
#define LANG_STR(x) GetStringFromStringTab(x)
|
||||
#define LANG_STR_TAB(x) cur_language_table[-((int)x+1)]
|
||||
|
||||
#define INSTALL_STR(x) (~((sizeof(common_strings) + FIELD_OFFSET(installer_strings, x)) / sizeof(int)))
|
||||
|
||||
// Installer specific strings
|
||||
#define LANG_BTN_BROWSE (INSTALL_STR(browse))
|
||||
#define LANG_BTN_INSTALL (INSTALL_STR(installbutton))
|
||||
#define LANG_SPACE_REQ (INSTALL_STR(spacerequired))
|
||||
#define LANG_SPACE_AVAIL (INSTALL_STR(spaceavailable))
|
||||
#define LANG_COMP_CUSTOM (INSTALL_STR(custom))
|
||||
#define LANG_DIR_TEXT (INSTALL_STR(text))
|
||||
#define LANG_DIR_SUBTEXT (INSTALL_STR(dirsubtext))
|
||||
#define LANG_COMP_TEXT (INSTALL_STR(componenttext))
|
||||
#define LANG_COMP_SUBTEXT(x) (INSTALL_STR(componentsubtext[x]))
|
||||
#define LANG_LICENSE_TEXT (INSTALL_STR(licensetext))
|
||||
#define LANG_LICENSE_DATA (INSTALL_STR(licensedata))
|
||||
#define LANG_BTN_LICENSE (INSTALL_STR(licensebutton))
|
||||
#define LANG_BTN_LICENSE_AGREE (INSTALL_STR(licensebuttonagree))
|
||||
#define LANG_BTN_LICENSE_DISAGREE (INSTALL_STR(licensebuttondisagree))
|
||||
|
||||
#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))
|
||||
#define LANG_BRANDING -1
|
||||
#define LANG_CAPTION -2
|
||||
#define LANG_NAME -3
|
||||
#define LANG_SPACE_AVAIL -4
|
||||
#define LANG_SPACE_REQ -5
|
||||
#define LANG_CANTWRITE -6
|
||||
#define LANG_COPYFAILED -7
|
||||
#define LANG_COPYTO -8
|
||||
#define LANG_CANNOTFINDSYMBOL -9
|
||||
#define LANG_COULDNOTLOAD -10
|
||||
#define LANG_CREATEDIR -11
|
||||
#define LANG_CREATESHORTCUT -12
|
||||
#define LANG_CREATEDUNINST -13
|
||||
#define LANG_DELETEFILE -14
|
||||
#define LANG_DELETEONREBOOT -15
|
||||
#define LANG_ERRORCREATINGSHORTCUT -16
|
||||
#define LANG_ERRORCREATING -17
|
||||
#define LANG_ERRORDECOMPRESSING -18
|
||||
#define LANG_DLLREGERROR -19
|
||||
#define LANG_EXECSHELL -20
|
||||
#define LANG_EXECUTE -21
|
||||
#define LANG_EXTRACT -22
|
||||
#define LANG_ERRORWRITING -23
|
||||
#define LANG_INSTCORRUPTED -24
|
||||
#define LANG_NOOLE -25
|
||||
#define LANG_OUTPUTDIR -26
|
||||
#define LANG_REMOVEDIR -27
|
||||
#define LANG_RENAMEONREBOOT -28
|
||||
#define LANG_RENAME -29
|
||||
#define LANG_SKIPPED -30
|
||||
#define LANG_COPYDETAILS -31
|
||||
#define LANG_LOG_INSTALL_PROCESS -32
|
||||
#define LANG_BYTE -33
|
||||
#define LANG_KILO -34
|
||||
#define LANG_MEGA -35
|
||||
#define LANG_GIGA -36
|
||||
|
||||
#endif//_NSIS_LANG_H_
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
|
||||
#define IDC_BACK 3
|
||||
#define IDD_LICENSE 102
|
||||
#define IDD_LICENSE_FSRB 108
|
||||
#define IDD_LICENSE_FSCB 109
|
||||
#define IDI_ICON2 103
|
||||
#define IDD_DIR 103
|
||||
#define IDD_SELCOM 104
|
||||
|
@ -15,7 +17,7 @@
|
|||
#define IDD_INSTFILES 106
|
||||
#define IDD_UNINST 107
|
||||
#define IDD_VERIFY 111
|
||||
#define IDB_BITMAP1 109
|
||||
#define IDB_BITMAP1 110
|
||||
#define IDC_EDIT1 1000
|
||||
#define IDC_BROWSE 1001
|
||||
#define IDC_PROGRESS 1004
|
||||
|
|
|
@ -28,57 +28,97 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
|||
|
||||
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_LICENSEPAGE)
|
||||
#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
|
||||
IDD_LICENSE DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
IDD_LICENSE DIALOGEX 0, 0, 266, 130
|
||||
#endif
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg"
|
||||
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
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
|
||||
CONTROL "",IDC_EDIT1,"RichEdit20A",WS_BORDER | WS_VSCROLL |
|
||||
0x804,0,24,266,105
|
||||
END
|
||||
#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)
|
||||
IDD_DIR$(NSIS_CONFIG_VISIBLE_SUPPORT) DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
IDD_DIR$(NSIS_CONFIG_VISIBLE_SUPPORT) DIALOGEX 0, 0, 266, 130
|
||||
#else
|
||||
IDD_DIR DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
IDD_DIR DIALOGEX 0, 0, 266, 130
|
||||
#endif
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg"
|
||||
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
EDITTEXT IDC_DIR,8,49,187,12,ES_AUTOHSCROLL
|
||||
PUSHBUTTON "",IDC_BROWSE,202,48,55,14
|
||||
ICON IDI_ICON2,IDC_ULICON,0,0,20,20
|
||||
CONTROL "",IDC_SELDIRTEXT,"Static",SS_LEFTNOWORDWRAP,
|
||||
0,36,265,8
|
||||
CONTROL "",IDC_SPACEAVAILABLE,"Static",SS_LEFTNOWORDWRAP,0,122,265,8
|
||||
ICON IDI_ICON2,IDC_ULICON,0,0,22,20
|
||||
|
||||
CONTROL "",IDC_SPACEAVAILABLE,"Static",SS_LEFTNOWORDWRAP,0,122,
|
||||
265,8
|
||||
CONTROL "",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE |
|
||||
WS_TABSTOP,8,65,118,10
|
||||
CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFTNOWORDWRAP,0,111,265,8
|
||||
WS_TABSTOP,8,71,118,10
|
||||
CONTROL "",IDC_SPACEREQUIRED,"Static",SS_LEFTNOWORDWRAP,0,111,
|
||||
265,8
|
||||
LTEXT "",IDC_INTROTEXT,25,0,241,34
|
||||
GROUPBOX "",IDC_SELDIRTEXT,1,38,264,30
|
||||
END
|
||||
#endif
|
||||
|
||||
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_COMPONENTPAGE)
|
||||
#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
|
||||
IDD_SELCOM DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
IDD_SELCOM DIALOGEX 0, 0, 266, 130
|
||||
#endif
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg"
|
||||
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
COMBOBOX IDC_COMBO1,114,25,152,102,CBS_DROPDOWNLIST | WS_VSCROLL |
|
||||
WS_TABSTOP | NOT WS_VISIBLE
|
||||
ICON IDI_ICON2,IDC_ULICON,0,0,21,20
|
||||
COMBOBOX IDC_COMBO1,114,25,152,102,CBS_DROPDOWNLIST | NOT
|
||||
WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
|
||||
ICON IDI_ICON2,IDC_ULICON,0,0,22,20
|
||||
LTEXT "",IDC_TEXT2,0,40,108,65
|
||||
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
|
||||
CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS |
|
||||
TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP |
|
||||
|
@ -88,53 +128,55 @@ END
|
|||
|
||||
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_VISIBLE_SUPPORT)
|
||||
#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
|
||||
IDD_INST DIALOGEX DISCARDABLE 0, 0, 280, 162
|
||||
IDD_INST DIALOGEX 0, 0, 280, 162
|
||||
#endif
|
||||
STYLE DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_BORDER
|
||||
FONT 8, "MS Shell Dlg"
|
||||
STYLE DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
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 "",IDCANCEL,7,142,50,14
|
||||
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ | WS_GROUP,7,138,267,1
|
||||
CONTROL "",IDC_CHILDRECT,"Static",SS_BLACKRECT | NOT WS_VISIBLE | WS_GROUP,
|
||||
7,6,266,130
|
||||
CTEXT "",IDC_VERSTR,59,145,108,8,WS_DISABLED | WS_GROUP
|
||||
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ | WS_GROUP,7,138,
|
||||
267,1
|
||||
CONTROL "",IDC_CHILDRECT,"Static",SS_BLACKRECT | NOT WS_VISIBLE |
|
||||
WS_GROUP,7,6,266,130
|
||||
CTEXT "",IDC_VERSTR,59,145,108,8,WS_DISABLED
|
||||
END
|
||||
#endif
|
||||
|
||||
#if defined(APSTUDIO_INVOKED) || defined(NSIS_CONFIG_VISIBLE_SUPPORT)
|
||||
#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
|
||||
IDD_INSTFILES DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
IDD_INSTFILES DIALOGEX 0, 0, 266, 130
|
||||
#endif
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg"
|
||||
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,24,10,241,11
|
||||
CONTROL "",IDC_INTROTEXT,"Static",SS_LEFTNOWORDWRAP,
|
||||
24,0,241,8
|
||||
CONTROL "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,24,10,241,
|
||||
11
|
||||
CONTROL "",IDC_INTROTEXT,"Static",SS_LEFTNOWORDWRAP,24,0,241,8
|
||||
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL |
|
||||
LVS_NOCOLUMNHEADER | NOT WS_VISIBLE | WS_BORDER |
|
||||
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
|
||||
END
|
||||
#endif
|
||||
|
||||
#if defined(APSTUDIO_INVOKED) || defined(_NSIS_CONFIG_UNINSTDLG)
|
||||
#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
|
||||
IDD_UNINST DIALOGEX DISCARDABLE 0, 0, 266, 130
|
||||
IDD_UNINST DIALOGEX 0, 0, 266, 130
|
||||
#endif
|
||||
STYLE DS_CONTROL | DS_SHELLFONT | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg"
|
||||
STYLE DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
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
|
||||
EDITTEXT IDC_EDIT1,56,43,209,12,ES_AUTOHSCROLL | ES_READONLY
|
||||
LTEXT "",IDC_INTROTEXT,25,0,241,34
|
||||
|
@ -143,12 +185,12 @@ END
|
|||
|
||||
#if defined(APSTUDIO_INVOKED) || defined(_NSIS_CONFIG_VERIFYDIALOG)
|
||||
#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
|
||||
IDD_VERIFY DIALOGEX DISCARDABLE 0, 0, 162, 22
|
||||
IDD_VERIFY DIALOGEX 0, 0, 162, 22
|
||||
#endif
|
||||
STYLE DS_MODALFRAME | DS_SHELLFONT | DS_CENTER | WS_POPUP | WS_VISIBLE
|
||||
FONT 8, "MS Shell Dlg"
|
||||
STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
CTEXT "",IDC_STR,7,7,148,8
|
||||
END
|
||||
|
|
|
@ -1,33 +1,22 @@
|
|||
#ifdef NSIS_SUPPORT_NAMED_USERVARS
|
||||
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
|
||||
extern char temp_directory[NSIS_MAX_STRLEN];
|
||||
extern char g_usrvars[USER_VARS_COUNT][NSIS_MAX_STRLEN];
|
||||
extern char *state_command_line;
|
||||
extern char *state_install_directory;
|
||||
extern char *state_output_directory;
|
||||
extern char *state_exe_directory;
|
||||
extern char *state_language;
|
||||
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT
|
||||
extern char *state_plugins_dir;
|
||||
#endif
|
||||
#define state_temp_dir temp_directory
|
||||
#endif
|
||||
|
||||
#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]
|
||||
#define state_temp_dir g_usrvars[25]
|
||||
#define state_click_next g_usrvars[26]
|
||||
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT
|
||||
#define state_plugins_dir g_usrvars[27]
|
||||
#endif
|
||||
|
||||
extern char g_caption[NSIS_MAX_STRLEN*2];
|
||||
extern HWND g_hwnd;
|
||||
extern int g_filehdrsize;
|
||||
extern HANDLE g_hInstance;
|
||||
extern HWND insthwnd,insthwndbutton;
|
||||
extern HICON g_hIcon;
|
||||
|
||||
extern int inst_flags;
|
||||
extern HICON g_hIcon;
|
|
@ -1,29 +1,11 @@
|
|||
#ifndef _UI_H_
|
||||
#define _UI_H_
|
||||
|
||||
// Added by Amir Szekely 3rd August 2002
|
||||
extern char *language_tables;
|
||||
extern int *cur_language_table;
|
||||
extern int *cur_langtable;
|
||||
|
||||
int NSISCALL ui_doinstall(void);
|
||||
void NSISCALL update_status_text_from_lang(int id, const char *text2);
|
||||
void NSISCALL update_status_text(const char *text1, const char *text2);
|
||||
void NSISCALL update_status_text(int strtab, const char *text2);
|
||||
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
|
||||
void NSISCALL build_g_logfile(void);
|
||||
|
|
|
@ -37,6 +37,7 @@ char g_log_file[1024];
|
|||
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT
|
||||
char *state_plugins_dir=g_usrvars[25];
|
||||
#endif
|
||||
char *state_plugins_dir=g_usrvars[36];
|
||||
#endif
|
||||
|
||||
HANDLE g_hInstance;
|
||||
|
@ -109,7 +110,7 @@ void NSISCALL doRMDir(char *buf, int flags) // 1 - recurse, 2 - rebootok
|
|||
else if (!RemoveDirectory(buf) && flags&2) {
|
||||
log_printf2("Remove folder on reboot: %s",buf);
|
||||
#ifdef NSIS_SUPPORT_REBOOT
|
||||
g_flags.exec_reboot++;
|
||||
g_exec_flags.exec_reboot++;
|
||||
#endif
|
||||
MoveFileOnReboot(buf,0);
|
||||
}
|
||||
|
@ -163,7 +164,7 @@ int NSISCALL is_valid_instpath(char *s)
|
|||
{
|
||||
int ivp=0;
|
||||
// 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 (lastchar(s)!='\\') ivp++;
|
||||
|
@ -243,7 +244,7 @@ char * NSISCALL my_GetTempFileName(char *buf, const char *dir)
|
|||
BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
||||
{
|
||||
BOOL fOk = 0;
|
||||
HMODULE hLib=LoadLibrary("kernel32.dll");
|
||||
HMODULE hLib=GetModuleHandle("kernel32.dll");
|
||||
if (hLib)
|
||||
{
|
||||
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);
|
||||
}
|
||||
FreeLibrary(hLib);
|
||||
}
|
||||
|
||||
if (!fOk)
|
||||
|
@ -270,7 +270,7 @@ BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
|||
|
||||
if (pszNew) {
|
||||
// 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);
|
||||
}
|
||||
// wininit is used as a temporary here
|
||||
|
@ -307,11 +307,11 @@ BOOL NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
|||
char *pszNextSec = mystrstr(pszFirstRenameLine,"\n[");
|
||||
if (pszNextSec)
|
||||
{
|
||||
int l=dwFileSize - (pszNextSec - pszWinInit);
|
||||
void* data=(void*)my_GlobalAlloc(l);
|
||||
mini_memcpy(data, pszNextSec, l);
|
||||
mini_memcpy(pszNextSec + cchRenameLine, data, l);
|
||||
GlobalFree((HGLOBAL)data);
|
||||
char *p = ++pszNextSec;
|
||||
while (p < pszWinInit + dwFileSize) {
|
||||
p[cchRenameLine] = *p;
|
||||
p++;
|
||||
}
|
||||
|
||||
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];
|
||||
|
||||
char * NSISCALL process_string_fromtab(char *out, int offs)
|
||||
void NSISCALL myitoa(char *s, int d)
|
||||
{
|
||||
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS
|
||||
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);
|
||||
wsprintf(s,"%d",d);
|
||||
}
|
||||
|
||||
void NSISCALL myitoa(char *s, int d) { wsprintf(s,"%d",d); }
|
||||
|
||||
int NSISCALL myatoi(char *s)
|
||||
{
|
||||
unsigned int v=0;
|
||||
|
@ -419,18 +409,20 @@ int NSISCALL mystrlen(const char *in)
|
|||
return lstrlen(in);
|
||||
}
|
||||
|
||||
// Dave Laundon's simplified process_string
|
||||
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS
|
||||
char * NSISCALL process_string(const char *in, int iStartIdx )
|
||||
#else
|
||||
char * NSISCALL process_string(const char *in)
|
||||
#endif
|
||||
char ps_tmpbuf[NSIS_MAX_STRLEN*2];
|
||||
|
||||
// Based on Dave Laundon's simplified process_string
|
||||
char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
||||
{
|
||||
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS
|
||||
char *out = ps_tmpbuf+iStartIdx;
|
||||
#else
|
||||
char *out = ps_tmpbuf;
|
||||
#endif
|
||||
char *in = (char*)GetNSISStringNP(GetNSISTab(strtab));
|
||||
char *out;
|
||||
if (outbuf >= ps_tmpbuf && outbuf < ps_tmpbuf+sizeof(ps_tmpbuf))
|
||||
{
|
||||
out = outbuf;
|
||||
outbuf = 0;
|
||||
}
|
||||
else
|
||||
out = ps_tmpbuf;
|
||||
while (*in && out - ps_tmpbuf < NSIS_MAX_STRLEN)
|
||||
{
|
||||
int nVarIdx = (unsigned char)*in++;
|
||||
|
@ -446,9 +438,9 @@ char * NSISCALL process_string(const char *in)
|
|||
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS
|
||||
else if (nVarIdx == LANG_CODES_START)
|
||||
{
|
||||
nVarIdx = *(short*)in; in+=sizeof(WORD);
|
||||
process_string(GetStringFromStringTab(nVarIdx), out-ps_tmpbuf);
|
||||
out+=mystrlen(out);
|
||||
nVarIdx = *(short*)in; in+=sizeof(short);
|
||||
GetNSISString(out, nVarIdx);
|
||||
out+=mystrlen(out);
|
||||
}
|
||||
#endif
|
||||
else
|
||||
|
@ -485,22 +477,24 @@ char * NSISCALL process_string(const char *in)
|
|||
case VAR_CODES_START + 23: // OUTDIR
|
||||
case VAR_CODES_START + 24: // EXEDIR
|
||||
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)]);
|
||||
break;
|
||||
|
||||
case VAR_CODES_START + 27: // PROGRAMFILES
|
||||
case VAR_CODES_START + 29: // PROGRAMFILES
|
||||
smwcvesf[41]=0;
|
||||
myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "ProgramFilesDir", out);
|
||||
if (!*out)
|
||||
mystrcpy(out, "C:\\Program Files");
|
||||
break;
|
||||
|
||||
case VAR_CODES_START + 28: // SMPROGRAMS
|
||||
case VAR_CODES_START + 29: // SMSTARTUP
|
||||
case VAR_CODES_START + 30: // DESKTOP
|
||||
case VAR_CODES_START + 31: // STARTMENU
|
||||
case VAR_CODES_START + 32: // QUICKLAUNCH
|
||||
case VAR_CODES_START + 30: // SMPROGRAMS
|
||||
case VAR_CODES_START + 31: // SMSTARTUP
|
||||
case VAR_CODES_START + 32: // DESKTOP
|
||||
case VAR_CODES_START + 33: // STARTMENU
|
||||
case VAR_CODES_START + 34: // QUICKLAUNCH
|
||||
{
|
||||
static const char *tab[]={
|
||||
"Programs",
|
||||
|
@ -510,9 +504,9 @@ char * NSISCALL process_string(const char *in)
|
|||
"AppData"
|
||||
};
|
||||
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_);
|
||||
f=g_flags.all_user_var & (nVarIdx != VAR_CODES_START + 32);
|
||||
f=g_exec_flags.all_user_var & (nVarIdx != VAR_CODES_START + 34);
|
||||
|
||||
again:
|
||||
|
||||
|
@ -529,7 +523,7 @@ char * NSISCALL process_string(const char *in)
|
|||
mystrcpy(out,temp_directory);
|
||||
}
|
||||
|
||||
if (nVarIdx == VAR_CODES_START + 32) {
|
||||
if (nVarIdx == VAR_CODES_START + 34) {
|
||||
lstrcat(out, "\\Microsoft\\Internet Explorer\\Quick Launch");
|
||||
f = GetFileAttributes(out);
|
||||
if (f != (DWORD)-1 && (f & FILE_ATTRIBUTE_DIRECTORY))
|
||||
|
@ -538,24 +532,25 @@ char * NSISCALL process_string(const char *in)
|
|||
else break;
|
||||
}
|
||||
|
||||
case VAR_CODES_START + 33: // TEMP
|
||||
case VAR_CODES_START + 35: // TEMP
|
||||
mystrcpy(out,temp_directory);
|
||||
break;
|
||||
|
||||
case VAR_CODES_START + 34: // WINDIR
|
||||
case VAR_CODES_START + 36: // WINDIR
|
||||
GetWindowsDirectory(out, NSIS_MAX_STRLEN);
|
||||
break;
|
||||
|
||||
case VAR_CODES_START + 35: // SYSDIR
|
||||
case VAR_CODES_START + 37: // SYSDIR
|
||||
GetSystemDirectory(out, NSIS_MAX_STRLEN);
|
||||
break;
|
||||
|
||||
#if VAR_CODES_START + 35 >= 255
|
||||
#if VAR_CODES_START + 37 >= 255
|
||||
#error "Too many variables! Extend VAR_CODES_START!"
|
||||
#endif
|
||||
} // switch
|
||||
// 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...)
|
||||
validate_filename(out);
|
||||
}
|
||||
|
@ -574,18 +569,18 @@ char * NSISCALL process_string(const char *in)
|
|||
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)
|
||||
{
|
||||
case 26: // PROGRAMFILES
|
||||
case 28: // PROGRAMFILES
|
||||
smwcvesf[41]=0;
|
||||
myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "ProgramFilesDir", out);
|
||||
if (!*out)
|
||||
mystrcpy(out, "C:\\Program Files");
|
||||
break;
|
||||
|
||||
case 27: // SMPROGRAMS
|
||||
case 28: // SMSTARTUP
|
||||
case 29: // DESKTOP
|
||||
case 30: // STARTMENU
|
||||
case 31: // QUICKLAUNCH
|
||||
case 29: // SMPROGRAMS
|
||||
case 30: // SMSTARTUP
|
||||
case 31: // DESKTOP
|
||||
case 32: // STARTMENU
|
||||
case 33: // QUICKLAUNCH
|
||||
{
|
||||
static const char *tab[]={
|
||||
"Programs",
|
||||
|
@ -595,9 +590,9 @@ char * NSISCALL process_string(const char *in)
|
|||
"AppData"
|
||||
};
|
||||
static char name[20]="Common ";
|
||||
const char *name_=tab[nVarIdx-27];
|
||||
const char *name_=tab[nVarIdx-29];
|
||||
mystrcpy(name+7,name_);
|
||||
f=g_flags.all_user_var & (nVarIdx != 31);
|
||||
f=g_exec_flags.all_user_var & (nVarIdx != 33);
|
||||
|
||||
again:
|
||||
|
||||
|
@ -614,7 +609,7 @@ char * NSISCALL process_string(const char *in)
|
|||
mystrcpy(out,state_temp_dir);
|
||||
}
|
||||
|
||||
if (nVarIdx == 31) {
|
||||
if (nVarIdx == 33) {
|
||||
lstrcat(out, "\\Microsoft\\Internet Explorer\\Quick Launch");
|
||||
f = GetFileAttributes(out);
|
||||
if (f != (DWORD)-1 && (f & FILE_ATTRIBUTE_DIRECTORY))
|
||||
|
@ -623,15 +618,15 @@ char * NSISCALL process_string(const char *in)
|
|||
else break;
|
||||
}
|
||||
|
||||
case 33: // WINDIR
|
||||
case 34: // WINDIR
|
||||
GetWindowsDirectory(out, NSIS_MAX_STRLEN);
|
||||
break;
|
||||
|
||||
case 34: // SYSDIR
|
||||
case 35: // SYSDIR
|
||||
GetSystemDirectory(out, NSIS_MAX_STRLEN);
|
||||
break;
|
||||
|
||||
case 35: // HWNDPARENT
|
||||
case 36: // HWNDPARENT
|
||||
myitoa(out, (unsigned int)g_hwnd);
|
||||
break;
|
||||
|
||||
|
@ -639,17 +634,18 @@ char * NSISCALL process_string(const char *in)
|
|||
mystrcpy(out, g_usrvars[nVarIdx]);
|
||||
} // switch
|
||||
// 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...)
|
||||
validate_filename(out);
|
||||
}
|
||||
out+=mystrlen(out);
|
||||
} // == VAR_CODES_START
|
||||
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS
|
||||
else if ( nVarIdx == LANG_CODES_START )
|
||||
else if (nVarIdx == LANG_CODES_START)
|
||||
{
|
||||
nVarIdx = *(short*)in; in+=sizeof(WORD);
|
||||
process_string(GetStringFromStringTab(nVarIdx), out-ps_tmpbuf);
|
||||
nVarIdx = *(short*)in; in+=sizeof(short);
|
||||
GetNSISString(out, nVarIdx);
|
||||
out+=mystrlen(out);
|
||||
}
|
||||
#endif
|
||||
|
@ -660,6 +656,8 @@ char * NSISCALL process_string(const char *in)
|
|||
#endif
|
||||
} // while
|
||||
*out = 0;
|
||||
if (outbuf)
|
||||
return lstrcpyn(outbuf, ps_tmpbuf, NSIS_MAX_STRLEN);
|
||||
return ps_tmpbuf;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
#include "config.h"
|
||||
|
||||
extern char ps_tmpbuf[NSIS_MAX_STRLEN*2];
|
||||
#ifdef NSIS_SUPPORT_LANG_IN_STRINGS
|
||||
char * NSISCALL process_string(const char *in, int iStartIdx);
|
||||
#else
|
||||
char * NSISCALL process_string(const char *in);
|
||||
#endif
|
||||
char * NSISCALL process_string_fromtab(char *out, int offs);
|
||||
char * NSISCALL GetNSISString(char *outbuf, int strtab);
|
||||
#define GetNSISStringTT(strtab) GetNSISString(0, (strtab))
|
||||
#define GetNSISStringNP(strtab) ((const char *)g_blocks[NB_STRINGS].offset+(strtab))
|
||||
#define GetNSISTab(strtab) (strtab < 0 ? LANG_STR_TAB(strtab) : strtab)
|
||||
void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out);
|
||||
int NSISCALL myatoi(char *s);
|
||||
void NSISCALL myitoa(char *s, int d);
|
||||
|
|
1263
Source/lang.cpp
1263
Source/lang.cpp
File diff suppressed because it is too large
Load diff
249
Source/lang.h
249
Source/lang.h
|
@ -1,86 +1,188 @@
|
|||
// Lang.h by Amir Szekely 3rd August 2002
|
||||
|
||||
#ifndef ___NLF___H_____
|
||||
#define ___NLF___H_____
|
||||
|
||||
#include "exehead/fileform.h"
|
||||
#include <StdExcept>
|
||||
using namespace std;
|
||||
|
||||
struct NLFRef {
|
||||
int iRef;
|
||||
int iUnRef;
|
||||
};
|
||||
|
||||
struct langstring {
|
||||
int name;
|
||||
int sn;
|
||||
int index;
|
||||
int uindex;
|
||||
int process;
|
||||
};
|
||||
|
||||
class LangStringList : public SortedStringListND<struct langstring>
|
||||
{
|
||||
public:
|
||||
LangStringList()
|
||||
{
|
||||
index = 0;
|
||||
LangStringList() {
|
||||
count = 0;
|
||||
}
|
||||
~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;
|
||||
|
||||
((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;
|
||||
index++;
|
||||
|
||||
return temp;
|
||||
return pos;
|
||||
}
|
||||
|
||||
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);
|
||||
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()
|
||||
{
|
||||
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();
|
||||
|
||||
for (int i = 0; i < index; i++)
|
||||
{
|
||||
if (data[i].index == idx)
|
||||
{
|
||||
return ((char*)strings.get() + data[i].name);
|
||||
}
|
||||
}
|
||||
struct langstring *ls1 = (struct langstring *)item1;
|
||||
struct langstring *ls2 = (struct langstring *)item2;
|
||||
|
||||
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:
|
||||
int index;
|
||||
int count;
|
||||
TinyGrowBuf sortbuf;
|
||||
};
|
||||
|
||||
class NLF;
|
||||
class StringsArray
|
||||
{
|
||||
private:
|
||||
TinyGrowBuf offsets;
|
||||
GrowBuf strings;
|
||||
|
||||
struct StringTable {
|
||||
LANGID lang_id;
|
||||
int dlg_offset;
|
||||
common_strings common;
|
||||
common_strings ucommon;
|
||||
installer_strings installer;
|
||||
uninstall_strings uninstall;
|
||||
TinyGrowBuf user_strings;
|
||||
TinyGrowBuf user_ustrings;
|
||||
public:
|
||||
StringsArray()
|
||||
{
|
||||
offsets.set_zeroing(1);
|
||||
|
||||
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 {
|
||||
NLF_BRANDING,
|
||||
|
@ -91,6 +193,8 @@ enum {
|
|||
NLF_SUBCAPTION_DIR,
|
||||
NLF_SUBCAPTION_INSTFILES,
|
||||
NLF_SUBCAPTION_COMPLETED,
|
||||
NLF_USUBCAPTION_OPTIONS,
|
||||
NLF_USUBCAPTION_DIR,
|
||||
NLF_USUBCAPTION_CONFIRM,
|
||||
NLF_USUBCAPTION_INSTFILES,
|
||||
NLF_USUBCAPTION_COMPLETED,
|
||||
|
@ -105,15 +209,36 @@ enum {
|
|||
NLF_BTN_CLOSE,
|
||||
NLF_BTN_BROWSE,
|
||||
NLF_BTN_DETAILS,
|
||||
NLF_DEF_NAME,
|
||||
NLF_CLICK_NEXT,
|
||||
NLF_CLICK_INSTALL,
|
||||
NLF_CLICK_UNINSTALL,
|
||||
NLF_NAME,
|
||||
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_TEXT,
|
||||
NLF_COMP_SUBTEXT1,
|
||||
NLF_COMP_SUBTEXT1_NO_INST_TYPES,
|
||||
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_BROWSETEXT,
|
||||
NLF_UDIR_TEXT,
|
||||
NLF_UDIR_SUBTEXT,
|
||||
NLF_UDIR_BROWSETEXT,
|
||||
NLF_SPACE_AVAIL,
|
||||
NLF_SPACE_REQ,
|
||||
NLF_UNINST_TEXT,
|
||||
NLF_UNINST_SUBTEXT,
|
||||
NLF_FILE_ERROR,
|
||||
NLF_FILE_ERROR_NOIGNORE,
|
||||
|
@ -150,36 +275,32 @@ enum {
|
|||
NLF_KILO,
|
||||
NLF_MEGA,
|
||||
NLF_GIGA,
|
||||
NLF_RTL,
|
||||
|
||||
NLF_STRINGS,
|
||||
|
||||
SLANG_NAME,
|
||||
SLANG_COMP_TEXT,
|
||||
SLANG_LICENSE_TEXT,
|
||||
SLANG_LICENSE_DATA,
|
||||
SLANG_DIR_TEXT,
|
||||
SLANG_UNINST_TEXT
|
||||
NLF_STRINGS
|
||||
};
|
||||
|
||||
extern char *english_strings[NLF_STRINGS];
|
||||
|
||||
// NSIS Language File parser
|
||||
class NLF {
|
||||
public:
|
||||
NLF(char *filename);
|
||||
~NLF();
|
||||
|
||||
char *GetString(int idx);
|
||||
|
||||
struct NLF {
|
||||
bool m_bLoaded;
|
||||
char *m_szName;
|
||||
|
||||
LANGID m_wLangId;
|
||||
char *m_szFont;
|
||||
int m_iFontSize;
|
||||
unsigned int m_uCodePage;
|
||||
|
||||
private:
|
||||
bool m_bRTL;
|
||||
|
||||
char *m_szStrings[NLF_STRINGS];
|
||||
};
|
||||
|
||||
struct LanguageTable {
|
||||
LANGID lang_id;
|
||||
|
||||
int dlg_offset;
|
||||
|
||||
GrowBuf *strlist;
|
||||
|
||||
StringsArray *lang_strings;
|
||||
|
||||
NLF nlf;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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 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 page is %d bytes.\n",sizeof(page));
|
||||
fprintf(g_output,"Size of each instruction is %d bytes.\n",sizeof(entry));
|
||||
|
|
|
@ -69,8 +69,7 @@ LINK32=link.exe
|
|||
# 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
|
||||
# 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
|
||||
# SUBTRACT CPP /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 /Zm200 /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
|
2013
Source/script.cpp
2013
Source/script.cpp
File diff suppressed because it is too large
Load diff
|
@ -481,7 +481,7 @@ class MMapBuf : public IGrowBuf
|
|||
int add(const void *data, int len)
|
||||
{
|
||||
if (len<=0) return 0;
|
||||
resize(getlen()+len);
|
||||
resize(getlen()+len);
|
||||
memcpy((char*)get()+getlen()-len,data,len);
|
||||
return getlen()-len;
|
||||
}
|
||||
|
@ -507,7 +507,7 @@ class MMapBuf : public IGrowBuf
|
|||
char buf[MAX_PATH],buf2[MAX_PATH];
|
||||
GetTempPath(MAX_PATH,buf);
|
||||
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)
|
||||
m_hFileMap=CreateFileMapping(m_hFile,NULL,PAGE_READWRITE,0,m_alloc,NULL);
|
||||
|
|
|
@ -22,14 +22,14 @@ static tokenType tokenlist[TOK__LAST] =
|
|||
{TOK_ADDSIZE,"AddSize",1,0,"size_to_add_to_section_in_kb"},
|
||||
{TOK_AUTOCLOSE,"AutoCloseWindow",1,0,"(false|true)"},
|
||||
{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_CALL,"Call",1,0,"function_name | [:label_name]"},
|
||||
{TOK_CALLINSTDLL,"CallInstDLL",2,1,"dll_path_on_target.dll [/NOUNLOAD] function"},
|
||||
{TOK_CAPTION,"Caption",1,1,"[/LANG=lang_id] installer_caption"},
|
||||
{TOK_CHANGEUI,"ChangeUI",2,1,"/RTL (all|dlg_id) ui_file.exe"},
|
||||
{TOK_CAPTION,"Caption",1,0,"installer_caption"},
|
||||
{TOK_CHANGEUI,"ChangeUI",1,1,"[/RTL] (all|dlg_id) ui_file.exe"},
|
||||
{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_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)"},
|
||||
|
@ -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_DELETE,"Delete",1,1,"[/REBOOTOK] filespec"},
|
||||
{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_DIRVAR,"DirVar",1,0,"$(user_var: dir in/out))"},
|
||||
{TOK_ROOTDIRINST,"AllowRootDirInstall",1,0,"(true|false)"},
|
||||
{TOK_CHECKBITMAP,"CheckBitmap",1,0,"local_bitmap.bmp"},
|
||||
{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_RESERVEFILE,"ReserveFile",1,-1,"[/nonfatal] [/r] file [file...]"},
|
||||
{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_FILEREAD,"FileRead",2,1,"$(user_var: handle input) $(user_var: text output) [maxlen]"},
|
||||
{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_GETFULLPATHNAME,"GetFullPathName",2,1,"[/SHORT] $(user_var: result) path_or_file"},
|
||||
{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_ICON,"Icon",1,0,"local_icon.ico"},
|
||||
{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_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_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_INSTCOLORS,"InstallColors",1,1,"(/windows | (foreground_color background_color))"},
|
||||
{TOK_INSTDIR,"InstallDir",1,0,"default_install_directory"},
|
||||
{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_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]"},
|
||||
|
@ -97,10 +98,11 @@ static tokenType tokenlist[TOK__LAST] =
|
|||
{TOK_ISWINDOW,"IsWindow",2,1,"hwnd jump_if_window [jump_if_not_window]"},
|
||||
{TOK_GOTO,"Goto",1,0,"label"},
|
||||
{TOK_LANGSTRING,"LangString",3,0,"[un.]name lang_id string"},
|
||||
{TOK_LANGSTRINGUP,"LangStringUP",3,0,"[un.]name lang_id string"},
|
||||
{TOK_LICENSEDATA,"LicenseData",1,1,"[/LANG=lang_id] local_file_that_has_license_text.txt"},
|
||||
{TOK_LICENSEFORCESELECTION,"LicenseForceSelection",1,3,"[/LANG=lang_id] (checkbox [accept_text] | radiobuttons [accept_text] [decline_text] | off)"},
|
||||
{TOK_LICENSETEXT,"LicenseText",1,2,"[/LANG=lang_id] license_page_description [license_button_text]"},
|
||||
{TOK_LANGSTRINGUP,"LangStringUP",0,0,"obsolete, use LangString."},
|
||||
{TOK_LICENSEDATA,"LicenseData",1,0,"local_file_that_has_license_text | license_lang_string"},
|
||||
{TOK_LICENSEFORCESELECTION,"LicenseForceSelection",1,2,"(checkbox [accept_text] | radiobuttons [accept_text] [decline_text] | off)"},
|
||||
{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_LOADNLF,"LoadLanguageFile",1,0,"language.nlf"},
|
||||
{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 "
|
||||
"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_NAME,"Name",1,1,"[/LANG=lang_id] installer_name"},
|
||||
{TOK_NAME,"Name",1,0,"installer_name"},
|
||||
{TOK_OUTFILE,"OutFile",1,0,"install_output.exe"},
|
||||
#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
|
||||
{TOK_PAGE,"Page",1,1,"license|components|directory|instfiles"},
|
||||
{TOK_PAGE,"Page",1,1,"license|components|directory|instfiles|uninstConfirm"},
|
||||
#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_PUSH,"Push",1,0,"string"},
|
||||
{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_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_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_SETCOMPRESS,"SetCompress",1,0,"(off|auto|force)"},
|
||||
{TOK_SETCOMPRESSOR,"SetCompressor",1,0,"(zlib|bzip2)"},
|
||||
|
@ -162,6 +167,7 @@ static tokenType tokenlist[TOK__LAST] =
|
|||
{TOK_SETPLUGINUNLOAD,"SetPluginUnload",1,0,"(manual|alwaysoff)"},
|
||||
{TOK_SETREBOOTFLAG,"SetRebootFlag",1,0,"true|false"},
|
||||
{TOK_SETSHELLVARCONTEXT,"SetShellVarContext",1,0,"all|current"},
|
||||
{TOK_SETSILENT,"SetSilent",1,0,"silent|normal"},
|
||||
{TOK_SHOWDETAILS,"ShowInstDetails",1,0,"(hide|show|nevershow)"},
|
||||
{TOK_SHOWDETAILSUNINST,"ShowUninstDetails",1,0,"(hide|show|nevershow)"},
|
||||
{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_STRCPY,"StrCpy",2,2,"$(user_var: output) str [maxlen] [startoffset]"},
|
||||
{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_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"},
|
||||
#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
|
||||
{TOK_UNINSTPAGE,"UninstPage",1,1,"uninstConfirm|instfiles"},
|
||||
{TOK_UNINSTPAGE,"UninstPage",1,1,"license|components|directory|instfiles|uninstConfirm"},
|
||||
#endif
|
||||
{TOK_UNINSTTEXT,"UninstallText",1,2,"[/LANG=lang_id] Text_to_go_on_uninstall page [subtext]"},
|
||||
{TOK_UNINSTSUBCAPTION,"UninstallSubCaption",2,1,"[/LANG=lang_id] page_number(0-2) new_subcaption"},
|
||||
{TOK_UNINSTTEXT,"UninstallText",1,1,"Text_to_go_on_uninstall_page [subtext]"},
|
||||
{TOK_UNINSTSUBCAPTION,"UninstallSubCaption",2,0,"page_number(0-2) new_subcaption"},
|
||||
{TOK_UNREGDLL,"UnRegDLL",1,0,"dll_path_on_target.dll"},
|
||||
// useless - {TOK_USEOUTERUIITEM,"UseOuterUIItem",2,0,"item id"},
|
||||
{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_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_MACROEND,"!macroend",0,0,""},
|
||||
{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_DETAILSBUTTONTEXT,"DetailsButtonText",0,2,"[/LANG=lang_id] [details button text]"},
|
||||
{TOK_UNINSTBUTTONTEXT,"UninstallButtonText",0,2,"[/LANG=lang_id] [uninstall button text]"},
|
||||
{TOK_INSTBUTTONTEXT,"InstallButtonText",0,2,"[/LANG=lang_id] [install button text]"},
|
||||
{TOK_SPACETEXTS,"SpaceTexts",0,3,"[/LANG=lang_id] [space required text] [space available text]"},
|
||||
{TOK_COMPLETEDTEXT,"CompletedText",0,2,"[/LANG=lang_id] [completed text]"},
|
||||
{TOK_MISCBUTTONTEXT,"MiscButtonText",0,4,"[back button text] [next button text] [cancel button text] [close button text]"},
|
||||
{TOK_DETAILSBUTTONTEXT,"DetailsButtonText",0,1,"[details button text]"},
|
||||
{TOK_UNINSTBUTTONTEXT,"UninstallButtonText",0,1,"[uninstall button text]"},
|
||||
{TOK_INSTBUTTONTEXT,"InstallButtonText",0,1,"[install button text]"},
|
||||
{TOK_SPACETEXTS,"SpaceTexts",0,2,"none | ([space required text] [space available text])"},
|
||||
{TOK_COMPLETEDTEXT,"CompletedText",0,2,"[completed text]"},
|
||||
|
||||
{TOK_GETFUNCTIONADDR,"GetFunctionAddress",2,0,"output function"},
|
||||
{TOK_GETLABELADDR,"GetLabelAddress",2,0,"output label"},
|
||||
|
@ -231,8 +237,8 @@ static tokenType tokenlist[TOK__LAST] =
|
|||
// Added by ramon 3 jun 2003
|
||||
{TOK_DEFVAR,"Var",1,0,"VarName"},
|
||||
// Added by ramon 6 jun 2003
|
||||
{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_ADDKEY,"VIAddVersionKey",2,1,"/LANG=lang_id keyname value"},
|
||||
{TOK_VI_SETPRODUCTVERSION,"VIProductVersion",1,0,"[version_string_X.X.X.X]"},
|
||||
};
|
||||
|
||||
void CEXEBuild::print_help(char *commandname)
|
||||
|
|
|
@ -14,10 +14,11 @@ enum
|
|||
TOK_WINDOWICON,
|
||||
TOK_DIRTEXT,
|
||||
TOK_COMPTEXT,
|
||||
TOK_LICENSETEXT,
|
||||
TOK_LICENSEBKCOLOR,
|
||||
TOK_LICENSEDATA,
|
||||
TOK_LICENSEFORCESELECTION,
|
||||
TOK_LICENSEBKCOLOR,
|
||||
TOK_LICENSELANGSTRING,
|
||||
TOK_LICENSETEXT,
|
||||
TOK_UNINSTTEXT,
|
||||
TOK_SILENTINST,
|
||||
TOK_SILENTUNINST,
|
||||
|
@ -46,6 +47,10 @@ enum
|
|||
TOK_SETCOMPRESSOR,
|
||||
TOK_LOADNLF,
|
||||
TOK_RESERVEFILE,
|
||||
TOK_ALLOWSKIPFILES,
|
||||
TOK_DEFVAR,
|
||||
TOK_VI_ADDKEY,
|
||||
TOK_VI_SETPRODUCTVERSION,
|
||||
|
||||
TOK_MISCBUTTONTEXT,
|
||||
TOK_DETAILSBUTTONTEXT,
|
||||
|
@ -89,9 +94,15 @@ enum
|
|||
TOK_FUNCTIONEND,
|
||||
TOK_ADDSIZE,
|
||||
|
||||
// Page oredering shit
|
||||
// page oredering shit
|
||||
TOK_PAGE,
|
||||
TOK_UNINSTPAGE,
|
||||
TOK_PAGEEX,
|
||||
TOK_PAGECALLBACKS,
|
||||
TOK_PAGEEXEND,
|
||||
|
||||
// PageEx stuff
|
||||
TOK_DIRVAR,
|
||||
|
||||
// flag setters
|
||||
TOK_SETDATESAVE,
|
||||
|
@ -175,8 +186,7 @@ enum
|
|||
TOK_SENDMESSAGE,
|
||||
TOK_ISWINDOW,
|
||||
TOK_GETDLGITEM,
|
||||
TOK_GETWINTEXT,
|
||||
TOK_SETBKCOLOR,
|
||||
TOK_SETCTLCOLORS,
|
||||
TOK_FINDFIRST,
|
||||
TOK_FINDNEXT,
|
||||
TOK_FINDCLOSE,
|
||||
|
@ -213,12 +223,8 @@ enum
|
|||
TOK_CREATEFONT,
|
||||
TOK_SHOWWINDOW,
|
||||
TOK_ENABLEWINDOW,
|
||||
// Added by ramon 23 May 2003
|
||||
TOK_ALLOWSKIPFILES,
|
||||
// Added by ramon 3 jun 2003
|
||||
TOK_DEFVAR,
|
||||
TOK_VI_ADDKEY,
|
||||
TOK_VI_SETPRODUCTVERSION,
|
||||
TOK_SETSILENT,
|
||||
TOK_IFSILENT,
|
||||
|
||||
TOK__LAST,
|
||||
TOK__PLUGINCOMMAND
|
||||
|
|
38
TODO.txt
38
TODO.txt
|
@ -1,42 +1,30 @@
|
|||
TODO
|
||||
|
||||
-- NSIS 2 Beta 4 --
|
||||
|
||||
NSIS
|
||||
|
||||
* 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
|
||||
|
||||
-- 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
|
||||
|
||||
* write an advanced paging example showing multiple components page with multiple
|
||||
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
|
||||
|
||||
* InstallOptions - custom class names so you can include whatever control you want
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue