FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour FWH or [x]Harbour Like this brotli compression function-SOLVED
Posts: 866
Joined: Tue Oct 16, 2007 08:57 AM
FWH or [x]Harbour Like this brotli compression function-SOLVED
Posted: Thu Jul 10, 2025 08:38 AM

Dear All,

FWH or [x]Harbour Like this function or LIB "brotli compression from Google" for Compressed Archives.

Best Regards,



Richard



Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 32bit

MySQL v8.0

Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 64bit
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Thu Jul 10, 2025 05:11 PM
Something like GZIP?

https://www.gzip.org/

I don't know. Perhaps Master Enrico has technical knowledge on this subject.

Regards, saludos.
JoΓ£o Santos - SΓ£o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 866
Joined: Tue Oct 16, 2007 08:57 AM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Fri Jul 11, 2025 03:32 AM
karinha wrote: Something like GZIP?

https://www.gzip.org/

I don't know. Perhaps Master Enrico has technical knowledge on this subject.

Regards, Saludos.
Dear Karinha,

I need compression code into my PRG or C. Not need to call any command runtime file.
Best Regards,



Richard



Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 32bit

MySQL v8.0

Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 64bit
Posts: 866
Joined: Tue Oct 16, 2007 08:57 AM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Fri Jul 11, 2025 03:44 AM
Dear Antonio, All

This my code. I try to use brotli compression from google.
Compile not any error. But Execute it. But no action occurs.
# INCLUDE "FIVEWIN.CH"

FUNCTION MAIN()
LOCAL cRES:='{"sams":[{"samId":"901000000046","hospitalId":"9999999999","hospitalName":"ζΈ¬θ©¦ζ©Ÿζ§‹","hospitalShortName":"ζΈ¬θ©¦ζ©Ÿζ§‹","comport":"COM1"},{"samId":"901000001234","hospitalId":"0532110002","hospitalName":"烏ζ—₯醫陒","hospitalShortName":"烏ζ—₯醫陒","comport":"COM1"}],"statusCode":0}'
LOCAL nSize:=BROTLIENCODERCOMPRESSEDSIZE(200)
LOCAL SOUT:=SPACE(nSize)
BROTLIENCODERCOMPRESS(5,22,1,LEN(cRES),cRES,nSize,@sout)
RETURN Nil

#pragma BEGINDUMP

#include "windows.h"
#include "hbapi.h"
typedef enum
{
BROTLI_MODE_GENERIC = 0,
BROTLI_MODE_TEXT = 1,
BROTLI_MODE_FONT = 2
} BrotliEncoderMode;

int WINAPI BrotliEncoderMaxCompressedSize( int * inp_size) ;
int WINAPI BrotliEncoderCompress(int quality,int lgwin,BrotliEncoderMode mode,int * input_size ,LPSTR input_Buffer,int * encoded_size ,LPSTR encoded_Buffer);

HB_FUNC(BROTLIENCODERCOMPRESSEDSIZE)
{
int inp_size = (int *)hb_parni(1);
int size;
size=BrotliEncoderMaxCompressedSize(&inp_size);
hb_retnl(size);
}

HB_FUNC(BROTLIENCODERCOMPRESS)
{
int quality = hb_parni(1);
int lgwin = hb_parni(2);
int mode = hb_parni(3);
int input_size =(int *)hb_parni(4);
LPSTR input_Buffer=(char *) hb_parc(5);
int encoded_size =(int *)hb_parni(6);
LPSTR encoded_Buffer=(char *) hb_parc(7);
int err;
err=BrotliEncoderCompress(quality,lgwin,mode,&input_size ,input_Buffer,&encoded_size ,encoded_Buffer);
hb_retni(err);
}

#pragma BEGINDUMP
Best Regards,



Richard



Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 32bit

MySQL v8.0

Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 64bit
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Fri Jul 11, 2025 05:29 AM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 866
Joined: Tue Oct 16, 2007 08:57 AM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Fri Jul 11, 2025 05:28 PM
Antonio Linares wrote: Dear Richard,

https://x.com/i/grok/share/CMlzU3PRIPGQoS0LtGuoRgN2E
Dear Antonio,

Thank you so much.
Best Regards,



Richard



Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 32bit

MySQL v8.0

Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 64bit
Posts: 866
Joined: Tue Oct 16, 2007 08:57 AM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Sat Jul 12, 2025 08:37 PM
Antonio Linares wrote: Dear Richard,

https://x.com/i/grok/share/CMlzU3PRIPGQoS0LtGuoRgN2E
Dear Antonio,

I compile below my source code and got error message
Compiling...
Harbour 3.2.0dev (r2503251254)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'testbrot.prg' and generating preprocessed output to 'testbrot.ppo'...
Lines 5091, Functions/Procedures 1
Generating C source output to 'testbrot.c'... Done.
Embarcadero C++ 7.70 for Win32 Copyright (c) 1993-2023 Embarcadero Technologies, Inc.
testbrot.c:
Error E2141 testbrot.prg 21: Declaration syntax error
Error E2356 testbrot.prg 22: Type mismatch in redeclaration of 'WINAPI'
Error E2344 testbrot.prg 21: Earlier declaration of 'WINAPI'
Error E2141 testbrot.prg 22: Declaration syntax error
*** 4 errors in Compile ***
* Linking errors *
# INCLUDE "FIVEWIN.CH"

FUNCTION MAIN()
LOCAL cRES:='{"sams":[{"samId":"901000000046","hospitalId":"9999999999","hospitalName":"ζΈ¬θ©¦ζ©Ÿζ§‹","hospitalShortName":"ζΈ¬θ©¦ζ©Ÿζ§‹","comport":"COM1"},{"samId":"901000001234","hospitalId":"0532110002","hospitalName":"烏ζ—₯醫陒","hospitalShortName":"烏ζ—₯醫陒","comport":"COM1"}],"statusCode":0}'
LOCAL nSize:=BROTLIENCODERCOMPRESSEDSIZE(200)
LOCAL SOUT:=SPACE(nSize)
LOCAL nResult
nResult:=BROTLIENCODERCOMPRESS(5,22,1,LEN(cRES),cRES,nSize,@sout)
IF nResult == 1
   ? "Compression successful, compressed size:", LEN(sOut)
ELSE
   ? "Compression failed"
ENDIF
RETURN Nil

#pragma BEGINDUMP
        #include <brotli/encode.h>
        #include <brotli/types.h>
        #include "hbapi.h"

        size_t WINAPI BrotliEncoderMaxCompressedSize(size_t input_size);
        BROTLI_BOOL WINAPI BrotliEncoderCompress(int quality,int lgwin,BrotliEncoderMode mode,size_t input_size, const uint8_t input_buffer[],size_t *encoded_size, uint8_t encoded_buffer[]);


        HB_FUNC(BROTLIENCODERCOMPRESSEDSIZE)
        {
            size_t inp_size = (size_t)hb_parni(1);
            size_t size=BrotliEncoderMaxCompressedSize(inp_size);
            hb_retnl((long)size);
        }

        HB_FUNC(BROTLIENCODERCOMPRESS)
        {
            int quality = hb_parni(1);
            int lgwin = hb_parni(2);
            BrotliEncoderMode mode = (BrotliEncoderMode)hb_parni(3);
            size_t input_size = (size_t)hb_parni(4);
            const char *input_buffer = hb_parc(5);
            size_t encoded_size = (size_t)hb_parni(6);
            char *encoded_buffer = (char *)hb_parc(7);

            BROTLI_BOOL result = BrotliEncoderCompress(quality, lgwin, mode,
                                                      input_size, (const uint8_t *)input_buffer,
                                                      &encoded_size, (uint8_t *)encoded_buffer);
            hb_retni(result);
        }

#pragma BEGINDUMP
I have brotlienc DLL file and Convert to LIB file.
If you want to test it, I will send to you mail box.
Best Regards,



Richard



Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 32bit

MySQL v8.0

Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 64bit
Posts: 104
Joined: Tue Feb 09, 2021 04:20 PM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Sat Jul 12, 2025 11:37 PM
Not sure if I understand about compression.

Part of my code to webservice:
      ::cXmlSoap += [<soap12:Body>]
      ::cXmlSoap +=    [<] + ::cProjeto + [DadosMsg xmlns="] + cSoapService + [">]
      IF ::lEnvioZip
         ::cXmlSoap += hb_base64Encode( hb_gzCompress( ::cXmlEnvio ) )
      ELSE
         ::cXmlSoap += ::cXmlEnvio
      ENDIF
      ::cXmlSoap +=    [</] + ::cProjeto + [DadosMsg>]
      ::cXmlSoap += [</soap12:Body>]
...
   IF cSoapAction != NIL .AND. ! Empty( cSoapAction )
      oServer:SetRequestHeader( "SOAPAction", cSoapAction )
   ENDIF
   IF ::lEnvioZip
      oServer:SetRequestHeader( "Accept-Encoding", "gzip,deflate" )
      oServer:SetRequestHeader( "Content-Encoding", "gzip" )
   ENDIF

JosΓ© M. C. Quintas Brazil

gtwvg, fivewin 25.12, hwgui, mingw 15.2 (32 bits)

Posts: 9022
Joined: Thu Oct 06, 2005 08:17 PM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Sun Jul 13, 2025 06:27 AM
richard-service wrote:Error E2356 testbrot.prg 22: Type mismatch in redeclaration of 'WINAPI'
You missed:

#include "windows.h"
Posts: 866
Joined: Tue Oct 16, 2007 08:57 AM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Mon Jul 14, 2025 06:40 PM
Enrico Maria Giordano wrote:
Error E2356 testbrot.prg 22: Type mismatch in redeclaration of 'WINAPI'
You missed:

#include "windows.h"
Dear EMG,

I add this and got error message below:
ηŸ¬ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι—‘ι†΄
?FiveWin for Harbour 25.04 - Apr. 2025 Harbour development power 喝
?(c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 ε–Š
斂闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑闑囁?
ο£Έ θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”θ‘”?
Compiling...
Harbour 3.2.0dev (r2503251254)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'TESTBROT.prg' and generating preprocessed output to 'TESTBROT.ppo'...
Lines 5093, Functions/Procedures 1
Generating C source output to 'TESTBROT.c'... Done.
Embarcadero C++ 7.70 for Win32 Copyright (c) 1993-2023 Embarcadero Technologies, Inc.
testbrot.c:
Error E2356 TESTBROT.prg 23: Type mismatch in redeclaration of 'BrotliEncoderMaxCompressedSize'
Error E2344 D:\FWH2504\include\brotli\encode.h 328: Earlier declaration of 'BrotliEncoderMaxCompressedSize'
Error E2356 TESTBROT.prg 24: Type mismatch in redeclaration of 'BrotliEncoderCompress'
Error E2344 D:\FWH2504\include\brotli\encode.h 362: Earlier declaration of 'BrotliEncoderCompress'
*** 4 errors in Compile ***
* Linking errors *
Best Regards,



Richard



Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 32bit

MySQL v8.0

Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 64bit
Posts: 9022
Joined: Thu Oct 06, 2005 08:17 PM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Mon Jul 14, 2025 07:07 PM
You have to remove these:
        size_t WINAPI BrotliEncoderMaxCompressedSize(size_t input_size);
        BROTLI_BOOL WINAPI BrotliEncoderCompress(int quality,int lgwin,BrotliEncoderMode mode,size_t input_size, const uint8_t input_buffer[],size_t *encoded_size, uint8_t encoded_buffer[]);
Posts: 866
Joined: Tue Oct 16, 2007 08:57 AM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Tue Jul 15, 2025 07:44 AM
Enrico Maria Giordano wrote: You have to remove these:
        size_t WINAPI BrotliEncoderMaxCompressedSize(size_t input_size);
        BROTLI_BOOL WINAPI BrotliEncoderCompress(int quality,int lgwin,BrotliEncoderMode mode,size_t input_size, const uint8_t input_buffer[],size_t *encoded_size, uint8_t encoded_buffer[]);
Dear EMG,

I try it and not work.
Best Regards,



Richard



Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 32bit

MySQL v8.0

Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 64bit
Posts: 9022
Joined: Thu Oct 06, 2005 08:17 PM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Tue Jul 15, 2025 07:47 AM

Can you show the new error?

Posts: 866
Joined: Tue Oct 16, 2007 08:57 AM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Tue Jul 15, 2025 07:48 AM
Dear Antonio, EMG, All users

Today, I found it. Maybe Convert to LIB commands problem.
So I try it again below:
implib -a brotlienc.lib brotlienc.dll
Now, It's working fine.
Best Regards,



Richard



Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 32bit

MySQL v8.0

Harbour 3.2.0dev (r2503251254) => Borland C++ v7.7 64bit
Posts: 9022
Joined: Thu Oct 06, 2005 08:17 PM
Re: FWH or [x]Harbour Like this brotli compression function
Posted: Tue Jul 15, 2025 07:49 AM
Great! :-)