ConfigWrite: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Forgot to put authors in.) |
|||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{ | {{PageAuthor|Instructor}} | ||
{{User:Instructor/Headers/Template}} | |||
== | == Function Description == | ||
<highlight-nsis> | |||
<highlight-nsis> | |||
____________________________________________________________________________ | ____________________________________________________________________________ | ||
ConfigWrite v1. | ConfigWrite v1.2 | ||
____________________________________________________________________________ | ____________________________________________________________________________ | ||
Line 34: | Line 35: | ||
-Error flag if file isn't exist | -Error flag if file isn't exist | ||
-Error flag if file can't be opened | -Error flag if file can't be opened | ||
</highlight-nsis> | |||
Example1: | <b>Example1:</b> | ||
Section | <highlight-nsis>Section | ||
${ConfigWrite} "C:\AUTOEXEC.BAT" "SET winbootdir=" "D:\WINDOWS" $R0 | ${ConfigWrite} "C:\AUTOEXEC.BAT" "SET winbootdir=" "D:\WINDOWS" $R0 | ||
;$R0=CHANGED | ;$R0=CHANGED | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
Example2: | <b>Example2:</b> | ||
Section | <highlight-nsis>Section | ||
${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "30" $R0 | ${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "30" $R0 | ||
;$R0=SAME | ;$R0=SAME | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
Example3: | <b>Example3:</b> | ||
Section | <highlight-nsis>Section | ||
${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "" $R0 | ${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "" $R0 | ||
;$R0=DELETED | ;$R0=DELETED | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
== Function Code == | |||
<highlight-nsis> | |||
Function ConfigWrite | Function ConfigWrite | ||
!define ConfigWrite `!insertmacro ConfigWriteCall` | !define ConfigWrite `!insertmacro ConfigWriteCall` | ||
Line 119: | Line 124: | ||
IntOp $6 $6 - $5 | IntOp $6 $6 - $5 | ||
System::Alloc $6 | System::Alloc /NOUNLOAD $6 | ||
Pop $0 | Pop $0 | ||
FileSeek $3 $5 SET | FileSeek $3 $5 SET | ||
System::Call 'kernel32::ReadFile(i r3, i r0, i $6, t.,)' | System::Call /NOUNLOAD 'kernel32::ReadFile(i r3, i r0, i $6, t.,)' | ||
FileSeek $3 $4 SET | FileSeek $3 $4 SET | ||
StrCmp $2 '' +2 | StrCmp $2 '' +2 | ||
FileWrite $3 '$1$2$\r$\n' | FileWrite $3 '$1$2$\r$\n' | ||
System::Call 'kernel32::WriteFile(i r3, i r0, i $6, t.,)' | System::Call /NOUNLOAD 'kernel32::WriteFile(i r3, i r0, i $6, t.,)' | ||
System::Call 'kernel32::SetEndOfFile(i r3)' | System::Call /NOUNLOAD 'kernel32::SetEndOfFile(i r3)' | ||
System::Free $0 | System::Free $0 | ||
StrCmp $2 '' +3 | StrCmp $2 '' +3 | ||
Line 141: | Line 146: | ||
FileSeek $3 -1 END | FileSeek $3 -1 END | ||
FileRead $3 $4 | FileRead $3 $4 | ||
IfErrors +4 | |||
StrCmp $4 '$\r' +3 | StrCmp $4 '$\r' +3 | ||
StrCmp $4 '$\n' +2 | StrCmp $4 '$\n' +2 | ||
Line 167: | Line 172: | ||
</highlight-nsis> | </highlight-nsis> | ||
[[ | [[Category:Text Files Manipulation Functions]] |
Latest revision as of 13:18, 8 September 2009
Author: Instructor (talk, contrib) |
Page for NSIS 2.07 and below users
You can use the latest version of headers (recommended) or the following function code (put the function code in your script before calling it)
Function Description
____________________________________________________________________________ ConfigWrite v1.2 ____________________________________________________________________________ Write value from entry name in config file. Syntax: ${ConfigWrite} "[File]" "[Entry]" "[Value]" $var "[File]" ; config file ; "[Entry]" ; entry name ; "[Value]" ; value name ; if "" then delete Entry ; $var ; Result: ; $var=CHANGED Value is written ; $var=DELETED Entry is deleted ; $var=ADDED Entry and Value are added ; $var=SAME Entry and Value already exist Note: -Error flag if file isn't exist -Error flag if file can't be opened
Example1:
Section ${ConfigWrite} "C:\AUTOEXEC.BAT" "SET winbootdir=" "D:\WINDOWS" $R0 ;$R0=CHANGED SectionEnd
Example2:
Section ${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "30" $R0 ;$R0=SAME SectionEnd
Example3:
Section ${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "" $R0 ;$R0=DELETED SectionEnd
Function Code
Function ConfigWrite !define ConfigWrite `!insertmacro ConfigWriteCall` !macro ConfigWriteCall _FILE _ENTRY _VALUE _RESULT Push `${_FILE}` Push `${_ENTRY}` Push `${_VALUE}` Call ConfigWrite Pop ${_RESULT} !macroend Exch $2 Exch Exch $1 Exch Exch 2 Exch $0 Exch 2 Push $3 Push $4 Push $5 Push $6 ClearErrors IfFileExists $0 0 error FileOpen $3 $0 a IfErrors error StrLen $0 $1 StrCmp $0 0 0 readnext StrCpy $0 '' goto close readnext: FileRead $3 $4 IfErrors add StrCpy $5 $4 $0 StrCmp $5 $1 0 readnext StrCpy $5 0 IntOp $5 $5 - 1 StrCpy $6 $4 1 $5 StrCmp $6 '$\r' -2 StrCmp $6 '$\n' -3 StrCpy $6 $4 StrCmp $5 -1 +3 IntOp $5 $5 + 1 StrCpy $6 $4 $5 StrCmp $2 '' change StrCmp $6 '$1$2' 0 change StrCpy $0 SAME goto close change: FileSeek $3 0 CUR $5 StrLen $4 $4 IntOp $4 $5 - $4 FileSeek $3 0 END $6 IntOp $6 $6 - $5 System::Alloc /NOUNLOAD $6 Pop $0 FileSeek $3 $5 SET System::Call /NOUNLOAD 'kernel32::ReadFile(i r3, i r0, i $6, t.,)' FileSeek $3 $4 SET StrCmp $2 '' +2 FileWrite $3 '$1$2$\r$\n' System::Call /NOUNLOAD 'kernel32::WriteFile(i r3, i r0, i $6, t.,)' System::Call /NOUNLOAD 'kernel32::SetEndOfFile(i r3)' System::Free $0 StrCmp $2 '' +3 StrCpy $0 CHANGED goto close StrCpy $0 DELETED goto close add: StrCmp $2 '' 0 +3 StrCpy $0 SAME goto close FileSeek $3 -1 END FileRead $3 $4 IfErrors +4 StrCmp $4 '$\r' +3 StrCmp $4 '$\n' +2 FileWrite $3 '$\r$\n' FileWrite $3 '$1$2$\r$\n' StrCpy $0 ADDED close: FileClose $3 goto end error: SetErrors StrCpy $0 '' end: Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Exch $0 FunctionEnd