Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement