diff --git a/bazaar/Functions4U/Functions4U.cpp b/bazaar/Functions4U/Functions4U.cpp index 5be0ba9c3..c1dfb3a9e 100644 --- a/bazaar/Functions4U/Functions4U.cpp +++ b/bazaar/Functions4U/Functions4U.cpp @@ -1222,3 +1222,6 @@ Value GetVARIANT(VARIANT &result) } #endif + + + diff --git a/bazaar/Functions4U/Functions4U.h b/bazaar/Functions4U/Functions4U.h index 74267b456..bf29ae95a 100644 --- a/bazaar/Functions4U/Functions4U.h +++ b/bazaar/Functions4U/Functions4U.h @@ -382,5 +382,8 @@ inline void DoEvents() { } */ +String BsGetLastError(); +bool BSPatch(String oldfile, String newfile, String patchfile); +bool BSDiff(String oldfile, String newfile, String patchfile); #endif diff --git a/bazaar/Functions4U/Functions4U.t b/bazaar/Functions4U/Functions4U.t index 2c6c50df3..736e6706e 100644 --- a/bazaar/Functions4U/Functions4U.t +++ b/bazaar/Functions4U/Functions4U.t @@ -35,3 +35,66 @@ esES("No es posible borrar") T_("There was a problem in the copy") esES("Hubo un problema al copiar") + + +// bsdiff.cpp + +T_("File %s does not exist") +esES("Fichero %s no existe") + +T_("Patch file is empty") +esES("Fichero de parche est\303\241 vacio") + +T_("Error opening %s") +esES("Error abriendo %s") + +T_("Not enough memory") +esES("Memoria insuficiente") + +T_("fwrite(%s)") +esES("") + +T_("BZ2_bzWriteOpen, bz2err = %d") +esES("") + +T_("BZ2_bzWrite, bz2err = %d") +esES("") + +T_("BZ2_bzWriteClose, bz2err = %d") +esES("") + +T_("ftello") +esES("") + +T_("fseeko") +esES("") + +T_("fclose") +esES("") + + +// bspatch.cpp + +T_("New file is empty") +esES("Nuevo fichero est\303\241 vacio") + +T_("fopen(%s)") +esES("") + +T_("Corrupt patch") +esES("Parche corrompido") + +T_("fread(%s)") +esES("") + +T_("fclose(%s)") +esES("") + +T_("fseeko(%s, %lld)") +esES("") + +T_("BZ2_bzReadOpen, bz2err = %d") +esES("") + +T_("Impossible to open %s") +esES("Imposible abrir %s") diff --git a/bazaar/Functions4U/Functions4U.upp b/bazaar/Functions4U/Functions4U.upp index 1bc64b889..a13423662 100644 --- a/bazaar/Functions4U/Functions4U.upp +++ b/bazaar/Functions4U/Functions4U.upp @@ -1,9 +1,10 @@ description "Functions and classes for general use\377B255,170,0"; uses - Core; + Core, + plugin\bz2; -library(WIN32) "oleaut32 "; +library(WIN32) oleaut32; file Functions4U.cpp, @@ -13,7 +14,13 @@ file srcdoc.tpp, src.tpp, Functions4U.t, - License.txt; + License.txt, + bsdiffwrapper.h, + BSDiff readonly separator, + plugin/bsadditional.cpp, + plugin/bsdiff.cpp, + plugin/bspatch.cpp, + plugin/Credits.txt; mainconfig "" = ""; diff --git a/bazaar/Functions4U/License.txt b/bazaar/Functions4U/License.txt index ba02f0aa0..578c7bb4f 100644 --- a/bazaar/Functions4U/License.txt +++ b/bazaar/Functions4U/License.txt @@ -19,3 +19,4 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSE AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/bazaar/Functions4U/bsdiffwrapper.h b/bazaar/Functions4U/bsdiffwrapper.h new file mode 100644 index 000000000..17c30af1b --- /dev/null +++ b/bazaar/Functions4U/bsdiffwrapper.h @@ -0,0 +1,32 @@ +#ifndef _Functions4U_bsdiffwrapper_h_ +#define _Functions4U_bsdiffwrapper_h_ + + +#define ftello ftell +#define fseeko fseek + +extern String errMsg; +String BsGetLastError(); +bool Err(String str); + +#if defined(_WINDOWS_) || defined(__MINGW32__) + #include + #include + #include + + #define lseek _lseek + #define read _read + #define write _write + #define close _close + typedef unsigned char u_char; + + #if defined(__MINGW32__) + #define _SH_DENYNO 0x40 + #else + typedef long pid_t; + typedef signed int ssize_t; + #endif +#endif + + +#endif diff --git a/bazaar/Functions4U/init b/bazaar/Functions4U/init index 5e96db780..0a5018345 100644 --- a/bazaar/Functions4U/init +++ b/bazaar/Functions4U/init @@ -1,4 +1,5 @@ #ifndef _Functions4U_icpp_init_stub #define _Functions4U_icpp_init_stub #include "Core/init" +#include "plugin\bz2/init" #endif diff --git a/bazaar/Functions4U/plugin/Credits.txt b/bazaar/Functions4U/plugin/Credits.txt new file mode 100644 index 000000000..6776c680d --- /dev/null +++ b/bazaar/Functions4U/plugin/Credits.txt @@ -0,0 +1,38 @@ +Binary diff/patch utility version 4.3, written by +Copyright 2003-2005 Colin Percival + +This is a quick native Win32-Port by +Andreas John + +------------------------------------------------------------------------- +Quick overview from the homepage of these tools: +http://www.daemonology.net/bsdiff/ + +Binary diff/patch utility +bsdiff and bspatch are tools for building and applying patches to binary +files. By using suffix sorting (specifically, Larsson and Sadakane's +qsufsort) and taking advantage of how executable files change, bsdiff +routinely produces binary patches 50-80% smaller than those produced by +Xdelta, and 15% smaller than those produced by .RTPatch (a $2750/seat +commercial patch tool). + +These programs were originally named bdiff and bpatch, but the large +number of other programs using those names lead to confusion; I'm not +sure if the "bs" in refers to "binary software" (because bsdiff produces +exceptionally small patches for executable files) or "bytewise +subtraction" (which is the key to how well it performs). Feel free to +offer other suggestions. + +bsdiff and bspatch use bzip2; by default they assume it is in /usr/bin. + +bsdiff is quite memory-hungry. It requires max(17*n,9*n+m)+O(1) bytes of +memory, where n is the size of the old file and m is the size of the new +file. bspatch requires n+m+O(1) bytes. + +bsdiff runs in O((n+m) log n) time; on a 200MHz Pentium Pro, building a +binary patch for a 4MB file takes about 90 seconds. bspatch runs in +O(n+m) time; on the same machine, applying that patch takes about two +seconds. + +Providing that off_t is defined properly, bsdiff and bspatch support +files of up to 2^61-1 = 2Ei-1 bytes. \ No newline at end of file diff --git a/bazaar/Functions4U/plugin/bsadditional.cpp b/bazaar/Functions4U/plugin/bsadditional.cpp new file mode 100644 index 000000000..fbbe5277d --- /dev/null +++ b/bazaar/Functions4U/plugin/bsadditional.cpp @@ -0,0 +1,18 @@ +#include + +using namespace Upp; + +String errMsg; + +#include "../bsdiffwrapper.h" + +String BsGetLastError() { + return errMsg; +} + +bool Err(String str) { + errMsg = str; + return false; +} + + diff --git a/bazaar/Functions4U/plugin/bsdiff.cpp b/bazaar/Functions4U/plugin/bsdiff.cpp new file mode 100644 index 000000000..78a49d5e7 --- /dev/null +++ b/bazaar/Functions4U/plugin/bsdiff.cpp @@ -0,0 +1,446 @@ +/*- + * Copyright 2003-2005 Colin Percival + * All rights reserved + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted providing that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#if 0 +__FBSDID("$FreeBSD: src/usr.bin/bsdiff/bsdiff/bsdiff.c,v 1.1 2005/08/06 01:59:05 cperciva Exp $"); +#endif + +#include "bzlib.h" +#include +#include +#include +#include +#include +#include + +//#include +//#include + +#include + +using namespace Upp; + +#include "../bsdiffwrapper.h" + + +#define MIN(x,y) (((x)<(y)) ? (x) : (y)) + +static void split(off_t *I,off_t *V,off_t start,off_t len,off_t h) +{ + off_t i,j,k,x,tmp,jj,kk; + + if(len<16) { + for(k=start;kstart) split(I,V,start,jj-start,h); + + for(i=0;ikk) split(I,V,kk,start+len-kk,h); +} + +static void qsufsort(off_t *I,off_t *V,u_char *old,off_t oldsize) +{ + off_t buckets[256]; + off_t i,h,len; + + for(i=0;i<256;i++) buckets[i]=0; + for(i=0;i0;i--) buckets[i]=buckets[i-1]; + buckets[0]=0; + + for(i=0;iy) { + *pos=I[st]; + return x; + } else { + *pos=I[en]; + return y; + } + }; + + x=st+(en-st)/2; + if(memcmp(old+I[x],nnew,MIN(oldsize-I[x],newsize))<0) { + return search(I,old,oldsize,nnew,newsize,x,en,pos); + } else { + return search(I,old,oldsize,nnew,newsize,st,x,pos); + }; +} + +static void offtout(off_t x,u_char *buf) +{ + off_t y; + + if(x<0) y=-x; else y=x; + + buf[0]=y%256;y-=buf[0]; + y=y/256;buf[1]=y%256;y-=buf[1]; + y=y/256;buf[2]=y%256;y-=buf[2]; + y=y/256;buf[3]=y%256;y-=buf[3]; + y=y/256;buf[4]=y%256;y-=buf[4]; + y=y/256;buf[5]=y%256;y-=buf[5]; + y=y/256;buf[6]=y%256;y-=buf[6]; + y=y/256;buf[7]=y%256; + + if(x<0) buf[7]|=0x80; +} + +bool BSDiff(String oldfile, String newfile, String patchfile) +{ + if (!FileExists(oldfile)) + return Err(Format(t_("File %s does not exist"), oldfile)); + if (!FileExists(newfile)) + return Err(Format(t_("File %s does not exist"), newfile)); + if (patchfile.IsEmpty()) + return Err(t_("Patch file is empty")); + + int fd; + u_char *old,*nnew; + off_t oldsize,newsize; + off_t *I,*V; + off_t scan,pos,len; + off_t lastscan,lastpos,lastoffset; + off_t oldscore,scsc; + off_t s,Sf,lenf,Sb,lenb; + off_t overlap,Ss,lens; + off_t i; + off_t dblen,eblen; + u_char *db,*eb; + u_char buf[8]; + u_char header[32]; + FILE * pf; + BZFILE * pfbz2; + int bz2err; + + //if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]); + + /* Allocate oldsize+1 bytes instead of oldsize bytes to ensure + that we never try to malloc(0) and get a NULL pointer */ + if( +#ifdef PLATFORM_POSIX + ((fd = open(oldfile, O_RDONLY, 0)) < 0) || +#else + ((fd = _wsopen(oldfile.ToWString(), O_RDONLY|O_BINARY, _SH_DENYNO, 0)) < 0) || +#endif + ((oldsize=lseek(fd,0,SEEK_END))==-1) || + ((old=(u_char *)malloc(oldsize+1))==NULL) || + (lseek(fd,0,SEEK_SET)!=0)) + return Err(Format(t_("Error opening %s"), oldfile)); + + // read() reads in chunks + int r = oldsize; + while (r > 0 && (i = read(fd,old+oldsize-r,r))>0) + r -=i ; + if (r > 0 || close(fd) == -1) + return Err(Format(t_("Error opening %s"), oldfile)); + + if(((I=(off_t *)malloc((oldsize+1)*sizeof(off_t)))==NULL) || + ((V=(off_t *)malloc((oldsize+1)*sizeof(off_t)))==NULL)) Err(t_("Not enough memory")); + + qsufsort(I,V,old,oldsize); + + free(V); + + /* Allocate newsize+1 bytes instead of newsize bytes to ensure + that we never try to malloc(0) and get a NULL pointer */ + if( +#ifdef PLATFORM_POSIX + ((fd = open(newfile, O_RDONLY, 0)) < 0) || +#else + ((fd = _wsopen(newfile.ToWString(), O_RDONLY|O_BINARY, _SH_DENYNO, 0)) < 0) || +#endif + ((newsize=lseek(fd,0,SEEK_END))==-1) || + ((nnew=(u_char *)malloc(newsize+1))==NULL) || + (lseek(fd,0,SEEK_SET)!=0)) + return Err(Format(t_("Error opening %s"), newfile)); + + // read() reads in chunks + r = newsize; + while (r > 0 && (i = read(fd, nnew+newsize-r,r))>0) + r -= i; + if (r > 0 || close(fd)==-1) + return Err(Format(t_("Error opening %s"), newfile)); + + if(((db=(u_char *)malloc(newsize+1))==NULL) || + ((eb=(u_char *)malloc(newsize+1))==NULL)) Err(t_("Not enough memory")); + dblen=0; + eblen=0; + + /* Create the patch file */ + if ( +#ifdef PLATFORM_POSIX + (pf = fopen(patchfile, "w")) == NULL) +#else + (pf = _wfopen(patchfile.ToWString(), L"wb")) == NULL) +#endif + return Err(Format(t_("Error opening %s"), patchfile)); + + /* Header is + 0 8 "BSDIFF40" + 8 8 length of bzip2ed ctrl block + 16 8 length of bzip2ed diff block + 24 8 length of new file */ + /* File is + 0 32 Header + 32 ?? Bzip2ed ctrl block + ?? ?? Bzip2ed diff block + ?? ?? Bzip2ed extra block */ + memcpy(header,"BSDIFF40",8); + offtout(0, header + 8); + offtout(0, header + 16); + offtout(newsize, header + 24); + if (fwrite(header, 32, 1, pf) != 1) + return Err(Format(t_("fwrite(%s)"), patchfile)); + + /* Compute the differences, writing ctrl as we go */ + if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL) + return Err(Format(t_("BZ2_bzWriteOpen, bz2err = %d"), bz2err)); + scan=0;len=0; + lastscan=0;lastpos=0;lastoffset=0; + while(scanoldscore+8)) break; + + if((scan+lastoffsetSf*2-lenf) { Sf=s; lenf=i; }; + }; + + lenb=0; + if(scan=lastscan+i)&&(pos>=i);i++) { + if(old[pos-i]==nnew[scan-i]) s++; + if(s*2-i>Sb*2-lenb) { Sb=s; lenb=i; }; + }; + }; + + if(lastscan+lenf>scan-lenb) { + overlap=(lastscan+lenf)-(scan-lenb); + s=0;Ss=0;lens=0; + for(i=0;iSs) { Ss=s; lens=i+1; }; + }; + + lenf+=lens-overlap; + lenb-=lens; + }; + + for(i=0;i +#include +#include +#include +#include +#include + +//#include +//#include + +#include + +using namespace Upp; + +#include "../bsdiffwrapper.h" + + +static off_t offtin(u_char *buf) +{ + off_t y; + + y=buf[7]&0x7F; + y=y*256;y+=buf[6]; + y=y*256;y+=buf[5]; + y=y*256;y+=buf[4]; + y=y*256;y+=buf[3]; + y=y*256;y+=buf[2]; + y=y*256;y+=buf[1]; + y=y*256;y+=buf[0]; + + if(buf[7]&0x80) y=-y; + + return y; +} + +bool BSPatch(String oldfile, String newfile, String patchfile) +{ + if (!FileExists(oldfile)) + return Err(Format(t_("File %s does not exist"), oldfile)); + if (!FileExists(patchfile)) + return Err(Format(t_("File %s does not exist"), oldfile)); + if (newfile.IsEmpty()) + return Err(t_("New file is empty")); + + FILE * f, * cpf, * dpf, * epf; + BZFILE * cpfbz2, * dpfbz2, * epfbz2; + int cbz2err, dbz2err, ebz2err; + int fd; + ssize_t oldsize,newsize; + ssize_t bzctrllen,bzdatalen; + u_char header[32],buf[8]; + u_char *old, *nnew; + off_t oldpos,newpos; + off_t ctrl[3]; + off_t lenread; + off_t i; + + //if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]); + + /* Open patch file */ + if ( +#ifdef PLATFORM_POSIX + (f = fopen(patchfile, "r")) == NULL) +#else + (f = _wfopen(patchfile.ToWString(), L"rb")) == NULL) +#endif + return Err(Format(t_("fopen(%s)"), patchfile)); + + /* + File format: + 0 8 "BSDIFF40" + 8 8 X + 16 8 Y + 24 8 sizeof(newfile) + 32 X bzip2(control block) + 32+X Y bzip2(diff block) + 32+X+Y ??? bzip2(extra block) + with control block a set of triples (x,y,z) meaning "add x bytes + from oldfile to x bytes from the diff block; copy y bytes from the + extra block; seek forwards in oldfile by z bytes". + */ + + /* Read header */ + if (fread(header, 1, 32, f) < 32) { + if (feof(f)) + return Err(t_("Corrupt patch")); + return Err(Format(t_("fread(%s)"), patchfile)); + } + + /* Check for appropriate magic */ + if (memcmp(header, "BSDIFF40", 8) != 0) + return Err(t_("Corrupt patch")); + + /* Read lengths from header */ + bzctrllen=offtin(header+8); + bzdatalen=offtin(header+16); + newsize=offtin(header+24); + if((bzctrllen<0) || (bzdatalen<0) || (newsize<0)) + return Err(t_("Corrupt patch")); + + /* Close patch file and re-open it via libbzip2 at the right places */ + if (fclose(f)) + return Err(Format(t_("fclose(%s)"), /*argv[3]*/patchfile)); + if ( +#ifdef PLATFORM_POSIX + (cpf = fopen(patchfile, "r")) == NULL) +#else + (cpf = _wfopen(patchfile.ToWString(), L"rb")) == NULL) +#endif + return Err(Format(t_("fopen(%s)"), patchfile)); + if (fseeko(cpf, 32, SEEK_SET)) + return Err(Format(t_("fseeko(%s, %lld)"), patchfile, + (long long)32)); + if ((cpfbz2 = BZ2_bzReadOpen(&cbz2err, cpf, 0, 0, NULL, 0)) == NULL) + return Err(Format(t_("BZ2_bzReadOpen, bz2err = %d"), cbz2err)); + if ( +#ifdef PLATFORM_POSIX + (dpf = fopen(patchfile, "r")) == NULL) +#else + (dpf = _wfopen(patchfile.ToWString(), L"rb")) == NULL) +#endif + return Err(Format(t_("fopen(%s)"), patchfile)); + if (fseeko(dpf, 32 + bzctrllen, SEEK_SET)) + return Err(Format(t_("fseeko(%s, %lld)"), patchfile, + (long long)(32 + bzctrllen))); + if ((dpfbz2 = BZ2_bzReadOpen(&dbz2err, dpf, 0, 0, NULL, 0)) == NULL) + return Err(Format(t_("BZ2_bzReadOpen, bz2err = %d"), dbz2err)); + if ( +#ifdef PLATFORM_POSIX + (epf = fopen(patchfile, "r")) == NULL) +#else + (epf = _wfopen(patchfile.ToWString(), L"rb")) == NULL) +#endif + return Err(Format(t_("fopen(%s)"), patchfile)); + if (fseeko(epf, 32 + bzctrllen + bzdatalen, SEEK_SET)) + return Err(Format(t_("fseeko(%s, %lld)"), patchfile, + (long long)(32 + bzctrllen + bzdatalen))); + if ((epfbz2 = BZ2_bzReadOpen(&ebz2err, epf, 0, 0, NULL, 0)) == NULL) + return Err(Format(t_("BZ2_bzReadOpen, bz2err = %d"), ebz2err)); + + if( +#ifdef PLATFORM_POSIX + ((fd = open(oldfile, O_RDONLY, 0)) < 0) || +#else + ((fd = _wsopen(oldfile.ToWString(), O_RDONLY|O_BINARY, _SH_DENYNO, 0)) < 0) || +#endif + ((oldsize=lseek(fd,0,SEEK_END))==-1) || + ((old=(u_char *)malloc(oldsize+1))==NULL) || + (lseek(fd,0,SEEK_SET)!=0)) + Err(Format(t_("Error opening %s"), oldfile)); + int r = oldsize; + while(r>0 && (i=read(fd,old+oldsize-r,r))>0) + r -= i; + if (r>0 || close(fd)==-1) + Err(Format(t_("Error opening %s"), oldfile)); + + if((nnew=(u_char *)malloc(newsize+1))==NULL) + return Err(t_("Not enough memory")); + + oldpos=0;newpos=0; + while(newposnewsize) + return Err(t_("Corrupt patch")); + + /* Read diff string */ + lenread = BZ2_bzRead(&dbz2err, dpfbz2, nnew + newpos, ctrl[0]); + if ((lenread < ctrl[0]) || + ((dbz2err != BZ_OK) && (dbz2err != BZ_STREAM_END))) + return Err(t_("Corrupt patch")); + + /* Add old data to diff string */ + for(i=0;i=0) && (oldpos+inewsize) + return Err(t_("Corrupt patch")); + + /* Read extra string */ + lenread = BZ2_bzRead(&ebz2err, epfbz2, nnew + newpos, ctrl[1]); + if ((lenread < ctrl[1]) || + ((ebz2err != BZ_OK) && (ebz2err != BZ_STREAM_END))) + return Err(t_("Corrupt patch")); + + /* Adjust pointers */ + newpos+=ctrl[1]; + oldpos+=ctrl[2]; + }; + + /* Clean up the bzip2 reads */ + BZ2_bzReadClose(&cbz2err, cpfbz2); + BZ2_bzReadClose(&dbz2err, dpfbz2); + BZ2_bzReadClose(&ebz2err, epfbz2); + if (fclose(cpf) || fclose(dpf) || fclose(epf)) + return Err(Format(t_("fclose(%s)"), patchfile)); + + /* Write the new file */ + if( +#ifdef PLATFORM_POSIX + ((fd = open(newfile, O_CREAT|O_TRUNC|O_WRONLY, 0666)) < 0) || +#else + ((fd = _wsopen(newfile.ToWString(), O_CREAT|O_TRUNC|O_WRONLY|O_BINARY, _SH_DENYNO, _S_IREAD | _S_IWRITE)) < 0) || +#endif + (write(fd,nnew,newsize)!=newsize) || (close(fd)==-1)) + return Err(Format(t_("Impossible to open %s"), newfile)); + + free(nnew); + free(old); + + return 1; +} diff --git a/bazaar/Functions4U/plugin/bzlib.h b/bazaar/Functions4U/plugin/bzlib.h new file mode 100644 index 000000000..6a004f671 --- /dev/null +++ b/bazaar/Functions4U/plugin/bzlib.h @@ -0,0 +1,321 @@ + +/*-------------------------------------------------------------*/ +/*--- Public header file for the library. ---*/ +/*--- bzlib.h ---*/ +/*-------------------------------------------------------------*/ + +/*-- + This file is a part of bzip2 and/or libbzip2, a program and + library for lossless, block-sorting data compression. + + Copyright (C) 1996-2002 Julian R Seward. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. 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. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Julian Seward, Cambridge, UK. + jseward@acm.org + bzip2/libbzip2 version 1.0 of 21 March 2000 + + This program is based on (at least) the work of: + Mike Burrows + David Wheeler + Peter Fenwick + Alistair Moffat + Radford Neal + Ian H. Witten + Robert Sedgewick + Jon L. Bentley + + For more information on these sources, see the manual. +--*/ + + +#ifndef _BZLIB_H +#define _BZLIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define BZ_RUN 0 +#define BZ_FLUSH 1 +#define BZ_FINISH 2 + +#define BZ_OK 0 +#define BZ_RUN_OK 1 +#define BZ_FLUSH_OK 2 +#define BZ_FINISH_OK 3 +#define BZ_STREAM_END 4 +#define BZ_SEQUENCE_ERROR (-1) +#define BZ_PARAM_ERROR (-2) +#define BZ_MEM_ERROR (-3) +#define BZ_DATA_ERROR (-4) +#define BZ_DATA_ERROR_MAGIC (-5) +#define BZ_IO_ERROR (-6) +#define BZ_UNEXPECTED_EOF (-7) +#define BZ_OUTBUFF_FULL (-8) +#define BZ_CONFIG_ERROR (-9) + +typedef + struct { + char *next_in; + unsigned int avail_in; + unsigned int total_in_lo32; + unsigned int total_in_hi32; + + char *next_out; + unsigned int avail_out; + unsigned int total_out_lo32; + unsigned int total_out_hi32; + + void *state; + + void *(*bzalloc)(void *,int,int); + void (*bzfree)(void *,void *); + void *opaque; + } + bz_stream; + + +#ifndef BZ_IMPORT +#define BZ_EXPORT +#endif + +/* Need a definitition for FILE */ +#include + +#ifdef _WIN32 +# include +# ifdef small + /* windows.h define small to char */ +# undef small +# endif +# ifdef BZ_EXPORT +# define BZ_API(func) WINAPI func +# define BZ_EXTERN extern +# else + /* import windows dll dynamically */ +# define BZ_API(func) (WINAPI * func) +# define BZ_EXTERN +# endif +#else +# define BZ_API(func) func +# define BZ_EXTERN extern +#endif + + +/*-- Core (low-level) library functions --*/ + +BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( + bz_stream* strm, + int blockSize100k, + int verbosity, + int workFactor + ); + +BZ_EXTERN int BZ_API(BZ2_bzCompress) ( + bz_stream* strm, + int action + ); + +BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( + bz_stream* strm + ); + +BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( + bz_stream *strm, + int verbosity, + int small + ); + +BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( + bz_stream* strm + ); + +BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( + bz_stream *strm + ); + + + +/*-- High(er) level library functions --*/ + +#ifndef BZ_NO_STDIO +#define BZ_MAX_UNUSED 5000 + +typedef void BZFILE; + +BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( + int* bzerror, + FILE* f, + int verbosity, + int small, + void* unused, + int nUnused + ); + +BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( + int* bzerror, + BZFILE* b + ); + +BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( + int* bzerror, + BZFILE* b, + void** unused, + int* nUnused + ); + +BZ_EXTERN int BZ_API(BZ2_bzRead) ( + int* bzerror, + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( + int* bzerror, + FILE* f, + int blockSize100k, + int verbosity, + int workFactor + ); + +BZ_EXTERN void BZ_API(BZ2_bzWrite) ( + int* bzerror, + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( + int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in, + unsigned int* nbytes_out + ); + +BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( + int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in_lo32, + unsigned int* nbytes_in_hi32, + unsigned int* nbytes_out_lo32, + unsigned int* nbytes_out_hi32 + ); +#endif + + +/*-- Utility functions --*/ + +BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( + char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int blockSize100k, + int verbosity, + int workFactor + ); + +BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( + char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int small, + int verbosity + ); + + +/*-- + Code contributed by Yoshioka Tsuneo + (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.jp), + to support better zlib compatibility. + This code is not _officially_ part of libbzip2 (yet); + I haven't tested it, documented it, or considered the + threading-safeness of it. + If this code breaks, please contact both Yoshioka and me. +--*/ + +BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ( + void + ); + +#ifndef BZ_NO_STDIO +BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) ( + const char *path, + const char *mode + ); + +BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) ( + int fd, + const char *mode + ); + +BZ_EXTERN int BZ_API(BZ2_bzread) ( + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN int BZ_API(BZ2_bzwrite) ( + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN int BZ_API(BZ2_bzflush) ( + BZFILE* b + ); + +BZ_EXTERN void BZ_API(BZ2_bzclose) ( + BZFILE* b + ); + +BZ_EXTERN const char * BZ_API(BZ2_bzerror) ( + BZFILE *b, + int *errnum + ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif + +/*-------------------------------------------------------------*/ +/*--- end bzlib.h ---*/ +/*-------------------------------------------------------------*/ diff --git a/bazaar/Functions4U/src.tpp/Functions4U$en-us.tpp b/bazaar/Functions4U/src.tpp/Functions4U$en-us.tpp index 8dcd5aae5..6eab8af31 100644 --- a/bazaar/Functions4U/src.tpp/Functions4U$en-us.tpp +++ b/bazaar/Functions4U/src.tpp/Functions4U$en-us.tpp @@ -1,4 +1,4 @@ -topic "Functions reference"; +topic "Functions4U. Reference"; [2 $$0,0#00000000000000000000000000000000:Default] [i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class] [l288;2 $$2,0#27521748481378242620020725143825:desc] diff --git a/bazaar/Functions4U/src.tpp/Functions4U$en-us.tppi b/bazaar/Functions4U/src.tpp/Functions4U$en-us.tppi index d6248aa39..bcd641c14 100644 --- a/bazaar/Functions4U/src.tpp/Functions4U$en-us.tppi +++ b/bazaar/Functions4U/src.tpp/Functions4U$en-us.tppi @@ -1,4 +1,4 @@ -TITLE("Functions reference") +TITLE("Functions4U. Reference") COMPRESSED 120,156,212,186,249,83,163,105,122,32,248,175,16,246,184,163,218,174,174,205,179,78,207,132,189,227,233,177,99,109,183,163,171,189,251,67,71,118,39,149,73,85,49,206,76,114,129,236,118,143,237,9,157,232,190,208,137,64,232,150,16,135,14,36,208,9,186,37,36,14,73,156,66,232,6,116,128,208,129,64,232,214,126,18,144,73,86,101,102,101,121,118,34,118,51,50,144,190,239,125,158,231,125,174,247,185,94,253,250,78,215,127,248,15,183,62,188,245,199,183,126,224,223,231,127,213,243,117,247,139,39,131,15,126,221,123,239,222,167,95,116,223,185,255,197,63,253,31,191,248,236,139,54,254,109,0,255,238,39,183,239,126,122,255,238,237,123,119,62,6,254,220,190,123,251,206,253,59,119,239,221,254,244,206,103,247,62,189,123,247,211,91,159,63,122,210,61,48,240,224,215,79,238,124,250,105,7,233,14,128,116,231,147,251,119,110,127,114,239,211,123,159,222,190,251,201,167,119,0,220,59,183,110,221,185,245,201,157,251,183,239,221,253,244,206,253,207,31,247,12,60,122,240,235,91,0, 248,93,0,252,179,143,239,126,118,235,246,173,91,159,220,190,125,235,238,157,79,110,221,189,127,239,246,237,187,119,0,18,119,62,185,115,251,214,253,207,123,158,61,126,240,235,191,254,248,139,54,194,189,182,80,247,63,6,88,255,24,160,118,239,222,45,128,122,27,237,222,221,219,119,111,221,185,123,255,246,103,247,63,254,252,171,158,111,122,159,189,73,164,251,63,40,210,39,183,62,239,29,236,121,122,37,81,247,189,47,254,244,47,238,127,113,27,64,253,248,195,143,255,248,19,96,219,123,247,129,205,62,107,75,116,23,64,187,115,231,227,251,159,221,190,127,15,96,233,222,173,59,159,247,247,252,223,47,122,251,123,158,246,60,27,188,162,208,123,251,246,157,219,95,124,117,251,147,47,0,22,254,199,255,248,31,31,221,190,119,235,82,83,159,0,188,220,190,5,240,125,231,54,240,14,144,227,147,219,247,63,187,245,217,253,79,111,127,122,235,238,39,247,238,220,255,4,16,253,121,119,127,247,211,43,73,190,186,119,231,139,43,57,62,253,240,211,63,254,248,246,199,128,70,111,125, diff --git a/bazaar/Functions4U/src.tpp/all.i b/bazaar/Functions4U/src.tpp/all.i index c99420412..825b0ca20 100644 --- a/bazaar/Functions4U/src.tpp/all.i +++ b/bazaar/Functions4U/src.tpp/all.i @@ -1,3 +1,15 @@ +TOPIC("bsadditional$en-us") +#include "bsadditional$en-us.tppi" +END_TOPIC + +TOPIC("bsdiff$en-us") +#include "bsdiff$en-us.tppi" +END_TOPIC + +TOPIC("bspatch$en-us") +#include "bspatch$en-us.tppi" +END_TOPIC + TOPIC("Functions4U$en-us") #include "Functions4U$en-us.tppi" END_TOPIC diff --git a/bazaar/Functions4U/src.tpp/bsadditional$en-us.tppi b/bazaar/Functions4U/src.tpp/bsadditional$en-us.tppi new file mode 100644 index 000000000..de7e7549f --- /dev/null +++ b/bazaar/Functions4U/src.tpp/bsadditional$en-us.tppi @@ -0,0 +1,4 @@ +TITLE("") +COMPRESSED +120,156,133,142,77,75,195,64,16,134,255,202,130,173,180,197,195,124,237,71,118,111,162,40,40,120,240,184,108,211,216,172,37,88,83,72,226,73,252,239,110,218,147,39,231,48,195,48,243,60,188,81,45,22,112,3,87,240,79,249,187,252,222,124,29,167,20,31,77,128,2,225,12,105,83,78,70,163,136,128,144,65,96,18,70,6,98,141,149,54,254,45,31,186,62,197,78,196,133,134,116,248,120,122,169,2,21,154,10,205,22,217,105,198,2,150,134,140,164,137,5,29,85,226,152,45,248,253,169,205,221,148,63,83,60,146,115,103,142,11,71,86,19,90,113,226,144,173,163,130,19,0,129,165,146,131,29,105,223,230,113,159,226,28,82,202,123,101,184,2,4,176,56,199,179,192,90,16,153,138,130,44,33,104,159,251,54,197,239,250,71,197,17,131,186,78,113,164,224,111,199,135,60,61,55,227,116,63,12,167,97,183,218,173,189,138,245,246,117,26,186,254,176,85,151,153,234,184,81,127,63,211,106,61,27,56,44,151,103,149,92,140,48,239,233,23,182,86,91,233, + diff --git a/bazaar/Functions4U/src.tpp/bsdiff$en-us.tpp b/bazaar/Functions4U/src.tpp/bsdiff$en-us.tpp new file mode 100644 index 000000000..ab9bb37a5 --- /dev/null +++ b/bazaar/Functions4U/src.tpp/bsdiff$en-us.tpp @@ -0,0 +1,57 @@ +topic "Functions4U. BSDiff Reference"; +[ $$0,0#00000000000000000000000000000000:Default] +[H6;0 $$1,0#05600065144404261032431302351956:begin] +[i448;a25;kKO9;2 $$2,0#37138531426314131252341829483370:codeitem] +[l288;2 $$3,0#27521748481378242620020725143825:desc] +[0 $$4,0#96390100711032703541132217272105:end] +[{_}%EN-US +[s0; [*R+184 Functions4U. Reference]&] +[s0;2 &] +[s0; [* BSDiff functions]&] +[s0;2 &] +[s0; [2 BSDiff functions permit to:]&] +[s0; [2 `- Compare two binary or text files to get a new differences +file (patch)]&] +[s0; [2 `- Create a new file based in an old version and a file with +the differences (patch)]&] +[s0;2 &] +[s0; [2 Patch file size is related with the size of the change in original +file compared with the file full size. Small changes let to get +small patch files too.]&] +[s0;2 &] +[s3;l0; In arithmetical notation it would be: &] +[s0;i150;O0;%- [%%2 BSDiff does:-|][*@3;2 patchfile `= newfile `- oldfile]&] +[s0;i150;O0;%- [%%2 BSPatch does:-|][*@3;2 newfile `= oldfile `+ patchfile]&] +[s0;2 &] +[s0; [2 BSDiff is a BSD licensed binary diff/patch utility written +by Colin Percival (Copyright 2003`-2005 Colin Percival ), +ported to Win32 by Andreas John .]&] +[s0;2 &] +[s0; [2 BSDiff/BSPatch functions are a light wrapper to BSDiff utilities.]&] +[s0;2 &] +[ {{10000@1 [s0; [*2 BSDiff functions]]}}&] +[s1;2%- &] +[s2;:BSDiff`(String`,String`,String`):%- [@(0.0.255) bool]_[* BSDiff]([_^String^ String]_[*@3 o +ldfile], [_^String^ String]_[*@3 newfile], [_^String^ String]_[*@3 patchfile])&] +[s3; Takes [%-*@3 oldfile] and [%-*@3 newfile], compares them and put +the differences in [%-*@3 patchfile].so that it is possible to +rebuild [%-*@3 newfile].&] +[s3; In arithmetical notation it would be: &] +[s0;l448;%- [*@3;2 patchfile `= newfile `- oldfile]&] +[s0;l288; [2 Returns true if correct. Error String can be got with +BSGetLastError()]&] +[s4;%- &] +[s1;%- &] +[s2;:BSPatch`(String`,String`,String`):%- [@(0.0.255) bool]_[* BSPatch]([_^String^ String]_ +[*@3 oldfile], [_^String^ String]_[*@3 newfile], [_^String^ String]_[*@3 patchfile])&] +[s3; Takes [%-*@3 oldfile] and [%-*@3 patchfile], to rebuild [%-*@3 newfile].&] +[s3; In arithmetical notation it would be: &] +[s0;l448;%- [*@3;2 newfile `= oldfile `+ patchfile]&] +[s0;l288; [2 Returns true if correct. Error String can be got with +BSGetLastError()]&] +[s4; &] +[s1;%- &] +[s2;:BsGetLastError`(`):%- [_^String^ String]_[* BsGetLastError]()&] +[s3; Returns the last BSDiff/BSPatch error message.&] +[s4;%- &] +[s0; ] \ No newline at end of file diff --git a/bazaar/Functions4U/src.tpp/bsdiff$en-us.tppi b/bazaar/Functions4U/src.tpp/bsdiff$en-us.tppi new file mode 100644 index 000000000..a0ee33ae2 --- /dev/null +++ b/bazaar/Functions4U/src.tpp/bsdiff$en-us.tppi @@ -0,0 +1,7 @@ +TITLE("Functions4U. BSDiff Reference") +COMPRESSED +120,156,205,85,107,111,219,54,20,253,43,23,88,51,56,109,172,138,164,100,43,86,91,120,125,237,137,181,72,86,236,131,160,198,180,116,109,19,145,69,131,164,235,101,89,254,251,46,37,217,142,147,101,91,7,20,152,63,88,180,121,206,125,158,123,149,193,163,71,225,73,248,85,248,15,159,209,107,156,201,117,229,242,236,187,65,26,18,137,121,82,60,160,171,65,204,162,40,10,35,62,96,161,224,145,96,34,228,34,102,167,241,96,52,197,185,170,243,76,69,81,146,74,30,167,151,63,190,59,77,57,177,57,177,197,144,137,36,22,140,136,244,197,4,227,49,23,17,75,248,105,148,8,49,12,71,133,46,81,57,92,230,89,197,147,164,225,9,226,241,97,204,217,48,74,162,132,137,97,194,137,206,195,144,135,67,78,113,136,132,199,163,18,109,145,103,62,200,136,224,167,3,113,26,178,48,28,50,31,222,48,20,113,196,152,224,100,130,15,57,11,227,17,214,101,158,93,95,220,28,189,249,185,255,225,28,50,27,166,144,61,62,123,194,146,8,222,174,235,194,41,93,219,232,67,0, +103,56,67,131,117,129,249,215,185,71,113,104,159,132,134,151,231,175,213,108,6,179,45,254,30,132,111,33,123,12,172,208,44,149,3,167,71,249,30,54,233,195,43,189,92,73,131,224,54,26,166,170,150,230,10,180,1,135,191,57,152,169,10,45,49,96,142,14,36,212,184,129,146,172,182,113,217,230,26,122,43,233,138,197,241,29,155,6,165,195,142,210,192,166,210,98,9,170,6,89,131,174,74,248,132,198,82,88,244,179,36,88,3,217,40,183,0,183,192,3,31,135,230,111,103,248,222,95,180,76,171,126,71,80,22,12,86,228,182,220,91,106,46,244,172,57,23,11,89,207,209,135,160,141,34,165,200,170,37,23,109,254,183,88,205,223,179,117,85,53,252,0,206,151,146,206,45,223,66,133,110,91,18,219,92,172,118,129,248,90,233,224,32,86,145,86,20,238,247,148,168,33,243,75,116,170,32,199,181,118,210,119,5,168,33,27,189,166,122,76,113,212,229,166,88,28,166,239,194,244,168,15,217,209,209,174,147,165,70,59,234,255,145,103,143,199,130,108,55,78,155,64,39,207,125,149, +219,99,223,215,214,31,243,135,108,181,85,187,99,108,199,127,190,229,195,228,201,222,197,195,242,162,154,75,127,134,74,21,88,251,14,119,10,242,45,124,218,22,102,237,84,165,220,21,108,168,0,14,107,152,94,145,228,42,106,195,123,52,133,250,68,213,232,189,210,171,43,234,201,194,1,13,151,152,244,233,59,190,11,122,86,172,218,227,100,60,51,136,83,91,6,218,204,95,28,159,192,74,27,223,116,234,201,175,170,22,220,59,248,166,46,73,129,22,126,208,139,26,158,149,87,181,44,180,193,201,216,161,173,100,160,234,75,25,148,248,34,120,48,177,167,219,66,237,199,199,143,136,164,60,125,148,27,35,87,20,141,119,217,21,162,77,82,161,61,176,9,215,215,204,239,179,49,219,14,58,191,63,187,249,205,141,167,176,148,83,151,252,137,167,163,22,52,233,157,59,163,234,249,228,228,206,243,120,228,27,58,238,133,65,24,240,56,62,134,169,214,85,126,177,219,12,121,47,187,248,216,98,63,66,251,244,183,99,177,147,199,9,60,132,232,180,240,55,136,189,46,142,91,133,195,47, +242,146,180,159,29,245,111,187,104,70,187,251,111,111,180,155,54,235,7,109,217,64,86,107,119,111,234,169,241,29,115,239,44,176,154,112,210,249,153,33,221,173,180,181,106,74,74,165,38,24,156,174,85,117,207,91,208,133,247,57,211,87,249,183,135,175,238,231,140,89,243,198,240,234,57,67,183,54,36,22,103,214,180,105,102,148,173,49,88,184,0,222,24,67,75,181,45,35,20,180,3,167,8,115,237,218,157,243,242,252,91,116,63,73,235,26,84,175,93,118,81,218,201,129,165,183,117,209,200,242,63,9,163,97,254,239,148,177,167,156,124,217,78,254,187,29,247,101,58,121,191,143,246,54,110,210,235,26,247,87,101,133,67,108,222,219,150,118,23,33,205,78,69,215,119,87,23,54,129,46,209,90,57,199,224,64,82,180,138,242,63,1,10,184,11,140, + diff --git a/bazaar/Functions4U/src.tpp/bspatch$en-us.tppi b/bazaar/Functions4U/src.tpp/bspatch$en-us.tppi new file mode 100644 index 000000000..4e7a3cee1 --- /dev/null +++ b/bazaar/Functions4U/src.tpp/bspatch$en-us.tppi @@ -0,0 +1,4 @@ +TITLE("") +COMPRESSED +120,156,133,206,189,74,68,65,12,5,224,87,185,224,218,41,36,39,201,252,182,10,130,160,133,88,13,131,172,123,103,229,226,186,22,187,86,226,187,155,235,11,152,34,77,206,23,78,155,54,27,186,162,11,250,103,202,205,216,111,191,14,231,222,238,66,37,71,188,34,11,126,10,198,170,74,138,192,36,80,97,33,136,113,182,80,94,199,219,114,236,109,81,77,117,11,171,239,247,143,185,194,53,92,75,100,73,38,236,208,23,11,195,32,202,9,89,147,72,164,178,251,156,199,114,30,31,189,29,144,210,159,19,119,136,6,142,154,52,177,196,4,231,32,2,69,120,15,73,176,50,143,211,174,183,181,164,122,60,7,201,196,68,145,215,122,145,196,148,89,224,47,16,193,100,101,28,231,222,190,95,126,46,111,31,174,159,159,166,118,162,58,245,95,90,209,64,106, + diff --git a/bazaar/Functions4U/srcdoc.tpp/ChangesLog$en-us.tpp b/bazaar/Functions4U/srcdoc.tpp/ChangesLog$en-us.tpp index b1f5c3ca6..095c539ae 100644 --- a/bazaar/Functions4U/srcdoc.tpp/ChangesLog$en-us.tpp +++ b/bazaar/Functions4U/srcdoc.tpp/ChangesLog$en-us.tpp @@ -5,6 +5,8 @@ topic "News and changes Log"; [s0; [*R+184 Functions4U. News and changes log]&] [s0;2 &] [s0;2 &] +[s0; [2 2009/12/28-|Added BSDiff functions to `"diff`" and `"patch`" +binary files]&] [s0; [2 2009/12/23-|Added RemoveAccents()]&] [s0; [2 2009/12/12-|LoadFile`_Safe fixed bug... I forgot to bring it from SysInfo]&] diff --git a/bazaar/Functions4U/srcdoc.tpp/ChangesLog$en-us.tppi b/bazaar/Functions4U/srcdoc.tpp/ChangesLog$en-us.tppi index ef927ae26..132f305e0 100644 --- a/bazaar/Functions4U/srcdoc.tpp/ChangesLog$en-us.tppi +++ b/bazaar/Functions4U/srcdoc.tpp/ChangesLog$en-us.tppi @@ -1,5 +1,5 @@ TITLE("News and changes Log") COMPRESSED -120,156,133,143,77,75,195,64,16,64,255,202,128,85,180,154,116,191,154,166,237,169,152,22,10,210,67,66,79,203,82,183,201,110,12,164,187,146,221,84,197,246,191,155,28,4,69,197,185,204,229,189,55,12,135,193,0,221,161,11,244,207,204,18,165,101,91,123,193,101,76,231,195,52,234,60,220,121,20,83,140,112,68,216,132,17,68,17,97,152,140,113,28,51,60,25,199,116,26,69,179,92,62,251,202,26,193,223,119,231,203,229,38,216,102,192,29,154,3,31,166,183,56,102,176,106,77,222,3,142,109,67,216,168,23,7,210,20,144,63,73,83,42,7,181,45,197,149,232,5,2,223,55,112,2,4,161,233,8,147,17,161,193,105,81,20,170,128,84,29,236,81,45,242,92,25,239,174,111,196,79,22,147,224,244,96,101,177,170,106,245,184,203,164,86,160,171,215,78,221,183,101,24,134,176,6,109,155,210,122,240,22,246,77,101,74,168,60,232,198,30,32,123,115,107,163,237,47,77,212,53,19,85,43,223,101,18,187,60,254,121,188,7,239,27,37,123,240,203,227,159,164,248,0,9,187, -113,46, +120,156,133,144,81,107,194,48,16,199,191,202,209,185,177,185,89,147,180,214,170,79,110,85,16,134,15,22,159,74,177,105,155,212,66,77,164,137,110,50,247,221,151,14,10,27,116,236,94,142,11,191,255,239,142,68,208,235,161,39,116,131,254,169,105,192,56,61,85,58,142,168,239,204,250,27,207,228,176,201,57,216,193,8,123,196,29,187,4,57,136,184,152,140,176,239,187,120,60,242,157,137,231,77,51,122,212,165,20,113,244,177,251,188,93,172,7,219,16,34,133,102,16,245,55,143,216,119,97,121,18,89,3,40,119,107,195,154,189,41,160,34,135,108,79,69,193,20,84,178,136,239,226,38,64,224,119,135,136,0,65,104,50,196,100,72,252,193,117,158,231,44,135,231,48,40,57,7,222,74,65,75,72,172,220,188,37,214,183,56,177,142,84,103,123,51,165,165,160,245,5,120,89,49,21,119,56,157,214,185,97,7,121,102,243,44,99,66,171,251,135,14,22,147,193,245,85,210,124,105,92,201,46,164,156,25,237,187,137,166,167,194,182,109,88,1,151,117,33,117,115,77,90,151,162,128, +82,3,175,229,1,194,139,90,9,46,59,156,200,56,3,86,49,109,52,129,92,156,255,92,222,128,47,53,163,13,248,227,51,91,50,254,2,63,169,139,203, diff --git a/bazaar/Functions4U/srcdoc.tpp/Functions4U$en-us.tpp b/bazaar/Functions4U/srcdoc.tpp/Functions4U$en-us.tpp index 5ee15a976..c04d10c62 100644 --- a/bazaar/Functions4U/srcdoc.tpp/Functions4U$en-us.tpp +++ b/bazaar/Functions4U/srcdoc.tpp/Functions4U$en-us.tpp @@ -29,6 +29,8 @@ topic "General description"; [s0; &] [s0;i150;O0; [^topic`:`/`/Functions4U`/src`/Functions4U`$en`-us`#FileCat`(const char`*`,const char`*`)^ F ile Handling]&] +[s0;i150;O0; [^topic`:`/`/Functions4U`/src`/bsdiff`$en`-us^ File binary +comparison (BSDiff)]&] [s0;i150;O0; [^topic`:`/`/Functions4U`/src`/Functions4U`$en`-us`#Replace`(String`,String`,String`)^ S tring functions]&] [s0;i150;O0; [^topic`:`/`/Functions4U`/src`/Functions4U`$en`-us`#Sign`(T`)^ Math diff --git a/bazaar/Functions4U/srcdoc.tpp/Functions4U$en-us.tppi b/bazaar/Functions4U/srcdoc.tpp/Functions4U$en-us.tppi index 3cd45a8dc..f400571db 100644 --- a/bazaar/Functions4U/srcdoc.tpp/Functions4U$en-us.tppi +++ b/bazaar/Functions4U/srcdoc.tpp/Functions4U$en-us.tppi @@ -1,8 +1,8 @@ TITLE("General description") COMPRESSED -120,156,181,84,107,111,219,70,16,252,43,4,228,6,142,77,219,183,123,183,247,32,139,34,128,83,55,1,154,164,176,227,79,130,28,82,212,217,38,170,80,138,72,161,69,139,250,183,119,78,143,38,206,151,62,224,90,144,100,145,156,157,217,217,217,27,115,118,112,160,114,53,82,127,243,87,188,140,183,245,122,62,76,198,115,246,190,108,137,88,149,53,185,242,93,40,31,30,30,78,201,40,95,166,98,132,98,164,140,38,38,92,83,134,29,73,80,65,60,121,165,157,97,113,74,138,101,189,170,63,78,198,181,215,229,209,165,5,138,115,25,105,210,164,200,178,193,83,74,43,54,196,66,222,27,114,226,117,176,182,104,234,229,208,46,186,201,248,149,41,167,9,106,128,212,64,42,231,173,33,224,140,176,118,98,128,55,6,10,53,184,157,117,174,24,218,97,30,39,227,54,73,135,224,243,36,212,228,118,4,129,236,128,52,108,172,209,158,53,121,102,27,180,9,6,202,137,139,118,136,208,57,53,92,214,120,39,152,128,207,136,33,13,83,140,19,141,199,28,190,141,10,196,32,245,74, -4,124,241,215,189,83,83,120,148,124,74,88,11,74,118,146,16,222,120,210,206,179,97,203,16,161,28,122,77,10,164,152,197,190,1,86,51,149,231,47,164,36,224,92,238,70,172,130,98,235,2,248,160,21,237,234,16,72,123,240,25,18,69,186,104,22,51,180,56,101,81,122,67,230,49,8,139,162,27,71,196,18,244,178,246,96,115,164,53,62,197,120,87,244,49,141,98,88,172,38,227,163,23,135,234,84,157,178,200,243,4,15,128,123,109,180,54,54,24,82,26,52,168,97,146,93,86,97,152,36,236,139,105,221,131,115,99,39,165,20,193,112,237,69,131,212,226,3,243,68,87,26,166,112,48,94,107,175,138,102,94,247,253,206,153,228,202,81,106,143,40,39,26,185,100,168,104,54,33,57,162,25,206,178,149,64,176,86,172,81,92,172,226,167,117,187,138,31,99,7,111,91,196,162,220,207,101,151,65,40,219,70,144,115,98,132,80,172,85,201,41,65,10,88,11,92,86,228,13,20,225,133,217,14,187,20,78,201,186,109,36,72,231,164,71,129,141,134,146,96,12,122,71,1,10,68, -164,60,94,232,12,142,108,66,65,187,52,237,232,183,112,147,147,25,57,196,23,51,10,38,209,7,157,156,99,24,207,86,9,38,192,91,56,39,191,249,0,142,19,251,244,222,120,78,146,19,246,0,18,73,4,125,107,152,204,30,189,11,92,215,155,92,147,243,197,219,248,75,255,178,30,226,46,37,71,231,7,219,120,145,205,201,142,84,194,139,15,24,29,153,228,159,54,38,112,208,90,56,136,182,10,62,246,219,69,78,224,180,71,155,53,252,171,136,203,201,97,163,208,171,8,186,223,192,208,185,163,36,133,125,176,201,133,93,145,234,100,222,118,73,7,50,129,18,199,68,46,149,240,216,17,239,173,210,1,54,160,123,37,8,54,142,0,143,17,99,194,140,212,167,51,160,249,185,190,139,213,201,110,57,55,228,41,117,162,197,167,172,2,9,209,160,71,157,160,148,197,21,239,177,60,197,93,189,220,133,142,85,206,10,201,193,89,35,216,62,176,32,114,42,164,115,3,71,0,92,199,177,19,100,155,186,234,164,139,253,16,103,24,184,168,77,171,76,57,19,252,66,230,68,188,49, -22,74,193,234,210,49,148,198,134,77,21,167,139,159,106,108,199,239,31,254,248,230,251,183,39,215,87,217,184,231,50,27,31,35,73,217,197,186,107,210,137,212,155,235,201,179,201,184,87,101,246,166,237,155,56,159,215,93,92,172,251,236,118,255,64,54,44,178,105,204,214,125,156,101,109,151,93,87,199,213,241,233,14,178,251,122,61,224,78,51,95,99,255,191,192,221,46,86,197,163,231,90,108,123,249,14,63,199,55,195,98,217,54,85,81,157,85,103,95,40,169,206,250,85,243,248,202,65,236,170,147,117,95,141,46,218,121,60,175,135,234,176,193,141,33,107,238,235,85,117,84,229,143,126,61,191,201,210,99,217,171,186,155,97,186,119,147,39,224,189,140,203,121,221,196,234,240,106,88,161,100,149,127,245,13,206,237,127,159,59,127,10,218,171,246,174,171,14,223,167,242,111,234,225,254,127,43,126,181,140,77,91,207,49,172,249,44,174,158,164,250,69,59,188,238,46,112,62,197,253,176,174,218,223,98,245,161,250,246,125,245,93,245,108,63,179,199,23,33,229,135,85,189,188,111,155, -36,230,171,102,247,57,251,247,106,110,178,203,120,27,87,177,107,226,174,214,127,40,241,79,216,103,11,160,207,239,235,238,46,246,63,46,238,62,131,211,137,151,33,143,41,163,233,102,134,187,251,182,38,127,2,59,138,111,177, +120,156,181,84,107,111,219,70,16,252,43,4,228,6,142,77,59,183,123,183,247,32,139,34,168,19,55,1,154,164,136,147,79,130,18,82,212,217,38,170,80,170,72,161,47,52,191,189,115,18,213,196,65,129,54,69,106,65,146,69,114,118,102,103,103,111,202,217,209,145,202,213,68,253,195,95,241,40,94,215,219,229,48,155,46,217,251,178,37,98,85,214,228,202,23,161,124,255,254,253,57,25,229,203,84,140,80,140,148,209,196,132,107,202,176,35,9,42,136,39,175,180,51,44,78,73,177,174,55,245,187,217,180,246,186,60,121,105,129,226,92,38,154,52,41,178,108,240,148,210,138,13,177,144,247,134,156,120,29,172,45,154,122,61,180,171,110,54,125,98,202,121,130,26,32,53,144,202,121,107,8,56,35,172,157,24,224,141,129,66,13,110,103,157,43,134,118,88,198,217,180,77,210,33,248,34,9,53,185,157,64,32,59,32,13,27,107,180,103,77,158,217,6,109,130,129,114,226,162,29,34,116,206,13,151,53,222,9,38,224,51,98,72,195,20,227,68,227,49,135,111,163,2,49,72,189, +18,1,95,252,229,224,212,28,30,37,159,18,214,130,146,157,36,132,55,158,180,243,108,216,50,68,40,135,94,147,2,41,22,177,111,128,213,76,229,197,67,41,9,56,151,187,9,171,160,216,186,0,62,104,69,187,58,4,210,30,124,134,68,145,46,154,213,2,45,206,89,148,222,145,121,12,194,162,232,206,17,177,4,189,172,61,216,28,105,141,79,49,222,21,125,76,163,24,86,155,217,244,228,225,177,58,87,231,44,114,63,193,3,224,94,27,173,141,13,134,148,6,13,106,152,100,151,85,24,38,9,251,98,94,247,224,220,217,73,41,69,48,92,123,209,32,181,248,192,60,209,149,134,41,28,140,215,218,171,162,89,214,125,63,58,147,92,57,73,237,17,229,68,19,151,12,21,205,38,36,71,52,195,89,182,18,8,214,138,53,138,139,77,252,105,219,110,226,187,216,193,219,22,177,40,15,115,25,51,8,101,251,8,114,78,140,16,138,181,42,57,37,72,1,107,129,203,138,188,129,34,188,48,219,97,76,225,156,172,219,71,130,116,78,122,18,216,104,40,9,198,160,119,20,160,64, +68,202,227,133,206,224,200,46,20,52,166,105,164,223,195,77,78,102,226,16,95,204,40,152,68,31,116,114,142,97,60,91,37,152,0,239,225,156,252,230,35,56,78,236,211,123,231,57,73,78,216,3,72,36,17,244,173,97,50,123,244,46,112,93,239,114,77,206,23,207,227,207,253,163,122,136,99,74,78,46,142,246,241,34,155,147,157,168,132,23,31,48,58,50,201,63,109,76,224,160,181,112,16,109,21,124,236,247,139,156,192,105,143,118,107,248,87,17,151,147,195,70,161,87,17,116,191,131,161,115,71,73,10,251,96,147,11,99,145,234,108,217,118,73,7,50,129,18,167,68,46,149,240,216,17,239,173,210,1,54,160,123,37,8,54,142,0,143,17,99,194,140,212,167,51,160,249,177,190,137,213,217,184,156,59,242,148,58,209,226,83,86,129,132,104,208,163,78,80,202,226,138,247,88,158,226,166,94,143,161,99,149,179,66,114,112,214,8,182,15,44,136,156,10,233,220,192,17,0,215,113,236,4,217,167,174,58,235,98,63,196,5,6,46,106,215,42,83,206,4,191,144,57,17,111,140, +133,82,176,186,116,12,165,177,97,83,197,233,226,135,26,219,241,251,219,63,190,122,252,252,236,245,85,54,237,185,204,166,167,72,82,118,185,237,154,116,34,245,230,245,236,222,108,218,171,50,123,214,246,77,92,46,235,46,174,182,125,118,125,120,32,27,86,217,60,102,219,62,46,178,182,203,94,87,167,213,233,249,8,25,191,158,14,184,211,44,183,216,255,143,112,215,171,77,113,231,185,22,219,94,190,192,207,233,155,97,181,110,155,170,168,30,84,15,62,82,82,61,232,55,205,221,43,71,177,171,206,182,125,53,185,108,151,241,162,30,170,227,6,55,134,172,185,173,55,213,73,149,223,249,117,255,77,150,30,203,158,212,221,2,211,189,153,125,30,239,188,95,180,215,215,7,202,177,214,188,237,234,205,175,89,179,122,135,157,107,251,85,151,29,127,123,245,8,207,221,255,204,234,127,219,213,203,184,94,214,77,172,142,175,134,13,4,87,249,39,223,232,104,255,223,7,95,191,4,237,85,123,211,85,199,175,82,249,103,245,112,251,191,21,191,90,199,166,173,151,136,194,114,17,55,95, +164,250,101,59,60,237,46,113,250,197,67,20,174,218,223,98,245,182,250,250,85,245,77,117,239,144,136,187,23,33,229,187,77,189,190,109,155,36,230,147,102,15,41,254,124,53,111,178,151,241,58,110,98,215,196,177,214,127,40,241,111,216,23,43,160,47,110,235,238,38,246,223,175,110,62,128,211,121,154,33,237,105,3,210,205,12,119,15,109,205,254,4,120,34,143,205,