## This Pastebin is in response to Forum Post at: http://forums.winamp.com/showthread.php?t=336325 !define FindINIStr '!insertmacro _FindINIStr' !macro _FindINIStr _OutVar _INIFileName _MatchName _MatchValue _ReadValue ;FindINIStr $0 $INIfilename 'LocalFileName=Language.DevPak' 'Version' Push `${_ReadValue}` Push `${_MatchValue}` Push `${_MatchName}` Push `${_INIFileName}` Call FindINIStr Pop ${_OutVar} !macroend Section ${FindINIStr} $0 $INIFilePath 'LocalFileName' 'Language.DevPak' 'Version' DetailPrint $0 SectionEnd Function FindINIStr # Stack: _INIFileName _MatchName _MatchValue _ReadValue Exch $0 ; r0 _MatchName _MatchValue _ReadValue IfFileExists $0 0 FileNotFound Exch ; _MatchName r0 _MatchValue _ReadValue Exch $1 ; r1 r0 _MatchValue _ReadValue Exch 2 ; _MatchValue r0 r1 _ReadValue Exch $2 ; r2 r0 r1 _ReadValue Exch 3 ; _ReadValue r0 r1 r2 Exch $3 ; r3 r0 r1 r2 Push $4 ; r4 r3 r0 r1 r2 Push $5 ; r5 r4 r3 r0 r1 r2 Push $6 ; r6 r5 r4 r3 r0 r1 r2 Push $7 ; r7 r6 r5 r4 r3 r0 r1 r2 Push $8 ; r8 r7 r6 r5 r4 r3 r0 r1 r2 Push $9 ; r9 r8 r7 r6 r5 r4 r3 r0 r1 r2 ; $0 = _INIFileName ; $1 = _MatchName ; $2 = _MatchValue ; $3 = _ReadValue ; $4 = StrBuffer ; $5 = RC / Max ; $6 = Offset ; $7 = Temp ; $8 = Temp ; $9 = ReturnValue ## Allocate Memory System::Alloc ${NSIS_MAX_STRLEN} Pop $4 ## Get INI Section Names from file System::Call 'Kernel32::GetPrivateProfileSectionNames(i r4,i ${NSIS_MAX_STRLEN},t r0)i .r5' ## WARNING ASSUMTIONS MADE HERE StrCpy $6 0 StrCpy $9 "" Loop: IntCmp $5 $6 NoMoreSections NoMoreSections System::Call '*$4(&v$6,&t${NSIS_MAX_STRLEN} .r7)' StrLen $8 $7 IntOp $6 $6 + $8 IntOp $6 $6 + 1 ReadINIStr $8 $0 $7 $1 StrCmp $8 $2 0 Loop ReadINIStr $9 $0 $7 $3 NoMoreSections: StrCmp $9 "" 0 +2 SetErrors System::Free $4 ## Restore The Stack ;STACK: r9 r8 r7 r6 r5 r4 r3 r0 r1 r2 Exch $9 ; _RetVar r8 r7 r6 r5 r4 r3 r0 r1 r2 Exch 9 ; r2 r8 r7 r6 r5 r4 r3 r0 r1 _RetVar Pop $2 ; r8 r7 r6 r5 r4 r3 r0 r1 _RetVar Pop $8 ; r7 r6 r5 r4 r3 r0 r1 _RetVar Pop $7 ; r6 r5 r4 r3 r0 r1 _RetVar Pop $6 ; r5 r4 r3 r0 r1 _RetVar Pop $5 ; r4 r3 r0 r1 _RetVar Pop $4 ; r3 r0 r1 _RetVar Pop $3 ; r0 r1 _RetVar Pop $0 ; r1 _RetVar Pop $1 ; _RetVar Return FileNotFound: Pop $0 Push "" SetErrors FunctionEnd