diff -r 000000000000 -r d5ce4c64ef88 Contrib/ExperienceUI/Utils/Source/PatchGen.nsi --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Contrib/ExperienceUI/Utils/Source/PatchGen.nsi Tue Oct 16 00:07:41 2007 -0400 @@ -0,0 +1,254 @@ +Name "ExperienceUI Patch Generator" +Caption "$(^Name)" +OutFile ..\PatchGen.exe +InstallDir $DESKTOP\PatchFiles + +Var NAME +Var TYPE +Var START +Var SOURCE +Var TARGET +Var SALT +Var SIG +Var CN +Var CE +Var APPEND +Var IL +Var AP +Var FN + +!include XPUI.nsh + +!include RecFind.nsh + +Page custom io iofin " " +!define XPUI_PAGE_CUSTOMFUNCTION_LEAVE DirWarn +!insertmacro XPUI_PAGE_DIRECTORY +!insertmacro XPUI_PAGE_INSTFILES + +Section + RMDir /r "$INSTDIR" ; don't worry, you're warned first + StrCpy $3 0 ; NumFields count + SetOutPath $INSTDIR + WriteINIStr $INSTDIR\Content.dat "EUI-$TYPE" Name "$NAME" + StrLen $IL $SOURCE + IntOp $IL $IL + 1 + ${RecFindOpen} "$SOURCE" $0 $1 + StrCpy $4 $0 + StrCpy $2 $TARGET$0 + ${RecFindFirst} + IntOp $3 $3 + 1 + SetDetailsPrint both + StrCpy $AP $SOURCE$0 "" $IL + DetailPrint " $$AP: $AP" + Push $AP + Push "\" + Push "_" + Call StrReplace + Pop $FN + StrCpy $FN "$FN_$1" + DetailPrint " $$FN: $FN" + WriteINIStr $INSTDIR\Content.dat "EUI-$TYPE" NumFiles $3 + WriteINIStr $INSTDIR\Content.dat "EUI-$TYPE" "File$START" $1 + WriteINIStr $INSTDIR\Content.dat "EUI-$TYPE" "File$START Path" $2 + WriteINIStr $INSTDIR\Content.dat "EUI-$TYPE" "File$START SName" $FN + StrCmp $SIG 1 "" NoSig + SetDetailsPrint none + GetTempFileName $R0 + CopyFiles $SOURCE$0\$1 $R0 + FileOpen $R1 $R0 a + FileSeek $R1 0 END + FileWrite $R1 $SALT$APPEND + FileClose $R1 + DCryptDll::MD5Hash "FS" $R0 "--End--" + Delete $R0 ; Let's not leave 300 temporary files sitting on your computer... + Pop $R2 + StrCmp $R2 OK GoodMD5 + DetailPrint "WARNING: An error ocurred while trying to get the signature hash" + DetailPrint "DCryptDll returned: $R2" + DetailPrint "The patch/skin will NOT be signed." + StrCpy $SIG 0 + Goto NoSig + GoodMD5: + Pop $R2 + WriteINIStr $INSTDIR\Content.dat "EUI-$TYPE" "File$START Sig" $R2 + SetDetailsPrint Both + NoSig: + IntOp $START $START + 1 + SetDetailsPrint none ;TEMPORARY + CopyFiles $SOURCE$0\$1 $INSTDIR\$FN + ${RecFindNext} + ${RecFindClose} + ; Sign the content file + StrCmp $SIG 1 "" NoSignScript + StrCmp $CN "" NoCN + WriteINIStr $INSTDIR\Content.dat SigInfo PN "Dan Fuhry" + WriteINIStr $INSTDIR\Content.dat SigInfo PE "dandaman32@users.sourceforge.net" + WriteINIStr $INSTDIR\Content.dat SigInfo CN "$CN" + WriteINIStr $INSTDIR\Content.dat SigInfo CE "$CE" + NoCN: + GetTempFileName $R0 + CopyFiles $INSTDIR\Content.dat $R0 + FileOpen $R1 $R0 a + FileSeek $R1 0 END + FileWrite $R1 $SALT + FileClose $R1 + DCryptDll::MD5Hash "FS" $R0 "--End--" + Delete $R0 + Pop $R2 + StrCmp $R2 OK GoodMD5b + DetailPrint "WARNING: An error ocurred while trying to get the signature hash" + DetailPrint "DCryptDll returned: $R2" + DetailPrint "The patch/skin will NOT be signed." + StrCpy $SIG 0 + Goto NoSignScript + GoodMD5b: + Pop $R2 + FileOpen $R0 "$INSTDIR\content.sig" w + FileWrite $R0 $R2 + FileClose $R0 + NoSignScript: + SetAutoClose false + SetDetailsPrint both +SectionEnd + +Function io + SetOutPath $PLUGINSDIR + File patchgen.ini + !insertmacro XPUI_INSTALLOPTIONS_INITDIALOG "patchgen.ini" + !insertmacro XPUI_HEADER_TEXT "Patch Generator" "This program generates a recursive list of files and adds writes it to an ExperienceUI-compatible Content.dat." + GetDlgItem $0 $XPUI_HWND 1214 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1215 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1216 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1217 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1218 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1219 + ShowWindow $0 0 + InstallOptions::show +FunctionEnd + +Function iofin + ReadINIStr $0 $PLUGINSDIR\patchgen.ini "Settings" State + StrCmp $0 13 b + ReadINIStr $0 $PLUGINSDIR\patchgen.ini "Field 1" State + StrCmp $0 1 p + StrCpy $TYPE skin + goto c + b: + ReadINIStr $0 $PLUGINSDIR\patchgen.ini "Field 13" State + StrCmp $0 1 Show + GetDlgItem $0 $XPUI_HWND 1214 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1215 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1216 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1217 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1218 + ShowWindow $0 0 + GetDlgItem $0 $XPUI_HWND 1219 + ShowWindow $0 0 + Abort + Show: + GetDlgItem $0 $XPUI_HWND 1214 + ShowWindow $0 5 + GetDlgItem $0 $XPUI_HWND 1215 + ShowWindow $0 5 + GetDlgItem $0 $XPUI_HWND 1216 + ShowWindow $0 5 + GetDlgItem $0 $XPUI_HWND 1217 + ShowWindow $0 5 + GetDlgItem $0 $XPUI_HWND 1218 + ShowWindow $0 5 + GetDlgItem $0 $XPUI_HWND 1219 + ShowWindow $0 5 + Abort + p: + StrCpy $TYPE patch + c: + ReadINIStr $NAME $PLUGINSDIR\patchgen.ini "Field 3" State + ReadINIStr $START $PLUGINSDIR\patchgen.ini "Field 10" State + ReadINIStr $TARGET $PLUGINSDIR\patchgen.ini "Field 7" State + ReadINIStr $SOURCE $PLUGINSDIR\patchgen.ini "Field 11" State + ReadINIStr $SIG $PLUGINSDIR\patchgen.ini "Field 13" State + ReadINIStr $SALT $PLUGINSDIR\patchgen.ini "Field 14" State + ReadINIStr $CN $PLUGINSDIR\patchgen.ini "Field 17" State + ReadINIStr $CE $PLUGINSDIR\patchgen.ini "Field 18" State + StrCpy $APPEND "" + StrCmp $CN "" +2 + StrCpy $APPEND ";PN=Dan Fuhry;PE=dandaman32@users.sourceforge.net;CN=$CN;CE=$CE" +FunctionEnd + +Function DirWarn + IfFileExists $INSTDIR 0 NoID + MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Caution: the selected target folder already exists. The entire target folder will be erased, recursively. Do you REALLY want to continue?" IDYES +3 + LockWindow off + Abort + NoID: +FunctionEnd + +Function GetParentPath + Exch $0 + Push $1 + Push $2 + StrLen $1 $0 + loop: + IntOp $1 $1 - 1 + StrCpy $2 $0 1 $1 + StrCmp $2 "" error + StrCmp $2 "\" "" Loop + StrCpy $0 $0 $1 + Goto good + error: + StrCpy $0 $0 + good: + Pop $2 + Pop $1 + Exch $0 +FunctionEnd + +Var STR_REPLACE_VAR_0 +Var STR_REPLACE_VAR_1 +Var STR_REPLACE_VAR_2 +Var STR_REPLACE_VAR_3 +Var STR_REPLACE_VAR_4 +Var STR_REPLACE_VAR_5 +Var STR_REPLACE_VAR_6 +Var STR_REPLACE_VAR_7 +Var STR_REPLACE_VAR_8 + +Function StrReplace + Exch $STR_REPLACE_VAR_2 + Exch 1 + Exch $STR_REPLACE_VAR_1 + Exch 2 + Exch $STR_REPLACE_VAR_0 + StrCpy $STR_REPLACE_VAR_3 -1 + StrLen $STR_REPLACE_VAR_4 $STR_REPLACE_VAR_1 + StrLen $STR_REPLACE_VAR_6 $STR_REPLACE_VAR_0 + loop: + IntOp $STR_REPLACE_VAR_3 $STR_REPLACE_VAR_3 + 1 + StrCpy $STR_REPLACE_VAR_5 $STR_REPLACE_VAR_0 $STR_REPLACE_VAR_4 $STR_REPLACE_VAR_3 + StrCmp $STR_REPLACE_VAR_5 $STR_REPLACE_VAR_1 found + StrCmp $STR_REPLACE_VAR_3 $STR_REPLACE_VAR_6 done + Goto loop + found: + StrCpy $STR_REPLACE_VAR_5 $STR_REPLACE_VAR_0 $STR_REPLACE_VAR_3 + IntOp $STR_REPLACE_VAR_8 $STR_REPLACE_VAR_3 + $STR_REPLACE_VAR_4 + StrCpy $STR_REPLACE_VAR_7 $STR_REPLACE_VAR_0 "" $STR_REPLACE_VAR_8 + StrCpy $STR_REPLACE_VAR_0 $STR_REPLACE_VAR_5$STR_REPLACE_VAR_2$STR_REPLACE_VAR_7 + StrLen $STR_REPLACE_VAR_6 $STR_REPLACE_VAR_0 + Goto loop + done: + Pop $STR_REPLACE_VAR_1 + Pop $STR_REPLACE_VAR_1 + Exch $STR_REPLACE_VAR_0 +FunctionEnd + +!insertmacro XPUI_LANGUAGE English \ No newline at end of file