From fbc323c3db1479f2abd922b10cc994542afc2dac Mon Sep 17 00:00:00 2001 From: joostverburg Date: Wed, 21 May 2003 12:24:22 +0000 Subject: [PATCH] VPatch git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2556 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/VPatch/GenPat.exe | Bin 0 -> 68608 bytes Contrib/VPatch/Readme.html | 189 ++++++++++++++++++++++++ Contrib/VPatch/example.nsi | 43 ++++++ Contrib/VPatch/newfile.txt | 6 + Contrib/VPatch/oldfile.txt | 6 + Contrib/VPatch/patch.pat | Bin 0 -> 66 bytes Contrib/VPatch/vpatchdll.c | 273 +++++++++++++++++++++++++++++++++++ Contrib/VPatch/vpatchdll.dsp | 112 ++++++++++++++ Contrib/VPatch/vpatchdll.dsw | 29 ++++ Examples/makensis.nsi | 35 ++++- Plugins/VPatch.dll | Bin 0 -> 4096 bytes 11 files changed, 689 insertions(+), 4 deletions(-) create mode 100644 Contrib/VPatch/GenPat.exe create mode 100644 Contrib/VPatch/Readme.html create mode 100644 Contrib/VPatch/example.nsi create mode 100644 Contrib/VPatch/newfile.txt create mode 100644 Contrib/VPatch/oldfile.txt create mode 100644 Contrib/VPatch/patch.pat create mode 100644 Contrib/VPatch/vpatchdll.c create mode 100644 Contrib/VPatch/vpatchdll.dsp create mode 100644 Contrib/VPatch/vpatchdll.dsw create mode 100644 Plugins/VPatch.dll diff --git a/Contrib/VPatch/GenPat.exe b/Contrib/VPatch/GenPat.exe new file mode 100644 index 0000000000000000000000000000000000000000..4161e8d541ac2333d2b9bb2b3de479a9d6aa671f GIT binary patch literal 68608 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 literal 0 HcmV?d00001 diff --git a/Contrib/VPatch/Readme.html b/Contrib/VPatch/Readme.html new file mode 100644 index 00000000..b174935e --- /dev/null +++ b/Contrib/VPatch/Readme.html @@ -0,0 +1,189 @@ + + + + +VPatch 2 + + + + + + + + + +

+ + +
+ + + + + + + + +

VPatch 2

+

Introduction

+

VPatch allows to create a patch file to update previous versions of +your software. The GenPat utitily generates the patch file. The plug-in can use the +patch to update a file. Using a patch, you can reduce the download size of your +updates, because only the differences between the files are included in the patch +file.

+

How to use

+

Generate the patch file

+

Make sure you have the source file (original version) and the target file (version + to update to). For example, DATA.DTA (currently on user system) and DATA_20.DTA + (version 2.0 of this data file). Now call the command line tool GenPat.exe:

+
GENPAT data.dta data_20.dta data.pat
+

Now, the patch will be generated, this will take some time.

+

Using the /B=(BlockSize) parameter of the GenPat utility (put it after +the filenames), you can use a different block size. A smaller block size may result in +a smaller patch, but the generation will take more time (the default blocksize is 64).

+

Update the file in your installer

+

Use the VPatch plug-in to update a file using a patch file:

+
vpatch::vpatchfile "pathfile.pat" "source.file" "new.file"
+

Check example.nsi for an example.

+

Multiple patches in one file

+

GenPat appends a patch to the file you specified. If there is already a patch +for the same orginal file in the patch file, the patch will be replaced. For example, if you want +to be able to upgrade version 1 and 2 to version 3, you can put a 1 > 3 and 2 > 3 patch in one +file.

+

You can also put patches for different files in one patch file, for example, a +patch from file A version 1 to file A version 2 and a patch from file B version 1 to +file B version 2. Just call the plug-in multiple times with the same patch file. It +will automatically select the right patch (based on the file CRC).

+

Version history

+
    +
  • 2.0 beta 2 +
      +
    • All new algorithm used in the patch generator: much faster (up to + 90%) while using smaller block sizes (higher compression)
    • +
    • Created a NSIS 2 plugin
    • +
    • Works with small files
    • +
    • Replaces existing patch in file if original file CRC is identical
    • +
  • +
+

Credits

+

Written by Koen van de Sande
+C plug-in by Edgewize
+New documentation and example by Joost Verburg

+

License

+
Copyright (C) 2001-2002 Koen van de Sande
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute
+it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; 
+   you must not claim that you wrote the original software.
+   If you use this software in a product, an acknowledgment in the
+   product documentation would be appreciated but is not required.
+2. Altered versions must be plainly marked as such,
+   and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any distribution.
+
+Please note that this version contains the plug-in source only,
+not the source of the patch generator.
+
+
+
+
+ + + \ No newline at end of file diff --git a/Contrib/VPatch/example.nsi b/Contrib/VPatch/example.nsi new file mode 100644 index 00000000..0eeeb24a --- /dev/null +++ b/Contrib/VPatch/example.nsi @@ -0,0 +1,43 @@ +;VPatch example +;Written by Joost Verburg + +;-------------------------------- + +; The name of the installer +Name "VPatch Test" + +; The file to write +OutFile "vpatchtest.exe" + +; The default installation directory +InstallDir "$PROGRAMFILES\VPatch Test" + +; The text to prompt the user to enter a directory +DirText "Choose a folder in which to install the VPatch Test!" + +; Show details +ShowInstDetails show + +;-------------------------------- + +Section "" + + ; Set output path to the installation directory + SetOutPath $INSTDIR + + ; Extract the old file + File oldfile.txt + + ; Extract the patch to the plug-ins folder (temporary) + InitPluginsDir + File /oname=$PLUGINSDIR\patch.pat patch.pat + + ; Update the old file to the new file using the patch + DetailPrint "Updating oldfile.txt using patch..." + vpatch::vpatchfile "$PLUGINSDIR\patch.pat" "$INSTDIR\oldfile.txt" "$INSTDIR\newfile.txt" + + ; Show result + Pop $R0 + DetailPrint "Result: $R0" + +SectionEnd \ No newline at end of file diff --git a/Contrib/VPatch/newfile.txt b/Contrib/VPatch/newfile.txt new file mode 100644 index 00000000..2369a707 --- /dev/null +++ b/Contrib/VPatch/newfile.txt @@ -0,0 +1,6 @@ +*** THIS IS A TEST FILE FOR THE VPATCH EXAMPLE *** +*** COMPILE EXAMPLE.NSI TO TEST *** + +newfile - vpatch + +67890 - GHIJKL \ No newline at end of file diff --git a/Contrib/VPatch/oldfile.txt b/Contrib/VPatch/oldfile.txt new file mode 100644 index 00000000..a378cf30 --- /dev/null +++ b/Contrib/VPatch/oldfile.txt @@ -0,0 +1,6 @@ +*** THIS IS A TEST FILE FOR THE VPATCH EXAMPLE *** +*** COMPILE EXAMPLE.NSI TO TEST *** + +oldfile - vpatch + +12345 - ABCDEF \ No newline at end of file diff --git a/Contrib/VPatch/patch.pat b/Contrib/VPatch/patch.pat new file mode 100644 index 0000000000000000000000000000000000000000..f66782cfddf152c9145b8d03523bd2eb3a39fcfe GIT binary patch literal 66 zcmWFwa13E&U|?VZ;*~Zs9QK#zF=_$XjL|@XfmJClwLC2|CsjdLp{yXWBsqhZiE-PM0IK5+ +#include "..\..\ExDLL\exdll.h" + +int DoPatch(HANDLE hPatch, HANDLE hSource, HANDLE hDest); +void strcopy(char *tgt, const char *src); +char* chop_arg(char **args); + +#define PATCH_SUCCESS 0 +#define PATCH_ERROR 1 +#define PATCH_CORRUPT 2 +#define PATCH_NOMATCH 3 +#define PATCH_UPTODATE 4 +#define FILE_ERR_PATCH 5 +#define FILE_ERR_SOURCE 6 +#define FILE_ERR_DEST 7 + +HINSTANCE g_hInstance; + +HWND g_hwndParent; + +void __declspec(dllexport) vpatchfile(HWND hwndParent, int string_size, + char *variables, stack_t **stacktop) +{ + g_hwndParent=hwndParent; + + EXDLL_INIT(); + + + // note if you want parameters from the stack, pop them off in order. + // i.e. if you are called via exdll::myFunction file.dat poop.dat + // calling popstring() the first time would give you file.dat, + // and the second time would give you poop.dat. + // you should empty the stack of your parameters, and ONLY your + // parameters. + + // do your stuff here + { + static char source[1024]; + static char dest[1024]; + static char exename[1024]; + HANDLE hPatch, hSource, hDest; + int result; + + popstring(exename); + popstring(source); + popstring(dest); + + hPatch = CreateFile(exename, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + if (hPatch == INVALID_HANDLE_VALUE) { + pushstring("Unable to open patch file"); + return; + } + + hSource = CreateFile(source, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + if (hSource == INVALID_HANDLE_VALUE) { + pushstring("Unable to open source file"); + return; + } + + hDest = CreateFile(dest, GENERIC_READ | GENERIC_WRITE, 0, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); + if (hDest == INVALID_HANDLE_VALUE) { + pushstring("Unable to open output file"); + return; + } + + result = DoPatch(hPatch, hSource, hDest); + + CloseHandle(hDest); + CloseHandle(hSource); + CloseHandle(hPatch); + + if ((result != PATCH_SUCCESS)) { + if (result == PATCH_ERROR) + pushstring("An error occured while patching"); + else if (result == PATCH_CORRUPT) + pushstring("Patch data is invalid or corrupt"); + else if (result == PATCH_NOMATCH) + pushstring("No suitable patches were found"); + else if (result == PATCH_UPTODATE) + pushstring("OK, new version already installed"); + DeleteFile(dest); + } else { + pushstring("OK"); + } + + return; + } +} + + + +BOOL WINAPI _DllMainCRTStartup(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) +{ + g_hInstance=hInst; + return TRUE; +} + + + +UINT CRCTable[256]; +BOOL bInitCRC = FALSE; + +_inline void InitCRC() { + int i, j; unsigned long c; + for (c = i = 0; i < 256; c = ++i) { + for (j = 0; j < 8; j++) { + if (c & 1) c = (c>>1) ^ 0xEDB88320; + else c >>= 1; + } + CRCTable[i] = c; + } + bInitCRC = TRUE; +} + +#define CRCBLOCKSIZE 4096 + +BOOL FileCRC(HANDLE hFile, DWORD *crc) { + static BYTE crcblock[CRCBLOCKSIZE]; + DWORD read; + BYTE *p; + + UINT c = 0xFFFFFFFF; + if (bInitCRC == FALSE) + InitCRC(); + + SetFilePointer(hFile, 0, NULL, FILE_BEGIN); + do { + if (ReadFile(hFile, crcblock, CRCBLOCKSIZE, &read, NULL) == FALSE) + return FALSE; + for (p = crcblock; p < crcblock + read; p++) + c = CRCTable[(c & 0xFF) ^ *p] ^ (c >> 8); + } while (read); + + *crc = (c ^ 0xFFFFFFFF); + + return TRUE; +} + +#define BLOCKSIZE 16384 + +int DoPatch(HANDLE hPatch, HANDLE hSource, HANDLE hDest) { + + static char block[BLOCKSIZE]; + + unsigned long temp = 0; + unsigned long read; + unsigned long source_crc = 0; + unsigned long patch_dest_crc = 0; + long patches = 0; + int already_uptodate = 0; + // special 'addition' for the dll: since the patch file is now + // in a seperate file, the VPAT header might be right at the start + // of the file, and a pointer at the end of the file is probably missing + // (because all patch generator versions don't append it, the linker/gui + // does this). + SetFilePointer(hPatch, 0, NULL, FILE_BEGIN); + ReadFile(hPatch, &temp, 4, &read, NULL); + // it's not at the start of file -> there must be a pointer at the end of + // file then + if (temp != 0x54415056) { + SetFilePointer(hPatch, -4, NULL, FILE_END); + ReadFile(hPatch, &temp, 4, &read, NULL); + + SetFilePointer(hPatch, temp, NULL, FILE_BEGIN); + ReadFile(hPatch, &temp, 4, &read, NULL); + if (temp != 0x54415056) + return PATCH_CORRUPT; + } + + if (!FileCRC(hSource, &source_crc)) + return PATCH_ERROR; + + + ReadFile(hPatch, &patches, 4, &read, NULL); + + while (patches--) { + long patch_blocks = 0, patch_size = 0; + unsigned long patch_source_crc = 0; + + ReadFile(hPatch, &patch_blocks, 4, &read, NULL); + ReadFile(hPatch, &patch_source_crc, 4, &read, NULL); + ReadFile(hPatch, &patch_dest_crc, 4, &read, NULL); + ReadFile(hPatch, &patch_size, 4, &read, NULL); + + //added by Koen - check to see if it's already up-to-date for some patch (so + //we can tell NSIS this isn't an error, but we already have the latest version) + if (source_crc == patch_dest_crc) { + already_uptodate = 1; + } + + if (source_crc == patch_source_crc) { + while (patch_blocks--) { + unsigned char blocktype = 0; + unsigned long blocksize = 0; + ReadFile(hPatch, &blocktype, 1, &read, NULL); + + switch (blocktype) { + case 1: + case 2: + case 3: + if (blocktype == 1) + { unsigned char x; blocksize = ReadFile(hPatch,&x,1,&read,NULL)? x:0; } + else if (blocktype == 2) + { unsigned short x; blocksize = ReadFile(hPatch,&x,2,&read,NULL)? x:0; } + else + { unsigned long x; blocksize = ReadFile(hPatch,&x,4,&read,NULL)? x:0; } + + if (!blocksize || !ReadFile(hPatch, &temp, 4, &read, NULL) || read != 4) + return PATCH_CORRUPT; + + SetFilePointer(hSource, temp, 0, FILE_BEGIN); + + do { + ReadFile(hSource, block, min(BLOCKSIZE, blocksize), &read, NULL); + WriteFile(hDest, block, read, &temp, NULL); + if (temp != min(BLOCKSIZE, blocksize)) + return PATCH_ERROR; + blocksize -= temp; + } while (temp); + + break; + + case 5: + case 6: + case 7: + if (blocktype == 5) + { unsigned char x; blocksize = ReadFile(hPatch,&x,1,&read,NULL)? x:0; } + else if (blocktype == 6) + { unsigned short x; blocksize = ReadFile(hPatch,&x,2,&read,NULL)? x:0; } + else + { unsigned long x; blocksize = ReadFile(hPatch,&x,4,&read,NULL)? x:0; } + + if (!blocksize) + return PATCH_CORRUPT; + + do { + ReadFile(hPatch, block, min(BLOCKSIZE, blocksize), &read, NULL); + WriteFile(hDest, block, read, &temp, NULL); + if (temp != min(BLOCKSIZE, blocksize)) + return PATCH_ERROR; + blocksize -= temp; + } while (temp); + + break; + + default: + return PATCH_CORRUPT; + } + } + { + unsigned long dest_crc = 0; + FileCRC(hDest, &dest_crc); + if (dest_crc != patch_dest_crc) + return PATCH_ERROR; + + return PATCH_SUCCESS; + } + } else { + SetFilePointer(hPatch, patch_size, NULL, FILE_CURRENT); + } + } + + //added by Koen - if already up to date, it doesn't matter that we didn't match + if(already_uptodate) { + return PATCH_UPTODATE; + } else { + return PATCH_NOMATCH; + } +} diff --git a/Contrib/VPatch/vpatchdll.dsp b/Contrib/VPatch/vpatchdll.dsp new file mode 100644 index 00000000..c89e8f2f --- /dev/null +++ b/Contrib/VPatch/vpatchdll.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="vpatchdll" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=vpatchdll - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "vpatchdll.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "vpatchdll.mak" CFG="vpatchdll - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "vpatchdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "vpatchdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "vpatchdll - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "vpatchdll_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "vpatchdll_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"_DllMainCRTStartup" /dll /machine:I386 /nodefaultlib /out:"..\..\..\Plugins\VPatch.dll" /opt:nowin98 +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "vpatchdll - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "vpatchdll_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "vpatchdll_EXPORTS" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/VPatch.dll" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "vpatchdll - Win32 Release" +# Name "vpatchdll - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\vpatchdll.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\vpatchdll.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Contrib/VPatch/vpatchdll.dsw b/Contrib/VPatch/vpatchdll.dsw new file mode 100644 index 00000000..0c805517 --- /dev/null +++ b/Contrib/VPatch/vpatchdll.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "vpatchdll"=.\vpatchdll.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Examples/makensis.nsi b/Examples/makensis.nsi index d04e97a8..c443b9a9 100644 --- a/Examples/makensis.nsi +++ b/Examples/makensis.nsi @@ -398,6 +398,18 @@ Section "Dialer" SecContribDialer File ..\Contrib\Dialer\Dialer.txt SectionEnd +Section "VPatch" SecContribVPatch + SectionIn 1 2 + SetOutPath $INSTDIR\Plugins + File ..\Plugins\VPatch.dll + SetOutPath $INSTDIR\Contrib\VPatch + File ..\Contrib\VPatch\Readme.html + File ..\Contrib\VPatch\example.nsi + File ..\Contrib\VPatch\oldfile.txt + File ..\Contrib\VPatch\newfile.txt + File ..\Contrib\VPatch\patch.pat +SectionEnd + SubSectionEnd Section "Zip2Exe" SecContribZ2E @@ -585,6 +597,14 @@ Section "Dialer Source" SecContribDialerS File ..\Contrib\Dialer\dialer.dsw SectionEnd +Section "VPatch Source" SecContribVPatchS + SectionIn 1 + SetOutPath $INSTDIR\Contrib\VPatch + File ..\Contrib\VPatch\vpatchdll.c + File ..\Contrib\VPatch\vpatchdll.dsp + File ..\Contrib\VPatch\vpatchdll.dsw +SectionEnd + SubSectionEnd ; plugins Section "Zip2Exe Source" SecContribZ2ES @@ -677,8 +697,8 @@ Section -post Call AddWorkspaceToStartMenu ; InstallOptions - Push "InstallOptions\install options.html" - Push "InstallOptions readme" + Push "InstallOptions\Readme.html" + Push "InstallOptions Readme" Call AddContribToStartMenu Push "InstallOptions\io.dsw" @@ -694,7 +714,7 @@ Section -post ; Modern UI Push "Modern UI\Readme.html" - Push "Modern UI readme" + Push "Modern UI Readme" Call AddContribToStartMenu ; Splash @@ -761,6 +781,11 @@ Section -post Push System\Source\System.sln Push "Source\System project workspace" Call AddContribToStartMenu + + ; VPatch + Push "VPatch\Readme.html" + Push "VPatch Readme" + Call AddContribToStartMenu nofunshit: !endif @@ -823,6 +848,8 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${SecContribNSISDL} "Plugin that lets you create a web based installer" !insertmacro MUI_DESCRIPTION_TEXT ${SecContribNSISDLS} "Source code to plugin that lets you create a web based installer" !insertmacro MUI_DESCRIPTION_TEXT ${SecContribUiHolderS} "Source code to the UI Holder where you can put your recources in to preview your user interface" + !insertmacro MUI_DESCRIPTION_TEXT ${SecContribVPatch} "Plugin that lets you create patches to upgrade older files" + !insertmacro MUI_DESCRIPTION_TEXT ${SecContribVPatchS} "Source code to plugin that lets you create patches to upgrade older files" !insertmacro MUI_DESCRIPTION_TEXT ${SecSrc} "Source code to NSIS and all related files" !insertmacro MUI_DESCRIPTION_TEXT ${SecSrcNSIS} "Source code to NSIS" !insertmacro MUI_DESCRIPTION_TEXT ${SecSrcContrib} "Source code to user contributed utilities" @@ -892,7 +919,7 @@ Function AddReadmeToStartMenu IfFileExists $INSTDIR\Contrib\$0\Readme.txt 0 done Push $0\Readme.txt create: - Push "$0 readme" + Push "$0 Readme" Call AddContribToStartMenu done: FunctionEnd diff --git a/Plugins/VPatch.dll b/Plugins/VPatch.dll new file mode 100644 index 0000000000000000000000000000000000000000..1063501e7e84c3e5cc6e0c5be419b2799a8ae617 GIT binary patch literal 4096 zcmeHJeQXnD7=PP!P@t?O+03FO-f)Q!$a33VqqAUI-67FU3%9lm?4Y!#?RoZ^+uhLU zRB{Y0XLX5+ABj;j|L{8)1?LwQXGEeHjbu(GZi)M&%c|~=2~}XP&wK4^K_U8&(de5z z_dZ|m^ZcIYeedq=*ffBu5JEN}j1d}wnGCP_JpW@9%rzIkRfAq%aHL_#(tf0&GoI+7 zQi^=D61kO%Mv_TcrM3x_q9v(Bl4`qwr*4&FLet{K3mZ$J*IzboxGoqUn4>-2?tu$T zIWcfC%s(pXK&?54N^`)RHzcBQvgTX}{TxE=78}~o`tg->KI5pSVUcA%Li0cqFKJyc z6QWGnW%AZyKZu6(#T%XU6Jh0v<= z*qc=0HWloTR>OnfBej-`03HT~(AFj;7EvRBl@tRC(`O;f6~hb1psDDFsI6e2D~uJa z7olvEB1m!+p`%3qG!Thf15`1*2whbn{?GmcI$*Rl+6L?IM=mDoecyqY!%SARZ+gz6 zF8Dm>ru3ojr>vjnuGM}>+cFe*`F8w_EC?9~@BHdewF?v=py7a#U%#FYhV+jygIm`S zeL8$ftIoZQF%E@7ShM3g8--j4Tr6^hGF-tQCx3YDwrF-+?VJ16u z0`Ta0nh!GHgp58r&-0;lIG+yBq{HLs@I*RXD55dkBsHJmrv0KV!{z-UJhG!NAN2b= zRi9|(#Z#f8 z&Yd@c8h1>TEjd3x&ZWbn>F_Z;QdS=$3(C^?8PX_`3~t85jcfA{aRst79`2aBOtb*t z(Gp*xy z!MUHCJu!9>zN9dBqeX@3+jrD+(z$avgd9R%sIaiz zY8>J-9n1_|KiKproHJYEF(StZEN2uK}5mN$#w0c3E{Wxa3OrX|c{1P7#e#450zQHw|+ND(LD%2VCnQ?w}pyTnN4z@4DKME0AjkHtr(I ztANu#aER!=d!Vf$u}Vau|kpLOd3pm}@SgS3JPlG)95?IAKS3Ur5$Ebc1 zgY_t}J^)tc`#?yv1_IeI0WRy;;lEYqKnH+60s0z|AmLk^|ckSr-URWYideUshhwD zoo(xpH6;qk|Hx*-E13{ms*~i;5uPI4@5f*1+4I&7(4Vzt?wTrIPzmdo6G>H25PG;O zq$E_qH2-9|Mv}Khq_v6wHSDjFdQ>Hvy4{D+n{#~9hkht|`6P1Px)Zetl28obLrv&v zN$wHWMUpXSLkGGVwr0+D9k=0nuAOOVib>Mh70um|Tb3d6b1&0!kXHfGKte4-YhZ?- zwz+*~oL;ki#m1f;^ndx^(E+%Ir2uI)y^>x{chVv)(>gsszepG8S-PRw)0}TU(lXYP zYuU*>!Mw!mW2Tt}>=O1ub_LtaUdgtxoop9-3#+krvuXB0_Hp)E_7M9e`xEPMU+8Xj Zx4SpGWA2pu4)+fCeeQopOa4nJe+3#NUiSb1 literal 0 HcmV?d00001