Advertisement
Guest User

Untitled

a guest
Jun 6th, 2010
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ReplaceInFile wrapper for testreplace function
  2. ; John T. Haller of PortableApps.com
  3. ; BSD License
  4. ; Requires TextReplace plugin installed in NSIS and !include "TextReplace.nsh" in main nsi
  5. ;
  6. ; Usage: ${ReplaceInFile} SOURCE_FILE SEARCH_TEXT REPLACEMENT
  7. ; or use ReplaceInFileCS for case-sensitive (use when possible, it's faster)
  8. ; No return variable.  Error will be set if unable to do the replacement (invalid file, locked file, etc)
  9.  
  10. ; Modified to suite uTorrentPortable, 2010/06/05 by Gringoloco aka Mark Sikkema
  11.  
  12. !include NewTextReplace.nsh
  13.  
  14. Function ReplaceInFile
  15.     Exch $0 ;REPLACEMENT
  16.     Exch
  17.     Exch $1 ;SEARCH_TEXT
  18.     Exch 2
  19.     Exch $2 ;SOURCE_FILE
  20.     Exch 3
  21.     Exch $3 ;CASE_INSENSITIVE
  22.     Push $4 ;NEW_FILE
  23.     Push $5 ;RETURN_VALUE
  24.    
  25.     StrCpy $4 `$2.OldReplaceInFile`
  26.    
  27.     ${textreplace::ReplaceInFile} "$2" "$4" "$1" "$0" "$3 /C=0" $5
  28.     IntCmp $5 0 StackCleanup ReturnError DeleteFileGuardnNameToOriginal
  29.    
  30.     ReturnError:
  31.         SetErrors
  32.         Goto StackCleanup
  33.    
  34.     DeleteFileGuardnNameToOriginal:
  35.         FileOpen $0 $4 r
  36.             FileSeek $0 0 END $1 ;get file size
  37.             FileSeek $0 0 SET
  38.             System::Alloc /NOUNLOAD $1
  39.                 Pop $5
  40.             System::Call /NOUNLOAD 'kernel32::ReadFile(i r0, i r5, i r1, t.,)'
  41.         FileClose $0
  42.         IntOp $3 $5 + 57 ;delete 'fileguard'
  43.         IntOp $1 $1 - 57 ;shorten file size
  44.         FileOpen $0 $2 w
  45.             FileWriteByte $0 0x64 ;write the 'd'
  46.             System::Call /NOUNLOAD 'kernel32::WriteFile(i r0, i r3, i r1, t.,)'
  47.         FileClose $0
  48.         System::Free $5
  49.         Delete $4
  50.    
  51.     StackCleanup:
  52.         Pop $5
  53.         Pop $4
  54.         Pop $3
  55.         Pop $0
  56.         Pop $1
  57.         Pop $2
  58.  
  59.         ${textreplace::Unload}
  60. FunctionEnd
  61.  
  62. !macro ReplaceInFileCS SOURCE_FILE SEARCH_TEXT REPLACEMENT
  63.     Push `/S=1`
  64.     Push `${SOURCE_FILE}`
  65.     Push `${SEARCH_TEXT}`
  66.     Push `${REPLACEMENT}`
  67.     Call ReplaceInFile
  68. !macroend
  69.  
  70. !macro ReplaceInFile SOURCE_FILE SEARCH_TEXT REPLACEMENT
  71.     Push `/S=0`
  72.     Push `${SOURCE_FILE}`
  73.     Push `${SEARCH_TEXT}`
  74.     Push `${REPLACEMENT}`
  75.     Call ReplaceInFile
  76. !macroend
  77.  
  78. !define ReplaceInFileCS '!insertmacro "ReplaceInFileCS"'
  79.  
  80. !define ReplaceInFile '!insertmacro "ReplaceInFile"'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement