Files
harbour-core/contrib/hbnf/any2any.prg
vszakats 9687850865 2013-03-16 02:10 UTC+0100 Viktor Szakats (harbour syenar.net)
* (all files)
    * stripped svn header
    * minor cleanups
    ; use following command to find out the history of files:
       git log
       git log --follow
       git blame
       git annotate
2013-03-16 02:11:42 +01:00

108 lines
3.1 KiB
Plaintext

/*
* Author....: David Husnian
* CIS ID....: ?
*
* This is an original work by David Husnian and is placed in the
* public domain.
*
* Modification history:
* ---------------------
*
* Rev 1.2 15 Aug 1991 23:02:46 GLENN
* Forest Belt proofread/edited/cleaned up doc
*
* Rev 1.1 14 Jun 1991 19:50:54 GLENN
* Minor edit to file header
*
* Rev 1.0 01 Apr 1991 01:00:34 GLENN
* Nanforum Toolkit
*
*/
#define CASE_AT( x, y, z ) z[ At( x, y ) + 1 ]
#define NULL ""
#define EARLIEST_DATE hb_SToD( "01000101" )
#define BLANK_DATE hb_SToD()
#define _XTOC( x ) CASE_AT( ValType( x ), "CNDLM", ;
{ NULL, ;
x, ;
iif( HB_ISNUMERIC( x ), ;
hb_ntos( x ), ;
NULL ), ;
iif( HB_ISDATE( x ), DToC( x ), NULL ), ;
iif( HB_ISLOGICAL( x ), ;
iif( x, ".T.", ".F." ), ;
NULL ), ;
x } )
FUNCTION ft_XToY( xValueToConvert, cTypeToConvertTo, lWantYesNo )
__defaultNIL( @lWantYesNo, .F. )
DO CASE
CASE cTypeToConvertTo == "C" .AND. ; // They Want a Character String
! HB_ISSTRING( xValueToConvert )
xValueToConvert := _XTOC( xValueToConvert )
CASE cTypeToConvertTo == "D" .AND. ; // They Want a Date
! HB_ISDATE( xValueToConvert )
xValueToConvert := iif( HB_ISSTRING( xValueToConvert ), ;
; // Convert from a Character
CToD( xValueToConvert ), ;
iif( HB_ISNUMERIC( xValueToConvert ), ;
; // Convert from a Number
xValueToConvert + EARLIEST_DATE, ;
iif( HB_ISLOGICAL( xValueToConvert ), ;
; // Convert from a Logical
iif( xValueToConvert, Date(), BLANK_DATE ), ;
; // Unsupported Type
BLANK_DATE ) ) )
CASE cTypeToConvertTo == "N" .AND. ; // They Want a Number
! HB_ISNUMERIC( xValueToConvert )
xValueToConvert := iif( HB_ISSTRING( xValueToConvert ), ;
; // Convert from a Character
Val( xValueToConvert ), ;
iif( HB_ISDATE( xValueToConvert ), ;
; // Convert from a Date
xValueToConvert - EARLIEST_DATE, ;
iif( HB_ISLOGICAL( xValueToConvert ), ;
; // Convert from a Logical
iif( xValueToConvert, 1, 0 ), ;
; // Unsupported Type
0 ) ) )
CASE cTypeToConvertTo == "L" .AND. ; // They Want a Logical
! HB_ISLOGICAL( xValueToConvert )
xValueToConvert := iif( HB_ISSTRING( xValueToConvert ), ;
; // Convert from a Character
Upper( xValueToConvert ) == iif( lWantYesNo, "Y", ".T." ), ;
iif( HB_ISDATE( xValueToConvert ), ;
; // Convert from a Date
! Empty( xValueToConvert ), ;
iif( HB_ISNUMERIC( xValueToConvert ), ;
; // Convert from a Number
xValueToConvert != 0, ;
; // Unsupported Type
.F. ) ) )
CASE cTypeToConvertTo == "A" .AND. ; // They Want an Array
! HB_ISARRAY( xValueToConvert )
xValueToConvert := { xValueToConvert }
CASE cTypeToConvertTo == "B" .AND. ; // They Want a Code Block
! HB_ISBLOCK( xValueToConvert )
xValueToConvert := {|| xValueToConvert }
ENDCASE
RETURN xValueToConvert