Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include <stdio.h>
  2. #include <windows.h>
  3. extern "C" __stdcall lzma_set_dict_size(unsigned logdictsize);
  4. extern "C" __stdcall lzma_compress(
  5.         const void* source,
  6.         void* destination,
  7.         unsigned length,
  8.         void* workmem);
  9.  
  10. int main()
  11. {
  12.         FILE* f;
  13.         f = fopen("test.in","rb");
  14.         fseek(f,0,SEEK_END);
  15.         unsigned inlen = ftell(f);
  16.         fseek(f,0,SEEK_SET);
  17.         void* in = VirtualAlloc(NULL,inlen,MEM_COMMIT,PAGE_READWRITE);
  18.         void* out = VirtualAlloc(NULL,inlen,MEM_COMMIT,PAGE_READWRITE);
  19.         fread(in,1,inlen,f);
  20.         fclose(f);
  21.         unsigned logdictsize,dictsize;
  22.         for (logdictsize=0,dictsize=1;dictsize<inlen && logdictsize<=28;logdictsize++,dictsize<<=1) ;
  23.         lzma_set_dict_size(logdictsize);
  24.         void* work = VirtualAlloc(NULL,dictsize*19/2+0x509000,MEM_COMMIT,PAGE_READWRITE);
  25.         unsigned outlen = lzma_compress(in,out,inlen,work);
  26.         printf("%d -> %d\n",inlen,outlen);
  27.         f = fopen("test.out","wb");
  28.         fwrite(out,1,outlen,f);
  29.         fclose(f);
  30.         return 0;
  31. }
  32.