PHB_ZEBRA hb_zebra_create_upca( const char * szCode, HB_SIZE nLen, int iFlags ) { PHB_ZEBRA pZebra; int i, iLen = ( int ) nLen; HB_SYMBOL_UNUSED( iFlags ); pZebra = hb_zebra_create(); pZebra->iType = HB_ZEBRA_TYPE_UPCA; if( iLen != 11 && iLen != 12 ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } for( i = 0; i < iLen; i++ ) { if( szCode[ i ] < '0' || szCode[ i ] > '9' ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } } if( iLen == 11 ) { pZebra->szCode = ( char * ) hb_xgrab( 13 ); hb_xmemcpy( pZebra->szCode, szCode, 11 ); pZebra->szCode[ 11 ] = _upca_checksum( szCode ); pZebra->szCode[ 12 ] = '\0'; } else { if( szCode[ 11 ] != _upca_checksum( szCode ) ) { pZebra->iError = HB_ZEBRA_ERROR_BADCHECKSUM; return pZebra; } pZebra->szCode = ( char * ) hb_xgrab( 13 ); hb_xmemcpy( pZebra->szCode, szCode, 12 ); pZebra->szCode[ 12 ] = '\0'; } szCode = pZebra->szCode; pZebra->pBits = hb_bitbuffer_create(); hb_bitbuffer_cat_int( pZebra->pBits, 5, 3 ); /* start */ for( i = 0; i < 6; i++ ) hb_bitbuffer_cat_int( pZebra->pBits, s_rcode[ szCode[ i ] - '0' ] ^ 0x7F, 7 ); hb_bitbuffer_cat_int( pZebra->pBits, 10, 5 ); /* middle */ for( i = 6; i < 12; i++ ) hb_bitbuffer_cat_int( pZebra->pBits, s_rcode[ szCode[ i ] - '0' ], 7 ); hb_bitbuffer_cat_int( pZebra->pBits, 5, 3 ); /* stop */ return pZebra; }
PHB_ZEBRA hb_zebra_create_ean8( const char * szCode, HB_SIZE nLen, int iFlags ) { PHB_ZEBRA pZebra; int i, iLen = ( int ) nLen; HB_SYMBOL_UNUSED( iFlags ); pZebra = hb_zebra_create(); pZebra->iType = HB_ZEBRA_TYPE_EAN8; if( iLen != 7 && iLen != 8 ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } for( i = 0; i < iLen; i++ ) { if( szCode[ i ] < '0' || szCode[ i ] > '9' ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } } if( iLen == 7 ) { pZebra->szCode = ( char * ) hb_xgrab( 9 ); hb_xmemcpy( pZebra->szCode, szCode, 7 ); pZebra->szCode[ 7 ] = _ean8_checksum( szCode ); pZebra->szCode[ 8 ] = '\0'; } else { if( szCode[ 7 ] != _ean8_checksum( szCode ) ) { pZebra->iError = HB_ZEBRA_ERROR_BADCHECKSUM; return pZebra; } pZebra->szCode = ( char * ) hb_xgrab( 9 ); hb_xmemcpy( pZebra->szCode, szCode, 8 ); pZebra->szCode[ 8 ] = '\0'; } szCode = pZebra->szCode; pZebra->pBits = hb_bitbuffer_create(); hb_bitbuffer_cat_int( pZebra->pBits, 5, 3 ); /* start */ for( i = 0; i < 4; i++ ) hb_bitbuffer_cat_int( pZebra->pBits, s_rcode[ szCode[ i ] - '0' ] ^ 0x7F, 7 ); hb_bitbuffer_cat_int( pZebra->pBits, 10, 5 ); /* middle */ for( i = 4; i < 8; i++ ) hb_bitbuffer_cat_int( pZebra->pBits, s_rcode[ szCode[ i ] - '0' ], 7 ); hb_bitbuffer_cat_int( pZebra->pBits, 5, 3 ); /* stop */ return pZebra; }
static void _hb_jsonCtxAdd( PHB_JSON_ENCODE_CTX pCtx, const char * szString, HB_SIZE nLen ) { if( pCtx->pHead + nLen >= pCtx->pBuffer + pCtx->nAlloc ) { HB_SIZE nSize = pCtx->pHead - pCtx->pBuffer; pCtx->nAlloc += ( pCtx->nAlloc << 1 ) + nLen; pCtx->pBuffer = ( char * ) hb_xrealloc( pCtx->pBuffer, pCtx->nAlloc ); pCtx->pHead = pCtx->pBuffer + nSize; } if( szString ) { hb_xmemcpy( pCtx->pHead, szString, nLen ); pCtx->pHead += nLen; } }
HB_BOOL hb_lppSend( PHB_LPP pSocket, const void * data, HB_SIZE len, HB_MAXINT timeout ) { HB_MAXINT nTime = 0; long lSend; if( ! pSocket->pSendBuffer ) { pSocket->pSendBuffer = ( char * ) hb_xgrab( len + 4 ); HB_PUT_LE_UINT32( pSocket->pSendBuffer, len ); hb_xmemcpy( pSocket->pSendBuffer + 4, data, len ); pSocket->nSendLen = len + 4; pSocket->nSendPos = 0; } if( timeout > 0 ) nTime = ( HB_MAXINT ) hb_dateMilliSeconds() + timeout; for( ;; ) { if( pSocket->nSendLen - pSocket->nSendPos < ( HB_SIZE ) LONG_MAX ) lSend = ( long ) ( pSocket->nSendLen - pSocket->nSendPos ); else lSend = LONG_MAX; lSend = hb_socketSend( pSocket->sd, pSocket->pSendBuffer + pSocket->nSendPos, lSend, 0, timeout ); if( lSend == -1 ) { pSocket->iError = hb_socketGetError(); return HB_FALSE; } pSocket->nSendPos += lSend; if( pSocket->nSendPos == pSocket->nSendLen ) { hb_xfree( pSocket->pSendBuffer ); pSocket->pSendBuffer = NULL; pSocket->iError = 0; return HB_TRUE; } if( timeout == 0 || ( timeout > 0 && ( timeout = nTime - ( HB_MAXINT ) hb_dateMilliSeconds() ) <= 0 ) ) { pSocket->iError = HB_SOCKET_ERR_TIMEOUT; return HB_FALSE; } } }
/* helper function for the justxxx() functions */ static void do_justify( int iSwitch ) { int iNoRet; iNoRet = ct_getref() && ISBYREF( 1 ); if( ISCHAR( 1 ) ) { const char * pcString = hb_parc( 1 ); HB_SIZE sStrLen = hb_parclen( 1 ); char cJustChar; const char * pc; char * pcRet, * pcw; HB_SIZE sJustOffset; if( sStrLen == 0 ) { if( iNoRet ) hb_ret(); else hb_retc_null(); return; } if( hb_parclen( 2 ) > 0 ) cJustChar = *( hb_parc( 2 ) ); else if( ISNUM( 2 ) ) cJustChar = ( char ) ( hb_parnl( 2 ) % 256 ); else cJustChar = 0x20; pcRet = ( char * ) hb_xgrab( sStrLen + 1 ); switch( iSwitch ) { case DO_JUSTIFY_JUSTLEFT: pc = pcString; sJustOffset = 0; while( ( *pc == cJustChar ) && ( pc < pcString + sStrLen ) ) { sJustOffset++; pc++; } hb_xmemcpy( pcRet, pcString + sJustOffset, (size_t) ( sStrLen - sJustOffset ) ); for( pcw = pcRet + sStrLen - sJustOffset; pcw < pcRet + sStrLen; pcw++ ) { *pcw = cJustChar; } break; case DO_JUSTIFY_JUSTRIGHT: pc = pcString + sStrLen - 1; sJustOffset = 0; while( ( *pc == cJustChar ) && ( pc >= pcString ) ) { sJustOffset++; pc--; } for( pcw = pcRet; pcw < pcRet + sJustOffset; pcw++ ) { *pcw = cJustChar; } hb_xmemcpy( pcRet + sJustOffset, pcString, (size_t) ( sStrLen - sJustOffset ) ); break; } if( ISBYREF( 1 ) ) hb_storclen( pcRet, sStrLen, 1 ); if( iNoRet ) { hb_ret(); hb_xfree( pcRet ); } else hb_retclen_buffer( pcRet, sStrLen ); } else /* ISCHAR( 1 ) */ { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); if( iArgErrorMode != CT_ARGERR_IGNORE ) { pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, iSwitch == DO_JUSTIFY_JUSTLEFT ? CT_ERROR_JUSTLEFT : CT_ERROR_JUSTRIGHT, NULL, HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); } if( pSubst != NULL ) hb_itemReturnRelease( pSubst ); else if( iNoRet ) hb_ret(); else hb_retc_null(); } }
PHB_ZEBRA hb_zebra_create_msi( const char * szCode, HB_SIZE nLen, int iFlags ) { PHB_ZEBRA pZebra; int i, j, iN, iW, iLen = ( int ) nLen; pZebra = hb_zebra_create(); pZebra->iType = HB_ZEBRA_TYPE_MSI; for( i = 0; i < iLen; i++ ) { if( szCode[ i ] < '0' || szCode[ i ] > '9' ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } } pZebra->szCode = ( char * ) hb_xgrab( iLen + 1 ); hb_xmemcpy( pZebra->szCode, szCode, iLen ); pZebra->szCode[ iLen ] = '\0'; szCode = pZebra->szCode; pZebra->pBits = hb_bitbuffer_create(); if( iFlags & HB_ZEBRA_FLAG_WIDE2_5 ) { iN = 2; iW = 5; } else if( iFlags & HB_ZEBRA_FLAG_WIDE3 ) { iN = 1; iW = 3; } else { iN = 1; iW = 2; } /* start */ hb_bitbuffer_cat_int( pZebra->pBits, 31, iW ); hb_bitbuffer_cat_int( pZebra->pBits, 0, iN ); for( i = 0; i < iLen; i++ ) { char code = szCode[ i ] - '0'; for( j = 0; j < 4; j++ ) { if( code & 8 ) { hb_bitbuffer_cat_int( pZebra->pBits, 31, iW ); hb_bitbuffer_cat_int( pZebra->pBits, 0, iN ); } else { hb_bitbuffer_cat_int( pZebra->pBits, 3, iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, iW ); } code <<= 1; } } if( iFlags & HB_ZEBRA_FLAG_CHECKSUM ) { char code = _msi_checksum( szCode ); code -= '0'; for( j = 0; j < 4; j++ ) { if( code & 8 ) { hb_bitbuffer_cat_int( pZebra->pBits, 31, iW ); hb_bitbuffer_cat_int( pZebra->pBits, 0, iN ); } else { hb_bitbuffer_cat_int( pZebra->pBits, 3, iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, iW ); } code <<= 1; } } /* stop */ hb_bitbuffer_cat_int( pZebra->pBits, 3, iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, iW ); hb_bitbuffer_cat_int( pZebra->pBits, 3, iN ); return pZebra; }
/* helper function for the justxxx() functions */ static void do_justify (int iSwitch) { int iNoRet; iNoRet = ct_getref() && ISBYREF( 1 ); if (ISCHAR (1)) { char *pcString = hb_parc (1); size_t sStrLen = hb_parclen (1); char cJustChar; char *pc, *pcRet; size_t sJustOffset; if ( sStrLen == 0 ) { if (iNoRet) { hb_ret(); } else { hb_retc( "" ); } return; } if (hb_parclen (2) > 0) cJustChar = *(hb_parc (2)); else if (ISNUM (2)) cJustChar = (char)( hb_parnl (2) % 256 ); else cJustChar = 0x20; pcRet = ( char *)hb_xgrab (sStrLen); switch (iSwitch) { case DO_JUSTIFY_JUSTLEFT: { pc = pcString; sJustOffset = 0; while ((*pc == cJustChar) && (pc < pcString+sStrLen)) { sJustOffset++; pc++; } hb_xmemcpy (pcRet, pcString+sJustOffset, sStrLen-sJustOffset); for (pc = pcRet+sStrLen-sJustOffset; pc < pcRet+sStrLen; pc++) { *pc = cJustChar; } }; break; case DO_JUSTIFY_JUSTRIGHT: { pc = pcString+sStrLen-1; sJustOffset = 0; while ((*pc == cJustChar) && (pc >= pcString)) { sJustOffset++; pc--; } for (pc = pcRet; pc < pcRet+sJustOffset; pc++) { *pc = cJustChar; } hb_xmemcpy (pcRet+sJustOffset, pcString, sStrLen-sJustOffset); }; break; } if (ISBYREF (1)) hb_storclen (pcRet, sStrLen, 1); if (iNoRet) hb_ret(); else hb_retclen (pcRet, sStrLen); hb_xfree (pcRet); } else /* ISCHAR (1) */ { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); if (iArgErrorMode != CT_ARGERR_IGNORE) { pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, (iSwitch == DO_JUSTIFY_JUSTLEFT ? CT_ERROR_JUSTLEFT : CT_ERROR_JUSTRIGHT), NULL, (iSwitch == DO_JUSTIFY_JUSTLEFT ? "JUSTLEFT" : "JUSTRIGHT"), 0, EF_CANSUBSTITUTE, 2, hb_paramError (1), hb_paramError (2)); } if (pSubst != NULL) { hb_itemRelease( hb_itemReturnForward( pSubst ) ); } else { if (iNoRet) hb_ret(); else hb_retc (""); } } return; }
PHB_ZEBRA hb_zebra_create_itf( const char * szCode, HB_SIZE nLen, int iFlags ) { PHB_ZEBRA pZebra; int i, iN, iW, iLen = ( int ) nLen; char csum; pZebra = hb_zebra_create(); pZebra->iType = HB_ZEBRA_TYPE_ITF; for( i = 0; i < iLen; i++ ) { if( szCode[ i ] < '0' || szCode[ i ] > '9' ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } } if( ( iLen + ( iFlags & HB_ZEBRA_FLAG_CHECKSUM ? 1 : 0 ) ) & 1 ) { pZebra->szCode = ( char * ) hb_xgrab( iLen + 2 ); pZebra->szCode[ 0 ] = '0'; hb_xmemcpy( pZebra->szCode + 1, szCode, iLen ); pZebra->szCode[ iLen + 1 ] = '\0'; } else { pZebra->szCode = ( char * ) hb_xgrab( iLen + 1 ); hb_xmemcpy( pZebra->szCode, szCode, iLen ); pZebra->szCode[ iLen ] = '\0'; } szCode = pZebra->szCode; if( iFlags & HB_ZEBRA_FLAG_CHECKSUM ) csum = _itf_checksum( pZebra->szCode ); else csum = 0; if( iFlags & HB_ZEBRA_FLAG_WIDE2_5 ) { iN = 2; iW = 5; } else if( iFlags & HB_ZEBRA_FLAG_WIDE3 ) { iN = 1; iW = 3; } else { iN = 1; iW = 2; } pZebra->pBits = hb_bitbuffer_create(); /* start */ hb_bitbuffer_cat_int( pZebra->pBits, 3, iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, iN ); hb_bitbuffer_cat_int( pZebra->pBits, 3, iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, iN ); for( i = 0; szCode[ i ]; i += 2 ) { char c1 = s_code[ szCode[ i ] - '0' ], c2 = szCode[ i + 1 ] ? s_code[ szCode[ i + 1 ] - '0' ] : csum; hb_bitbuffer_cat_int( pZebra->pBits, 31, c1 & 1 ? iW : iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, c2 & 1 ? iW : iN ); c1 >>= 1; c2 >>= 1; hb_bitbuffer_cat_int( pZebra->pBits, 31, c1 & 1 ? iW : iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, c2 & 1 ? iW : iN ); c1 >>= 1; c2 >>= 1; hb_bitbuffer_cat_int( pZebra->pBits, 31, c1 & 1 ? iW : iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, c2 & 1 ? iW : iN ); c1 >>= 1; c2 >>= 1; hb_bitbuffer_cat_int( pZebra->pBits, 31, c1 & 1 ? iW : iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, c2 & 1 ? iW : iN ); c1 >>= 1; c2 >>= 1; hb_bitbuffer_cat_int( pZebra->pBits, 31, c1 & 1 ? iW : iN ); hb_bitbuffer_cat_int( pZebra->pBits, 0, c2 & 1 ? iW : iN ); if( ! szCode[ i + 1 ] ) break; } /* stop */ hb_bitbuffer_cat_int( pZebra->pBits, 31, iW ); hb_bitbuffer_cat_int( pZebra->pBits, 0, iN ); hb_bitbuffer_cat_int( pZebra->pBits, 3, iN ); return pZebra; }
/* helper function for the token function group I */ static void do_token1( int iSwitch ) { PCT_TOKEN ct_token = ( PCT_TOKEN ) hb_stackGetTSD( &s_ct_token ); int iParamCheck = 0; int iNoRef = ct_getref() && HB_ISBYREF( 1 ); switch( iSwitch ) { case DO_TOKEN1_TOKEN: ct_token->iPreSeparator = ct_token->iPostSeparator = -1; /* no "break" here !! */ case DO_TOKEN1_ATTOKEN: case DO_TOKEN1_NUMTOKEN: case DO_TOKEN1_TOKENLOWER: case DO_TOKEN1_TOKENUPPER: iParamCheck = HB_ISCHAR( 1 ); break; } if( iParamCheck ) { const char * pcString = hb_parc( 1 ); HB_SIZE sStrLen = hb_parclen( 1 ); const char * pcSeparatorStr; HB_SIZE sSeparatorStrLen; HB_SIZE nTokenCounter; HB_SIZE nSkip; const char * pcSubStr; char * pcRet = NULL; HB_SIZE sSubStrLen; HB_SIZE sRetStrLen = 0; HB_SIZE nToken = 0; HB_SIZE nSkipCnt; const char * pc; /* separator string */ sSeparatorStrLen = hb_parclen( 2 ); if( sSeparatorStrLen != 0 ) pcSeparatorStr = hb_parc( 2 ); else { pcSeparatorStr = sc_pcSeparatorStr; sSeparatorStrLen = sc_sSeparatorStrLen; } if( iSwitch == DO_TOKEN1_NUMTOKEN ) { /* token counter */ nTokenCounter = HB_SIZE_MAX; /* skip width */ nSkip = hb_parns( 3 ); } else { /* token counter */ nTokenCounter = hb_parns( 3 ); /* skip width */ nSkip = hb_parns( 4 ); /* HB_EXTENSION for AtToken()/TokenLower()/TokenUpper() */ } if( nTokenCounter == 0 ) nTokenCounter = HB_SIZE_MAX; if( nSkip == 0 ) nSkip = HB_SIZE_MAX; /* prepare return value for TokenUpper()/TokenLower() */ if( iSwitch == DO_TOKEN1_TOKENLOWER || iSwitch == DO_TOKEN1_TOKENUPPER ) { if( sStrLen == 0 ) { if( iNoRef ) hb_retl( HB_FALSE ); else hb_retc_null(); return; } sRetStrLen = sStrLen; pcRet = ( char * ) hb_xgrab( sRetStrLen + 1 ); hb_xmemcpy( pcRet, pcString, sRetStrLen ); } /* find the <nTokenCounter>th token */ pcSubStr = pcString; sSubStrLen = sStrLen; /* scan start condition */ pc = pcSubStr - 1; while( nToken < nTokenCounter ) { HB_SIZE sMatchedPos = sSeparatorStrLen; /* Skip the left nSkip successive separators */ nSkipCnt = 0; do { sSubStrLen -= ( pc - pcSubStr ) + 1; pcSubStr = pc + 1; pc = ct_at_charset_forward( pcSubStr, sSubStrLen, pcSeparatorStr, sSeparatorStrLen, &sMatchedPos ); if( iSwitch == DO_TOKEN1_TOKEN ) { ct_token->iPreSeparator = ct_token->iPostSeparator; if( sMatchedPos < sSeparatorStrLen ) ct_token->iPostSeparator = pcSeparatorStr[ sMatchedPos ]; else ct_token->iPostSeparator = -1; } nSkipCnt++; } while( nSkipCnt < nSkip && pc == pcSubStr ); if( sSubStrLen == 0 ) { /* string ends with tokenizer (null string after tokenizer at end of string is not a token) */ switch( iSwitch ) { case DO_TOKEN1_TOKEN: { char cRet; hb_retc_null(); if( HB_ISBYREF( 5 ) ) /* HB_EXTENSION */ { cRet = ( char ) ct_token->iPreSeparator; hb_storclen( &cRet, ( ct_token->iPreSeparator != -1 ? 1 : 0 ), 5 ); } if( HB_ISBYREF( 6 ) ) /* HB_EXTENSION */ { cRet = ( char ) ct_token->iPostSeparator; hb_storclen( &cRet, ( ct_token->iPostSeparator != -1 ? 1 : 0 ), 6 ); } break; } case DO_TOKEN1_NUMTOKEN: hb_retns( nToken ); break; case DO_TOKEN1_ATTOKEN: hb_retns( 0 ); break; case DO_TOKEN1_TOKENLOWER: case DO_TOKEN1_TOKENUPPER: hb_storclen( pcRet, sRetStrLen, 1 ); if( iNoRef ) { hb_xfree( pcRet ); hb_retl( HB_FALSE ); } else hb_retclen_buffer( pcRet, sRetStrLen ); break; } return; } switch( iSwitch ) { case DO_TOKEN1_TOKEN: case DO_TOKEN1_NUMTOKEN: case DO_TOKEN1_ATTOKEN: break; case DO_TOKEN1_TOKENLOWER: if( pcSubStr != pc ) /* letters can be tokenizers, too, but they should not be lowercase'd */ *( pcRet + ( pcSubStr - pcString ) ) = ( char ) hb_charLower( ( HB_UCHAR ) *pcSubStr ); break; case DO_TOKEN1_TOKENUPPER: if( pcSubStr != pc ) /* letters can be tokenizers, too, but they should not be uppercase'd */ *( pcRet + ( pcSubStr - pcString ) ) = ( char ) hb_charUpper( ( HB_UCHAR ) *pcSubStr ); break; default: break; } nToken++; if( pc == NULL ) { /* little trick for return values */ pc = pcSubStr + sSubStrLen; /* we must leave the while loop even if we have not yet found the <nTokenCounter>th token */ break; } /* should we find the last token, but string ends with tokenizer, i.e. pc points to the last character at the moment ? -> break here ! */ if( nTokenCounter == HB_SIZE_MAX ) { if( nSkip == HB_SIZE_MAX ) { const char * t; HB_BOOL bLast = HB_TRUE; for( t = pc + 1; t < pcString + sStrLen; t++ ) { if( ! memchr( pcSeparatorStr, *t, sSeparatorStrLen ) ) { bLast = HB_FALSE; break; } } if( bLast ) break; } else if( pc + 1 == pcString + sStrLen ) break; } } switch( iSwitch ) { case DO_TOKEN1_TOKEN: { char cRet; if( nTokenCounter == HB_SIZE_MAX || nToken == nTokenCounter ) hb_retclen( pcSubStr, pc - pcSubStr ); else hb_retc_null(); if( HB_ISBYREF( 5 ) ) /* HB_EXTENSION */ { cRet = ( char ) ct_token->iPreSeparator; hb_storclen( &cRet, ( ct_token->iPreSeparator != -1 ? 1 : 0 ), 5 ); } if( HB_ISBYREF( 6 ) ) /* HB_EXTENSION */ { cRet = ( char ) ct_token->iPostSeparator; hb_storclen( &cRet, ( ct_token->iPostSeparator != -1 ? 1 : 0 ), 6 ); } break; } case DO_TOKEN1_NUMTOKEN: hb_retns( nToken ); break; case DO_TOKEN1_ATTOKEN: if( nTokenCounter == HB_SIZE_MAX || nToken == nTokenCounter ) hb_retns( pcSubStr - pcString + 1 ); else hb_retns( 0 ); break; case DO_TOKEN1_TOKENLOWER: case DO_TOKEN1_TOKENUPPER: hb_storclen( pcRet, sRetStrLen, 1 ); if( iNoRef ) { hb_xfree( pcRet ); hb_retl( HB_FALSE ); } else hb_retclen_buffer( pcRet, sRetStrLen ); break; } } else { switch( iSwitch ) { case DO_TOKEN1_TOKEN: { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); char cRet; if( HB_ISBYREF( 5 ) ) /* HB_EXTENSION */ { cRet = ( char ) ct_token->iPreSeparator; hb_storclen( &cRet, ( ct_token->iPreSeparator != -1 ? 1 : 0 ), 5 ); } if( HB_ISBYREF( 6 ) ) /* HB_EXTENSION */ { cRet = ( char ) ct_token->iPostSeparator; hb_storclen( &cRet, ( ct_token->iPostSeparator != -1 ? 1 : 0 ), 6 ); } if( iArgErrorMode != CT_ARGERR_IGNORE ) pSubst = ct_error_subst( ( HB_USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_TOKEN, NULL, HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); if( pSubst != NULL ) hb_itemReturnRelease( pSubst ); else if( ! iNoRef ) hb_retc_null(); else hb_retl( HB_FALSE ); break; } case DO_TOKEN1_TOKENLOWER: case DO_TOKEN1_TOKENUPPER: { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); if( iArgErrorMode != CT_ARGERR_IGNORE ) pSubst = ct_error_subst( ( HB_USHORT ) iArgErrorMode, EG_ARG, iSwitch == DO_TOKEN1_TOKENLOWER ? CT_ERROR_TOKENLOWER : CT_ERROR_TOKENUPPER, NULL, HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); if( pSubst != NULL ) hb_itemReturnRelease( pSubst ); else if( ! iNoRef ) hb_retc_null(); else hb_retl( HB_FALSE ); break; } case DO_TOKEN1_NUMTOKEN: case DO_TOKEN1_ATTOKEN: { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); if( iArgErrorMode != CT_ARGERR_IGNORE ) pSubst = ct_error_subst( ( HB_USHORT ) iArgErrorMode, EG_ARG, iSwitch == DO_TOKEN1_NUMTOKEN ? CT_ERROR_NUMTOKEN : CT_ERROR_ATTOKEN, NULL, HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); if( pSubst != NULL ) hb_itemReturnRelease( pSubst ); else hb_retns( 0 ); break; } } } }
PHB_ZEBRA hb_zebra_create_upce( const char * szCode, HB_SIZE nLen, int iFlags ) { PHB_ZEBRA pZebra; int i, iLen = ( int ) nLen; char sumcode; HB_SYMBOL_UNUSED( iFlags ); pZebra = hb_zebra_create(); pZebra->iType = HB_ZEBRA_TYPE_UPCE; if( iLen != 6 && iLen != 7 ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } for( i = 0; i < iLen; i++ ) { if( szCode[ i ] < '0' || szCode[ i ] > '9' ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } } if( iLen == 6 ) { pZebra->szCode = ( char * ) hb_xgrab( 8 ); hb_xmemcpy( pZebra->szCode, szCode, 6 ); pZebra->szCode[ 6 ] = _upce_checksum( szCode ); pZebra->szCode[ 7 ] = '\0'; } else { if( szCode[ 6 ] != _upce_checksum( szCode ) ) { pZebra->iError = HB_ZEBRA_ERROR_BADCHECKSUM; return pZebra; } pZebra->szCode = ( char * ) hb_xgrab( 8 ); hb_xmemcpy( pZebra->szCode, szCode, 7 ); pZebra->szCode[ 7 ] = '\0'; } szCode = pZebra->szCode; sumcode = szCode[ 6 ] == '0' ? 0x38 : s_first[ szCode[ 6 ] - '0' ]; pZebra->pBits = hb_bitbuffer_create(); hb_bitbuffer_cat_int( pZebra->pBits, 5, 3 ); /* start */ for( i = 0; i < 6; i++ ) { if( sumcode & ( 1 << i ) ) hb_bitbuffer_cat_int( pZebra->pBits, s_rcode[ szCode[ i ] - '0' ] ^ 0x7F, 7 ); else hb_bitbuffer_cat_int( pZebra->pBits, s_gcode[ szCode[ i ] - '0' ], 7 ); } hb_bitbuffer_cat_int( pZebra->pBits, 42, 6 ); /* stop */ return pZebra; }
PHB_ZEBRA hb_zebra_create_ean13( const char * szCode, HB_SIZE nLen, int iFlags ) { PHB_ZEBRA pZebra; int i, iLen = ( int ) nLen; HB_SYMBOL_UNUSED( iFlags ); pZebra = hb_zebra_create(); pZebra->iType = HB_ZEBRA_TYPE_EAN13; if( iLen != 12 && iLen != 13 ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } for( i = 0; i < iLen; i++ ) { if( szCode[ i ] < '0' || szCode[ i ] > '9' ) { pZebra->iError = HB_ZEBRA_ERROR_INVALIDCODE; return pZebra; } } if( iLen == 12 ) { pZebra->szCode = ( char * ) hb_xgrab( 14 ); hb_xmemcpy( pZebra->szCode, szCode, 12 ); pZebra->szCode[ 12 ] = _ean13_checksum( szCode ); pZebra->szCode[ 13 ] = '\0'; } else { if( szCode[ 12 ] != _ean13_checksum( szCode ) ) { pZebra->iError = HB_ZEBRA_ERROR_BADCHECKSUM; return pZebra; } pZebra->szCode = ( char * ) hb_xgrab( 14 ); hb_xmemcpy( pZebra->szCode, szCode, 13 ); pZebra->szCode[ 13 ] = '\0'; } szCode = pZebra->szCode; pZebra->pBits = hb_bitbuffer_create(); hb_bitbuffer_cat_int( pZebra->pBits, 5, 3 ); /* start */ for( i = 1; i <= 6; i++ ) { if( s_first[ szCode[ 0 ] - '0' ] & ( 1 << ( i - 1 ) ) ) hb_bitbuffer_cat_int( pZebra->pBits, s_gcode[ szCode[ i ] - '0' ], 7 ); else hb_bitbuffer_cat_int( pZebra->pBits, s_rcode[ szCode[ i ] - '0' ] ^ 0x7F, 7 ); } hb_bitbuffer_cat_int( pZebra->pBits, 10, 5 ); /* middle */ for( i = 7; i <= 12; i++ ) hb_bitbuffer_cat_int( pZebra->pBits, s_rcode[ szCode[ i ] - '0' ], 7 ); hb_bitbuffer_cat_int( pZebra->pBits, 5, 3 ); /* stop */ return pZebra; }
/* helper function for the replxxx functions */ static void do_replace( int iSwitch ) { /* suppressing return value ? */ int iNoRet = ct_getref() && HB_ISBYREF( 1 ); /* param check */ if( HB_ISCHAR( 1 ) && ( hb_parclen( 2 ) > 0 || HB_ISNUM( 2 ) ) ) { const char * pcString = hb_parc( 1 ); HB_SIZE sStrLen = hb_parclen( 1 ); char * pcRet, * pc; char cSearch, cReplace; if( sStrLen == 0 ) { if( iNoRet ) hb_ret(); else hb_retc_null(); return; } if( HB_ISNUM( 2 ) ) cReplace = ( char ) ( hb_parnl( 2 ) % 256 ); else cReplace = *( ( const char * ) hb_parc( 2 ) ); if( hb_parclen( 3 ) > 0 ) cSearch = *( ( const char * ) hb_parc( 3 ) ); else if( HB_ISNUM( 3 ) ) cSearch = ( char ) ( hb_parnl( 3 ) % 256 ); else cSearch = 0x20; pcRet = ( char * ) hb_xgrab( sStrLen + 1 ); hb_xmemcpy( pcRet, pcString, sStrLen ); if( iSwitch != DO_REPLACE_REPLRIGHT ) { pc = pcRet; while( *pc == cSearch && pc < pcRet + sStrLen ) { *pc = cReplace; pc++; } } if( iSwitch != DO_REPLACE_REPLLEFT ) { pc = pcRet + sStrLen - 1; while( *pc == cSearch && pc >= pcRet ) { *pc = cReplace; pc--; } } hb_storclen( pcRet, sStrLen, 1 ); if( iNoRet ) { hb_xfree( pcRet ); hb_ret(); } else hb_retclen_buffer( pcRet, sStrLen ); } else { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); if( iArgErrorMode != CT_ARGERR_IGNORE ) pSubst = ct_error_subst( ( HB_USHORT ) iArgErrorMode, EG_ARG, sulErrorSubcodes[ iSwitch ], NULL, HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); if( pSubst != NULL ) hb_itemReturnRelease( pSubst ); else if( iNoRet ) hb_ret(); else hb_retc_null(); } }
/* helper function for the pad functions */ static void do_pad (int iSwitch) { if (ISCHAR (1) && ISNUM (2)) { char *pcString = (char *)hb_parc (1); size_t sStrLen = (size_t)hb_parclen (1); char *pcRet, *pc; LONG lRetLen; size_t sRetLen; char cFill; lRetLen = hb_parnl (2); if (lRetLen <= 0) { int iArgErrorMode = ct_getargerrormode(); if (iArgErrorMode != CT_ARGERR_IGNORE) { ct_error ((USHORT)iArgErrorMode, EG_ARG, (iSwitch == DO_PAD_PADLEFT ? CT_ERROR_PADLEFT : CT_ERROR_PADRIGHT), NULL, (iSwitch == DO_PAD_PADLEFT ? "PADLEFT" : "ROR_PADRIGHT"), 0, EF_CANDEFAULT, 3, hb_paramError (1), hb_paramError (2), hb_paramError (3)); } hb_retc (""); return; } sRetLen = (size_t)lRetLen; if (hb_parclen (3) > 0) cFill = *(hb_parc (3)); else if (ISNUM (3)) cFill = (char)( hb_parnl (3) % 256 ); else cFill = 0x20; pcRet = ( char * )hb_xgrab (sRetLen); if (iSwitch == DO_PAD_PADLEFT) { if (sRetLen > sStrLen) { /* fill with cFill */ for (pc = pcRet; pc < pcRet+(sRetLen-sStrLen); pc++) *pc = cFill; hb_xmemcpy (pcRet+(sRetLen-sStrLen), pcString, sStrLen); } else { hb_xmemcpy (pcRet, pcString+(sStrLen-sRetLen), sRetLen); } } else { hb_xmemcpy (pcRet, pcString, (sRetLen < sStrLen ? sRetLen : sStrLen)); if (sRetLen > sStrLen) { /* fill with cFill */ for (pc = pcRet+sStrLen; pc < pcRet+sRetLen; pc++) *pc = cFill; } } hb_retclen (pcRet, sRetLen); hb_xfree (pcRet); } else /* ISCHAR (1) && ISNUM (2) */ { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); if (iArgErrorMode != CT_ARGERR_IGNORE) { pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, (iSwitch == DO_PAD_PADLEFT ? CT_ERROR_PADLEFT : CT_ERROR_PADRIGHT), NULL, (iSwitch == DO_PAD_PADLEFT ? "PADLEFT" : "ROR_PADRIGHT"), 0, EF_CANSUBSTITUTE, 3, hb_paramError (1), hb_paramError (2), hb_paramError (3)); } if (pSubst != NULL) { hb_itemRelease( hb_itemReturnForward( pSubst ) ); } else { hb_retc (""); } return; } return; }
/* helper function for the pad functions */ static void do_pad( int iSwitch ) { if( HB_ISCHAR( 1 ) && HB_ISNUM( 2 ) ) { const char * pcString = hb_parc( 1 ); HB_SIZE sStrLen = hb_parclen( 1 ); char * pcRet, * pc; HB_ISIZ nRetLen; HB_SIZE sRetLen; char cFill; nRetLen = hb_parns( 2 ); if( nRetLen <= 0 ) { int iArgErrorMode = ct_getargerrormode(); if( iArgErrorMode != CT_ARGERR_IGNORE ) ct_error( ( HB_USHORT ) iArgErrorMode, EG_ARG, iSwitch == DO_PAD_PADLEFT ? CT_ERROR_PADLEFT : CT_ERROR_PADRIGHT, NULL, HB_ERR_FUNCNAME, 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS ); hb_retc_null(); return; } sRetLen = ( HB_SIZE ) nRetLen; if( hb_parclen( 3 ) > 0 ) cFill = *( hb_parc( 3 ) ); else if( HB_ISNUM( 3 ) ) cFill = ( char ) ( hb_parnl( 3 ) % 256 ); else cFill = 0x20; pcRet = ( char * ) hb_xgrab( sRetLen + 1 ); if( iSwitch == DO_PAD_PADLEFT ) { if( sRetLen > sStrLen ) { /* fill with cFill */ for( pc = pcRet; pc < pcRet + ( sRetLen - sStrLen ); pc++ ) *pc = cFill; hb_xmemcpy( pcRet + ( sRetLen - sStrLen ), pcString, sStrLen ); } else hb_xmemcpy( pcRet, pcString + ( sStrLen - sRetLen ), sRetLen ); } else { hb_xmemcpy( pcRet, pcString, ( sRetLen < sStrLen ? sRetLen : sStrLen ) ); if( sRetLen > sStrLen ) { /* fill with cFill */ for( pc = pcRet + sStrLen; pc < pcRet + sRetLen; pc++ ) *pc = cFill; } } hb_retclen_buffer( pcRet, sRetLen ); } else { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); if( iArgErrorMode != CT_ARGERR_IGNORE ) pSubst = ct_error_subst( ( HB_USHORT ) iArgErrorMode, EG_ARG, iSwitch == DO_PAD_PADLEFT ? CT_ERROR_PADLEFT : CT_ERROR_PADRIGHT, NULL, HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); if( pSubst != NULL ) hb_itemReturnRelease( pSubst ); else hb_retc_null(); } }