!ifmacro[n]def based on Anders Kjersem's code
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3234 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
58ea8200ba
commit
5028c34424
4 changed files with 44 additions and 6 deletions
|
@ -123,6 +123,7 @@ class CEXEBuild {
|
|||
#endif
|
||||
int parseScript();
|
||||
int includeScript(char *f);
|
||||
int MacroExists(const char *macroname);
|
||||
#ifdef NSIS_FIX_DEFINES_IN_STRINGS
|
||||
void ps_addtoline(const char *str, GrowBuf &linedata, StringList &hist, bool bIgnoreDefines = false);
|
||||
#else
|
||||
|
|
|
@ -195,7 +195,7 @@ int CEXEBuild::process_script(FILE *filepointer, char *filename)
|
|||
|
||||
if (ret == PS_EOF && num_ifblock())
|
||||
{
|
||||
ERROR_MSG("!if[n]def: open at EOF - need !endif\n");
|
||||
ERROR_MSG("!if[macro][n]def: open at EOF - need !endif\n");
|
||||
return PS_ERROR;
|
||||
}
|
||||
|
||||
|
@ -350,7 +350,8 @@ parse_again:
|
|||
if_from_else++;
|
||||
}
|
||||
|
||||
if (tkid == TOK_P_IFNDEF || tkid == TOK_P_IFDEF)
|
||||
if (tkid == TOK_P_IFNDEF || tkid == TOK_P_IFDEF ||
|
||||
tkid == TOK_P_IFMACRODEF || tkid == TOK_P_IFMACRONDEF)
|
||||
{
|
||||
if (!if_from_else)
|
||||
start_ifblock();
|
||||
|
@ -370,8 +371,13 @@ parse_again:
|
|||
{
|
||||
if (p & 1)
|
||||
{
|
||||
int new_s=!!definedlist.find(line.gettoken_str(p));
|
||||
if (tkid == TOK_P_IFNDEF) new_s=!new_s;
|
||||
int new_s;
|
||||
if (tkid == TOK_P_IFNDEF || tkid == TOK_P_IFDEF)
|
||||
new_s=!!definedlist.find(line.gettoken_str(p));
|
||||
else
|
||||
new_s=MacroExists(line.gettoken_str(p));
|
||||
if (tkid == TOK_P_IFNDEF || tkid == TOK_P_IFMACRONDEF)
|
||||
new_s=!new_s;
|
||||
|
||||
if (mod == 0) istrue = istrue || new_s;
|
||||
else istrue = istrue && new_s;
|
||||
|
@ -657,6 +663,33 @@ int CEXEBuild::includeScript(char *f)
|
|||
return PS_OK;
|
||||
}
|
||||
|
||||
// !ifmacro[n]def based on Anders Kjersem's code
|
||||
int CEXEBuild::MacroExists(const char *macroname)
|
||||
{
|
||||
bool mdefined = false;
|
||||
char *m = (char *) m_macros.get();
|
||||
|
||||
while (m && *m)
|
||||
{
|
||||
// check if macroname matches
|
||||
if (!stricmp(m, macroname))
|
||||
return 1;
|
||||
|
||||
// skip macro name
|
||||
m += strlen(m) + 1;
|
||||
|
||||
// skip params
|
||||
while (*m) m += strlen(m) + 1;
|
||||
m++;
|
||||
|
||||
// skip data
|
||||
while (*m) m += strlen(m) + 1;
|
||||
if (m - (char *) m_macros.get() >= m_macros.getlen() - 1) break;
|
||||
m++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CEXEBuild::process_oneline(char *line, char *filename, int linenum)
|
||||
{
|
||||
char *last_filename=curfilename;
|
||||
|
@ -1677,7 +1710,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
|
|||
cur_page->flags &= ~(PF_LICENSE_FORCE_SELECTION | PF_LICENSE_NO_FORCE_SELECTION);
|
||||
|
||||
switch (k) {
|
||||
case 0:
|
||||
case 0:
|
||||
cur_page->dlg_id = IDD_LICENSE;
|
||||
cur_page->flags |= PF_LICENSE_NO_FORCE_SELECTION;
|
||||
break;
|
||||
|
@ -3965,7 +3998,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
|
|||
ent.offsets[1] = line.gettoken_enum(1,"lastused\0listonly\0textonly\0both\0none\0");
|
||||
if (ent.offsets[1] < 0) PRINTHELP();
|
||||
switch (ent.offsets[1]) {
|
||||
case 0:
|
||||
case 0:
|
||||
ent.offsets[1]=8;
|
||||
break;
|
||||
case 1:
|
||||
|
|
|
@ -223,6 +223,8 @@ static tokenType tokenlist[TOK__LAST] =
|
|||
{TOK_P_MACRO,"!macro",1,-1,"macroname [parms ...]"},
|
||||
{TOK_P_MACROEND,"!macroend",0,0,""},
|
||||
{TOK_P_INSERTMACRO,"!insertmacro",1,-1,"macroname [parms ...]"},
|
||||
{TOK_P_IFMACRODEF,"!ifmacrodef",1,-1,"macro [| macro2 [& macro3 [...]]]"},
|
||||
{TOK_P_IFMACRONDEF,"!ifmacrondef",1,-1,"macro [| macro2 [& macro3 [...]]]"},
|
||||
|
||||
{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]"},
|
||||
|
|
|
@ -90,6 +90,8 @@ enum
|
|||
TOK_P_MACRO,
|
||||
TOK_P_MACROEND,
|
||||
TOK_P_INSERTMACRO,
|
||||
TOK_P_IFMACRODEF,
|
||||
TOK_P_IFMACRONDEF,
|
||||
|
||||
// section/function shit
|
||||
TOK_SECTION,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue