iceman_k's define list for MakeNSISw

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2536 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2003-05-08 16:41:07 +00:00
parent b06d2531d5
commit 3c08909d1d
7 changed files with 794 additions and 575 deletions

View file

@ -37,6 +37,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char *cmdParam, int cmd
my_memset(&g_find,0,sizeof(NFINDREPLACE));
g_sdata.hInstance=GetModuleHandle(0);
g_sdata.script_alloced=false;
g_sdata.defines = NULL;
g_sdata.script=GetCommandLine();
if (*g_sdata.script=='"') { g_sdata.script++; while (*g_sdata.script && *g_sdata.script++!='"' ); }
else while (*g_sdata.script!=' ' && *g_sdata.script) g_sdata.script++;
@ -300,6 +301,11 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
CompileNSISScript();
return TRUE;
}
case IDM_DEFINES:
{
DialogBox(g_sdata.hInstance,MAKEINTRESOURCE(DLG_DEFINES),g_sdata.hwnd,(DLGPROC)DefinesProc);
return TRUE;
}
case IDM_TEST:
case IDC_TEST:
{
@ -535,3 +541,127 @@ BOOL CALLBACK AboutProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
}
return FALSE;
}
BOOL CALLBACK DefinesProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg) {
case WM_INITDIALOG:
{
if(g_sdata.defines) {
int i=0;
while(g_sdata.defines[i]) {
SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_ADDSTRING, 0, (LPARAM)g_sdata.defines[i]);
i++;
}
}
EnableWindow(GetDlgItem(hwndDlg, IDRIGHT), FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDLEFT), FALSE);
SetFocus(GetDlgItem(hwndDlg, IDC_SYMBOL));
break;
}
case WM_COMMAND:
{
switch (LOWORD(wParam)) {
case IDOK:
{
ResetObjects();
if(g_sdata.input_script) {
g_sdata.script_alloced = true;
g_sdata.script = (char *)GlobalAlloc(GPTR, (lstrlen(g_sdata.input_script)+3)*sizeof(char));
wsprintf(g_sdata.script,"\"%s\"",g_sdata.input_script);
}
int n = SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_GETCOUNT, 0, 0);
if(n > 0) {
g_sdata.defines = (char **)GlobalAlloc(GPTR, (n+1)*sizeof(char *));
for(int i=0; i<n; i++) {
int len = SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_GETTEXTLEN, (WPARAM)i, 0);
g_sdata.defines[i] = (char *)GlobalAlloc(GPTR, (len+1)*sizeof(char));
SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_GETTEXT, (WPARAM)i, (LPARAM)g_sdata.defines[i]);
}
g_sdata.defines[n] = NULL;
}
EndDialog(hwndDlg, TRUE);
}
break;
case IDCANCEL:
EndDialog(hwndDlg, TRUE);
break;
case IDRIGHT:
{
int n = SendDlgItemMessage(hwndDlg, IDC_SYMBOL, WM_GETTEXTLENGTH, 0, 0);
if(n > 0) {
char *buf = (char *)GlobalAlloc(GPTR, (n+1)*sizeof(char));
SendDlgItemMessage(hwndDlg, IDC_SYMBOL, WM_GETTEXT, n+1, (LPARAM)buf);
if(my_strstr(buf," ") || my_strstr(buf,"\t")) {
MessageBox(hwndDlg,DEFINESERROR,"Error",MB_OK|MB_ICONSTOP);
GlobalFree(buf);
break;
}
n = SendDlgItemMessage(hwndDlg, IDC_VALUE, WM_GETTEXTLENGTH, 0, 0);
if(n > 0) {
char *buf2 = (char *)GlobalAlloc(GPTR, (n+1)*sizeof(char));
SendDlgItemMessage(hwndDlg, IDC_VALUE, WM_GETTEXT, n+1, (LPARAM)buf2);
char *buf3 = (char *)GlobalAlloc(GPTR, (lstrlen(buf)+lstrlen(buf2)+2)*sizeof(char));
wsprintf(buf3,"%s=%s",buf,buf2);
GlobalFree(buf);
buf = buf3;
GlobalFree(buf2);
}
SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_ADDSTRING, 0, (LPARAM)buf);
SendDlgItemMessage(hwndDlg, IDC_SYMBOL, WM_SETTEXT, 0, 0);
SendDlgItemMessage(hwndDlg, IDC_VALUE, WM_SETTEXT, 0, 0);
GlobalFree(buf);
}
}
break;
case IDLEFT:
{
int index = SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_GETCURSEL, 0, 0);
if(index != LB_ERR) {
int n = SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_GETTEXTLEN, (WPARAM)index, 0);
if(n > 0) {
char *buf = (char *)GlobalAlloc(GPTR, (n+1)*sizeof(char));
SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_GETTEXT, (WPARAM)index, (LPARAM)buf);
char *p = my_strstr(buf,"=");
if(p) {
SendDlgItemMessage(hwndDlg, IDC_VALUE, WM_SETTEXT, 0, (LPARAM)(p+1));
*p=0;
}
SendDlgItemMessage(hwndDlg, IDC_SYMBOL, WM_SETTEXT, 0, (LPARAM)buf);
GlobalFree(buf);
SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_DELETESTRING, (WPARAM)index, (LPARAM)buf);
EnableWindow(GetDlgItem(hwndDlg, IDLEFT), FALSE);
}
}
}
break;
case IDC_SYMBOL:
if(HIWORD(wParam) == EN_CHANGE)
{
int n = SendDlgItemMessage(hwndDlg, IDC_SYMBOL, WM_GETTEXTLENGTH, 0, 0);
if(n > 0) {
EnableWindow(GetDlgItem(hwndDlg, IDRIGHT), TRUE);
}
else {
EnableWindow(GetDlgItem(hwndDlg, IDRIGHT), FALSE);
}
}
break;
case IDC_DEFINES:
if(HIWORD(wParam) == LBN_SELCHANGE)
{
int n = SendDlgItemMessage(hwndDlg, IDC_DEFINES, LB_GETCURSEL, 0, 0);
if(n != LB_ERR) {
EnableWindow(GetDlgItem(hwndDlg, IDLEFT), TRUE);
}
else {
EnableWindow(GetDlgItem(hwndDlg, IDLEFT), FALSE);
}
}
break;
}
break;
}
}
return FALSE;
}

View file

@ -80,7 +80,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 /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 wsock32.lib comctl32.lib 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 /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 wsock32.lib comctl32.lib 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 /subsystem:windows /debug /machine:I386 /out:"../../makensisw.exe" /pdbtype:sept
!ENDIF
@ -137,6 +137,10 @@ SOURCE=.\utils.h
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE="..\Icons\adni18-installer-B.ico"
# End Source File
# Begin Source File
SOURCE=.\logo.bmp
# End Source File
# Begin Source File
@ -160,5 +164,9 @@ SOURCE=.\shell.ico
SOURCE=.\Readme.txt
# End Source File
# End Group
# Begin Source File
SOURCE=.\makensisw.xml
# End Source File
# End Target
# End Project

View file

@ -39,6 +39,7 @@
#define LOCALDOCS "\\docs\\index.html"
#define NSISERROR "Unable to intialize MakeNSIS. Please verify that makensis.exe is in the same directory as makensisw.exe."
#define DLGERROR "Unable to intialize MakeNSISW."
#define DEFINESERROR "Symbol cannot contain whitespace characters"
#define REGSEC HKEY_LOCAL_MACHINE
#define REGKEY "Software\\NSIS"
#define REGLOC "MakeNSISWPlacement"
@ -69,7 +70,9 @@ DWORD WINAPI MakeNSISProc(LPVOID p);
BOOL CALLBACK DialogResize(HWND hWnd, LPARAM /* unused*/);
BOOL CALLBACK AboutNSISProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK AboutProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK DefinesProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
void CompileNSISScript();
char* BuildDefines();
typedef struct NSISScriptData {
bool script_alloced;
@ -78,6 +81,7 @@ typedef struct NSISScriptData {
char *input_script;
char *branding;
char *brandingv;
char **defines;
int retcode;
DWORD logLength;
DWORD warnings;

View file

@ -9,6 +9,7 @@
#define IDK_ACCEL 105
#define IDI_SHELL 112
#define IDB_LOGO 115
#define DLG_DEFINES 116
#define IDC_LOGWIN 402
#define IDC_VERSION 405
#define IDC_CLOSE 406
@ -26,6 +27,11 @@
#define IDC_CONTRIB 1009
#define IDC_NSISVER 1010
#define IDC_OTHERCONTRIB 1016
#define IDC_SYMBOL 1017
#define IDC_VALUE 1018
#define IDRIGHT 1019
#define IDLEFT 1020
#define IDC_DEFINES 1021
#define IDM_TEST 40002
#define IDM_EDITSCRIPT 40003
#define IDM_DOCS 40004
@ -36,14 +42,15 @@
#define IDM_BROWSESCR 40013
#define IDM_NSISDEV 40014
#define IDM_FORUM 40016
#define IDM_DEFINES 40017
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 116
#define _APS_NEXT_COMMAND_VALUE 40017
#define _APS_NEXT_CONTROL_VALUE 1017
#define _APS_NEXT_RESOURCE_VALUE 117
#define _APS_NEXT_COMMAND_VALUE 40018
#define _APS_NEXT_CONTROL_VALUE 1023
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View file

@ -83,6 +83,7 @@ BEGIN
POPUP "&Tools"
BEGIN
MENUITEM "&Recompile\tCtrl+R", IDM_RECOMPILE
MENUITEM "&Define Symbols\tCtrl+D", IDM_DEFINES
MENUITEM "Test &Installer\tCtrl+T", IDM_TEST
MENUITEM "Edit Script\tCtrl+E", IDM_EDITSCRIPT
MENUITEM "Browse Script\tCtrl+B", IDM_BROWSESCR
@ -111,6 +112,7 @@ BEGIN
"A", IDM_SELECTALL, VIRTKEY, CONTROL, NOINVERT
"B", IDM_BROWSESCR, VIRTKEY, CONTROL, NOINVERT
"C", IDM_COPYSELECTED, VIRTKEY, CONTROL, NOINVERT
"D", IDM_DEFINES, VIRTKEY, CONTROL, NOINVERT
"E", IDM_EDITSCRIPT, VIRTKEY, CONTROL, NOINVERT
"F", IDM_FIND, VIRTKEY, CONTROL, NOINVERT
"L", IDM_LOADSCRIPT, VIRTKEY, CONTROL, NOINVERT
@ -160,6 +162,24 @@ BEGIN
CONTROL 115,IDC_STATIC,"Static",SS_BITMAP,0,0,20,20
END
DLG_DEFINES DIALOGEX 0, 0, 250, 127
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Define Symbols"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "&OK",IDOK,145,106,48,14
PUSHBUTTON "&Cancel",IDCANCEL,195,106,48,14
EDITTEXT IDC_SYMBOL,7,37,74,12,ES_AUTOHSCROLL,WS_EX_CLIENTEDGE
EDITTEXT IDC_VALUE,7,63,74,12,ES_AUTOHSCROLL,WS_EX_CLIENTEDGE
PUSHBUTTON ">",IDRIGHT,91,41,14,14
PUSHBUTTON "<",IDLEFT,91,56,14,14
LTEXT "Symbol",IDC_STATIC,7,28,24,8
LTEXT "Value (optional)",IDC_STATIC,7,54,50,8
LISTBOX IDC_DEFINES,117,16,121,79,LBS_NOINTEGRALHEIGHT |
WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE
GROUPBOX "Defined Symbols List",IDC_STATIC,112,7,131,93
END
/////////////////////////////////////////////////////////////////////////////
//
@ -173,6 +193,14 @@ BEGIN
BEGIN
BOTTOMMARGIN, 121
END
DLG_DEFINES, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 243
TOPMARGIN, 7
BOTTOMMARGIN, 120
END
END
#endif // APSTUDIO_INVOKED

View file

@ -83,6 +83,7 @@ void DisableItems(HWND hwnd) {
EnableMenuItem(g_sdata.menu,IDM_EXIT,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_LOADSCRIPT,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_RECOMPILE,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_DEFINES,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_COPY,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_COPYSELECTED,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_EDITSCRIPT,MF_GRAYED);
@ -103,6 +104,7 @@ void EnableItems(HWND hwnd) {
EnableMenuItem(g_sdata.menu,IDM_EXIT,MF_ENABLED);
EnableMenuItem(g_sdata.menu,IDM_LOADSCRIPT,MF_ENABLED);
EnableMenuItem(g_sdata.menu,IDM_RECOMPILE,MF_ENABLED);
EnableMenuItem(g_sdata.menu,IDM_DEFINES,MF_ENABLED);
EnableMenuItem(g_sdata.menu,IDM_COPY,MF_ENABLED);
EnableMenuItem(g_sdata.menu,IDM_COPYSELECTED,MF_ENABLED);
EnableMenuItem(g_sdata.menu,IDM_EDITSCRIPT,MF_ENABLED);
@ -120,6 +122,7 @@ void CompileNSISScript() {
if (lstrlen(g_sdata.script)==0) {
LogMessage(g_sdata.hwnd,USAGE);
EnableMenuItem(g_sdata.menu,IDM_RECOMPILE,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_DEFINES,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_EDITSCRIPT,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_TEST,MF_GRAYED);
EnableMenuItem(g_sdata.menu,IDM_BROWSESCR,MF_GRAYED);
@ -129,8 +132,10 @@ void CompileNSISScript() {
}
if (!g_sdata.appended) {
if (s) GlobalFree(s);
s = (char *)GlobalAlloc(GPTR, lstrlen(g_sdata.script)+sizeof(EXENAME)+sizeof(" /NOTIFYHWND ")+16);
wsprintf(s,"%s /NOTIFYHWND %d %s",EXENAME,g_sdata.hwnd,g_sdata.script);
char *defines = BuildDefines();
s = (char *)GlobalAlloc(GPTR, lstrlen(g_sdata.script)+lstrlen(defines)+sizeof(EXENAME)+sizeof(" /NOTIFYHWND ")+16);
wsprintf(s,"%s %s /NOTIFYHWND %d %s",EXENAME,defines,g_sdata.hwnd,g_sdata.script);
GlobalFree(defines);
if (g_sdata.script_alloced) GlobalFree(g_sdata.script);
g_sdata.script_alloced = true;
g_sdata.script = s;
@ -174,6 +179,15 @@ void SaveWindowPos(HWND hwnd) {
}
void ResetObjects() {
if(g_sdata.defines) {
int i=0;
while(g_sdata.defines[i]) {
GlobalFree(g_sdata.defines[i]);
i++;
}
GlobalFree(g_sdata.defines);
g_sdata.defines = NULL;
}
g_sdata.appended = FALSE;
g_sdata.warnings = FALSE;
g_sdata.retcode = -1;
@ -284,3 +298,31 @@ void ShowDocs() {
if ((int)ShellExecute(g_sdata.hwnd,"open",pathf,NULL,NULL,SW_SHOWNORMAL)<=32)
ShellExecute(g_sdata.hwnd,"open",DOCPATH,NULL,NULL,SW_SHOWNORMAL);
}
char* BuildDefines()
{
char *buf = NULL;
if(g_sdata.defines) {
int i=0;
while(g_sdata.defines[i]) {
if(buf) {
char *buf3 = (char *)GlobalAlloc(GPTR,(lstrlen(buf)+lstrlen(g_sdata.defines[i])+6)*sizeof(char));
wsprintf(buf3,"%s \"/D%s\"",buf,g_sdata.defines[i]);
GlobalFree(buf);
buf = buf3;
}
else {
buf = (char *)GlobalAlloc(GPTR,(lstrlen(g_sdata.defines[i])+5)*sizeof(char));
wsprintf(buf,"\"/D%s\"",g_sdata.defines[i]);
}
i++;
}
}
else {
buf = (char *)GlobalAlloc(GPTR, sizeof(char));
lstrcpy(buf,"");
}
return buf;
}