BOOL sql_item2str( sql_item_arg *pItemArg, SQLSYS_INFO *pSysInfo ) { ULONG lSize = 0L; /* For Temporary values */ char *szText = NULL; /* Temporary buffer */ BOOL bFree = TRUE; if (!pItemArg) { HB_TRACE(HB_TR_DEBUG,(" Invalid Argument -> %p", pItemArg )); return FALSE; } if (!pSysInfo) { pSysInfo = (SQLSYS_INFO *) SQLSYS_GETINFO( 0 ); // Valid driver? It has been correctly loaded into memory? if (!SR_ISVALID_DRIVER(pSysInfo)) { HB_TRACE(HB_TR_DEBUG,(" Invalid driver !!" )); return FALSE; } } HB_TRACE(HB_TR_DEBUG,(" ARGUMENT => '%s'", hb_itemTypeStr( pItemArg->pItem ) )); switch( hb_itemType( pItemArg->pItem ) ) { case HB_IT_MEMO: case HB_IT_STRING: { HB_TRACE(HB_TR_DEBUG,(" As Text => '%s'", hb_itemGetCPtr( pItemArg->pItem ) )); lSize = hb_itemGetCLen( pItemArg->pItem ); szText = (*pSysInfo->EscapeString) ( hb_itemGetCPtr( pItemArg->pItem ), &lSize, 0 ); /* char *szTemp, *szBuff; szTemp = (*pSysInfo->EscapeString) ( hb_itemGetCPtr( pItemArg->pItem ), &lSize, 0 ); if (szTemp) { szText = (char *) hb_xgrab( lSize + 3L ); // chr(0) + 2 separators szBuff = szText; *szText = pSysInfo->FieldDelim; szText ++; memcpy( szText, szTemp, lSize ); szText += lSize; *szText = pSysInfo->FieldDelim; szText ++; *szText = '\0'; hb_xfree( szTemp ); } /***/ break; } case HB_IT_LOGICAL: HB_TRACE(HB_TR_DEBUG,(" As BOOL => %d", (int) hb_itemGetL( pItemArg->pItem ) )); szText = (hb_itemGetL( pItemArg->pItem ) ? pSysInfo->BoolTrue : pSysInfo->BoolFalse); lSize = strlen( szText ); bFree = FALSE; break; case HB_IT_DATE: { int iYear, iMonth, iDay; hb_dateDecode( hb_itemGetDL( pItemArg->pItem ), &iYear, &iMonth, &iDay ); HB_TRACE(HB_TR_DEBUG,(" As DATE => %04d/%02d/%02d", iYear, iMonth, iDay )); if (pSysInfo->DateFormat == ESCAPE_FORMAT_DATE_ISO) { szText = SQLSYS_DATETOISO( (char *) hb_xgrab(13), iYear, iMonth, iDay, TRUE ); lSize = 12L; } break; } case HB_IT_INTEGER: case HB_IT_DOUBLE: case HB_IT_LONG: { szText = hb_itemStr( pItemArg->pItem, NULL, NULL ); HB_TRACE(HB_TR_DEBUG,(" As Number => %s", szText )); if( szText ) { ULONG nToSkip = 0L; while( szText[ nToSkip] == ' ' ) ++nToSkip; /* Rever isto aqui de perto */ if( nToSkip ) memmove( szText, szText + nToSkip, strlen( szText + nToSkip ) + 1 ); lSize = strlen( szText ); HB_TRACE(HB_TR_DEBUG,(" As Text => '%s' -- %lu", szText, lSize )); } break; } default: { szText = (char *) hb_xgrab(5); *szText = '\0'; strcat( szText, "NULL" ); lSize = strlen( szText ); break; } } if (!szText) { HB_TRACE(HB_TR_DEBUG,(" Impossivel converter este valor:" )); HB_TRACE_ARGS( pItemArg->pItem ); return FALSE; } pItemArg->szResult = szText; pItemArg->ulSize = lSize; pItemArg->bDestroy = bFree; return TRUE; }
/* Export field values to text file */ static HB_BOOL hb_ExportVar( HB_FHANDLE handle, PHB_ITEM pValue, const char * cDelim, PHB_CODEPAGE cdp ) { switch( hb_itemType( pValue ) ) { /* a "C" field */ case HB_IT_STRING: { char * szStrEsc; char * szString; szStrEsc = hb_strescape( hb_itemGetCPtr( pValue ), hb_itemGetCLen( pValue ), cDelim ); if( cdp ) hb_cdpnDupLen( szStrEsc, strlen( szStrEsc ), hb_vmCDP(), cdp ); szString = hb_xstrcpy( NULL, cDelim, szStrEsc, cDelim, NULL ); /* FWrite( handle, szString ) */ hb_fsWriteLarge( handle, szString, strlen( szString ) ); /* Orphaned, get rif off it */ hb_xfree( szStrEsc ); hb_xfree( szString ); break; } /* a "D" field */ case HB_IT_DATE: { char * szDate = ( char * ) hb_xgrab( 9 ); hb_itemGetDS( pValue, szDate ); hb_fsWriteLarge( handle, szDate, strlen( szDate ) ); hb_xfree( szDate ); break; } /* an "L" field */ case HB_IT_LOGICAL: hb_fsWriteLarge( handle, ( hb_itemGetL( pValue ) ? "T" : "F" ), 1 ); break; /* an "N" field */ case HB_IT_INTEGER: case HB_IT_LONG: case HB_IT_DOUBLE: { char * szResult = hb_itemStr( pValue, NULL, NULL ); if( szResult ) { HB_SIZE nLen = strlen( szResult ); const char * szTrimmed = hb_strLTrim( szResult, &nLen ); hb_fsWriteLarge( handle, szTrimmed, strlen( szTrimmed ) ); hb_xfree( szResult ); } break; } /* an "M" field or the other, might be a "V" in SixDriver */ default: /* We do not want MEMO contents */ return HB_FALSE; } return HB_TRUE; }