diff -r 000000000000 -r d5ce4c64ef88 Include/NSISArray.nsh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Include/NSISArray.nsh Tue Oct 16 00:07:41 2007 -0400 @@ -0,0 +1,694 @@ +##################################################### +# NSISArray.nsh by Afrow UK +# Array script header for NSISArray plugin by Afrow UK +# For usage, see Docs\NSISArray\Readme.html +# +# Script header v1.3 (RC3) +# Only for use with the same plugin version. +# +# Last modified: 28th April 2005 +# +# + +!ifndef NSISArray +!define NSISArray + +!macro Array Name Size StrLen + + !ifndef Array_ScriptHeaderInited + + !ifdef ArrayCallInstDLL + !define ArrayPluginDLL `${ArrayCallInstDLL}` + !else ifndef ArrayPluginDLL + !define ArrayPluginDLL `NSISArray` + !endif + + !ifndef ArrayValVar + Var ArrayVal + !define ArrayValVar $ArrayVal + !endif + + !ifndef ArrayErrVar + Var ArrayErr + !define ArrayErrVar $ArrayErr + !endif + + !define Array_ScriptHeaderInited + !endif + + !ifndef `Array_${Name}_Declared` + + !ifdef Array_Obj + !undef Array_Obj + !endif + !define Array_Obj `->` + + !ifdef ArrayObj + !undef ArrayObj + !endif + !define ArrayObj `!insertmacro ArrayObj` + + !ifdef Array_Name + !undef Array_Name + !endif + !define Array_Name "${Name}" + + !ifdef Array_Size + !undef Array_Size + !endif + !define Array_Size "${Size}" + + !ifdef Array_StrLen + !undef Array_StrLen + !endif + !define Array_StrLen "${StrLen}" + + !define `Array_${Name}_Declared` + !else + !error "NSISArray: You cannot declare more than one array with the same name." + !endif +!macroend +!define Array `!insertmacro Array` + +!macro ArrayObj Obj + !ifdef Array_Obj + !undef Array_Obj + !endif + !define Array_Obj `${Obj}` +!macroend + +!macro Array_ObjErr Null + !error "NSISArray: You can only set the array object style once." +!macroend + +!macro ArrayFunc Func + + !define `Func_${Func}` + !ifdef Func_Inited \ + | Func_Print \ + | Func_Write \ + | Func_WriteList \ + | Func_WriteListC \ + | Func_Put \ + | Func_Read \ + | Func_ReadToStack \ + | Func_Cut \ + | Func_Push \ + | Func_Pop \ + | Func_Shift \ + | Func_Unshift \ + | Func_Reverse \ + | Func_Sort \ + | Func_Clear \ + | Func_Splice \ + | Func_Swap \ + | Func_Copy \ + | Func_Join \ + | Func_Concat \ + | Func_Exists \ + | Func_ExistsI \ + | Func_Search \ + | Func_SearchI \ + | Func_SizeOf \ + | Func_ReadFirst \ + | Func_ReadNext \ + | Func_ReadClose \ + | Func_Debug \ + | Func_SetSize \ + | Func_ReDim \ + | Func_FreeUnusedMem + + !ifndef Array_Name + !error "NSISArray: Please declare an array before declaring functions." + !else + + !ifndef `Array_FuncDefined_${Array_Name}${Func}` + !define `Array_FuncDefined_${Array_Name}${Func}` + !else + !error "NSISArray: You cannot declare a function more than once." + !endif + + !ifdef ArrayObj + !undef ArrayObj + !endif + !define ArrayObj `!insertmacro Array_ObjErr` + + !ifndef "${Array_Name}${Array_Obj}Init" + !define "${Array_Name}${Array_Obj}Init" `!insertmacro Array_Init "${Array_Name}" "${Array_Size}" "${Array_StrLen}"` + !endif + !ifndef "${Array_Name}${Array_Obj}Delete" + !define "${Array_Name}${Array_Obj}Delete" `!insertmacro Array_Delete "${Array_Name}"` + !endif + + !ifdef ArrayCallInstDLL + !ifdef Func_WriteList + !define "${Array_Name}${Array_Obj}WriteListBegin" `!insertmacro Array_WriteListBegin ` + !define "${Array_Name}${Array_Obj}WriteListItem" `!insertmacro Array_WriteListItem` + !define "${Array_Name}${Array_Obj}WriteListEnd" `!insertmacro Array_WriteListEnd "${Array_Name}"` + !else \ + ifdef Func_Splice + !define "${Array_Name}${Array_Obj}SpliceBegin" `!insertmacro Array_SpliceBegin ` + !define "${Array_Name}${Array_Obj}SpliceItem" `!insertmacro Array_SpliceItem` + !define "${Array_Name}${Array_Obj}SpliceEnd" `!insertmacro Array_SpliceEnd "${Array_Name}"` + !else + !define "${Array_Name}${Array_Obj}${Func}" `!insertmacro Array_${Func} "${Array_Name}"` + !endif + !else + !define "${Array_Name}${Array_Obj}${Func}" `!insertmacro Array_${Func} "${Array_Name}"` + !endif + + !endif + + !else \ + ifdef Func_Init \ + | Func_Delete + !error "NSISArray: You do not need to declare the Init and Delete functions." + !else + !error "NSISArray: An invalid function Name has been declared." + !endif + !undef `Func_${Func}` + +!macroend +!define ArrayFunc `!insertmacro ArrayFunc` + +!macro Array_ErrorStyle ErrorStyle + !define `ErrorStyle_${ErrorStyle}` + !ifdef ErrorStyle_logwin + !define ErrorStyleNum 5 + !else ifdef ErrorStyle_msgbox + !define ErrorStyleNum 3 + !else + !define ErrorStyleNum 1 + !endif + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::ErrorStyle /NOUNLOAD "${ErrorStyleNum}" + !else + Push "${ErrorStyleNum}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD ErrorStyle + !endif + !undef ErrorStyleNum + !undef `ErrorStyle_${ErrorStyle}` +!macroend +!define ArrayErrorStyle `!insertmacro Array_ErrorStyle` + +!macro Array_PopErrVar + Pop "${ArrayErrVar}" + !ifdef ArraySetErrors + StrCmp "${ArrayErrVar}" 0 +2 + SetErrors + !endif +!macroend +!define Array_PopErrVar `!insertmacro Array_PopErrVar` + +!macro Array_Init Name Size StrLen + !ifndef `Array_${Name}_Inited` + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::ErrorStyle /NOUNLOAD "" + Pop "${ArrayErrVar}" + StrCmp "${ArrayErrVar}" 3 +3 + StrCmp "${ArrayErrVar}" 5 +2 + ${ArrayPluginDLL}::ErrorStyle /NOUNLOAD "1" + !else + Push "" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD ErrorStyle + Pop "${ArrayErrVar}" + StrCmp "${ArrayErrVar}" 3 +4 + StrCmp "${ArrayErrVar}" 5 +3 + Push "1" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD ErrorStyle + !endif + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::New /NOUNLOAD "${Name}" "${Size}" "${StrLen}" + !else + Push "${StrLen}" + Push "${Size}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD New + !endif + ${Array_PopErrVar} + !define `Array_${Name}_Inited` + !else + !error "NSISArray: An array can only be initialised once." + !endif +!macroend + +!macro Array_Delete Name + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Delete /NOUNLOAD "${Name}" + ${Array_PopErrVar} + ${ArrayPluginDLL}::ArrayCount /NOUNLOAD + Pop "${ArrayValVar}" + StrCmp "${ArrayValVar}" 0 0 +2 + ${ArrayPluginDLL}::Unload + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Delete + ${Array_PopErrVar} + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD ArrayCount + Pop "${ArrayValVar}" + StrCmp "${ArrayValVar}" 0 0 +2 + CallInstDLL `${ArrayPluginDLL}` Unload + !endif +!macroend + +!macro Array_ReDim Name Size StrLen + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::ReDim /NOUNLOAD "${Name}" "${Size}" "${StrLen}" + !else + Push "${StrLen}" + Push "${Size}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD ReDim + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_FreeUnusedMem Name + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::FreeUnusedMem /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD FreeUnusedMem + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Inited Name JumpInited JumpNotInited + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::ArrayExists /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD ArrayExists + !endif + ${Array_PopErrVar} + Pop "${ArrayValVar}" + StrCmp "${ArrayValVar}" 1 "${JumpInited}" "${JumpNotInited}" +!macroend + +!macro Array_Write Name Index Value + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Write /NOUNLOAD "${Name}" "${Index}" "${Value}" + !else + Push "${Value}" + Push "${Index}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Write + !endif + ${Array_PopErrVar} +!macroend + +!ifndef ArrayCallInstDLL +!macro Array_WriteList Name List + ${ArrayPluginDLL}::WriteList /NOUNLOAD "${Name}" ${List} "/END" + ${Array_PopErrVar} +!macroend +!else +!macro Array_WriteListBegin + Push "/END" +!macroend +!macro Array_WriteListItem Item + Push `${Item}` +!macroend +!macro Array_WriteListEnd Name + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD WriteList + ${Array_PopErrVar} +!macroend +!endif + +!macro Array_WriteListC Name List Char + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::WriteListC /NOUNLOAD "${Name}" "${List}" "${Char}" + !else + Push "${Char}" + Push "${List}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD WriteListC + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Put Name Index Value + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Put /NOUNLOAD "${Name}" "${Index}" "${Value}" + !else + Push "${Value}" + Push "${Index}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Put + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Read Name Var Index + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Read /NOUNLOAD "${Name}" "${Index}" + !else + Push "${Index}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Read + !endif + ${Array_PopErrVar} + Pop "${Var}" +!macroend + +!macro Array_ReadToStack Name IndexA IndexB + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::ReadToStack /NOUNLOAD "${Name}" "${IndexA}" "${IndexB}" + !else + Push "${IndexB}" + Push "${IndexA}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD ReadToStack + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Cut Name Var Index + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Cut /NOUNLOAD "${Name}" "${Index}" + !else + Push "${Index}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Cut + !endif + ${Array_PopErrVar} + Pop "${Var}" +!macroend + +!macro Array_Push Name Value + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Push /NOUNLOAD "${Name}" "${Value}" + !else + Push "${Value}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Push + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Pop Name Var + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Pop /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Pop + !endif + ${Array_PopErrVar} + Pop "${Var}" +!macroend + +!macro Array_Shift Name Value + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Shift /NOUNLOAD "${Name}" "${Value}" + !else + Push "${Value}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Shift + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Unshift Name Var + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Unshift /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Unshift + !endif + ${Array_PopErrVar} + Pop "${Var}" +!macroend + +!macro Array_Reverse Name + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Reverse /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Reverse + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Sort NameA NameB + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Sort /NOUNLOAD "${NameA}" "${NameB}" + !else + Push "${NameB}" + Push "${NameA}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Sort + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Clear Name + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Clear /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Clear + !endif + ${Array_PopErrVar} +!macroend + +!ifndef ArrayCallInstDLL +!macro Array_Splice Name IndexA IndexB List + ${ArrayPluginDLL}::Splice /NOUNLOAD "${Name}" "${IndexA}" "${IndexB}" ${List} "/END" + ${Array_PopErrVar} +!macroend +!else +!macro Array_SpliceBegin IndexA IndexB + !define Array_Splice_IndexA `${IndexA}` + !define Array_Splice_IndexB `${IndexB}` + Push "/END" +!macroend +!macro Array_SpliceItem Item + Push `${Item}` +!macroend +!macro Array_SpliceEnd Name + Push "${Array_Splice_IndexB}" + Push "${Array_Splice_IndexA}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Splice + ${Array_PopErrVar} + !undef Array_Splice_IndexB + !undef Array_Splice_IndexA +!macroend +!endif + +!macro Array_Swap Name IndexA IndexB + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Swap /NOUNLOAD "${Name}" "${IndexA}" "${IndexB}" + !else + Push "${IndexB}" + Push "${IndexA}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Swap + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Copy Name ToArray + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Copy /NOUNLOAD "${Name}" "${ToArray}" + !else + Push "${ToArray}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Copy + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Join Name ToArray + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Join /NOUNLOAD "${Name}" "${ToArray}" + !else + Push "${ToArray}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Join + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_Concat Name Var Chars + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Concat /NOUNLOAD "${Name}" "${Chars}" + !else + Push "${Chars}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Concat + !endif + ${Array_PopErrVar} + Pop "${Var}" +!macroend + +!macro Array_Exists Name Var Value Index + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Exists /NOUNLOAD "${Name}" "${Value}" "${Index}" + !else + Push "${Index}" + Push "${Value}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Exists + !endif + ${Array_PopErrVar} + Pop "${Var}" +!macroend + +!macro Array_ExistsI Name Var Value Index + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::ExistsI /NOUNLOAD "${Name}" "${Value}" "${Index}" + !else + Push "${Index}" + Push "${Value}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD ExistsI + !endif + ${Array_PopErrVar} + Pop "${Var}" +!macroend + +!macro Array_Search Name Var Value Index + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Search /NOUNLOAD "${Name}" "${Value}" "${Index}" + !else + Push "${Index}" + Push "${Value}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Search + !endif + ${Array_PopErrVar} + Pop "${Var}" +!macroend + +!macro Array_SearchI Name Var Value Index + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::SearchI /NOUNLOAD "${Name}" "${Value}" "${Index}" + !else + Push "${Index}" + Push "${Value}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD SearchI + !endif + ${Array_PopErrVar} + Pop "${Var}" +!macroend + +!macro Array_SizeOf Name VarItems VarSize VarStrLen + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::SizeOf /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD SizeOf + !endif + ${Array_PopErrVar} + Pop "${VarStrLen}" + Pop "${VarSize}" + Pop "${VarItems}" +!macroend + +!macro Array_Debug Name + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Debug /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Debug + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_SetSize Name Size + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::SetSize /NOUNLOAD "${Name}" "${Size}" + !else + Push "${Size}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD SetSize + !endif + ${Array_PopErrVar} +!macroend + +!macro Array_ReadFirst Name Handle Var + !tempfile F + !delfile ${F} + !define Local ${__LINE__}-${F} + !undef F + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::SizeOf /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD SizeOf + !endif + ${Array_PopErrVar} + Pop "${Var}" + Pop "${Var}" + Pop "${Var}" + StrCmp "${Var}" 0 0 +4 + StrCpy "${Var}" "" + SetErrors + Goto Done_${Local} + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Read /NOUNLOAD "${Name}" "0" + !else + Push "0" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Read + !endif + ${Array_PopErrVar} + Pop "${Var}" + StrCpy "${Handle}" 1 + Done_${Local}: + !undef Local +!macroend + +!macro Array_ReadNext Name Handle Var + !tempfile F + !delfile ${F} + !define Local ${__LINE__}-${F} + !undef F + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::SizeOf /NOUNLOAD "${Name}" + !else + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD SizeOf + !endif + ${Array_PopErrVar} + Pop "${Var}" + Pop "${Var}" + Pop "${Var}" + StrCmp "${Var}" "${Handle}" 0 +4 + StrCpy "${Var}" "" + SetErrors + Goto Done_${Local} + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Read /NOUNLOAD "${Name}" "${Handle}" + !else + Push "${Handle}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Read + !endif + ${Array_PopErrVar} + Pop "${Var}" + IntOp "${Handle}" "${Handle}" + 1 + Done_${Local}: + !undef Local +!macroend + +!macro Array_ReadClose Name Handle + StrCpy "${Handle}" "" +!macroend + +!macro Array_Print Name Index + !ifndef ArrayCallInstDLL + ${ArrayPluginDLL}::Read /NOUNLOAD "${Name}" "${Index}" + !else + Push "${Index}" + Push "${Name}" + CallInstDLL `${ArrayPluginDLL}` /NOUNLOAD Read + !endif + ${Array_PopErrVar} + Pop "${ArrayValVar}" + DetailPrint "${ArrayValVar}" +!macroend + +!endif \ No newline at end of file