Dúvidas sobre migração para xHarbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

clrod
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 17 Nov 2009 13:42
Localização: São Paulo - SP

Re: Dúvidas sobre migração para xHarbour

Mensagem por clrod »

Olá

Não manjo muito de como está o Borland hoje, a princípio é para funcionar, tem muita gente usando ele.

A dica básica é que tentar usar mesma estrutura do projeto não vai dar certo, a migração é simples, mas é diferente. Posso lhe garantir que se adaptar ao HBMK2 é muito mais fácil que usar esse seu script de compilação sem ver seu conteúdo. Claro que é mais simples ainda deixar de aprender uma coisa nova e continuar com a antiga.

Precisa gastar um tempinho para se adaptar. Evolução sempre tem um custo, mesmo que muito pequeno.

Claro que se você achar que é muito complicado, é melhor ficar no xHarbour até porque neste caso usar o xHarbour será o menor dos problemas.

------
Aproveitando, eu estava vendo estatísticas de downloads dos dois projetos e achei curioso que o xHarbour só faz um grande sucesso mesmo no Brasil, já o Harbour, apesar de ter o Brasil como seu principal usuário, tem a utilização mais distribuída pelo mundo. Porque será?

T+
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Dúvidas sobre migração para xHarbour

Mensagem por lugab »

Então, Cirod,

Quero continuar tentando e pra isso eu preciso de documentações sobre o harbour 2.0...

Tu por acaso sabe o link de guias, manuais, etc ??

GAbriel
lugab
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: Dúvidas sobre migração para xHarbour

Mensagem por Stanis Luksys »

Opa,
clrod escreveu:Se conseguir dar algum pitaco em inglês mesmo que precise usar um tradutor, eu aconselho você escrever na lista dos desenvolvedores do Harbour sobre essa questão dos diretórios no Linux, o pessoal é bem aberto.
Acredito que a grande vantagem de ser opensource é eu poder alterar e não ter que esperar pela turma de desenvolvedores, que também devem ter suas ocupações e pode levar tempo. Mas posso mandar como sugestão, apesar de não ser um bug!

De qualquer forma, não sei se vale a pena escrever lá, porque me parece uma particularidade minha. A questão é que no linux arquivos que começam com ponto não são retornados pela máscara ( * ), e nem pela máscara ( *.* ). O harbour define HB_OS_ALLFILE_MASK para Linux como ( * ), o que está CORRETO. E como oculto também não é atributo, a inclusão deles pelo parâmentro "H" (hidden) não é possível.

Para corrigir, ou melhor dizendo, adpatar as máscaras, eu alterei de modo que ao passar "H" no segundo parâmentro, ele inclua os ocultos, memso que isso não seja um atributo.

O arquivo em questão é /usr/src/harbour-2.0.0/src/rtl/direct.c.

As alterações estão entre a linha 97 e 120, mas precisa de uns retoques, porque fiz na pressa meio que só pra funcionar pro que eu precisava na hora. Coisa simples, que mais tarde eu faço e se for o caso mando lá pro pessoal.

Código: Selecionar todos

HB_FUNC( DIRECTORY )
{
   const char *   szDirSpec = hb_parc( 1 );
   const char *   szAttributes = hb_parc( 2 );
   char *         pszFree = NULL;
   ULONG          ulMask;

   PHB_ITEM  pDir = hb_itemArrayNew( 0 );
   PHB_FFIND ffind;

   /* Get the passed attributes and convert them to Harbour Flags */

   ulMask = HB_FA_ARCHIVE
          | HB_FA_READONLY
          | HB_FA_DEVICE
          | HB_FA_TEMPORARY
          | HB_FA_SPARSE
          | HB_FA_REPARSE
          | HB_FA_COMPRESSED
          | HB_FA_OFFLINE
          | HB_FA_NOTINDEXED
          | HB_FA_ENCRYPTED
          | HB_FA_VOLCOMP;

   if( szAttributes && *szAttributes )
   {
      if( ( ulMask |= hb_fsAttrEncode( szAttributes ) ) & HB_FA_LABEL )
      {
         /* NOTE: This is Clipper Doc compatible. (not operationally) */
         ulMask = HB_FA_LABEL;
      }
   }

   if( szDirSpec && *szDirSpec )
   {
      szDirSpec = hb_fsNameConv( szDirSpec, &pszFree );
      if( ulMask != HB_FA_LABEL )
      {
         if( *szDirSpec )
         {
            /* CA-Cl*pper compatible behavior - add all file mask when
             * last character is directory or drive separator
             */
            int iLen = strlen( szDirSpec ) - 1;
#ifdef HB_OS_HAS_DRIVE_LETTER
            if( szDirSpec[ iLen ] == HB_OS_PATH_DELIM_CHR ||
                szDirSpec[ iLen ] == HB_OS_DRIVE_DELIM_CHR )
#else
            if( szDirSpec[ iLen ] == HB_OS_PATH_DELIM_CHR )
#endif
            {
               if( pszFree )
               {
                  char * pszTemp = hb_xstrcpy( NULL, szDirSpec, HB_OS_ALLFILE_MASK, NULL );
                  hb_xfree( pszFree );
                  szDirSpec = pszFree = pszTemp;
               }
               else
               {
                  szDirSpec = pszFree = hb_xstrcpy( NULL, szDirSpec, HB_OS_ALLFILE_MASK, NULL );
               }
            }
         }
         else
            szDirSpec = HB_OS_ALLFILE_MASK;
      }
   }
   else
      szDirSpec = HB_OS_ALLFILE_MASK;

   /* Get the file list */

   if( ( ffind = hb_fsFindFirst( szDirSpec, ulMask ) ) != NULL )
   {
      PHB_ITEM pSubarray = hb_itemNew( NULL );

     do
      {
         char buffer[ 32 ];

         hb_arrayNew( pSubarray, F_LEN );
		 hb_arraySetC   ( pSubarray, F_NAME, ffind->szName );
         hb_arraySetNInt( pSubarray, F_SIZE, ffind->size );
         hb_arraySetDL  ( pSubarray, F_DATE, ffind->lDate );
         hb_arraySetC   ( pSubarray, F_TIME, ffind->szTime );
         hb_arraySetC   ( pSubarray, F_ATTR, hb_fsAttrDecode( ffind->attr, buffer ) );

         /* Don't exit when array limit is reached */
         hb_arrayAddForward( pDir, pSubarray );
      }
      while( hb_fsFindNext( ffind ) );

      hb_itemRelease( pSubarray );

      hb_fsFindClose( ffind );
   }
#ifdef HB_OS_UNIX
	if( strstr(szAttributes,"H") != 0  )
	{
	   szDirSpec = hb_xstrcpy( NULL,".*", szDirSpec, NULL );		
	   if( ( ffind = hb_fsFindFirst(szDirSpec, ulMask ) ) != NULL )
	   {
		  PHB_ITEM pSubarray = hb_itemNew( NULL );
		  do
		  {
			 char buffer[ 32 ];
			 hb_arrayNew( pSubarray, F_LEN );
			 hb_arraySetC   ( pSubarray, F_NAME, ffind->szName );
			 hb_arraySetNInt( pSubarray, F_SIZE, ffind->size );
			 hb_arraySetDL  ( pSubarray, F_DATE, ffind->lDate );
			 hb_arraySetC   ( pSubarray, F_TIME, ffind->szTime );
			 hb_arraySetC   ( pSubarray, F_ATTR, hb_fsAttrDecode( ffind->attr, buffer ) );
			 hb_arrayAddForward( pDir, pSubarray );
		  }
		  while( hb_fsFindNext( ffind ) );
		  hb_itemRelease( pSubarray );
		  hb_fsFindClose( ffind );
	   }
  }
#endif

   if( pszFree )
      hb_xfree( pszFree );

   hb_itemReturnRelease( pDir );
}

Bom, de repente pode ser útil pra mais alguém...

Abraços!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
clrod
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 17 Nov 2009 13:42
Localização: São Paulo - SP

Re: Dúvidas sobre migração para xHarbour

Mensagem por clrod »

Olá

lugab:

Um dos maiores problemas do Harbour é sua documentação. Basicamente o que você vai conseguir é o que está nas pasta doc da sua distribuição e que pode ser acessa pela HBIde também. Os utilitários como o compilador, o HBMK2 e outros tem um help básico por linha de comando em geral acessados por --help

Stanis:

E uma das coisas boas do open source que é você pode postar sua modificação para que toda comunidade se beneficie e até mesmo quem fez a alteração porque terá ela como padrão do produto. Não sei se o pessoal via querer mudar a função do Clipper, mas podem aproveitar sua ideia em outro função, caso eles achem que isso possa trazer algum problema.

Minha opinião é que essa modificação serviria para todos, mas você é que deve decidir o que fazer. Se um dia eu for precisar acessar os arquivos no Linux pelo Harbour, gostaria desse comportamento.

T+
Responder