diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 837ccc1f9b..b32f115864 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,28 @@ +19991017-20:46 GMT+1 Victor Szel + + source/rtl/samples.c + source/rtl/Makefile + source/rtl/dummy.prg + source/rtl/rtl_test.prg + + AMPM() (tested) + + DAYS() + + ELAPTIME() + + LENNUM() + + SECS() + + TSTRING() + Functions added, mostly not yet tested. RTL_TEST tests added for AMPM(). + WARNING ! Please add new file to non-GNU make systems. + * include/extend.h + + hb_strVal() prototype added. + + hb_strLTrim() prototype added. + * source/rtl/dummy.prg + include/hbextern.ch + source/runner/stdalone/external.prg + ! Some internal functions removed (added today), since they seem not + real Clipper functions. + + Several new Clipper (documented) functions added (db*() for 5.3, and + SOUNDEX()) + + One new undocumented function added. (__FLEDIT) + 19991017-09:00 EDT Paul Tucker * makefile.vc + source/rtl/oldbox.prg diff --git a/harbour/include/extend.h b/harbour/include/extend.h index 9420192cf9..53d5a4bf26 100644 --- a/harbour/include/extend.h +++ b/harbour/include/extend.h @@ -343,6 +343,8 @@ extern ULONG hb_strAt( char * szSub, ULONG ulSubLen, char * szText, ULONG ulL extern char * hb_strUpper( char * szText, ULONG ulLen ); extern char * hb_strLower( char * szText, ULONG ulLen ); extern char * hb_strncpyUpper( char * pDest, char * pSource, ULONG ulLen ); +extern double hb_strVal( char * szText ); +extern char * hb_strLTrim( char * szText, ULONG * ulLen ); extern double hb_numRound( double dResult, int iDec ); diff --git a/harbour/include/hbextern.ch b/harbour/include/hbextern.ch index ef39bf827b..c5230dcdd0 100644 --- a/harbour/include/hbextern.ch +++ b/harbour/include/hbextern.ch @@ -462,12 +462,17 @@ EXTERNAL DBSEEK EXTERNAL DBSETRELATION EXTERNAL DBCLEARRELATION EXTERNAL DBEVAL +EXTERNAL DBFILEGET +EXTERNAL DBFILEPUT +EXTERNAL DBINFO +EXTERNAL DBORDERINFO +EXTERNAL DBRECORDINFO +EXTERNAL DBFIELDINFO EXTERNAL MEMOEDIT EXTERNAL MLCTOPOS EXTERNAL MLPOS EXTERNAL MPOSTOLC EXTERNAL __DBAPP -EXTERNAL __DBCONTINUE EXTERNAL __DBCOPY EXTERNAL __DBCOPYSTRUCT EXTERNAL __DBCOPYXSTRUCT @@ -475,7 +480,6 @@ EXTERNAL __DBCREATE EXTERNAL __DBDELIM EXTERNAL __DBJOIN EXTERNAL __DBLIST -EXTERNAL __DBLOCATE EXTERNAL __DBPACK EXTERNAL __DBSDF EXTERNAL __DBSORT @@ -512,10 +516,7 @@ EXTERNAL SECS EXTERNAL DAYS EXTERNAL LENNUM EXTERNAL ELAPTIME -EXTERNAL __BNAMES -EXTERNAL __LNAMES -EXTERNAL __SNAMES -EXTERNAL __SRCNAME +EXTERNAL SOUNDEX EXTERNAL _NATSORTVER EXTERNAL ISAFFIRM EXTERNAL ISNEGATIVE diff --git a/harbour/source/rtl/Makefile b/harbour/source/rtl/Makefile index c3ada44948..914824a353 100644 --- a/harbour/source/rtl/Makefile +++ b/harbour/source/rtl/Makefile @@ -33,6 +33,7 @@ C_SOURCES=\ mtran.c \ oldbox.c \ oldclear.c \ + samples.c \ set.c \ setcolor.c \ strings.c \ diff --git a/harbour/source/rtl/dummy.prg b/harbour/source/rtl/dummy.prg index e86de967dd..b492c6e3b0 100644 --- a/harbour/source/rtl/dummy.prg +++ b/harbour/source/rtl/dummy.prg @@ -54,6 +54,12 @@ FUNCTION dbSeek() ; RETURN .F. FUNCTION dbSetRelation() ; RETURN NIL FUNCTION dbClearRelation() ; RETURN NIL FUNCTION dbEval() ; RETURN NIL +FUNCTION dbFileGet() ; RETURN .F. /* 5.3 */ +FUNCTION dbFilePut() ; RETURN .F. /* 5.3 */ +FUNCTION dbInfo() ; RETURN NIL /* 5.3 */ +FUNCTION dbOrderInfo() ; RETURN NIL /* 5.3 */ +FUNCTION dbRecordInfo() ; RETURN NIL /* 5.3 */ +FUNCTION dbFieldInfo() ; RETURN NIL /* 5.3 */ FUNCTION MemoEdit( str ) ; RETURN str FUNCTION MLCToPos() ; RETURN 0 @@ -83,6 +89,7 @@ FUNCTION __dbSetFound() ; RETURN NIL FUNCTION __dbSetLocate() ; RETURN NIL FUNCTION __dbTrans() ; RETURN NIL FUNCTION __dbTransRec() ; RETURN NIL +FUNCTION __FLEdit ; RETURN {} FUNCTION dbEdit() ; RETURN NIL FUNCTION IsPrinter() ; RETURN .T. @@ -103,17 +110,7 @@ FUNCTION ReadUpdated() ; RETURN .T. FUNCTION Updated() ; RETURN .T. FUNCTION __SetFormat() ; RETURN NIL -FUNCTION AMPM() ; RETURN "" -FUNCTION TString() ; RETURN "" -FUNCTION Secs() ; RETURN 0 -FUNCTION Days() ; RETURN 0 -FUNCTION LenNum() ; RETURN 0 -FUNCTION ElapTime() ; RETURN 0 - -FUNCTION __BNames() ; RETURN NIL -FUNCTION __LNames() ; RETURN NIL -FUNCTION __SNames() ; RETURN NIL -FUNCTION __SrcName() ; RETURN NIL +FUNCTION SoundEx() ; RETURN "" FUNCTION _NatSortVer() ; RETURN "" FUNCTION IsAffirm() ; RETURN .F. diff --git a/harbour/source/rtl/samples.c b/harbour/source/rtl/samples.c new file mode 100644 index 0000000000..dfd9b2f1f1 --- /dev/null +++ b/harbour/source/rtl/samples.c @@ -0,0 +1,167 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * AMPM() function + * + * Copyright 1999 Victor Szel + * www - http://www.harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version, with one exception: + * + * The exception is that if you link the Harbour Runtime Library (HRL) + * and/or the Harbour Virtual Machine (HVM) with other files to produce + * an executable, this does not by itself cause the resulting executable + * to be covered by the GNU General Public License. Your use of that + * executable is in no way restricted on account of linking the HRL + * and/or HVM code into it. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit + * their web site at http://www.gnu.org/). + * + */ + +#include "extend.h" +#include "itemapi.h" + +/* NOTE: szTime must be 9 chars large */ + +static char * hb_SecToTimeStr( char * pszTime, ULONG ulTime ) +{ + USHORT uiValue; + + uiValue = ( ulTime / 3600 ) % 24; + pszTime[ 0 ] = ( char ) ( uiValue / 10 ) + '0'; + pszTime[ 1 ] = ( char ) ( uiValue % 10 ) + '0'; + pszTime[ 2 ] = ':'; + uiValue = ( ulTime / 60 ) % 64; + pszTime[ 3 ] = ( char ) ( uiValue / 10 ) + '0'; + pszTime[ 4 ] = ( char ) ( uiValue % 10 ) + '0'; + pszTime[ 5 ] = ':'; + uiValue = ulTime % 60; + pszTime[ 6 ] = ( char ) ( uiValue / 10 ) + '0'; + pszTime[ 7 ] = ( char ) ( uiValue % 10 ) + '0'; + pszTime[ 8 ] = '\0'; + + return pszTime; +} + +static ULONG hb_TimeStrToSec( char * pszTime ) +{ + ULONG ulLen = strlen( pszTime ); + ULONG ulTime = 0; + + if( ulLen >= 0 ) + ulTime += ( ULONG ) hb_strVal( pszTime ) * 3600; + + if( ulLen >= 4 ) + ulTime += ( ULONG ) hb_strVal( pszTime + 3 ) * 60; + + if( ulLen >= 7 ) + ulTime += ( ULONG ) hb_strVal( pszTime + 6 ); + + return ulTime; +} + +HARBOUR HB_AMPM( void ) +{ + char * pszTime = hb_parc( 1 ); + ULONG ulTimeLen = hb_parclen( 1 ); + char * pszResult = ( char * ) hb_xgrab( MAX( ulTimeLen, 2 ) + 3 + 1 ); + USHORT uiHour = ( USHORT ) hb_strVal( pszTime ); + BOOL bAM; + + memset( pszResult, 0, 3 ); + memcpy( pszResult, pszTime, ulTimeLen ); + + if( uiHour == 0 || uiHour == 24 ) + { + if( ulTimeLen < 2 ) + ulTimeLen = 2; + + pszResult[ 0 ] = '1'; + pszResult[ 1 ] = '2'; + bAM = TRUE; + } + else if( uiHour > 12 ) + { + if( ulTimeLen < 2 ) + ulTimeLen = 2; + + uiHour -= 12; + pszResult[ 0 ] = ( char ) ( uiHour / 10 ) + '0'; + pszResult[ 1 ] = ( char ) ( uiHour % 10 ) + '0'; + + if( pszResult[ 0 ] == '0' ) + pszResult[ 0 ] = ' '; + + bAM = FALSE; + } + else if( uiHour == 12 ) + bAM = FALSE; + else + bAM = TRUE; + + strcpy( pszResult + ulTimeLen, bAM ? " am" : " pm" ); + + hb_retclen( pszResult, ulTimeLen + 3 ); + hb_xfree( pszResult ); +} + +HARBOUR HB_DAYS( void ) +{ + hb_retnl( hb_parnl( 1 ) / 86400 ); +} + +HARBOUR HB_ELAPTIME( void ) +{ + ULONG ulStart = hb_TimeStrToSec( hb_parc( 1 ) ); + ULONG ulEnd = hb_TimeStrToSec( hb_parc( 2 ) ); + char szTime[ 9 ]; + + hb_retc( hb_SecToTimeStr( szTime, ( ulEnd < ulStart ? 86400 : 0 ) + ulEnd - ulStart ) ); +} + +HARBOUR HB_LENNUM( void ) +{ + PHB_ITEM pNumber = hb_param( 1, IT_NUMERIC ); + ULONG ulLen = 0; + + if( pNumber ) + { + char * pszString = hb_itemStr( pNumber, NULL, NULL ); + + if( pszString ) + { + ulLen = strlen( pszString ); + hb_strLTrim( pszString, &ulLen ); + hb_xfree( pszString ); + } + } + + hb_retnl( ulLen ); +} + +HARBOUR HB_SECS( void ) +{ + hb_retnl( hb_TimeStrToSec( hb_parc( 1 ) ) ); +} + +HARBOUR HB_TSTRING( void ) +{ + char szTime[ 9 ]; + + hb_retc( hb_SecToTimeStr( szTime, hb_parnl( 1 ) ) ); +} diff --git a/harbour/source/runner/stdalone/external.prg b/harbour/source/runner/stdalone/external.prg index bee6bd4df9..b3eff1f4d3 100644 --- a/harbour/source/runner/stdalone/external.prg +++ b/harbour/source/runner/stdalone/external.prg @@ -459,12 +459,17 @@ EXTERNAL DBSEEK EXTERNAL DBSETRELATION EXTERNAL DBCLEARRELATION EXTERNAL DBEVAL +EXTERNAL DBFILEGET +EXTERNAL DBFILEPUT +EXTERNAL DBINFO +EXTERNAL DBORDERINFO +EXTERNAL DBRECORDINFO +EXTERNAL DBFIELDINFO EXTERNAL MEMOEDIT EXTERNAL MLCTOPOS EXTERNAL MLPOS EXTERNAL MPOSTOLC EXTERNAL __DBAPP -EXTERNAL __DBCONTINUE EXTERNAL __DBCOPY EXTERNAL __DBCOPYSTRUCT EXTERNAL __DBCOPYXSTRUCT @@ -472,7 +477,6 @@ EXTERNAL __DBCREATE EXTERNAL __DBDELIM EXTERNAL __DBJOIN EXTERNAL __DBLIST -EXTERNAL __DBLOCATE EXTERNAL __DBPACK EXTERNAL __DBSDF EXTERNAL __DBSORT @@ -509,10 +513,7 @@ EXTERNAL SECS EXTERNAL DAYS EXTERNAL LENNUM EXTERNAL ELAPTIME -EXTERNAL __BNAMES -EXTERNAL __LNAMES -EXTERNAL __SNAMES -EXTERNAL __SRCNAME +EXTERNAL SOUNDEX EXTERNAL _NATSORTVER EXTERNAL ISAFFIRM EXTERNAL ISNEGATIVE diff --git a/harbour/tests/rtl_test.prg b/harbour/tests/rtl_test.prg index 44121bc3c0..b452d556e0 100644 --- a/harbour/tests/rtl_test.prg +++ b/harbour/tests/rtl_test.prg @@ -1654,14 +1654,17 @@ STATIC FUNCTION Main_STRINGS() RETURN NIL #ifdef __HARBOUR__ + STATIC FUNCTION New_STRINGS() - TEST_LINE( HB_VALTOSTR( 4 ) , " 4" ) - TEST_LINE( HB_VALTOSTR( 4.0 / 2 ) , " 2.00" ) - TEST_LINE( HB_VALTOSTR( "String" ) , "String" ) - TEST_LINE( HB_VALTOSTR( CTOD( "2001/01/01" ) ), "2001.01.01" ) - TEST_LINE( HB_VALTOSTR( NIL ) , "NIL" ) - TEST_LINE( HB_VALTOSTR( .F. ) , ".F." ) - TEST_LINE( HB_VALTOSTR( .T. ) , ".T." ) + + TEST_LINE( HB_ValToStr( 4 ) , " 4" ) + TEST_LINE( HB_ValToStr( 4.0 / 2 ) , " 2.00" ) + TEST_LINE( HB_ValToStr( "String" ) , "String" ) + TEST_LINE( HB_ValToStr( SToD( "20010101" ) ) , "2001.01.01" ) + TEST_LINE( HB_ValToStr( NIL ) , "NIL" ) + TEST_LINE( HB_ValToStr( .F. ) , ".F." ) + TEST_LINE( HB_ValToStr( .T. ) , ".T." ) + RETURN NIL STATIC FUNCTION Long_STRINGS() @@ -1671,10 +1674,27 @@ STATIC FUNCTION Long_STRINGS() TEST_LINE( ( "1234567890" + SPACE( 810910 ) ) - ( "1234567890" + SPACE( 810910 ) ), "12345678901234567890" + SPACE( 810910 * 2 ) ) RETURN NIL + #endif STATIC FUNCTION Main_MISC() + /* AMPM() */ + + TEST_LINE( AMPM( "" ) , "12 am" ) + TEST_LINE( AMPM( "HELLO" ) , "12LLO am" ) + TEST_LINE( AMPM( " 0:23:45" ) , "12:23:45 am" ) + TEST_LINE( AMPM( "00:23:45" ) , "12:23:45 am" ) + TEST_LINE( AMPM( " 5:23:45" ) , " 5:23:45 am" ) + TEST_LINE( AMPM( "05:23:45" ) , "05:23:45 am" ) + TEST_LINE( AMPM( "12:23:45" ) , "12:23:45 pm" ) + TEST_LINE( AMPM( "20:23:45" ) , " 8:23:45 pm" ) + TEST_LINE( AMPM( "24:23:45" ) , "12:23:45 am" ) + TEST_LINE( AMPM( "25:23:45" ) , "13:23:45 pm" ) + TEST_LINE( AMPM( "2" ) , "2 am" ) + TEST_LINE( AMPM( "02:23" ) , "02:23 am" ) + TEST_LINE( AMPM( "02:23:45.10" ) , "02:23:45.10 am" ) + /* FOR/NEXT */ TEST_LINE( TFORNEXT( .F., .T., NIL ) , "E BASE 1086 Argument error ++ F:S" )