ShellExtension erstellen
BZip2 bei RedHat
BZip2 für Windows

Den BZip2-Quellcode kann man direkt in ein Programm miteincompilieren. Ich bevorzuge es, auf den Code, der Dateien komprimiert und auf die Runtimes zurückgreift, zu verzichten. Das wird erreicht, indem man den Compilerschalter -DBZ_NO_STDIO setzt.
Aus dem BZip2-Quellcode benötigt man die Dateien: blocksort.c, compress.c, crctable.c, decompress.c, huffman.c und randtable.c.
#include <bzlib.h>
#include <atlwfile.h>

#define BZ_MAX_UNUSED 5000

int main(int argc, char* argv[]) {

    if(argc!=2) return 0;

    bz_stream BZStrm;

    char buf[BZ_MAX_UNUSED]={0};
    char outbuf[BZ_MAX_UNUSED]={0};

    int ret, n;
    unsigned long erg;

    ATL::CFile Datei, Datei2;

    lstrcpy(buf, argv[1]);
    lstrcat(buf, ".bz2");

    Datei.Create(buf);
    Datei2.Open(argv[1], GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN);

    ZeroMemory(&BZStrm, sizeof(bz_stream));
    BZ2_bzCompressInit(&BZStrm, 9, 0, 30);

    Datei2.Read(buf, BZ_MAX_UNUSED, &erg);

    while(erg>0) {
        BZStrm.next_in  = buf;

        while (TRUE) {
            BZStrm.avail_out = BZ_MAX_UNUSED;
            BZStrm.next_out = outbuf;
            BZStrm.avail_in = erg;

            ret = BZ2_bzCompress ( &BZStrm, BZ_RUN );
            if (ret != BZ_RUN_OK) {
                return 0;
						};

            if (BZStrm.avail_out < BZ_MAX_UNUSED) {
                n = BZ_MAX_UNUSED - BZStrm.avail_out;
                Datei.Write((void*)(outbuf), n);
						}

            if (BZStrm.avail_in == 0) {
                break;
						};
				}

        Datei2.Read(buf, BZ_MAX_UNUSED, &erg);

		};

    while (TRUE) {

        BZStrm.avail_out = BZ_MAX_UNUSED;
        BZStrm.next_out = outbuf;
        ret = BZ2_bzCompress ( &BZStrm, BZ_FINISH );
        if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END) {
            return 0;
				};

        if (BZStrm.avail_out < BZ_MAX_UNUSED) {
            n = BZ_MAX_UNUSED - BZStrm.avail_out;
            Datei.Write((void*)(outbuf), n);
				}

        if (ret == BZ_STREAM_END) break;
		 }

    BZ2_bzCompressEnd(&BZStrm);

    Datei.Close();
    Datei2.Close();

    return 0;
}
Coldfusion
->SerializeJSON

GCC
->Cross-Compiling

MySql
->Prep. Stmts

SQLite3
->Mem-Structure
->Prep. Stmts
->ToUTF8-Func
->ToWin1252-Func

UTF-8
->UTF-8 To UCS2

VB
->MD5-Class

VC++
->BZip2
->ATL


HOME