Jump to content
Fivewin Brasil

gilmer

Administrador
  • Posts

    3,036
  • Joined

  • Last visited

  • Days Won

    34

Posts posted by gilmer

  1. Bom Dia a todos!


    Minha modesta opinião, é que não tem mais linguagem soberana como antigamente. É necessário saber analisar onde será usado e qual é a melhor tecnologia a ser aplicado, claro que isto olhando o seguimento que sua empresa de software trabalha, atualmente aqui usamos:

    - FiveWin;

    - Mod_Harbour (pouca coisa, integração webservice, mas preparando o back-end da nossa aplicação principal );

    - PHP (E seus diversos frameworks);

    - WinDev para aplicações Android/IOs (já abandonei, altamente produtivo, porem, muito engessado e falta de qualidade final);

    - Flutter (Qualidade muito melhor que WinDev e multiplataforma também);

    - Linguagem C para integrações necessárias hoje (é! ela sobrevive! :D); 

    - PureBasic ( Para criação de DLLs de forma muito rápida).

    - Etc..

    Infelizmente dependendo do seguimento é necessário abrir espaço para novos conhecimentos. Sempre deve iniciar em uma nova tecnologia desenvolvendo uma aplicação MVP para uma analise melhor.

    Então meu amigo Valdir! :) eu com meus  54 anos continuo aprendendo e pesquisando. Inclusive hoje participo de mentorias para aprender a gerir uma empresa de software de forma melhor e vai por mim! sempre temos que algo para aprender também em gestão ^_^, então é mais uma questão de perfil de cada pessoa, que tem cede de aprender não para nem com 80 anos, se começou uma vez, consegue mais vezes se for necessário kkkk

    Abraços

     

     

     



     

  2. Aplicação web mais próximo da realidade harbour, é o mod_harbour, são estruturas total diferente aplicação web e desktop. O Windev gera mas ele tem um componente encapsulado para web.

  3. Bom Dia,

    Segue abaixo arrumado 

    #pragma BEGINDUMP
    #include <Windows.h>
    #include <hbapi.h>


    #ifndef DEF_LIBCRC_CHECKSUM_H
    #define DEF_LIBCRC_CHECKSUM_H

    #define     CRC_POLY_CCITT    0x1021

    #define     CRC_START_CCITT_FFFF 0xFFFF

    uint16_t    crc_ccitt_ffff(    const unsigned char *input_str, size_t num_bytes       );

    #endif  // DEF_LIBCRC_CHECKSUM_H


    static uint16_t      crc_ccitt_generic( const unsigned char *input_str, size_t num_bytes, uint16_t start_value );
    static void             init_crcccitt_tab( void );

    static BOOL             crc_tabccitt_init       = FALSE;
    static uint16_t         crc_tabccitt[256];

    static BOOL    crc_tab_init      = FALSE;
    static uint16_t      crc_tab[256];

    /*
        * uint16_t crc_ccitt_ffff( const unsigned char *input_str, size_t num_bytes );
        *
        * The function crc_ccitt_ffff() performs a one-pass calculation of the CCITT
        * CRC for a byte string that has been passed as a parameter. The initial value
        * 0xffff is used for the CRC.
        */

    uint16_t crc_ccitt_ffff( const unsigned char *input_str, size_t num_bytes ) {

        return crc_ccitt_generic( input_str, num_bytes, CRC_START_CCITT_FFFF );

    }  /* crc_ccitt_ffff */

    /*
        * static uint16_t crc_ccitt_generic( const unsigned char *input_str, size_t num_bytes, uint16_t start_value );
        *
        * The function crc_ccitt_generic() is a generic implementation of the CCITT
        * algorithm for a one-pass calculation of the CRC for a byte string. The
        * function accepts an initial start value for the crc.
        */

    static uint16_t crc_ccitt_generic( const unsigned char *input_str, size_t num_bytes, uint16_t start_value ) {

        uint16_t crc;
        uint16_t tmp;
        uint16_t short_c;
        const unsigned char *ptr;
        size_t a;

        if ( ! crc_tabccitt_init ) init_crcccitt_tab();

        crc = start_value;
        ptr = input_str;

        if ( ptr != NULL ) for (a=0; a<num_bytes; a++) {

            short_c = 0x00ff & (unsigned short) *ptr;
            tmp     = (crc >> 8) ^ short_c;
            crc     = (crc << 8) ^ crc_tabccitt[tmp];

            ptr++;
        }

        return crc;

    }  /* crc_ccitt_generic */

    /*
        * static void init_crcccitt_tab( void );
        *
        * For optimal performance, the routine to calculate the CRC-CCITT uses a
        * lookup table with pre-compiled values that can be directly applied in the
        * XOR action. This table is created at the first call of the function by the
        * init_crcccitt_tab() routine.
        */

    static void init_crcccitt_tab( void ) {

        uint16_t i;
        uint16_t j;
        uint16_t crc;
        uint16_t c;

        for (i=0; i<256; i++) {

            crc = 0;
            c   = i << 8;

            for (j=0; j<8; j++) {

                if ( (crc ^ c) & 0x8000 ) crc = ( crc << 1 ) ^ CRC_POLY_CCITT;
                else                      crc =   crc << 1;

                c = c << 1;
            }

            crc_tabccitt = crc;
        }

        crc_tabccitt_init = TRUE;

    }
    // ========================================================================
    HB_FUNC( C_EMTCRC_CCITT_FFFF ) // cText --> nTextCRC
    {
        hb_retnl( crc_ccitt_ffff( ( unsigned char *  ) hb_parc( 1 ), hb_parclen( 1 ) ) );

    }

    #pragma ENDDUMP

      

×
×
  • Create New...