diff --git a/harbour/ChangeLog b/harbour/ChangeLog index e6424893ed..f86d30301e 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,20 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ +2007-08-31 11:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/source/rtl/hbhex.c + + added HB_HEXTOSTR() and HB_STRTOHEX() - they are compatible with + HEXTOSTR() and STRTOHEX() in xHarbour + + * harbour/include/hbcompat.ch + + added translations for HB_HEXTOSTR(), HB_STRTOHEX() + + * harbour/include/hbextern.ch + + added new functions + + * harbour/contrib/libct/ctextern.ch + * updated function list + 2007-08-31 03:25 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/source/rtl/dircmd.prg * changed STOD() to HB_STOD() diff --git a/harbour/contrib/libct/ctextern.ch b/harbour/contrib/libct/ctextern.ch index 6f15f9a61a..afadbdc2e5 100644 --- a/harbour/contrib/libct/ctextern.ch +++ b/harbour/contrib/libct/ctextern.ch @@ -69,6 +69,7 @@ EXTERNAL ATREPL EXTERNAL ATTOKEN EXTERNAL BEFORATNUM EXTERNAL BITTOC +EXTERNAL BLANK EXTERNAL BOM EXTERNAL BOQ EXTERNAL BOY @@ -88,6 +89,7 @@ EXTERNAL CHARODD EXTERNAL CHARONE EXTERNAL CHARONLY EXTERNAL CHAROR +EXTERNAL CHARPACK EXTERNAL CHARRELA EXTERNAL CHARRELREP EXTERNAL CHARREM @@ -98,15 +100,27 @@ EXTERNAL CHARSHL EXTERNAL CHARSHR EXTERNAL CHARSLIST EXTERNAL CHARSORT +EXTERNAL CHARSPREAD EXTERNAL CHARSUB EXTERNAL CHARSWAP +EXTERNAL CHARUNPACK +EXTERNAL CHARWIN EXTERNAL CHARXOR EXTERNAL CHECKSUM EXTERNAL CLEARBIT +EXTERNAL CLEAREOL +EXTERNAL CLEARSLOW +EXTERNAL CLEARWIN +EXTERNAL CLEOL +EXTERNAL CLWIN +EXTERNAL COLORREPL EXTERNAL COLORTON +EXTERNAL COLORWIN +EXTERNAL COMPLEMENT EXTERNAL COS EXTERNAL COSH EXTERNAL COT +EXTERNAL COUNTGETS EXTERNAL COUNTLEFT EXTERNAL COUNTRIGHT EXTERNAL CRYPT @@ -116,6 +130,7 @@ EXTERNAL CSETCENT EXTERNAL CSETCURS EXTERNAL CSETKEY EXTERNAL CSETREF +EXTERNAL CSETSAFETY EXTERNAL CTCEXIT EXTERNAL CTCINIT EXTERNAL CTEXIT @@ -126,46 +141,95 @@ EXTERNAL CTOF EXTERNAL CTOMONTH EXTERNAL CTON EXTERNAL CTWINIT +EXTERNAL CURRENTGET EXTERNAL DAYSINMONTH EXTERNAL DAYSTOMONTH +EXTERNAL DBFSIZE +EXTERNAL DELETEFILE +EXTERNAL DIRMAKE +EXTERNAL DIRNAME EXTERNAL DMY +EXTERNAL DOSPARAM EXTERNAL DOY +EXTERNAL DRIVETYPE EXTERNAL DTOR EXTERNAL ENHANCED EXTERNAL EOM EXTERNAL EOQ EXTERNAL EOY +EXTERNAL EXENAME +EXTERNAL EXPAND EXTERNAL EXPONENT EXTERNAL FACT EXTERNAL FAHRENHEIT +EXTERNAL FIELDDECI +EXTERNAL FIELDNUM +EXTERNAL FIELDSIZE +EXTERNAL FILEAPPEND EXTERNAL FILEATTR +EXTERNAL FILECCLOSE +EXTERNAL FILECCONT +EXTERNAL FILECDATI +EXTERNAL FILECOPEN +EXTERNAL FILECOPY EXTERNAL FILEDATE +EXTERNAL FILEDELETE +EXTERNAL FILEMOVE +EXTERNAL FILESCREEN EXTERNAL FILESEEK EXTERNAL FILESIZE +EXTERNAL FILESMAX +EXTERNAL FILESTR EXTERNAL FILETIME EXTERNAL FLOOR EXTERNAL FTOC EXTERNAL FV +EXTERNAL GETCLEARA +EXTERNAL GETCLEARB +EXTERNAL GETFLDCOL +EXTERNAL GETFLDROW +EXTERNAL GETFLDVAR +EXTERNAL GETINPUT EXTERNAL GETPREC +EXTERNAL GETSECRET +EXTERNAL GETVOLINFO +EXTERNAL _HB_CTDSPTIME EXTERNAL HB_GT_CTW +EXTERNAL HB_GT_CTW_DEFAULT EXTERNAL INFINITY +EXTERNAL INVERTATTR EXTERNAL INVERTWIN EXTERNAL ISBIT EXTERNAL ISLEAP EXTERNAL JUSTLEFT EXTERNAL JUSTRIGHT +EXTERNAL KBDSTAT +EXTERNAL KEYSEC +EXTERNAL KEYTIME +EXTERNAL KSETCAPS +EXTERNAL KSETINS +EXTERNAL KSETNUM +EXTERNAL KSETSCROLL EXTERNAL LASTDAYOM +EXTERNAL LIKE EXTERNAL LOG10 EXTERNAL LTOC +EXTERNAL LTON EXTERNAL MANTISSA +EXTERNAL MAXLINE EXTERNAL MDY +EXTERNAL MILLISEC EXTERNAL NTOC EXTERNAL NTOCDOW EXTERNAL NTOCMONTH EXTERNAL NTOCOLOR +EXTERNAL NUL EXTERNAL NUMAND EXTERNAL NUMAT +EXTERNAL NUMCOUNT +EXTERNAL NUMDISKL EXTERNAL NUMHIGH +EXTERNAL NUMLINE EXTERNAL NUMLOW EXTERNAL NUMMIRR EXTERNAL NUMNOT @@ -189,6 +253,7 @@ EXTERNAL POSRANGE EXTERNAL POSREPL EXTERNAL POSUPPER EXTERNAL PRINTREADY +EXTERNAL PRINTSEND EXTERNAL PRINTSTAT EXTERNAL PV EXTERNAL QUARTER @@ -198,33 +263,56 @@ EXTERNAL RATE EXTERNAL REMALL EXTERNAL REMLEFT EXTERNAL REMRIGHT +EXTERNAL RENAMEFILE EXTERNAL REPLALL EXTERNAL REPLLEFT EXTERNAL REPLRIGHT +EXTERNAL RESTCURSOR EXTERNAL RESTGETS +EXTERNAL RESTSETKEY EXTERNAL RESTTOKEN EXTERNAL RTOD +EXTERNAL SAVECURSOR EXTERNAL SAVEGETS +EXTERNAL SAVESETKEY EXTERNAL SAVETOKEN +EXTERNAL SAYDOWN +EXTERNAL SAYMOVEIN +EXTERNAL SAYSCREEN +EXTERNAL SAYSPREAD EXTERNAL SCREENATTR +EXTERNAL SCREENFILE +EXTERNAL SCREENMARK EXTERNAL SCREENMIX +EXTERNAL SCREENSTR +EXTERNAL SCREENTEXT +EXTERNAL SECTOTIME EXTERNAL SETATLIKE EXTERNAL SETBIT EXTERNAL SETCLEARA EXTERNAL SETCLEARB +EXTERNAL SETDATE EXTERNAL SETFATTR +EXTERNAL SETFCREATE +EXTERNAL SETFDATI EXTERNAL SETLASTKEY EXTERNAL SETPREC +EXTERNAL SETTIME +EXTERNAL SHOWTIME EXTERNAL SIGN EXTERNAL SIN EXTERNAL SINH EXTERNAL STANDARD EXTERNAL STRDIFF +EXTERNAL STRFILE +EXTERNAL STRSCREEN EXTERNAL STRSWAP EXTERNAL TABEXPAND EXTERNAL TABPACK EXTERNAL TAN EXTERNAL TANH +EXTERNAL TIMETOSEC +EXTERNAL TIMEVALID EXTERNAL TOKEN EXTERNAL TOKENAT EXTERNAL TOKENEND @@ -235,9 +323,14 @@ EXTERNAL TOKENNEXT EXTERNAL TOKENNUM EXTERNAL TOKENSEP EXTERNAL TOKENUPPER +EXTERNAL TRUENAME EXTERNAL UNSELECTED +EXTERNAL UNTEXTWIN EXTERNAL VALPOS +EXTERNAL VOLSERIAL +EXTERNAL VOLUME EXTERNAL WACLOSE +EXTERNAL WAITPERIOD EXTERNAL WBOARD EXTERNAL WBOX EXTERNAL WCENTER @@ -254,6 +347,7 @@ EXTERNAL WLASTROW EXTERNAL WMODE EXTERNAL WMOVE EXTERNAL WNUM +EXTERNAL WOM EXTERNAL WOPEN EXTERNAL WORDONE EXTERNAL WORDONLY diff --git a/harbour/include/hbcompat.ch b/harbour/include/hbcompat.ch index e7fc9ae3f3..dd1c00678d 100644 --- a/harbour/include/hbcompat.ch +++ b/harbour/include/hbcompat.ch @@ -76,6 +76,7 @@ #xtranslate hb_CStr([]) => CStr() #xtranslate hb_adler32([]) => hb_checksum() + #xtranslate hb_setLastKey([])=> setLastKey() #else #xtranslate gtSys => hb_gtSys @@ -97,6 +98,7 @@ #xtranslate libFree([]) => hb_libFree() #xtranslate hb_checksum([]) => hb_adler32() + #xtranslate setLastKey([]) => hb_setLastKey() #xtranslate CStr([]) => hb_CStr() #xtranslate str(,[],[],)=> iif(, ltrim(str()), str()) @@ -129,6 +131,8 @@ #xtranslate HEXTONUM([]) => HB_HEXTONUM() #xtranslate NUMTOHEX([]) => HB_NUMTOHEX() + #xtranslate HEXTOSTR([]) => HB_HEXTOSTR() + #xtranslate STRTOHEX([]) => HB_STRTOHEX() #xtranslate RASCAN([]) => HB_RASCAN() diff --git a/harbour/include/hbextern.ch b/harbour/include/hbextern.ch index 8b9deee89a..52d52ca14f 100644 --- a/harbour/include/hbextern.ch +++ b/harbour/include/hbextern.ch @@ -346,6 +346,8 @@ EXTERNAL HB_ARGSTRING EXTERNAL HB_ARGV EXTERNAL HB_COLORINDEX EXTERNAL HB_COMPILER +EXTERNAL HB_PCODEVER +EXTERNAL HB_BUILDDATE EXTERNAL HB_FNAMEMERGE EXTERNAL HB_FNAMESPLIT EXTERNAL HB_LANGNAME @@ -405,6 +407,8 @@ EXTERNAL HB_SERIALIZE EXTERNAL HB_DESERIALIZE EXTERNAL HB_HEXTONUM EXTERNAL HB_NUMTOHEX +EXTERNAL HB_HEXTOSTR +EXTERNAL HB_STRTOHEX EXTERNAL HBCLASS EXTERNAL HBOBJECT @@ -964,10 +968,14 @@ EXTERNAL HB_NTOCOLOR EXTERNAL HB_DISKSPACE EXTERNAL HB_FCREATE EXTERNAL HB_FSIZE +EXTERNAL HB_FEOF +EXTERNAL HB_FCOMMIT EXTERNAL HB_FTEMPCREATE EXTERNAL HB_GCALL EXTERNAL HB_KEYPUT EXTERNAL HB_OEMTOANSI +EXTERNAL HB_OSERROR +EXTERNAL HB_OSDRIVESEPARATOR EXTERNAL HB_OSPATHDELIMITERS EXTERNAL HB_OSPATHLISTSEPARATOR EXTERNAL HB_OSPATHSEPARATOR diff --git a/harbour/source/rtl/hbhex.c b/harbour/source/rtl/hbhex.c index 488ad1335f..d67725f1cb 100644 --- a/harbour/source/rtl/hbhex.c +++ b/harbour/source/rtl/hbhex.c @@ -70,9 +70,9 @@ HB_FUNC( HB_HEXTONUM ) if ( c >= '0' && c <= '9' ) iDigit = c - '0'; else if ( c >= 'A' && c <= 'F' ) - iDigit = c - 'A' + 10; + iDigit = c - ( 'A' - 10 ); else if ( c >= 'a' && c <= 'f' ) - iDigit = c - 'a' + 10; + iDigit = c - ( 'a' - 10 ); else { ulNum = 0; @@ -126,3 +126,105 @@ HB_FUNC( HB_NUMTOHEX ) hb_retc( &ret[ iLen ] ); } + +HB_FUNC( HB_STRTOHEX ) +{ + char * szStr = hb_parc( 1 ), * szSep = ""; + ULONG ulStr, ulSep = 0; + + if( hb_pcount() > 1 ) + { + szSep = hb_parc( 2 ); + ulSep = hb_parclen( 2 ); + } + + if( !szStr || !szSep ) + { + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, &hb_errFuncName, HB_ERR_ARGS_BASEPARAMS ); + return; + } + + ulStr = hb_parclen( 1 ); + if( ulStr ) + { + ULONG ulDest = ( ulStr << 1 ) + ( ulStr - 1 ) * ulSep; + char * szDest, * szPtr; + + szPtr = szDest = ( char * ) hb_xgrab( ulDest + 1 ); + do + { + UCHAR uc = ( UCHAR ) *szStr++, ud; + ud = uc >> 4; + *szPtr++ = ud + ( ud < 10 ? '0' : 'A' - 10 ); + ud = uc & 0x0F; + *szPtr++ = ud + ( ud < 10 ? '0' : 'A' - 10 ); + if( --ulStr && ulSep ) + { + memcpy( szPtr, szSep, ulSep ); + ulStr += ulSep; + } + } + while( ulStr ); + hb_retclen_buffer( szDest, ulDest ); + } + else + hb_retc( NULL ); +} + +HB_FUNC( HB_HEXTOSTR ) +{ + char * szStr = hb_parc( 1 ); + ULONG ulStr; + + if( !szStr ) + { + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, &hb_errFuncName, HB_ERR_ARGS_BASEPARAMS ); + return; + } + + ulStr = hb_parclen( 1 ); + if( ulStr > 1 ) + { + ULONG ulDest, ul; + char * szDest, * szPtr; + UCHAR uc; + + szDest = szStr; + ul = ulStr; + ulDest = 0; + do + { + char c = *szDest++; + if( ( c >= '0' && c <= '9' ) || + ( c >= 'A' && c <= 'F' ) || + ( c >= 'a' && c <= 'f' ) ) + ++ulDest; + } + while( --ul ); + + ulDest >>= 1; + if( ulDest ) + { + szPtr = szDest = ( char * ) hb_xgrab( ulDest + 1 ); + uc = 0; + for( ul = 0; ul < ulStr; ++ul ) + { + char c = szStr[ ul ]; + if( c >= '0' && c <= '9' ) + uc += c - '0'; + else if( c >= 'A' && c <= 'F' ) + uc += c - ( 'A' - 10 ); + else if( c >= 'a' && c <= 'f' ) + uc += c - ( 'a' - 10 ); + if( ul & 1 ) + *szPtr++ = ( char ) uc; + else + uc <<= 4; + } + hb_retclen_buffer( szDest, ulDest ); + return; + } + } + + hb_retc( NULL ); +}