Página 1 de 2

converter xHarbour comercial para versao FREE

Enviado: 04 Nov 2024 16:14
por roberval
Olá, estou compilando todo meu código xharbour para harbour.
dá uma lista de erro nos cabeçalhos /harbour/include/hbfast.h
unknown type name 'PHB_BASEARRAY'
extern HB_EXPORT PHB_ITEM hb_itemPutCLStatic( PHB_ITEM pItem, const char * szText, ULONG ulLen )

entre outros.. alguma ajuda ?

tem algum roteiro de adaptação entre as duas versões ?

grato

converter xHarbour comercial para versao FREE

Enviado: 04 Nov 2024 17:04
por Itamar M. Lins Jr.
Olá!
Tem função do xHarbour sendo linkada(LIB) junto ainda... Ou algum prg(obj) não foi compilado.
O erro que dá é: Falta função tal. Tipo LIKE que só tem no xHarbour e vc troca por $.

Saudações,
Itamar M. Lins Jr.

converter xHarbour comercial para versao FREE

Enviado: 04 Nov 2024 18:20
por JoséQuintas
Programador tem que saber o princípio básico das coisas, senão até pra ajudar fica difícil.

Mesmo que isso esteja errado, só vai dar erro SE USAR.
Isso é referente compilação em C.
Máquina tá configurada direito ?

Até mesmo o título deste post confunde:
xharbour comercial para versão free
Isso é xharbour pra harbour, ou xharbour comercial pra xharbour free ?

Se tá confuso, tudo bem, normal, vamos no passo a passo pra ver o que está acontecendo e poder ajudar.
Tá compilando o que pra dar esse erro ?

converter xHarbour comercial para versao FREE

Enviado: 04 Nov 2024 20:29
por sygecom
Roberval, tudo bem por ai ?

Precisamos de mais detalhes para lhe ajudar, talvez seu ambiente de compilação está misturado ? quem sabe monta um exemplo resumido do erro e posta aqui.

converter xHarbour comercial para versao FREE

Enviado: 05 Nov 2024 09:38
por roberval
Olá pessoal, obrigado pelas respostas.

Tive que mudar do xHarbour pra Harbour pois não consegui de forma alguma fazer conexão segura https com apis.
Consegui fazer rodar esse programa q conversa com API em Harbour.
No entanto, ao compilar TODO meu sistema gerencial, dá vários erros, com certeza incompatibilidade entre as versões.

Versão do xHarbour set 2010
Versão do Harbour 3.2
Máquina Linux 32bits
Slackware 15.0

Se alguém prestar esse tipo de serviço, suporte pra migrar, favor entrar em contato.

Vou anexar o .hbp

converter xHarbour comercial para versao FREE

Enviado: 05 Nov 2024 12:21
por JoséQuintas
É como falei: o programador tem que ter o conhecimento básico.

Sua lista tem um fonte em C.
Pelo nome, é pra trabalhar com json, coisa que xharbour mais novo, e harbour já tem.
Fonte em C não é padrão, pode ser específico pra xharbour, harbour 3.2 ou harbour 3.4, depende das APIs internas do (x)harbour.
Provavelmente é ele que acusa erro.

Remova esse fonte C da lista, pra ver o que sobra pra ajustar, e quais funções json vai precisar.
Provavelmente as funções já existentes no harbour vão substituir esse fonte C, diretamente ou com ajuste de nome.

converter xHarbour comercial para versao FREE

Enviado: 05 Nov 2024 16:23
por roberval
tirei o .c

dá esse erro de falta funções. no entanto todos esse estão linkando..

hbmk2: Error: Referenced, missing, but unknown function(s): FBTEST(),
ECADUNID(), PESQ_UN(), EMSEMMOV(), EDITA_DESC_SEL(), APLICA_DESCTO(),
COPIA_PRECO(), TBROWSENEW(), TBROWSE(), UEXP_MAGENTO(),
CARGA_UCONFOTI(), HABILITA_CONFIG_PAINEL(), RET_CONTEUDO(),
FILTRO_ROTINAS(), UCONFOTI_FRETE(), EDIT_CONTEUDO(), GETMSSGLINE(),
CALCDATA(), PDFNEW(), PDFSTARTPAGE(), PDFDRAWPAGE(), PDFENDPAGE(),
PDFEND(), __STRTKPTR(), __STRTOKENCOUNT(), __STRTOKEN()

converter xHarbour comercial para versao FREE

Enviado: 05 Nov 2024 16:44
por roberval
Linkando o pdfhbdocs... da essa lista de erros..

In file included from /server/sist/obj_hb/pdfhbdocs.prg:57:
/harbour/include/hbfast.h:60:8: error: unknown type name 'PHB_BASEARRAY'
60 | PHB_BASEARRAY pScannedBaseArray;
| ^~~~~~~~~~~~~
/harbour/include/hbfast.h:65:87: error: unknown type name 'ULONG'
65 | extern HB_EXPORT PHB_ITEM hb_itemPutCLStatic( PHB_ITEM pItem, const char * szText, ULONG ulLen );
| ^~~~~
/harbour/include/hbfast.h:69:76: error: unknown type name 'ULONG'
69 | extern HB_EXPORT void hb_itemPushStaticString( const char * szText, ULONG length );
| ^~~~~
/harbour/include/hbfast.h:71:21: error: unknown type name 'USHORT'
71 | extern HB_EXPORT USHORT hb_itemArrayCyclicCount( PHB_ITEM pArray );
| ^~~~~~
/harbour/include/hbfast.h:72:21: error: unknown type name 'USHORT'
72 | extern HB_EXPORT USHORT hb_itemArrayCyclicCountWorker( PHB_BASEARRAY pArray, PHB_SCANNED_ARRAYS pScannedList, PHB_BASEARRAY pTopBaseArray );
| ^~~~~~
/harbour/include/hbfast.h:72:59: error: unknown type name 'PHB_BASEARRAY'; did you mean 'HB_IS_ARRAY'?
72 | extern HB_EXPORT USHORT hb_itemArrayCyclicCountWorker( PHB_BASEARRAY pArray, PHB_SCANNED_ARRAYS pScannedList, PHB_BASEARRAY pTopBaseArray );
| ^~~~~~~~~~~~~
| HB_IS_ARRAY
/harbour/include/hbfast.h:72:114: error: unknown type name 'PHB_BASEARRAY'; did you mean 'HB_IS_ARRAY'?
72 | extern HB_EXPORT USHORT hb_itemArrayCyclicCountWorker( PHB_BASEARRAY pArray, PHB_SCANNED_ARRAYS pScannedList, PHB_BASEARRAY pTopBaseArray );
| ^~~~~~~~~~~~~
| HB_IS_ARRAY
In file included from /server/sist/obj_hb/pdfhbdocs.prg:57:
/harbour/include/hbfast.h:73:21: error: unknown type name 'BYTE'
73 | extern HB_EXPORT BYTE hb_itemParamId( PHB_ITEM pItem );
| ^~~~
/server/sist/obj_hb/pdfhbdocs.prg:926:15: error: unknown type name 'BYTE'; did you mean 'HB_BYTE'?
926 | int Bin2i( BYTE * pszString )
| ^~~~
| HB_BYTE
/server/sist/obj_hb/pdfhbdocs.prg: In function 'HB_FUN_SETFONTARRAY':
/server/sist/obj_hb/pdfhbdocs.prg:1287:18: error: request for member 'type' in something not a structure or union
1287 | Matrix.type = HB_IT_NIL ;
| ^
/server/sist/obj_hb/pdfhbdocs.prg:1288:15: error: request for member 'type' in something not a structure or union
1288 | Col.type = HB_IT_NIL ;
| ^
/server/sist/obj_hb/pdfhbdocs.prg:1289:15: error: request for member 'type' in something not a structure or union
1289 | Row.type = HB_IT_NIL ;
| ^
/server/sist/obj_hb/pdfhbdocs.prg:1301:34: warning: implicit declaration of function 'hb_itemPutNI'; did you mean 'hb_itemParamId'? [-Wimplicit-function-declaration]
1301 | hb_arraySetForward( &Col, nj, hb_itemPutNI( &Row, Bin2i( y ) ) ) ;
| ^~~~~~~~~~~~
| hb_itemParamId
/server/sist/obj_hb/pdfhbdocs.prg:1301:54: warning: implicit declaration of function 'Bin2i' [-Wimplicit-function-declaration]
1301 | hb_arraySetForward( &Col, nj, hb_itemPutNI( &Row, Bin2i( y ) ) ) ;
| ^~~~~
/server/sist/obj_hb/pdfhbdocs.prg:1301:34: warning: passing argument 3 of 'hb_arraySetForward' makes pointer from integer without a cast [-Wint-conversion]
1301 | hb_arraySetForward( &Col, nj, hb_itemPutNI( &Row, Bin2i( y ) ) ) ;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| int
In file included from /server/sist/obj_hb/pdfhbdocs.prg:56:
/harbour/include/hbapi.h:832:93: note: expected 'PHB_ITEM' {aka 'void *'} but argument is of type 'int'
832 | extern HB_EXPORT HB_BOOL hb_arraySetForward( PHB_ITEM pArray, HB_SIZE nIndex, PHB_ITEM pItem ); /* sets an array element by forwarding it's value */
| ~~~~~~~~~^~~~~
/server/sist/obj_hb/pdfhbdocs.prg:1306:4: warning: implicit declaration of function 'hb_itemReturn' [-Wimplicit-function-declaration]
1306 | hb_itemReturn( &Matrix ) ;
| ^~~~~~~~~~~~~
/server/sist/obj_hb/pdfhbdocs.prg:1285:16: warning: unused variable 'i' [-Wunused-variable]
1285 | int i ;

converter xHarbour comercial para versao FREE

Enviado: 05 Nov 2024 18:35
por JoséQuintas
Infelizmente tá fazendo mistura de coisa pra xharbour.
Suponho que esse pdfhbdocs.prg contém fonte em C, e também foi feito pra xharbour.

Por enquanto veja aqueles primeiros erros, que parecem ter a ver com fontes seus.
Por exemplo: aplica_descto()

Para os outros, que não tem a ver com o aplicativo, por enquanto pode criar um tapa-buraco, só pra compilar.
Depois vai precisar resolver, mas por enquanto saem da lista.

----faltaresolver.prg----

Código: Selecionar todos

FUNCTION PDFNew(); RETURN Nil
FUNCTION PDFStartPage(); RETURN Nil
FUNCTION PDFDrawPage(); RETURN Nil
FUNCTION PDFEndPage(); RETURN Nil
FUNCTION PDFEnd(); RETURN Nil
FUNCTION __StrTkPtr(); RETURN Nil
FUNCTION __StrTokenCount();   RETURN Nil
FUNCTION __StrToken(); RETURN Nil
Esses vão ser mais demorados, porque provavelmente vão precisar substituto e talvez mexer em fonte.
Pelo nome: rotinas de PDF e talvez pra mexer com strings (token)
Veja os outros primeiro, porque tem a ver com funções SUAS, e tem a ver com PRG.
É resolver o que é de sua parte primeiro, pra depois resolver o que é harbour/xharbour.

Nota:
Que eu me lembre, tem aquilo de maiúscula/minúscula, que pode ou não ser o default.
Confirme se os fontes estão mesmo na lista, e se não poderia ser isso.

converter xHarbour comercial para versao FREE

Enviado: 05 Nov 2024 19:07
por Itamar M. Lins Jr.
Olá!
Aqui no Ubuntu foi de boa.
Lógico que tive que trocar, como disse LIKE por $
Esse arquivo pdfhbdocs.prg e outros, pertencem ao utilitário hbdocs na pasta utils do xHarbour.(gitHub) Que foi liberado os fontes.
Acredito que o programador fez uma união com outras libs... Html já vi no fonte também...
Interessante! Vou ver até onde podemos ir...

Código: Selecionar todos

/*
 * $Id$
 */

/*
 * Harbour Project source code:
 * PDF api Api for multiple porpurse
 *
 * Copyright 2000-2004 Luiz Rafael Culik <culikr /at/ brturbo.com>
 * www - http://www.harbour-project.org
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this software; see the file COPYING.  If not, write to
 * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
 *
 * As a special exception, the Harbour Project gives permission for
 * additional uses of the text contained in its release of Harbour.
 *
 * The exception is that, if you link the Harbour libraries with other
 * files to produce an executable, this does not by itself cause the
 * resulting executable to be covered by the GNU General Public License.
 * Your use of that executable is in no way restricted on account of
 * linking the Harbour library code into it.
 *
 * This exception does not however invalidate any other reasons why
 * the executable file might be covered by the GNU General Public License.
 *
 * This exception applies only to the code released by the Harbour
 * Project under the name Harbour.  If you copy code from other
 * Harbour Project or Free Software Foundation releases into a copy of
 * Harbour, as the General Public License permits, the exception does
 * not apply to the code that you add in this way.  To avoid misleading
 * anyone as to the status of such modified files, you must delete
 * this exception notice from them.
 *
 * If you write modifications of your own for Harbour, it is your choice
 * whether to permit this exception to apply to your modifications.
 * If you do not wish that, delete this exception notice.
 *
 */


#pragma begindump
/* declare for later use on C functions */
#include "hbapi.h"
#include "hbfast.h"
#pragma enddump

#include "pdfhbdoc.ch"
#include "common.ch"
#INCLUDE "pdf.ch"

/*Variaveis Staticas */
GLOBAL lLandScape := .F.
STATIC fontSizePoints     := 10.0 /*10.0*/
STATIC NumofRows
STATIC LEAD               := 10
STATIC iRow               := 800
STATIC fCurrentRowSetting := 800
STATIC sziFontBold        := 0
STATIC fFootBottom        := 40
STATIC fColumn            := 10
STATIC sziFont            := 0
STATIC fPageWidth         := a4_width
STATIC fPageHeigth        := a4_height
STATIC iPage              := 1
STATIC iLastLinkPos       := 0
STATIC oPdf

STATIC FUNCTION setBox( irow, icol, h, iw )

   opdf:PDF_RECT( irow, icol, h, iw )

   opdf:PDF_STROKE()
RETURN NIL

FUNCTION HB_PDFNEW( szFileResult, fontsize, iStartRow, iBottom, iStartCol, iEndBottom, szMasterPass, szPass )

   DEFAULT fontsize TO fontSizePoints
   DEFAULT iStartRow TO fPageWidth
   DEFAULT iBottom TO fPageHeigth
   DEFAULT iStartCol TO fColumn
   DEFAULT iEndBottom TO fFootBottom
   DEFAULT szMasterPass TO ""
   DEFAULT szPass TO ""
   szFileResult := Lower( szFileResult )

   oPdf := TPdf():New( szFileResult,, iStartRow, iBottom )
   IF oPdf == NIL
      RETURN .f.
   ENDIF

   fColumn := iStartCol
   oPdf:SetTop( iRow )                  // top
   oPdf:SetLeft( fColumn )              // left & right
   oPdf:SetBottom( iEndBottom )

   fPageWidth  := iStartRow
   fPageHeigth := iBottom

   fontSizePoints := fontsize
   LEAD           := fontSizePoints

   /* Ajusta Coluna inicial/rodapé e o numero atual de linhas por pagina */

   iRow               := iStartRow - iEndBottom
   fCurrentRowSetting := iRow
   fFootBottom        := iEndBottom
   fColumn            := iStartCol
   NumofRows          := iRow / fontSizePoints

RETURN .T.

FUNCTION HB_PDFENDPAGE

   iRow := fCurrentRowSetting
   opdf:PDFCLOSEpage() /* close page       */
   iPage ++
   iLastLinkPos := 0
RETURN NIL

FUNCTION HB_PDFNEWPAGE( szTitleT, szFile )

   oPdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 0 )
   IF Ischaracter( szFile )
      IF lLandScape .OR. opdf:aReport[ PAGEORIENT ] == "L"
         oPdf:pdfImage( szFile, 490 / 0.4, 60, 126, 126,, 0.4, 0.4 )
      ELSE
         oPdf:pdfImage( szFile, 755 / 0.4, 20, 126, 126,, 0.4, 0.4 )
      ENDIF
   ENDIF
   oPdF:PDFsetfont( "Courier", 1, FONTSIZEBOLD )
   oPdf:pdfAtSay( szTitleT, iRow -= 15, fColumn, .T. )

RETURN nil

FUNC HB_PDFWRITETEXT( cText )

   IF ( iRow <= fFootBottom )
      iRow := fCurrentRowSetting
      opdf:PDFCLOSEpage()
      //PDF_begin_page(szPDFFile, fPageWidth, fPageHeigth) /* start a new page */
      oPdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 0 )
      iLastLinkPos := 0
      iPage ++
   ENDIF

   opdf:PDFsetfont( FONTNORMAL, 0, fontSizePoints )

   opdf:pdfAtSay( cText, iRow -= LEAD, fColumn, .T. )
RETURN nil

FUNC HB_PDFWRITEBOLDTEXT( ctext )

   IF ( iRow <= fFootBottom )
      iRow := fCurrentRowSetting
      opdf:PDFCLOSEpage()
      //PDF_begin_page(szPDFFile, fPageWidth, fPageHeigth) /* start a new page */
      oPdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 1 )
      iLastLinkPos := 0
      iPage ++
   ENDIF

   opdf:PDFsetfont( FONTNORMAL, 1, fontSizePoints )
   opdf:pdfAtSay( cText, iRow -= LEAD, fColumn, .T. )

RETURN nil

FUNC HB_PDFWRITETEXTBOLD1( cText )

   IF ( iRow <= fFootBottom )
      iRow := fCurrentRowSetting
      opdf:PDFCLOSEpage()
      //PDF_begin_page(szPDFFile, fPageWidth, fPageHeigth) /* start a new page */
      oPdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 1 )
      iLastLinkPos := 0
      iPage ++
   ENDIF

   opdf:PDFsetfont( FONTNORMAL, 1, FONTSIZEBOLD )
   opdf:pdfAtSay( cText, iRow -= LEAD, fColumn, .T. )
   //      PDFsetfont(FONTNORMAL,0, fontSizePoints)

RETURN nil

FUNCTION HB_PDFCLOSE

   opdf:pdfclose()
   fontSizePoints     := 10.0 /*10.0*/
   LEAD               := 10
   iRow               := 800
   fCurrentRowSetting := 800
   lLandScape         := .F.

   RETURN nil

   /* FUNCAO PDFMAXLINES()
   Essa funcao retorna o numero maximo de linhas por pagina de
   acordo com a fonte setada.
*/

FUNCTION PDFMAXLINES

   RETURN NumofRows

   /* FUNCAO PDFMAXCOLS()

   Essa funcao retorna o numero maximo de colunas por pagina de
   acordo com a fonte setada.
*/

FUNCTION PDFMAXCOLS

RETURN ( ( fPageWidth - 2 * fColumn ) / fontSizePoints )

FUNCTION PDFWRITETEXTAT( cText, iThisRow, iThisCol )

LOCAL currow
   iThisRow := Iif( Isnumber( iThisRow ), fCurrentRowSetting - RowtoPoint( iThisRow ), iRow )
   iThisCol := RowtoPoint( iThisCol )
   currow   := iRow
   opdf:PDFsetfont( FONTNORMAL, 0, fontSizePoints )
   opdf:pdfAtSay( cText, iThisRow, iThisCol, .T. )

RETURN Nil

FUNCTION POINTTOROW( iPt )

LOCAL thisRow

   thisRow := iPt / FONTSIZEPOINTS

RETURN NUMOFROWS - thisRow

FUNCTION ROWTOPOINT( ThisRow )

   RETURN thisRow * FONTSIZEPOINTS

   /* FUNCAO PDFWRITETABLE(nRow, nCol , aTableCols, aLenCol,nNumLines, nStyle)
   Parametros
   nRow        -> Linha onde tabela inicia
   nCol        -> Coluna onde tabela inicia
   aTableCols  -> Array de Items da coluna
   aLenCol     -> Array com as larguras da coluna
   nNumLines   -> Numero de linhas da tabela
   nStyle      -> Stilo da tabela
*/

FUNCTION PDFWRITETABLE( nRow, nCol, pArray, pCol, fNumLines, nStyle )

LOCAL ulTempPos
LOCAL ulTempPos1
LOCAL fRow       := GraphRowtoPoint( nRow ) - 0.5 * fontSizePoints
LOCAL fCol       := RowtoPoint( nCol )
LOCAL nNumLines  := fNumLines
LOCAL fThisRow   := RowtoPoint( nRow )
LOCAL fCurRow    := fNumLines + 0.5 * fontSizePoints
LOCAL fLinesDiff := fNumLines - fRow

LOCAL DiffFromRow := fRow - iRow
LOCAL fLen        := 0
LOCAL fCurrRow    := fRow
LOCAL fTemp
LOCAL fOldCol     := fCol
LOCAL pTemp
LOCAL nLineGen
LOCAL fBoxSize
LOCAL fLastRow
LOCAL cItem

   DEFAULT pArray TO NIL

   SWITCH( nStyle )

CASE 0

   FOR Each pTemp in pCol
      fLen += RowtoPoint( pTemp )

   NEXT

   setBox( fCol, fRow, fLen, - fCurRow )

   FOR EACH pTemp IN pArray
      fRow -= LEAD

      IF Isarray( pTemp )
         fCol := fOldCol
         FOR each cItem IN pTemp
            ultempPos1 := hb_enumindex()
            opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
            fCol += RowtoPoint( pCol[ ulTempPos1 ] )
         NEXT
      ENDIF

   NEXT

   iRow -= fNumLines + fontSizePoints

   EXIT

CASE 1

   fTemp := - fCurRow

   fCol := fOldCol

   FOR each pTemp in pCol
      setBox( fCol, fRow, RowtoPoint( pTemp ), - fCurRow + ( 1 * fontSizePoints ) )
      fCol += RowtoPoint( pTemp )

   NEXT

   FOR each pTemp IN pArray

      IF Isarray( pTemp )
         fRow -= LEAD
         fCol := fOldCol

         FOR each cItem in pTemp
            ulTempPos1 := hb_enumindex()
            opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
            fCol += RowtoPoint( pCol[ ulTempPos1 ] )
         NEXT

      ENDIF

   NEXT

   iRow -= fNumLines + fontSizePoints

   EXIT

CASE 2

   nLineGen := 0
   fBoxSize := 0
   fLastRow := fRow

   fTemp := - fCurRow
   fLen  := fRow

   FOR each pTemp in pCol
      fBoxSize += RowtoPoint( pTemp )
   NEXT

   WHILE ( nLineGen < nNumLines )

      setBox( fCol, fLen, fBoxSize, - fontSizePoints * 1.5 )
      fLen     -= fontSizePoints * 1.5
      nLineGen += 2
   ENDDO

   fRow     := fCurrRow
   fLen     := fRow
   nLineGen := 0

   FOR EACH pTemp IN pCol

      WHILE ( nLineGen < nNumLines )

         setBox( fCol, fLen, RowtoPoint( pTemp ), - fontSizePoints * 1.5 )
         fLen     -= fontSizePoints * 1.5
         nLineGen += 2

      ENDDO

      fCol     += RowtoPoint( pTemp )
      fLen     := fRow
      nLineGen := 0
   NEXT

   fCol := fOldCol

   fRow := fLastRow
   fRow -= LEAD

   FOR EACH pTemp in pArray
      ulTempPos := hb_enumindex()

      IF Isarray( pTemp )

         //if ( hb_arrayGet(pArray, ulTempPos,pTemp))

         fCol := fOldCol

         FOR each cItem in pTemp

            //               PDF_show_xy( szPDFFile, hb_arrayGetCPtr( pTemp , ulTempPos1 ), fCol+1 , fRow )
            opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
            fCol += RowtoPoint( pCol[ hb_enumindex() ] )
         NEXT

         fRow -= LEAD

         IF ( ulTempPos == 1 )
            fRow += LEAD / 2
         ELSE
            fRow -= LEAD / 2
         ENDIF
      ENDIF

      IF ( ulTempPos == 1 )
         fRow -= LEAD
      ENDIF

   NEXT

   iRow -= fNumLines + fontSizePoints
   EXIT

CASE 3

   fBoxSize := 0
   fLastRow := fRow

   fTemp := - fCurRow
   fLen  := fRow

   FOR EACH pTemp in pCol
      fBoxSize += RowtoPoint( pTemp )
   NEXT

   fTemp := - fCurRow
   setBox( fCol, fRow, fBoxSize, - ( 1.5 * fontSizePoints ) )
   fTemp     := fCurRow
   fNumLines -= RowtoPoint( 3 )
   fCurRow   := fNumLines + 0.5 * fontSizePoints
   setBox( fCol, fRow - 1.5 * fontSizePoints, fBoxSize, - fCurRow + ( 1.0 * fontSizePoints ) )
   fRow := fCurrRow
   fCol := fOldCol

   FOR EACH pTemp In pCol

      //         if (ulTempPos == 1 ||ulTempPos == 2 )
      setBox( fCol, fRow, RowtoPoint( pTemp ), - ( 1.5 * fontSizePoints ) )
      //         else
      setBox( fCol, fRow - 1.5 * fontSizePoints, RowtoPoint( pTemp ), - fCurRow + ( 1.0 * fontSizePoints ) )

      fCol += RowtoPoint( pTemp )

   NEXT

   fRow -= LEAD

   FOR EACH pTemp in pArray
      ulTempPos := hb_enumindex()

      IF Isarray( ptemp )

         fCol := fOldCol

         FOR each cItem in pTemp
            ulTempPos1 := hb_enumindex()

            IF ( ulTempPos == 1 )
               opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
            ELSE
               opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
            ENDIF

            fCol += RowtoPoint( pCol[ ulTempPos1 ] )

         NEXT

         fRow -= LEAD

         IF ( ulTempPos == 1 )
            fRow += LEAD / 2
         ENDIF

      ENDIF

      IF ( ulTempPos == 1 )
         fRow -= LEAD
      ENDIF
   NEXT
   iRow -= fNumLines + fontSizePoints

   EXIT

CASE 4

   // printf("estou case 3 \n")
   fBoxSize := 0
   fLastRow := fRow

   fTemp := - fCurRow
   FOR each pTemp in pCol
      fBoxSize += RowtoPoint( pTemp )
   NEXT

   setBox( fCol, fRow, fBoxSize, - ( fontSizePoints * 1.5 ) )
   setBox( fCol, fRow - ( fNumLines + 0.5 * fontSizePoints ) + ( 1.5 * fontSizePoints ), fBoxSize, + ( fontSizePoints * 1.5 ) )
   fCol := fOldCol

   FOR EACH pTemp IN pCol
      setBox( fCol, fRow, RowtoPoint( pTemp ), - fCurRow + ( 1.5 * fontSizePoints ) )
      fCol += RowtoPoint( pTemp )
   NEXT

   FOR each pTemp in pArray
      ulTempPos := hb_enumindex()

      IF Isarray( pTemp )
         fRow -= LEAD
         fCol := fOldCol
         FOR each cItem in pTemp
            ulTempPos1 := hb_enumindex()
            IF ulTempPos == Len( pTemp )
               opdf:pdfAtSay( cItem, fRow - ( 0.5 * fontSizePoints ), fCol + 1, .T. )
            ELSEIF ulTempPos == 1
               opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
            ELSE
               opdf:pdfAtSay( cItem, fRow - ( 0.5 * fontSizePoints ), fCol + 1, .T. )
            ENDIF
            fCol += RowtoPoint( pCol[ ulTempPos1 ] )
         NEXT
         fRow -= LEAD
      ENDIF

   NEXT
   iRow -= fNumLines + fontSizePoints
   EXIT

CASE 5

   fBoxSize := 0
   FOR each pTemp in pCol
      fBoxSize += RowtoPoint( pTemp )
   NEXT
   setBox( fCol, fRow, fBoxSize, - ( 1.5 * fontSizePoints ) )

   fNumLines -= RowtoPoint( 3 )
   fCurRow   := fNumLines + 0.5 * fontSizePoints
   setBox( fCol, fRow - 1.5 * fontSizePoints, fBoxSize, - fCurRow + ( 2 * fontSizePoints ) )
   fRow -= LEAD

   FOR EACH pTemp in pArray

      ulTempPos := hb_enumindex()

      IF Isarray( ptemp )

         fCol := fOldCol
         FOR each cItem in pTemp
            ulTempPos1 := hb_enumindex()
            opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )
            fCol += RowtoPoint( pCol[ ulTempPos1 ] )
         NEXT
         fRow -= LEAD
         IF ( ulTempPos == 1 )
            fRow += LEAD / 2
         ENDIF
      ENDIF

      IF ( ulTempPos == 1 )
         fRow -= LEAD
      ENDIF
   NEXT
   iRow -= fNumLines + fontSizePoints
   EXIT

CASE 6

   nLineGen := 0
   fBoxSize := 0

   fTemp := - fCurRow
   fLen  := fRow

   FOR each pTemp in pCol
      fBoxSize += RowtoPoint( pTemp )
   NEXT
   WHILE ( nLineGen < nNumLines )

      setBox( fCol, fLen, fBoxSize, - fontSizePoints * 1.5 )
      fLen     -= fontSizePoints * 1.5
      nLineGen += 2
   ENDDO

   fRow -= LEAD

   FOR each pTemp in pArray
      ulTempPos := hb_enumindex()

      IF Isarray( ptemp )

         fCol := fOldCol

         FOR each cItem in pTemp

            ulTempPos1 := hB_enumIndex()
            opdf:pdfAtSay( cItem, fRow, fCol + 1, .T. )

            fCol += RowtoPoint( pCol[ ulTempPos1 ] )
         NEXT

         fRow -= LEAD

         IF ( ulTempPos == 1 )
            fRow += LEAD / 2
         ELSE
            fRow -= LEAD / 2
         ENDIF
      ENDIF

      IF ( ulTempPos == 1 )
         fRow -= LEAD
      ENDIF

   NEXT
   iRow -= fNumLines + fontSizePoints
   EXIT

   END
RETURN 0

FUNCTION GraphRowtoPoint( thisRow )

RETURN fCurrentRowSetting - ( thisRow * fontSizePoints )

STATIC FUNCTION inverty( y )

RETURN fCurrentRowSetting - y

FUNCTION PDFTEXTBOXED2( pText, pEnd, pStart, lDecRow, lBold )

LOCAL iSize
LOCAL sLastSize := 0
LOCAL ulTempPos := 0
LOCAL cText
   DEFAULT lBold TO .F.

   iSize := PdfMaxBoxSize(  pText, Iif( lBold, 1, 0 ), pEnd, iRow, pStart )

   FOR each cText in pText
      setText(  cText, pStart[ hb_enumindex() ], iRow, iSize, pEnd[ hb_enumindex() ], lBold )
   NEXT

   IF ( lDecRow )
      iRow -= iSize
   ENDIF

   RETURN nil

   /*  FUNCAO PDFNEW( Nome,Tamanho fonte,largura pagina, altura pagina,coluna inicial,linha final,Senhamestre,SenhaNormal, aInfo)
   Parametros:
   Nome  -> Nome do arquivo a ser criado
   Tamanho fonte  -> Tamanho da fonte a ser usada nesse documento
   largura pagina -> Tamanho da largura da pagina
   altura paginas -> Tamanho da altura da pagina
   coluna inicial -> Coluna inicial do texto
   linha final    -> Linha final do texto (
   Senhamestre    -> senha mestre de protecao
   SenhaNormal    -> senha do arquivo
   aInfo          -> Array de caracteres contendo informacoes do arquivo
   Array nesse Formato -> { Keywords,Subject,Title,Creator,Author}
   retorna verdadeiro se o arquivo foi criado, senao falso
*/

FUNCTION Pdfnew( szFileresult, fontsize, iStartRow, iBottom, iStartCol, iEndBottom, szMasterPass, szPass, ainfo )

   DEFAULT fontsize TO fontSizePoints
   DEFAULT iStartRow TO fPageWidth
   DEFAULT iBottom TO fPageHeigth
   DEFAULT iStartCol TO fColumn
   DEFAULT iEndBottom TO fFootBottom
   DEFAULT szMasterPass TO Nil
   DEFAULT szPass TO Nil

   oPdf := TPdf():New( szFileResult,, iStartRow, iBottom )
   IF oPdf == NIL
      RETURN 0
   ENDIF
   /* Ajusta fonte da geração e numero de linhas para pulos */
   fontSizePoints := fontsize
   LEAD           := fontSizePoints

   /* Ajusta Coluna inicial/rodapé e o numero atual de linhas por pagina */
   fPageWidth  := iStartRow
   fPageHeigth := iBottom

   iRow := iStartRow - iEndBottom
   IF ( iRow > 800 )
      iRow := 800
   ENDIF
   NumofRows          := iRow / fontSizePoints
   fCurrentRowSetting := iRow
   fFootBottom        := iEndBottom
   fColumn            := iStartCol

   IF Isarray( aInfo )
      opdf:PDFINFO( aInfo[ 1 ], aInfo[ 5 ], aInfo[ 2 ], aInfo[ 4 ] )
   ENDIF
RETURN 1

FUNCTION PDFEND

   opdf:PDFclose() /* close PDF document   */

   fontSizePoints     := 10.0 /*10.0*/
   LEAD               := 10
   iRow               := 800
   fCurrentRowSetting := 800
   sziFontBold        := 0
   fFootBottom        := 40
   fColumn            := 10
   sziFont            := 0
   fPageWidth         := a4_width
   fPageHeigth        := a4_height
   iPage              := 1
   lLandScape         := .F.

   RETURN nil

   /* PDFSETUNDERLINE( lUnder )
   Parametros
   lUnder -> Flag the informa se e para usar underline ou nao
   retorna o ultimo setting
*/

FUNCTION PDFSETUNDERLINE( lSet )

   RETURN opdf:SetUnderline( lSet )
   /* PDFSETOVERLINE( lUnder )
   Parametros
   lUnder -> Flag the informa se e para usar overline ou nao
   retorna o ultimo setting
*/
FUNCTION PDFSETOVERLINE( l )

   RETURN opdf:SetOverline( l )

   /* FUNCAO PDFSTARTPAGE( aHead,llShowHeader)
PARAMETROS
   aHead     -> Array que contem os cabecalhos das colunas
   llShowHeader -> flag que indica de e para criar uma nova pagina
*/

FUNCTION PDFSTARTPAGE( aPage, bOpenPage )

LOCAL cItem
LOCAL i
   DEFAULT bOpenPage TO .f.

   IF ( bOpenPage )
      opdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 0 )
   ENDIF
   FOR each citem in aPage
      i := hb_enumindex()

      IF ( i == 1 )
         opdf:PDFsetfont( "Courier", 1, FONTSIZEBOLD )
         opdf:pdfAtSay( cItem, iRow -= 15, fColumn, .T. )

      ELSE

         opdf:PDFsetfont( "Courier", 0, fontSizePoints )
         opdf:pdfAtSay( cItem, iRow -= LEAD, fColumn, .T. )
      ENDIF
   NEXT

   RETURN nil

   /* FUNCAO PDFDRAWPAGE( aPage)
   Parametros
   aPage  -> Array com items a escrever na PDF
   bOnNewPage -> Code block para evaluar se pagina acabar
*/

FUNCTION PDFDRAWPAGE( aPage, bOnNewPage )

LOCAL cItem

   FOR each cItem in aPage

      /* testa se a pagina acabou */
      IF ( iRow <= fFootBottom )

         iRow := fCurrentRowSetting
         opdf:pdfClosePage()
         iLastLinkPos := 0
         opdf:pdfNewPage( "A4", Iif( fPageHeigth < fPageWidth, "P", "L" ),, "Courier", 0 )
         iPage ++
         IF isblock( bOnNewPage )
            Eval( bOnNewPage )
         ENDIF

      ENDIF
      opdf:PDFsetfont( "Courier", 0, fontSizePoints )
      opdf:pdfAtSay( cItem, iRow -= LEAD, fColumn, .T. )

   NEXT

   RETURN nil

   /* FUNCAO PDFENDPAGE()
   fecha a pagina em criacao
*/

FUNCTION PDFENDPAGE

   iRow := fCurrentRowSetting
   opdf:PDFclosepage() /* close page       */
   iPage ++
   iLastLinkPos := 0
RETURN nil

STATIC FUNCTION SetText( szText, irow, icol, h, iw, bBold )

   opdf:PDFsetfont( "Courier", Iif( bBold, 1, 0 ), fontSizePoints )
   opdf:PDF_rect( irow, icol, iw + 5, h )
   opdf:PDF_stroke()
   //   PDF_show_boxed(p, szText, irow, icol, iw, h, "center", "")
   opdf:pdfText( szText, iRow, iCol, iw, 0, 2 )
RETURN nil

FUNCTION getText( szText, iFont, irow, icol, iw )

LOCAL h
LOCAL c

   (iFont)

   h := fontSizePoints * 2.1
   c := opdf:pdfTextCount( szText, irow, icol, iw, 0, 2 )
   h += fontSizePoints * c
RETURN h

FUNCTION PdfMaxBoxSize( pText, iFont, pEnd, iw, pStart )

LOCAL fMax         := 0
LOCAL fCurrentSize
LOCAL ulTempPos

   (iw)

   FOR ulTempPos := 1 TO Len( pText )

      fCurrentSize := getText( pText[ ulTempPos ], iFont, pStart[ ulTempPos ], iRow, pEnd[ ulTempPos ] )
      fMax         := Iif( fCurrentSize > fMax, fCurrentSize, fMax )
   NEXT
RETURN fMax

FUNCTION PDFHR( fPos, fStart )

   DEFAULT fPos TO Iif( lLandScape, fPageWidth - fColumn, fPageHeigth - fColumn )
   DEFAULT fStart TO fColumn
   opdf:PDFmoveto( fStart * fontSizePoints, iRow - LEAD / 2 )
   opdf:PDFlineto( fPos * fontSizePoints, iRow - LEAD / 2 )
   iRow -= LEAD
   opdf:PDF_stroke( )
   RETURN NIL

   /*
FUNCAO PDFPAGENUMBER()
   Retorna o numero da pagina atual sendo construida
*/

FUNCTION PDFPAGENUMBER

   RETURN iPage

   /* FUNCAO PDFCURRENTLINE()
retorna a linha atual
*/
FUNCTION PDFCURRENTLINE

   RETURN PointtoRow( iRow )

   /* FUNCAO PDFNEWLINE()
incremanta a linha atual
*/

PROCEDURE PDFNEWLINE

   iRow -= LEAD
RETURN
FUNCTION PDFPLACEIMAGE( szfile, row, col, scale_y )

   //    int image;
LOCAL scale_x
   row := RowtoPoint( row )
   col := RowtoPoint( col )
   col := inverty( col )

   scale_x := 0.40
   scale_y := Iif( Isnumber( scale_y ), scale_y / 100, 0.40 )

   opdf:PdfImage( szfile, row / scale_y, col )

RETURN nil
FUNCTION HB_SETLANDSCAPE( lLand )

   lLandScape := lLand
   //   oPdf:pdfPageOrient( Iif( lLand, "L", "P" ) )
RETURN nil

FUNCTION Pdfcomplevel( X )

   opdf:PdfCompLevel( x )
RETURN NIL

   // inline c functions

#pragma begindump
   int Bin2i( BYTE * pszString )
   {

   ULONG ulLen = strlen( (char*) pszString ) ;
                         int i = HB_MKSHORT( ( ulLen >= 1 ) ? ( BYTE ) pszString[ 0 ]:0,
   ( ulLen >= 2 ) ? ( BYTE ) pszString[ 1 ] :0 ) ;
     //int i;
   //    i = *((short *) pszString);
   return i ;
    }
   const char szFontTable[ ] = {
   "\xfa\0\xfa\0\xfa\0\xfa\0\x4d\x01\x4d\x01\x4d\x01\x85\x01"
   "\x98\x01\x2b\x02\xa4\x01\x2b\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x41\x03\xe8\x03\x41\x03\x41\x03"
   "\x0a\x03\x41\x03\x0a\x03\x0a\x03\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x34\x02\x3a\x02\xa3\x02\x3a\x02"
   "\xfa\0\xfa\0\xfa\0\xfa\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\xfa\0\xfa\0\xfa\0\xfa\0\x16\x01\x16\x01\x16\x01\x16\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\x16\x01\x4d\x01\x4d\x01\x4d\x01\x16\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x34\x02\x3a\x02\xa3\x02\x3a\x02\x34\x02\x3a\x02\xa3\x02\x3a\x02"
   "\x34\x02\x3a\x02\xa3\x02\x3a\x02\xbc\x01\xf4\x01\xf4\x01\xf4\x01"
   "\x99\x03\xa2\x03\x98\x03\x40\x03\xd2\x02\xd2\x02\x63\x02\x9b\x02"
   "\x9b\x02\x9b\x02\x63\x02\x9b\x02\x9b\x02\xd2\x02\x9b\x02\x9b\x02"
   "\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x63\x02\x9b\x02\x63\x02\x9b\x02"
   "\x2c\x02\x63\x02\x63\x02\x9b\x02\xd2\x02\x0a\x03\xd2\x02\xd2\x02"
   "\xd2\x02\x0a\x03\xd2\x02\x0a\x03\x4d\x01\x85\x01\x4d\x01\x85\x01"
   "\x85\x01\xf4\x01\xbc\x01\xf4\x01\xd2\x02\x0a\x03\x9b\x02\x9b\x02"
   "\x63\x02\x9b\x02\x2c\x02\x63\x02\x79\x03\xb0\x03\x41\x03\x79\x03"
   "\xd2\x02\xd2\x02\x9b\x02\xd2\x02\xd2\x02\x0a\x03\xd2\x02\xd2\x02"
   "\x2c\x02\x63\x02\x63\x02\x63\x02\xd2\x02\x0a\x03\xd2\x02\xd2\x02"
   "\x9b\x02\xd2\x02\x63\x02\x9b\x02\x2c\x02\x2c\x02\xf4\x01\x2c\x02"
   "\x63\x02\x9b\x02\x2c\x02\x63\x02\xd2\x02\xd2\x02\xd2\x02\xd2\x02"
   "\xd2\x02\xd2\x02\x63\x02\x9b\x02\xb0\x03\xe8\x03\x41\x03\x79\x03"
   "\xd2\x02\xd2\x02\x63\x02\x9b\x02\xd2\x02\xd2\x02\x2c\x02\x63\x02"
   "\x63\x02\x9b\x02\x2c\x02\x63\x02\x4d\x01\x4d\x01\x85\x01\x4d\x01"
   "\x16\x01\x16\x01\x16\x01\x16\x01\x4d\x01\x4d\x01\x85\x01\x4d\x01"
   "\xd5\x01\x45\x02\xa6\x01\x3a\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\xbc\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01"
   "\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01"
   "\x4d\x01\x4d\x01\x16\x01\x4d\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\x2c\x02\xf4\x01\x2c\x02\x16\x01\x16\x01\x16\x01\x16\x01"
   "\x16\x01\x4d\x01\x16\x01\x16\x01\xf4\x01\x2c\x02\xbc\x01\xf4\x01"
   "\x16\x01\x16\x01\x16\x01\x16\x01\x0a\x03\x41\x03\xd2\x02\x0a\x03"
   "\xf4\x01\x2c\x02\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xf4\x01\x2c\x02\xf4\x01\xf4\x01"
   "\x4d\x01\xbc\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01"
   "\x16\x01\x4d\x01\x16\x01\x16\x01\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
   "\xf4\x01\xf4\x01\xbc\x01\xbc\x01\xd2\x02\xd2\x02\x9b\x02\x9b\x02"
   "\xf4\x01\xf4\x01\xbc\x01\xf4\x01\xf4\x01\xf4\x01\xbc\x01\xbc\x01"
   "\xbc\x01\xbc\x01\x85\x01\x85\x01\xe0\x01\x8a\x01\x90\x01\x5c\x01"
   "\xc8\0\xdc\0\x13\x01\xdc\0\xe0\x01\x8a\x01\x90\x01\x5c\x01"
   "\x1d\x02\x08\x02\x1d\x02\x3a\x02\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x85\x01\x85\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xa7\0\xa7\0\xa7\0\xa7\0\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xb4\0\x16\x01\xd6\0\x16\x01"
   "\xbc\x01\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x2c\x02\x2c\x02\xf4\x01\x2c\x02\x2c\x02\x2c\x02\xf4\x01\x2c\x02"
   "\0\0\0\0\0\0\0\0\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xfa\0\xfa\0\xfa\0\xfa\0\0\0\0\0\0\0\0\0"
   "\xc5\x01\x1c\x02\x0b\x02\xf4\x01\x5e\x01\x5e\x01\x5e\x01\x5e\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\xbc\x01\xf4\x01\x2c\x02\xf4\x01"
   "\xbc\x01\xf4\x01\x2c\x02\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xe8\x03\xe8\x03\x79\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03"
   "\0\0\0\0\0\0\0\0\xbc\x01\xf4\x01\xf4\x01\xf4\x01"
   "\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\0\0\0\0\0\0\0\0"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\xe8\x03\xe8\x03\x79\x03\xe8\x03\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\x79\x03\xe8\x03\x79\x03\xb0\x03"
   "\0\0\0\0\0\0\0\0\x14\x01\x2c\x01\x14\x01\x0a\x01"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\x63\x02\x9b\x02\x2c\x02\x63\x02\xd2\x02\x0a\x03\xd2\x02\xd2\x02"
   "\x79\x03\xe8\x03\xb0\x03\xb0\x03\x36\x01\x4a\x01\x36\x01\x2c\x01"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\x9b\x02\xd2\x02\x9b\x02\xd2\x02"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\x16\x01\x16\x01\x16\x01\x16\x01"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\x16\x01\x16\x01\x16\x01\x16\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01"
   "\xd2\x02\xd2\x02\x9b\x02\xd2\x02\xf4\x01\x2c\x02\xf4\x01\xf4\x01"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x4d\x01\x16\x01\x4d\x01"
   "\x63\x01\xda\x01\x63\x01\xda\x01\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x79\x03\x79\x03\x79\x03\x79\x03"
   "\x9b\x02\xd2\x02\x9b\x02\xd2\x02\xde\0\x16\x01\xde\0\x16\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x85\x01\x85\x01\x85\x01\x85\x01\x48\x02\x48\x02\x48\x02\x48\x02"
   "\x16\x01\x16\x01\x16\x01\x16\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x16\x01\x4d\x01\x16\x01\x4d\x01\x16\x01\x4d\x01\x16\x01\x4d\x01"
   "\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02"
   "\x48\x02\x48\x02\x48\x02\x48\x02\x2c\x02\x63\x02\x2c\x02\x63\x02"
   "\xf7\x03\xcf\x03\xf7\x03\xcf\x03\x9b\x02\xd2\x02\x9b\x02\xd2\x02"
   "\x9b\x02\xd2\x02\x9b\x02\xd2\x02\xd2\x02\xd2\x02\xd2\x02\xd2\x02"
   "\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02"
   "\x63\x02\x63\x02\x63\x02\x63\x02\x0a\x03\x0a\x03\x0a\x03\x0a\x03"
   "\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x16\x01\x16\x01\x16\x01\x16\x01"
   "\xf4\x01\x2c\x02\xf4\x01\x2c\x02\x9b\x02\xd2\x02\x9b\x02\xd2\x02"
   "\x2c\x02\x63\x02\x2c\x02\x63\x02\x41\x03\x41\x03\x41\x03\x41\x03"
   "\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x0a\x03\x0a\x03\x0a\x03\x0a\x03"
   "\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x0a\x03\x0a\x03\x0a\x03\x0a\x03"
   "\xd2\x02\xd2\x02\xd2\x02\xd2\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02"
   "\x63\x02\x63\x02\x63\x02\x63\x02\xd2\x02\xd2\x02\xd2\x02\xd2\x02"
   "\x9b\x02\x9b\x02\x9b\x02\x9b\x02\xb0\x03\xb0\x03\xb0\x03\xb0\x03"
   "\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02\x9b\x02"
   "\x63\x02\x63\x02\x63\x02\x63\x02\x16\x01\x4d\x01\x16\x01\x4d\x01"
   "\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x4d\x01\x16\x01\x4d\x01"
   "\xd5\x01\x48\x02\xd5\x01\x48\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\xde\0\x16\x01\xde\0\x16\x01\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x2c\x02\x63\x02\x2c\x02\x63\x02\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
   "\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x16\x01\x4d\x01\x16\x01\x4d\x01\x2c\x02\x63\x02\x2c\x02\x63\x02"
   "\x2c\x02\x63\x02\x2c\x02\x63\x02\xde\0\x16\x01\xde\0\x16\x01"
   "\xde\0\x16\x01\xde\0\x16\x01\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
   "\xde\0\x16\x01\xde\0\x16\x01\x41\x03\x79\x03\x41\x03\x79\x03"
   "\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x63\x02"
   "\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x63\x02\x2c\x02\x63\x02"
   "\x4d\x01\x85\x01\x4d\x01\x85\x01\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
   "\x16\x01\x4d\x01\x16\x01\x4d\x01\x2c\x02\x63\x02\x2c\x02\x63\x02"
   "\xf4\x01\x2c\x02\xf4\x01\x2c\x02\xd2\x02\x0a\x03\xd2\x02\x0a\x03"
   "\xf4\x01\x2c\x02\xf4\x01\x2c\x02\xf4\x01\x2c\x02\xf4\x01\x2c\x02"
   "\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x4e\x01\x85\x01\x4e\x01\x85\x01"
   "\x04\x01\x18\x01\x04\x01\x18\x01\x4e\x01\x85\x01\x4e\x01\x85\x01"
   "\x48\x02\x48\x02\x48\x02\x48\x02\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\xa7\0\xa7\0\xa7\0\xa7\0\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\xbf\0\xee\0\xbf\0\xee\0"
   "\x4d\x01\xf4\x01\x4d\x01\xf4\x01\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\xf4\x01\x63\x02\xf4\x01\x63\x02\xf4\x01\x63\x02\xf4\x01\x63\x02"
   "\0\0\0\0\0\0\0\0\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\x16\x01\x16\x01\x16\x01\x16\x01\0\0\0\0\0\0\0\0"
   "\x19\x02\x2c\x02\x19\x02\x2c\x02\x5e\x01\x5e\x01\x5e\x01\x5e\x01"
   "\xde\0\x16\x01\xde\0\x16\x01\x4d\x01\xf4\x01\x4d\x01\xf4\x01"
   "\x4d\x01\xf4\x01\x4d\x01\xf4\x01\x2c\x02\x2c\x02\x2c\x02\x2c\x02"
   "\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03\xe8\x03"
   "\0\0\0\0\0\0\0\0\x63\x02\x63\x02\x63\x02\x63\x02"
   "\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\0\0\0\0\0\0\0\0"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\0\0\0\0\0\0\0\0\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01"
   "\xe8\x03\xe8\x03\xe8\x03\xe8\x03\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\xe8\x03\xe8\x03\xe8\x03\xe8\x03"
   "\0\0\0\0\0\0\0\0\x72\x01\x72\x01\x72\x01\x72\x01"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\x2c\x02\x63\x02\x2c\x02\x63\x02\x0a\x03\x0a\x03\x0a\x03\x0a\x03"
   "\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x6d\x01\x6d\x01\x6d\x01\x6d\x01"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\x79\x03\x79\x03\x79\x03\x79\x03"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\x16\x01\x16\x01\x16\x01\x16\x01"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\xde\0\x16\x01\xde\0\x16\x01\x63\x02\x63\x02\x63\x02\x63\x02"
   "\xb0\x03\xb0\x03\xb0\x03\xb0\x03\x63\x02\x63\x02\x63\x02\x63\x02"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   "\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02\x58\x02"
   } ;
           const int szFontTable_size = 5376 ;

   HB_FUNC( CALCDATA )
   {
   int rowsperstrip = hb_parnd( 1 ) ;
                                float y = hb_parnd( 2 ) ;
                                float h = hb_parnd( 3 ) ;
                                int row, res = 0;
                                int p ;
                                for ( row = 0 ;   row < h ;   row += rowsperstrip )
   {
   int height ;
           height = row + rowsperstrip > h ? h - row :rowsperstrip ;
           p = ( h - row - height ) ;
           res = y + 1 * p ;
           }
   hb_retni( res ) ;
             }
#pragma enddump

   /*FUNCAO PDFBOXCOLOR(nRed,nGreen,nBlue)
   Parametros
   nRed   -> Quantidade de vermelho na composicao da cor ( valor entre 0 a 255)
   nGreen -> Quantidade de verde na composicao da cor    ( valor entre 0 a 255)
   nBlue  -> Quantidade de azul na composicao da cor     ( valor entre 0 a 255)
*/

FUNCTION PDFBOXCOLOR( R, G, B )

   oPdf:PDFsetrgbcolor( R / 255, G / 255, B / 255 )
RETURN NIL

FUNCTION PDFTEXTCOLOR( R, G, B )

   oPdf:PDFsetrgbcolor( R / 255, G / 255, B / 255 )
RETURN NIL

Saudações,
Itamar M. Lins Jr.

converter xHarbour comercial para versao FREE

Enviado: 05 Nov 2024 19:11
por Itamar M. Lins Jr.
Olá!
O sistema dele no Linux deve, estar pegando hbfast.h do xHarbour.
Pq esse arquivo tem nos dois sistemas, e provavelmente foi substituído...(não sei) estou supondo, uma vez que aqui não deu erro.

Saudações,
Itamar M. Lins Jr.

converter xHarbour comercial para versao FREE

Enviado: 05 Nov 2024 19:40
por Itamar M. Lins Jr.
Olá!
Creio que entendi.
Foi copiado para pasta include do Harbour o arquivo hbfast.h que não tem no Harbour.
Existe arquivo no Harbour, fica na pasta contrib/xharbour, mas o conteúdo dele aponta para o arquivo hbapi.h
Esse ai é do xHarbour, por isso dá erro, e não poderia estar fazendo isso, gera uma confusão sem tamanho. (por conta das funções de compatibilidade)

Saudações,
Itamar M. Lins Jr.

converter xHarbour comercial para versao FREE

Enviado: 06 Nov 2024 08:26
por roberval
Bom dia amigos, obrigado pelo empenho em ajudar.

Estou estranhando falarem que tem xharbour misturado.
Nessa máquina eu só instalei o Harbour.
Tudo bem que deve ter programas adaptados pro xHb, esses, terei q tirar e ver o que tem compativel no Hb.

Farei as devidas alterações sugeridas. Vou postando os resultados

Mais uma vez, obrigado

converter xHarbour comercial para versao FREE

Enviado: 06 Nov 2024 10:49
por Itamar M. Lins Jr.
Olá!
Não tem essas linhas que aparecem ai no seu.
/harbour/include/hbfast.h:60:8: error: unknown type name 'PHB_BASEARRAY'
60 | PHB_BASEARRAY pScannedBaseArray;
Não existe esse arquivo no Harbour, nessa pasta /INCLUDE.

hbfast.h do Harbour na pasta /contrib/xhb

Código: Selecionar todos

#include "hbapi.h"
Só tem essa linha ai.

Saudações,
Itamar M. Lins Jr.

converter xHarbour comercial para versao FREE

Enviado: 07 Nov 2024 16:39
por roberval
olá pessoal
resolvi ir compilando poucos prgs pra ver se caminha..

anexei o prg em questão

-oart
-inc
-compr=yes
-ldflag=--static
-quiet

/server/sist/_hb/sag/art.prg

ERROS

Harbour 3.2.0dev (r2312082217)
Copyright (c) 1999-2021, https://harbour.github.io/
Compiling '/server/sist/_hb/sag/art.prg'...
Lines 1170, Functions/Procedures 6
Generating C source output to '.hbmk/linux/gcc/art.c'... Done.
/usr/bin/ld: cannot find -lpcre
collect2: error: ld returned 1 exit status
hbmk2[art]: Error: Running linker. 1
gcc .hbmk/linux/gcc/art.o '.hbmk/linux/gcc/_hbmkaut_art.o' --static -Wl,--start-group -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgttrm -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lm -ldl -lrt -lpcre -lz -lgpm -Wl,--end-group -oart -L/harbour/lib/linux/gcc