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 }
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 ); } }
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; }
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 ); }
/* * 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; }