T168_Debug222\appl\Barcode\Two\DataMatrix文件:RSENC.C

/******************************************************************************
 *                                                                            *
 *                         M O D U L E   D E F I N E                          *
 *                                                                            *
 ******************************************************************************/

#define RSENC_C

/******************************************************************************
 *                                                                            *
 *        C O M P I L E R   D E F I N E D   I N C L U D E   F I L E S         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *            U S E R   D E F I N E D   I N C L U D E   F I L E S             *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *                         L O C A L   D E F I N E S                          *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *                        L O C A L   T Y P E D E F S                         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *             L O C A L   F U N C T I O N   P R O T O T Y P E S              *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *    L O C A L   I N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *    L O C A L   U N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/

  #include "rsenc.h"
  #include "rscmpenc.h"
  #include "rsbwbenc.h"
  #include "rseccenc.h"
  #include "rsgrdenc.h"
  #include "rscmn.h"

/*//TLCS用 97-08-28 TMS ?山 start    */
    void CalcChecks(int size);
    int GFmul(int, int);
    void InitLogTables(void);

    UNS_INT_8_BITS gfpwr[255];
    UNS_INT_8_BITS gflog[256];
        UNS_INT_8_BITS buffer [ RSCMN_MAX_SYMBOLS ] ;
/*//TLCS用 97-08-28 TMS ?山 end    */

  /*^-----------------------------------------------------------------------*/
  /* SYSTEM      :                                                          */
  /* NAME        :                                                          */
  /* DESCRIPTION :                                                          */
  /*------------------------------------------------------------------------*/
/* BX Modify 97.09.17 
//  extern IDM_Return_Code  rsenc_initialize
//    ( void )
//  {
//    IDM_Return_Code                    Rc ;
//
//    Rc = rscmpenc_initialize ( ) ;
//    if ( Rc != IDM_RETURN_SUCCESS )
//      return ( Rc ) ;
//
TLCS用 97-08-28 TMS ?山 start
   Rc = rseccenc_initialize ( ) ;
   if ( Rc != IDM_RETURN_SUCCESS )
     return ( Rc ) ;
TLCS用 97-08-28 TMS ?山 end
//
//   Rc = rsgrdenc_initialize ( ) ;
//    return ( Rc ) ;
//  }
 BX Modify 97.09.17 */
  /*^-----------------------------------------------------------------------*/
  /* SYSTEM      :                                                          */
  /* NAME        :                                                          */
  /* DESCRIPTION :                                                          */
  /*------------------------------------------------------------------------*/
  extern IDM_Return_Code  rsenc_encode
    ( UNS_INT_8_BITS *                 in_data              ,
      UNS_INT_16_BITS                  num_in_data_bytes    ,
      IDM_Format_ID                    startup_code_page    ,
      UNS_INT_16_BITS *                data_error_position  ,
      UNS_INT_16_BITS                  forced_rows          ,
      UNS_INT_16_BITS                  forced_columns       ,
      UNS_INT_16_BITS *                actual_columns       ,
      IDM_Data_Matrix *                out_data_matrix      )
  {
    IDM_Return_Code                    Rc ;
/*//  UNS_INT_8_BITS                     buffer [ RSCMN_MAX_SYMBOLS ] ;TLCS用 97-08-28 TMS ?山 start    */
    RSCMN_Matrix_Size_Type             matrix_size ;
/*** TEC Modify ***/
    int i;
    /* Initialize buffer */
    for (i = 0; i < RSCMN_MAX_SYMBOLS; i++)
        buffer[i] = 0;
/*****************/
    NOREF ( num_in_data_bytes ) ;

    Rc = rscmpenc_compress
      ( in_data ,
        startup_code_page    ,
        data_error_position  ,
        forced_rows          ,
        forced_columns       ,
        buffer               ,
        &matrix_size         ,
/* TEC Modify */
        num_in_data_bytes    ) ;
        
/**************/
    if ( Rc != IDM_RETURN_SUCCESS )
      return ( Rc ) ;

    *actual_columns = RSCMN_NUM_COLS [ matrix_size ] ;

/*//TLCS用 97-08-28 TMS ?山 start    */
   InitLogTables();
   CalcChecks(matrix_size);
/*
//    Rc = rseccenc_add_check_bytes
//      ( buffer                                 ,
//        RSCMN_DATA_SYMBOLS     [ matrix_size ] ,
//        RSCMN_NUM_INTERLEAVES  [ matrix_size ] ,
//        (UNS_INT_8_BITS * ) & ( RSCMN_BLOCK_SIZES [ matrix_size ] [ 0 ] ) ,
//        RSCMN_CHECK_BLOCK_SIZE [ matrix_size ] ) ;
//    if ( Rc != IDM_RETURN_SUCCESS )
//      return ( Rc ) ;
//TLCS用 97-08-28 TMS ?山 end
*/
    Rc = rsgrdenc_place_symbols_in_matrix
      ( buffer                              ,
        matrix_size                         ,
        out_data_matrix                     ) ;

    return ( Rc ) ;
  }
/*//TLCS用 97-08-28 TMS ?山 start    */

void CalcChecks( int size )
{
      UNS_INT_16_BITS t, i, n, dsize, csize, isize,tsize,psize;
      UNS_INT_8_BITS  v;
      const UNS_INT_8_BITS  *p;
      UNS_INT_16_BITS  data_size,check_size ;

    /* Calculate Code 1 version, interleave for F & G need to be added */

    p = 0;
   data_size = RSCMN_DATA_SYMBOLS [ size ] ;
   check_size = RSCMN_CHECK_SYMBOLS [ size ] ;
   isize = RSCMN_NUM_INTERLEAVES [ size ] ;
   csize = RSCMN_CHECK_BLOCK_SIZE [ size ] ;
   switch ( csize )
   {
     case 5 :
      p = poly5 ;
      break;
     case 7 :
      p = poly7 ;
      break;
     case 10 :
      p = poly10 ;
      break;
     case 11 :
      p = poly11 ;
      break;
     case 12 :
      p = poly12 ;
      break;
     case 14 :
      p = poly14 ;
      break;
     case 18 :
      p = poly18 ;
      break;
     case 20 :
      p = poly20 ;
      break;
     case 24 :
      p = poly24 ;
      break;
     case 28 :
      p = poly28 ;
      break;
     case 36 :
      p = poly36 ;
      break;
     case 42 :
      p = poly42 ;
      break;
     case 48 :
      p = poly48 ;
      break;
     case 56 :
      p = poly56 ;
      break;
     case 62 :
      p = poly62 ;
      break;
     case 68 :
      p = poly68 ;
      break;
     default:
/*//        printf("illegal code size\n");    */
        break;
    }
    tsize = ((csize-1) * isize);
    psize = csize-1;    
    /* init chk bytes to 0 */
    for (n = data_size; n < data_size+check_size; n++) {
        buffer[ n ] = 0;
    }
    /* calculate csize check bytes from dsize data bytes */
    for (v = 0; v < isize; v++) {
           dsize = RSCMN_BLOCK_SIZES [ size ][v] - csize;
        
        for ( n = 0; n < dsize; n++ ) {
            t = buffer[v + data_size] ^ buffer[v + (n * isize)];
            for (i = 0; i < csize-1; i++) {
                buffer[v + data_size+(i*isize)] =
                    buffer[v + data_size+((1+i)* isize)] ^ GFmul(t, p[i]);
            }
            buffer[v + data_size + tsize] = GFmul(t, p[psize]);
        }
    }
    /* return symbol length in bytes */
    return;
}

int GFmul(int p1, int p2) {

    int i;
    if ((p1 == 0) || (p2 == 0)) {
        return(0);
    }
    i = (int)gflog[p1] + (int)gflog[p2];
    if (i > 254) i -= 255;
    i = (int)gfpwr[i];
    return(i);
}
#define GEN 0x2d

void InitLogTables(void) {
    int i, j;

    for (j = 0; j < 256; j++) { gflog[j] = 0; }
    i = 1;
    for (j = 0; j < 255; j++) {
        gfpwr[j] = i;
        gflog[i] = j;
        i <<= 1;
        if (i > 255) { i ^= GEN + 256; }
    }
    return;
}
/*//TLCS用 97-08-28 TMS ?山 end    */

  /*^-----------------------------------------------------------------------*/
  /* SYSTEM      :                                                          */
  /* NAME        :                                                          */
  /* DESCRIPTION :                                                          */
  /*    releases any internal data structures                               */
  /*------------------------------------------------------------------------*/
  extern void  rsenc_terminate
    ( void )
  {
    rscmpenc_terminate ( ) ;
    rseccenc_terminate ( ) ;
    rsgrdenc_terminate ( ) ;
  }
 

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值