コード例 #1
0
ファイル: gtcgi.c プロジェクト: emazv72/core
static void hb_gt_cgi_termOut( PHB_GTCGI pGTCGI, const char * szStr, HB_SIZE nLen )
{
#ifdef HB_GT_CGI_WIN
   #define HB_WIN_IOWRITE_LIMIT  10000  /* https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1232#no1 */

   if( pGTCGI->fIsConsole )
   {
      HANDLE hFile = DosToWinHandle( pGTCGI->hStdout );

      HB_SIZE nWritten = 0;
      HB_SIZE nCount;

      LPTSTR lpString;

#if defined( UNICODE )
      lpString = hb_cdpnStrDupU16( HB_GTSELF_TERMCP( pGTCGI->pGT ),
                                   HB_CDP_ENDIAN_NATIVE,
                                   szStr, nLen, &nCount );
#else
      nCount = nLen;
      lpString = hb_cdpnDup( szStr, &nCount,
                             HB_GTSELF_TERMCP( pGTCGI->pGT ), hb_setGetOSCP() );
#endif

      while( nCount )
      {
         DWORD dwToWrite;
         DWORD dwWritten;

         /* Determine how much to write this time */
         if( nCount > ( HB_SIZE ) HB_WIN_IOWRITE_LIMIT )
         {
            dwToWrite = HB_WIN_IOWRITE_LIMIT;
            nCount -= ( HB_SIZE ) dwToWrite;
         }
         else
         {
            dwToWrite = ( DWORD ) nCount;
            nCount = 0;
         }

         if( ! WriteConsole( hFile, lpString + nWritten,
                             dwToWrite, &dwWritten, NULL ) )
            break;

         nWritten += ( HB_SIZE ) dwWritten;

         if( dwWritten != dwToWrite )
            break;
      }

      hb_xfree( lpString );
   }
   else
      hb_fsWriteLarge( pGTCGI->hStdout, szStr, nLen );
#else
   hb_fsWriteLarge( pGTCGI->hStdout, szStr, nLen );
#endif
}
コード例 #2
0
ファイル: hbi18n1.c プロジェクト: JamesLinus/core
static void hb_i18n_transitm( PHB_ITEM pText, PHB_CODEPAGE cdpIn, PHB_CODEPAGE cdpOut )
{
   HB_SIZE nLen = hb_itemGetCLen( pText );

   if( nLen > 0 )
   {
      char * szValue = hb_cdpnDup( hb_itemGetCPtr( pText ), &nLen,
                                   cdpIn, cdpOut );
      hb_itemPutCLPtr( pText, szValue, nLen );
   }
}
コード例 #3
0
ファイル: hbxml2.c プロジェクト: emazv72/hbcontrib
static xmlChar * xml_cdpStrToUTF8( const char * szStr, HB_SIZE * pnLen, const char * pszCdpIn )
{

   PHB_CODEPAGE cdpIn  = pszCdpIn ? hb_cdpFindExt( pszCdpIn ) : hb_vmCDP();
   PHB_CODEPAGE cdpOut = hb_cdpFindExt( XML_UTF8_HB_CDP );

   char * szDest = NULL;

   if( cdpIn && cdpOut && szStr )
   {
      int len = strlen( szStr );
      memcpy( pnLen, &len, sizeof( len ) );

      szDest = hb_cdpnDup( szStr, pnLen, cdpIn, cdpOut );
   }

   return ( xmlChar * ) szDest;
}
コード例 #4
0
ファイル: gtcgi.c プロジェクト: Rossine/harbour-core
static void hb_gt_cgi_conOut( PHB_GT pGT, const char * szText, HB_SIZE nLength,
                              PHB_CODEPAGE cdpHost, PHB_CODEPAGE cdpTerm )
{
   PHB_GTCGI pGTCGI = HB_GTCGI_GET( pGT );

   if( cdpTerm && cdpHost && cdpTerm != cdpHost )
   {
      HB_SIZE nLen = nLength;
      char * buffer = hb_cdpnDup( szText, &nLen, cdpHost, cdpTerm );
      hb_gt_cgi_termOut( pGTCGI, buffer, nLen );
      hb_xfree( buffer );
   }
   else
      hb_gt_cgi_termOut( pGTCGI, szText, nLength );

   while( nLength-- )
   {
      switch( *szText++ )
      {
         case HB_CHAR_BEL:
            break;

         case HB_CHAR_BS:
            if( pGTCGI->iCol )
               pGTCGI->iCol--;
            break;

         case HB_CHAR_LF:
            pGTCGI->iRow++;
            break;

         case HB_CHAR_CR:
            pGTCGI->iCol = 0;
            break;

         default:
            ++pGTCGI->iCol;
      }
   }
   HB_GTSUPER_SETPOS( pGT, pGTCGI->iRow, pGTCGI->iCol );
}
コード例 #5
0
ファイル: sdf1.c プロジェクト: AmericoBalboa/core
/*
 * Obtain the current value of a field.
 */
static HB_ERRCODE hb_sdfGetValue( SDFAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem )
{
   LPFIELD pField;

   HB_TRACE( HB_TR_DEBUG, ( "hb_sdfGetValue(%p, %hu, %p)", pArea, uiIndex, pItem ) );

   if( --uiIndex >= pArea->area.uiFieldCount )
      return HB_FAILURE;

   pField = pArea->area.lpFields + uiIndex;
   switch( pField->uiType )
   {
      case HB_FT_STRING:
         if( ( pField->uiFlags & HB_FF_BINARY ) == 0 )
         {
            HB_SIZE nLen = pField->uiLen;
            char * pszVal = hb_cdpnDup( ( const char * ) pArea->pRecord + pArea->pFieldOffset[ uiIndex ],
                                        &nLen, pArea->area.cdPage, hb_vmCDP() );
            hb_itemPutCLPtr( pItem, pszVal, nLen );
         }
         else
         {
            hb_itemPutCL( pItem, ( char * ) pArea->pRecord + pArea->pFieldOffset[ uiIndex ],
                          pField->uiLen );
         }
         break;

      case HB_FT_LOGICAL:
         switch( pArea->pRecord[ pArea->pFieldOffset[ uiIndex ] ] )
         {
            case 'T':
            case 't':
            case 'Y':
            case 'y':
               hb_itemPutL( pItem, HB_TRUE );
               break;
            default:
               hb_itemPutL( pItem, HB_FALSE );
               break;
         }
         break;

      case HB_FT_DATE:
         hb_itemPutDS( pItem, ( char * ) pArea->pRecord + pArea->pFieldOffset[ uiIndex ] );
         break;

      case HB_FT_TIMESTAMP:
      {
         long lJulian, lMilliSec;
         HB_BYTE * pFieldPtr = pArea->pRecord + pArea->pFieldOffset[ uiIndex ], bChar;

         bChar = pFieldPtr[ pField->uiLen ];
         pFieldPtr[ pField->uiLen ] = 0;
         hb_timeStampStrGetDT( ( const char * ) pFieldPtr, &lJulian, &lMilliSec );
         pFieldPtr[ pField->uiLen ] = bChar;
         hb_itemPutTDT( pItem, lJulian, lMilliSec );
         break;
      }

      case HB_FT_LONG:
      {
         HB_MAXINT lVal;
         double    dVal;
         HB_BOOL   fDbl;

         fDbl = hb_strnToNum( ( const char * ) pArea->pRecord + pArea->pFieldOffset[ uiIndex ],
                              pField->uiLen, &lVal, &dVal );

         if( pField->uiDec )
         {
            hb_itemPutNDLen( pItem, fDbl ? dVal : ( double ) lVal,
                             ( int ) ( pField->uiLen - pField->uiDec - 1 ),
                             ( int ) pField->uiDec );
         }
         else if( fDbl )
         {
            hb_itemPutNDLen( pItem, dVal, ( int ) pField->uiLen, 0 );
         }
         else
         {
            hb_itemPutNIntLen( pItem, lVal, ( int ) pField->uiLen );
         }
      }
      break;

      case HB_FT_MEMO:
         hb_itemPutC( pItem, NULL );
         break;

      case HB_FT_NONE:
         hb_itemClear( pItem );
         break;

      default:
      {
         PHB_ITEM pError;
         pError = hb_errNew();
         hb_errPutGenCode( pError, EG_DATATYPE );
         hb_errPutDescription( pError, hb_langDGetErrorDesc( EG_DATATYPE ) );
         hb_errPutOperation( pError, hb_dynsymName( ( PHB_DYNS ) pField->sym ) );
         hb_errPutSubCode( pError, EDBF_DATATYPE );
         SELF_ERROR( &pArea->area, pError );
         hb_itemRelease( pError );
         return HB_FAILURE;
      }
   }

   return HB_SUCCESS;
}