diff --git a/ChangeLog.txt b/ChangeLog.txt index 865cc0b906..d5ff0962d1 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,292 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2014-11-29 06:03 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * include/hbapifs.h + * src/common/hbffind.c + * src/rtl/direct.c + * src/rtl/dirscan.prg + * src/rtl/filebuf.c + + added lTime member to HB_FFIND structure + + added 3-rd parmeter to hb_fsDirectory() + + extended default maximum number of Harbour file IO redirecros to 128 + * use hb_xgrabz() + * formatting + + * include/hbcompdf.h + * include/hbpp.h + * src/compiler/cmdcheck.c + * src/compiler/genc.c + * src/compiler/hbcomp.c + * src/compiler/hbmain.c + * src/compiler/ppcomp.c + * src/pp/hbpp.c + * src/pp/ppcore.c + * src/pp/pplib.c + + added support for -ql compiler switch - it disables displaying PRG line + numbers during compilation + + added internal support for switch which disables PRG names from final + PCODE - it's not active by default + + * src/compiler/ppcomp.c + + allow to change -gc? switch by #pragma directives + + * src/compiler/hbusage.c + * present '-' as default option separator for all platforms + + * src/rdd/Makefile + + src/rdd/rddshort.c + - src/rdd/dbfuncs.prg + * moved short function names (10 characters Cl*pper compatible) wrappers + to rddshort.c + + * src/common/hbhash.c + * src/compiler/gencc.c + * src/compiler/hbcomp.c + * src/compiler/hbdbginf.c + * src/compiler/hbdead.c + * src/compiler/hbmain.c + * src/compiler/hbopt.c + * src/debug/dbgentry.c + * src/pp/ppcore.c + * src/rdd/dbf1.c + * src/rdd/dbfntx/dbfntx1.c + * src/rdd/delim1.c + * src/rdd/sdf1.c + * src/rdd/hsx/hsx.c + * src/rdd/usrrdd/usrrdd.c + * src/rdd/wafunc.c + * src/rdd/workarea.c + * src/vm/classes.c + * src/vm/dynsym.c + * src/vm/estack.c + * src/vm/runner.c + * src/vm/set.c + * src/vm/task.c + * src/rtl/cdpapi.c + * src/rtl/filebuf.c + * src/rtl/gtcgi/gtcgi.c + * src/rtl/gtcrs/gtcrs.c + * src/rtl/gtstd/gtstd.c + * src/rtl/gttrm/gttrm.c + * src/rtl/gtxwc/gtxwc.c + * src/rtl/hbdyn.c + * src/rtl/hbgtcore.c + * src/rtl/hbi18n1.c + * src/rtl/hblpp.c + * src/rtl/hbznet.c + * src/rtl/iousr.c + * use hb_xgrabz() + + * src/common/hbprintf.c + * formatting + * reduced variable scope + + * src/rdd/dblist.prg + * src/rdd/hbsix/sxini.prg + * src/rtl/hbfilehi.prg + % use new hb_FName*() functions + + * src/codepage/cp_950.c + * src/codepage/cp_big5.c + * src/codepage/cp_gbk.c + * src/codepage/cp_u16le.c + * src/codepage/cp_utf8.c + * src/common/hbfopen.c + * src/common/hbstr.c + * src/common/strwild.c + * src/compiler/complex.c + * src/compiler/genc.c + * src/compiler/hbopt.c + * src/compiler/hbusage.c + * src/debug/dbghelp.prg + * src/debug/debugger.prg + * src/hbextern/hbextern.prg + * src/main/harbour.1 + * src/pp/ppcore.c + * src/rdd/dbcmd.c + * src/rdd/dbcmd53.c + * src/rdd/dbf1.c + * src/rdd/dbfcdx/dbfcdx1.c + * src/rdd/dbfntx/dbfntx1.c + * src/rdd/dbjoin.prg + * src/rdd/dbnubs.c + * src/rdd/dbsort.prg + * src/rdd/dbstrux.prg + * src/rdd/dbtotal.prg + * src/rdd/dbupdat.prg + * src/rdd/hbsix/sxcompat.prg + * src/rdd/hbsix/sxcrypt.c + * src/rdd/hbsix/sxini.prg + * src/rdd/hsx/hsx.c + * src/rdd/usrrdd/usrrdd.c + * src/vm/debug.c + * src/vm/estack.c + * src/vm/set.c + * src/vm/task.c + * src/rtl/achoice.prg + * src/rtl/adir.prg + * src/rtl/alert.prg + * src/rtl/altd.prg + * src/rtl/base64d.c + * src/rtl/browse.prg + * src/rtl/cdpapi.c + * src/rtl/checkbox.prg + * src/rtl/color53.prg + * src/rtl/dbedit.prg + * src/rtl/dircmd.prg + * src/rtl/dirscan.prg + * src/rtl/errapi.c + * src/rtl/errsys.prg + * src/rtl/fnsplit.c + * src/rtl/gtchrmap.c + * src/rtl/gtcrs/gtcrs.c + * src/rtl/gtsln/gtsln.c + * src/rtl/gtsln/mousesln.c + * src/rtl/gttrm/gttrm.c + * src/rtl/gtwin/gtwin.c + * src/rtl/gtwvt/gtwvt.c + * src/rtl/gtxwc/gtxwc.c + * src/rtl/gui.prg + * src/rtl/hbbfish.c + * src/rtl/hbdoc.prg + * src/rtl/hbfilehi.prg + * src/rtl/hbgtcore.c + * src/rtl/hbi18n2.prg + * src/rtl/hbini.prg + * src/rtl/hblpphb.c + * src/rtl/hbregexc.c + * src/rtl/memvarhb.prg + * src/rtl/menusys.prg + * src/rtl/menuto.prg + * src/rtl/objfunc.prg + * src/rtl/padc.c + * src/rtl/padl.c + * src/rtl/padr.c + * src/rtl/profiler.prg + * src/rtl/radiobtn.prg + * src/rtl/radiogrp.prg + * src/rtl/setcolor.c + * src/rtl/tbcolumn.prg + * src/rtl/tbrowse.prg + * src/rtl/tclass.prg + * src/rtl/tgetint.prg + * src/rtl/tgetlist.prg + * src/rtl/tmenusys.prg + * src/rtl/tobject.prg + * src/rtl/tpersist.prg + * src/rtl/tpopup.prg + * src/rtl/tpopuphb.prg + * src/rtl/treport.prg + * src/rtl/tscalar.prg + * src/rtl/tsymbol.prg + * src/rtl/ttextlin.prg + * src/rtl/typefile.prg + * formatting, casing, comment updating, removed trailing spaces, casting, + replace hb_itemType() with HB_IS_*() macros, updated variable and + function names and scopes, pacified unused result warnings, removed + redundant castings, use HB_SIZEOFARRAY() and sizeof(), removed explicit + NIL from parameters, use hb_LeftEq[I](), added supports for symbol items + used as codeblock replacements, use hb_defaultValue(), use FOR EACH + statement, use SWITCH statement, replaced SubStr() with Left() or + Right(), use hb_AScan(), use hb_FReadLen()/hb_VFReadLen(), + removed FO_READ from FOpen() parameters, use Str() instead of PadL(), + use hb_StrShrink() + + * src/lang/l_el.c + * src/lang/l_es_419.c + * src/lang/l_fr.c + * src/lang/l_hu.c + * src/lang/l_pt_br.c + * src/lang/l_sk.c + * src/lang/l_tr.c + * synced with Viktor's branch + + * src/rtl/achoice.prg + * src/rtl/cdpdet.prg + * synced with Viktor's branch + + * src/vm/Makefile + + src/vm/short.c + + added short function names (10 characters Cl*pper compatible) wrappers + + * src/vm/extrap.c + * synced with Viktor's branch + + * src/rtl/Makefile + + src/rtl/rtlshort.c + + added short function names (10 characters Cl*pper compatible) wrappers + + * src/rtl/cdpdetc.c + * include/harbour.hbx + + added __wapi_GetConsoleOutputCP() + + * src/rtl/datec.c + * include/harbour.hbx + + added hb_CDay( ) -> + + * src/rtl/filesys.c + ! do not check for PIPEs handles in WinCE builds + ! respect OS returnb code in SystemTimeToFileTime() + + * src/rtl/gete.c + * covered GetE() function by HB_CLP_UNDOC macro + + * src/rtl/philes53.c + * covered FSetDevMod() function by HB_CLP_UNDOC macro + + * src/rtl/hbdoc.prg + * use HB_SERIALIZE_COMPRESS instead of explicit hb_ZCompress() + (incompatible, .hbd files has to be regenerated) + + * src/rtl/hbjson.c + * add a newline at EOF in human readable mode + + * src/rtl/hbzlibgz.c + * disabled GZIP support in MSVC WinCE builds + + * src/rtl/philes.c + * include/harbour.hbx + + added hb_FReadLen() + + * src/rtl/vfile.c + * include/harbour.hbx + + added hb_VFReadLen() + + * src/rtl/strclear.c + ! check hb_itemGetWriteCL() result + + ; above modifications borrowed from Viktor's branch with some small + modifications - many thanks + + * src/rtl/hbinet.c + * extened readahead buffer from 256 to 1500 bytes + ! fixed possible wrong result in hb_InetDataReady() and redirected + sockets (i.e. by hb_InetCompress()) + + * src/rtl/hbsocket.c + ! typo in recent modification for BSD socket less builds + + + src/rtl/strutf8.c + * include/harbour.hbx + + added hb_StrIsUTF8() - it should be compatible with similar function + from Viktor's branch + + * src/rtl/tpersist.prg + * eliminated oSelf private variable and reduced macro expansion to + item values + + * src/debug/dbgtmenu.prg + * src/debug/dbgtwin.prg + * src/debug/debugger.prg + ! replaced SaveScreen()/RestScreen() with + __dbgSaveScreen()/__dbgRestScreen() to fix problems with unicode + characters which do not exists in HVM CP. + + * src/rdd/hbsix/sxcompat.prg + + added support for timestamp values to sxChar(), sxNum(), sxDate() + functions. + 2014-11-24 22:38 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rtl/hbrand.c ! fixed memory leak diff --git a/include/harbour.hbx b/include/harbour.hbx index 83fcebc2ec..597eb25bb1 100644 --- a/include/harbour.hbx +++ b/include/harbour.hbx @@ -334,6 +334,7 @@ DYNAMIC hb_ByteSwapL DYNAMIC hb_ByteSwapLL DYNAMIC hb_ByteSwapU DYNAMIC hb_ByteSwapW +DYNAMIC hb_CDay DYNAMIC hb_cdpCharMax DYNAMIC hb_cdpExists DYNAMIC hb_cdpInfo @@ -402,6 +403,7 @@ DYNAMIC hb_DirBase DYNAMIC hb_DirBuild DYNAMIC hb_DirCreate DYNAMIC hb_DirDelete +DYNAMIC hb_Directory DYNAMIC hb_DirExists DYNAMIC hb_DirScan DYNAMIC hb_DirSepAdd @@ -447,6 +449,7 @@ DYNAMIC hb_FNameName DYNAMIC hb_FNameNameExt DYNAMIC hb_FNameSplit DYNAMIC hb_ForNext +DYNAMIC hb_FReadLen DYNAMIC hb_FSetAttr DYNAMIC hb_FSetDateTime DYNAMIC hb_FSetDevMode @@ -815,6 +818,7 @@ DYNAMIC hb_StrCDecode DYNAMIC hb_StrClear DYNAMIC hb_StrDecodEscape DYNAMIC hb_StrFormat +DYNAMIC hb_StrIsUTF8 DYNAMIC hb_StrReplace DYNAMIC hb_StrShrink DYNAMIC hb_StrToExp @@ -907,6 +911,7 @@ DYNAMIC hb_vfLockTest DYNAMIC hb_vfOpen DYNAMIC hb_vfRead DYNAMIC hb_vfReadAt +DYNAMIC hb_vfReadLen DYNAMIC hb_vfRename DYNAMIC hb_vfSeek DYNAMIC hb_vfSize diff --git a/include/hbapifs.h b/include/hbapifs.h index 4379106643..387ec067cc 100644 --- a/include/hbapifs.h +++ b/include/hbapifs.h @@ -57,7 +57,7 @@ HB_EXTERN_BEGIN #define FS_ERROR ( HB_FHANDLE ) F_ERROR /* File locking flags */ -#define FL_LOCK 0x0000 /* Lock a region */ +#define FL_LOCK 0x0000 /* Lock a region */ #define FL_UNLOCK 0x0001 /* Unlock a region */ #define FL_MASK 0x00FF /* Mask for lock type */ @@ -188,7 +188,7 @@ extern HB_EXPORT HB_BOOL hb_fsFileExists ( const char * pszFileName ); /* ch extern HB_EXPORT HB_BOOL hb_fsDirExists ( const char * pszDirName ); /* check if a directory exists (wildcard chars not accepted). */ extern HB_EXPORT HB_BOOL hb_fsCopy ( const char * pszSource, const char * pszDest ); /* copy file */ extern HB_EXPORT double hb_fsDiskSpace ( const char * pszDirName, HB_USHORT uiType ); -extern HB_EXPORT PHB_ITEM hb_fsDirectory ( const char * pszDirSpec, const char * pszAttributes ); +extern HB_EXPORT PHB_ITEM hb_fsDirectory ( const char * pszDirSpec, const char * pszAttributes, HB_BOOL fDateTime ); extern HB_EXPORT HB_BOOL hb_fsLink ( const char * pszExisting, const char * pszNewFile ); /* create hard link */ extern HB_EXPORT HB_BOOL hb_fsLinkSym ( const char * pszTarget, const char * pszNewFile ); /* create symbolic (soft) link */ extern HB_EXPORT char * hb_fsLinkRead ( const char * pszFileName ); /* returns the link pointed to */ @@ -252,9 +252,10 @@ extern HB_EXPORT HB_FHANDLE hb_spCreateEx( const char * pszFileName, HB_FATTR ul typedef struct { char szName[ HB_PATH_MAX ]; - long lDate; char szDate[ 9 ]; /* in YYYYMMDD format */ char szTime[ 9 ]; /* in HH:MM:SS format */ + long lDate; + long lTime; HB_FATTR attr; HB_FOFFSET size; @@ -305,7 +306,7 @@ extern HB_EXPORT HB_WCHAR * hb_fsNameConvU16( const char * pszFileName ); #if defined( _HB_FILE_IMPLEMENTATION_ ) || defined( _HB_FILE_INTERNAL_ ) -# define HB_FILE_TYPE_MAX 64 +# define HB_FILE_TYPE_MAX 128 struct _HB_FILE; typedef struct _HB_FILE * PHB_FILE; diff --git a/include/hbcompdf.h b/include/hbcompdf.h index 1183f20f33..4639894a96 100644 --- a/include/hbcompdf.h +++ b/include/hbcompdf.h @@ -807,6 +807,7 @@ typedef struct _HB_COMP int iErrorFmt; /* error message formatting mode (default: Clipper) */ HB_BOOL fQuiet; /* be quiet during compilation (-q) */ + HB_BOOL fGauge; /* hide line counter gauge (-ql) */ HB_BOOL fFullQuiet; /* be quiet during compilation disable all messages */ HB_BOOL fExit; /* force breaking compilation process */ HB_BOOL fPPO; /* flag indicating, is ppo output needed */ @@ -816,6 +817,7 @@ typedef struct _HB_COMP HB_BOOL fAutoMemvarAssume; /* holds if undeclared variables are automatically assumed MEMVAR (-a)*/ HB_BOOL fForceMemvars; /* holds if memvars are assumed when accesing undeclared variable (-v)*/ HB_BOOL fDebugInfo; /* holds if generate debugger required info */ + HB_BOOL fHideSource; /* do not embed original source filename into generated source code */ HB_BOOL fNoStartUp; /* C code generation embed HB_FS_FIRST or not */ HB_BOOL fCredits; /* print credits */ HB_BOOL fBuildInfo; /* print build info */ @@ -832,6 +834,7 @@ typedef struct _HB_COMP typedef struct { HB_BOOL fDebugInfo; + HB_BOOL fHideSource; HB_BOOL fAutoMemvarAssume; HB_BOOL fI18n; HB_BOOL fLineNumbers; @@ -841,6 +844,7 @@ typedef struct HB_BOOL fForceMemvars; int iStartProc; int iWarnings; + int iGenCOutput; int iExitLevel; int iHidden; int supported; @@ -849,7 +853,7 @@ typedef struct extern PHB_COMP hb_comp_new( void ); extern void hb_comp_free( PHB_COMP ); -#endif /* ! HB_MACRO_SUPPORT */ +#endif /* ! HB_MACRO_SUPPORT */ typedef struct _HB_COMP_FUNCS { diff --git a/include/hbpp.h b/include/hbpp.h index e354d57a27..34ea6f506e 100644 --- a/include/hbpp.h +++ b/include/hbpp.h @@ -409,7 +409,7 @@ HB_PP_TOKEN, * PHB_PP_TOKEN; /* Clipper allows only 16 nested includes */ #define HB_PP_MAX_INCLUDED_FILES 64 -#define HB_PP_HASHID(t) ( ( HB_UCHAR ) HB_PP_UPPER( (t)->value[0] ) ) +#define HB_PP_HASHID(t) ( ( HB_UCHAR ) HB_PP_UPPER( (t)->value[ 0 ] ) ) #define HB_PP_HASHID_MAX 256 #define HB_PP_DEFINE 1 #define HB_PP_TRANSLATE 2 @@ -590,6 +590,7 @@ typedef struct HB_BOOL fQuietSet; /* do not show standard information (default) */ HB_BOOL fQuiet; /* do not show standard information (current) */ + HB_BOOL fGauge; /* do not show line counter gauge */ HB_BOOL fEscStr; /* use \ in strings as escape character */ HB_BOOL fMultiLineStr; /* allow to define multiline [] and e"" strings using ; as line concatenator */ HB_BOOL fError; /* indicates error in last operation */ @@ -649,7 +650,7 @@ extern HB_EXPORT PHB_PP_STATE hb_pp_new( void ); extern HB_EXPORT void hb_pp_free( PHB_PP_STATE pState ); extern HB_EXPORT void hb_pp_reset( PHB_PP_STATE pState ); extern HB_EXPORT void hb_pp_init( PHB_PP_STATE pState, HB_BOOL fQuiet, - int iCycles, void * cargo, + HB_BOOL fGauge, int iCycles, void * cargo, PHB_PP_OPEN_FUNC pOpenFunc, PHB_PP_CLOSE_FUNC pCloseFunc, PHB_PP_ERROR_FUNC pErrorFunc, PHB_PP_DISP_FUNC pDispFunc, PHB_PP_DUMP_FUNC pDumpFunc, PHB_PP_INLINE_FUNC pInLineFunc, diff --git a/src/codepage/cp_950.c b/src/codepage/cp_950.c index 559f7ba935..522a1d9f63 100644 --- a/src/codepage/cp_950.c +++ b/src/codepage/cp_950.c @@ -56,15 +56,15 @@ static HB_CDP_GET_FUNC( CP950_get ) *wc = 0; if( *pnIndex < nLen ) { - HB_UCHAR uc = pSrc[ ( * pnIndex )++ ]; + HB_UCHAR uc = pSrc[ ( *pnIndex )++ ]; if( uc >= ( HB_CP950_FIRST >> 8 ) && uc <= ( HB_CP950_LAST >> 8 ) && *pnIndex < nLen ) { - *wc = s_cp950_to_ucs16( ( ( int ) uc << 8 ) | ( HB_UCHAR ) pSrc[ * pnIndex ] ); + *wc = s_cp950_to_ucs16( ( ( int ) uc << 8 ) | ( HB_UCHAR ) pSrc[ *pnIndex ] ); if( *wc ) { - ( * pnIndex )++; + ( *pnIndex )++; return HB_TRUE; } } @@ -78,16 +78,16 @@ static HB_CDP_GET_FUNC( CP950_get ) static HB_CDP_PUT_FUNC( CP950_put ) { - if( * pnIndex < nLen ) + if( *pnIndex < nLen ) { HB_USHORT b5 = s_ucs16_to_cp950( wc ); if( b5 ) { - if( * pnIndex + 1 < nLen ) + if( *pnIndex + 1 < nLen ) { - HB_PUT_BE_UINT16( &pDst[ ( * pnIndex ) ], b5 ); - * pnIndex += 2; + HB_PUT_BE_UINT16( &pDst[ ( *pnIndex ) ], b5 ); + *pnIndex += 2; return HB_TRUE; } } @@ -98,9 +98,9 @@ static HB_CDP_PUT_FUNC( CP950_put ) if( wc <= cdp->uniTable->wcMax && cdp->uniTable->uniTrans[ wc ] ) - pDst[ ( * pnIndex )++ ] = cdp->uniTable->uniTrans[ wc ]; + pDst[ ( *pnIndex )++ ] = cdp->uniTable->uniTrans[ wc ]; else - pDst[ ( * pnIndex )++ ] = wc >= 0x100 ? '?' : ( HB_UCHAR ) wc; + pDst[ ( *pnIndex )++ ] = wc >= 0x100 ? '?' : ( HB_UCHAR ) wc; return HB_TRUE; } } diff --git a/src/codepage/cp_big5.c b/src/codepage/cp_big5.c index 0552d1111e..c6db9417b1 100644 --- a/src/codepage/cp_big5.c +++ b/src/codepage/cp_big5.c @@ -56,15 +56,15 @@ static HB_CDP_GET_FUNC( BIG5_get ) *wc = 0; if( *pnIndex < nLen ) { - HB_UCHAR uc = pSrc[ ( * pnIndex )++ ]; + HB_UCHAR uc = pSrc[ ( *pnIndex )++ ]; if( uc >= ( HB_BIG5_FIRST >> 8 ) && uc <= ( HB_BIG5_LAST >> 8 ) && *pnIndex < nLen ) { - *wc = s_big5_to_ucs16( ( ( int ) uc << 8 ) | ( HB_UCHAR ) pSrc[ * pnIndex ] ); + *wc = s_big5_to_ucs16( ( ( int ) uc << 8 ) | ( HB_UCHAR ) pSrc[ *pnIndex ] ); if( *wc ) { - ( * pnIndex )++; + ( *pnIndex )++; return HB_TRUE; } } @@ -78,16 +78,16 @@ static HB_CDP_GET_FUNC( BIG5_get ) static HB_CDP_PUT_FUNC( BIG5_put ) { - if( * pnIndex < nLen ) + if( *pnIndex < nLen ) { HB_USHORT b5 = s_ucs16_to_big5( wc ); if( b5 ) { - if( * pnIndex + 1 < nLen ) + if( *pnIndex + 1 < nLen ) { - HB_PUT_BE_UINT16( &pDst[ ( * pnIndex ) ], b5 ); - * pnIndex += 2; + HB_PUT_BE_UINT16( &pDst[ ( *pnIndex ) ], b5 ); + *pnIndex += 2; return HB_TRUE; } } @@ -98,9 +98,9 @@ static HB_CDP_PUT_FUNC( BIG5_put ) if( wc <= cdp->uniTable->wcMax && cdp->uniTable->uniTrans[ wc ] ) - pDst[ ( * pnIndex )++ ] = cdp->uniTable->uniTrans[ wc ]; + pDst[ ( *pnIndex )++ ] = cdp->uniTable->uniTrans[ wc ]; else - pDst[ ( * pnIndex )++ ] = wc >= 0x100 ? '?' : ( HB_UCHAR ) wc; + pDst[ ( *pnIndex )++ ] = wc >= 0x100 ? '?' : ( HB_UCHAR ) wc; return HB_TRUE; } } diff --git a/src/codepage/cp_gbk.c b/src/codepage/cp_gbk.c index 10dfb53b5b..71bbcb56d9 100644 --- a/src/codepage/cp_gbk.c +++ b/src/codepage/cp_gbk.c @@ -57,15 +57,15 @@ static HB_CDP_GET_FUNC( GBK_get ) *wc = 0; if( *pnIndex < nLen ) { - HB_UCHAR uc = pSrc[ ( * pnIndex )++ ]; + HB_UCHAR uc = pSrc[ ( *pnIndex )++ ]; if( uc >= ( HB_GBK_FIRST >> 8 ) && uc <= ( HB_GBK_LAST >> 8 ) && *pnIndex < nLen ) { - *wc = s_gbk_to_ucs16( ( ( int ) uc << 8 ) | ( HB_UCHAR ) pSrc[ * pnIndex ] ); + *wc = s_gbk_to_ucs16( ( ( int ) uc << 8 ) | ( HB_UCHAR ) pSrc[ *pnIndex ] ); if( *wc ) { - ( * pnIndex )++; + ( *pnIndex )++; return HB_TRUE; } } @@ -79,16 +79,16 @@ static HB_CDP_GET_FUNC( GBK_get ) static HB_CDP_PUT_FUNC( GBK_put ) { - if( * pnIndex < nLen ) + if( *pnIndex < nLen ) { HB_USHORT gb18030 = s_ucs16_to_gbk( wc ); if( gb18030 ) { - if( * pnIndex + 1 < nLen ) + if( *pnIndex + 1 < nLen ) { - HB_PUT_BE_UINT16( &pDst[ ( * pnIndex ) ], gb18030 ); - * pnIndex += 2; + HB_PUT_BE_UINT16( &pDst[ ( *pnIndex ) ], gb18030 ); + *pnIndex += 2; return HB_TRUE; } } @@ -99,9 +99,9 @@ static HB_CDP_PUT_FUNC( GBK_put ) if( wc <= cdp->uniTable->wcMax && cdp->uniTable->uniTrans[ wc ] ) - pDst[ ( * pnIndex )++ ] = cdp->uniTable->uniTrans[ wc ]; + pDst[ ( *pnIndex )++ ] = cdp->uniTable->uniTrans[ wc ]; else - pDst[ ( * pnIndex )++ ] = wc >= 0x100 ? '?' : ( HB_UCHAR ) wc; + pDst[ ( *pnIndex )++ ] = wc >= 0x100 ? '?' : ( HB_UCHAR ) wc; return HB_TRUE; } } diff --git a/src/codepage/cp_u16le.c b/src/codepage/cp_u16le.c index 6b231c3200..245247e61b 100644 --- a/src/codepage/cp_u16le.c +++ b/src/codepage/cp_u16le.c @@ -53,10 +53,10 @@ static HB_CDP_GET_FUNC( UTF16LE_get ) { HB_SYMBOL_UNUSED( cdp ); - if( * pnIndex + 1 < nLen ) + if( *pnIndex + 1 < nLen ) { - * wc = HB_GET_LE_UINT16( &pSrc[ * pnIndex ] ); - * pnIndex += 2; + *wc = HB_GET_LE_UINT16( &pSrc[ *pnIndex ] ); + *pnIndex += 2; return HB_TRUE; } else @@ -68,10 +68,10 @@ static HB_CDP_PUT_FUNC( UTF16LE_put ) { HB_SYMBOL_UNUSED( cdp ); - if( * pnIndex + 1 < nLen ) + if( *pnIndex + 1 < nLen ) { - HB_PUT_LE_UINT16( &pDst[ * pnIndex ], wc ); - * pnIndex += 2; + HB_PUT_LE_UINT16( &pDst[ *pnIndex ], wc ); + *pnIndex += 2; return HB_TRUE; } return HB_FALSE; diff --git a/src/codepage/cp_utf8.c b/src/codepage/cp_utf8.c index 13ad6f27ab..ef090f9978 100644 --- a/src/codepage/cp_utf8.c +++ b/src/codepage/cp_utf8.c @@ -229,8 +229,8 @@ static HB_CDP_CMP_FUNC( UTF8_cmpi ) while( nLen-- ) { - HB_UCHAR u1 = cdp->upper[ ( HB_UCHAR ) * szFirst++ ], - u2 = cdp->upper[ ( HB_UCHAR ) * szSecond++ ]; + HB_UCHAR u1 = cdp->upper[ ( HB_UCHAR ) *szFirst++ ], + u2 = cdp->upper[ ( HB_UCHAR ) *szSecond++ ]; if( u1 != u2 ) { iRet = ( u1 < u2 ) ? -1 : 1; diff --git a/src/common/hbffind.c b/src/common/hbffind.c index 05abba6d15..0deee60705 100644 --- a/src/common/hbffind.c +++ b/src/common/hbffind.c @@ -413,6 +413,7 @@ static HB_BOOL hb_fsFindNextLow( PHB_FFIND ffind ) int iHour = 0; int iMin = 0; int iSec = 0; + int iMSec = 0; HB_FATTR raw_attr = 0, nAttr = 0; @@ -679,6 +680,7 @@ static HB_BOOL hb_fsFindNextLow( PHB_FFIND ffind ) iHour = time.wHour; iMin = time.wMinute; iSec = time.wSecond; + iMSec = time.wMilliseconds; } } } @@ -784,6 +786,19 @@ static HB_BOOL hb_fsFindNextLow( PHB_FFIND ffind ) iHour = lt.tm_hour; iMin = lt.tm_min; iSec = lt.tm_sec; + +# if defined( HB_OS_LINUX ) && \ + defined( __GLIBC__ ) && defined( __GLIBC_MINOR__ ) && \ + ( __GLIBC__ > 2 || ( __GLIBC__ == 2 && __GLIBC_MINOR__ >= 6 ) ) +# if defined( _BSD_SOURCE ) || defined( _SVID_SOURCE ) || \ + ( __GLIBC_MINOR__ >= 12 && \ + ( ( defined( _POSIX_C_SOURCE ) || _POSIX_C_SOURCE >= 200809L ) || \ + ( defined( _XOPEN_SOURCE ) || _XOPEN_SOURCE >= 700 ) ) ) + iMSec = sStat.st_mtim.tv_nsec / 1000000; +# else + iMSec = sStat.st_mtimensec / 1000000; +# endif +# endif } else bFound = HB_FALSE; @@ -805,6 +820,7 @@ static HB_BOOL hb_fsFindNextLow( PHB_FFIND ffind ) HB_SYMBOL_UNUSED( iHour ); HB_SYMBOL_UNUSED( iMin ); HB_SYMBOL_UNUSED( iSec ); + HB_SYMBOL_UNUSED( iMSec ); HB_SYMBOL_UNUSED( raw_attr ); bFound = HB_FALSE; @@ -838,6 +854,7 @@ static HB_BOOL hb_fsFindNextLow( PHB_FFIND ffind ) ffind->attr = hb_fsAttrFromRaw( raw_attr ) | nAttr; ffind->lDate = hb_dateEncode( iYear, iMonth, iDay ); + ffind->lTime = hb_timeEncode( iHour, iMin, iSec, iMSec ); hb_dateStrPut( ffind->szDate, iYear, iMonth, iDay ); ffind->szDate[ 8 ] = '\0'; @@ -850,14 +867,10 @@ static HB_BOOL hb_fsFindNextLow( PHB_FFIND ffind ) PHB_FFIND hb_fsFindFirst( const char * pszFileMask, HB_FATTR attrmask ) { - PHB_FFIND ffind; - - ffind = ( PHB_FFIND ) hb_xgrab( sizeof( HB_FFIND ) ); - memset( ffind, 0, sizeof( HB_FFIND ) ); + PHB_FFIND ffind = ( PHB_FFIND ) hb_xgrabz( sizeof( HB_FFIND ) ); /* Allocate platform dependent file find info storage */ - ffind->info = ( void * ) hb_xgrab( sizeof( HB_FFIND_INFO ) ); - memset( ffind->info, 0, sizeof( HB_FFIND_INFO ) ); + ffind->info = ( void * ) hb_xgrabz( sizeof( HB_FFIND_INFO ) ); /* Store search parameters */ #if defined( HB_OS_WIN ) diff --git a/src/common/hbfopen.c b/src/common/hbfopen.c index bac44efae0..2913c581dc 100644 --- a/src/common/hbfopen.c +++ b/src/common/hbfopen.c @@ -63,7 +63,7 @@ FILE * hb_fopen( const char * path, const char * mode ) { FILE * file; -#if defined( HB_OS_WIN ) && defined( UNICODE ) && !defined( __XCC__ ) +#if defined( HB_OS_WIN ) && defined( UNICODE ) && ! defined( __XCC__ ) LPCTSTR lpPath, lpMode; LPTSTR lpFreeP, lpFreeM; diff --git a/src/common/hbhash.c b/src/common/hbhash.c index e7302d2ff8..78ba976df4 100644 --- a/src/common/hbhash.c +++ b/src/common/hbhash.c @@ -90,8 +90,7 @@ PHB_HASH_TABLE hb_hashTableCreate( HB_SIZE nSize, pTable->pCompFunc = pComp; pTable->nCount = pTable->nUsed = 0; - pTable->pItems = ( PHB_HASH_ITEM * ) hb_xgrab( sizeof( PHB_HASH_ITEM ) * nSize ); - memset( pTable->pItems, 0, sizeof( PHB_HASH_ITEM ) * nSize ); + pTable->pItems = ( PHB_HASH_ITEM * ) hb_xgrabz( sizeof( PHB_HASH_ITEM ) * nSize ); return pTable; } diff --git a/src/common/hbprintf.c b/src/common/hbprintf.c index 226cf392d9..7a0aca72f2 100644 --- a/src/common/hbprintf.c +++ b/src/common/hbprintf.c @@ -765,11 +765,10 @@ static size_t put_wstr( char *buffer, size_t bufsize, size_t size, const _x_wstr wstr, int flags, int width, int precision ) { + const _x_wchar wstr_null[] = { '(', 'n', 'u', 'l', 'l', ')', 0 }; + if( ! wstr ) - { - const _x_wchar wstr_null[] = { '(', 'n', 'u', 'l', 'l', ')', 0 }; wstr = wstr_null; - } if( precision < 0 ) { diff --git a/src/common/hbstr.c b/src/common/hbstr.c index c0783949e2..20fd50e0f4 100644 --- a/src/common/hbstr.c +++ b/src/common/hbstr.c @@ -337,7 +337,7 @@ char * hb_xstrcat( char * szDest, const char * szSrc, ... ) /* AJ: 2004-02-23 Concatenates multiple strings into a single result. - Eg. hb_xstrcpy (buffer, "A", "B", NULL) stores "AB" in buffer. + Eg. hb_xstrcpy( buffer, "A", "B", NULL ) stores "AB" in buffer. Returns szDest. Any existing contents of szDest are cleared. If the szDest buffer is NULL, allocates a new buffer with the required length and returns that. The diff --git a/src/common/strwild.c b/src/common/strwild.c index f7adb20901..c786ad2379 100644 --- a/src/common/strwild.c +++ b/src/common/strwild.c @@ -107,7 +107,7 @@ static HB_BOOL hb_strMatchWildRaw( const char * szString, const char * szPattern } else if( fFile && nPosV == nLen && nPosP < nSize && szPattern[ nPosP ] == '.' && - ( nPosP + 1 == nSize || + ( nPosP + 1 == nSize || ( nPosP + 2 == nSize && szPattern[ nPosP + 1 ] == '*' ) ) ) { break; @@ -216,7 +216,7 @@ static HB_BOOL hb_strMatchWildCDP( const char * szString, const char * szPattern if( fFile && nPosV == nLen && nPosP < nSize && szPattern[ nPosP ] == '.' && - ( nPosP + 1 == nSize || + ( nPosP + 1 == nSize || ( nPosP + 2 == nSize && szPattern[ nPosP + 1 ] == '*' ) ) ) { break; diff --git a/src/compiler/cmdcheck.c b/src/compiler/cmdcheck.c index fdea039d04..42bfc4ccd5 100644 --- a/src/compiler/cmdcheck.c +++ b/src/compiler/cmdcheck.c @@ -539,6 +539,10 @@ static void hb_compChkEnvironVar( HB_COMP_DECL, const char * szSwitch ) case 'Q': switch( *( s + 1 ) ) { + case 'l': + case 'L': + HB_COMP_PARAM->fGauge = HB_FALSE; + break; case '2': HB_COMP_PARAM->fFullQuiet = HB_TRUE; case '0': @@ -945,7 +949,9 @@ void hb_compChkCompilerSwitch( HB_COMP_DECL, int iArg, const char * const Args[] case 'q': case 'Q': - if( HB_ISDIGIT( szSwitch[ j + 1 ] ) ) + if( HB_ISDIGIT( szSwitch[ j + 1 ] ) || + szSwitch[ j + 1 ] == 'l' || + szSwitch[ j + 1 ] == 'L' ) { Switch[ 2 ] = szSwitch[ j + 1 ]; Switch[ 3 ] = '\0'; diff --git a/src/compiler/complex.c b/src/compiler/complex.c index a6188dfb3f..644bbb98d9 100644 --- a/src/compiler/complex.c +++ b/src/compiler/complex.c @@ -445,7 +445,7 @@ static int hb_comp_dayTimeDecode( PHB_COMP_LEX pLex, PHB_PP_TOKEN pToken, if( pTime ) { - lDate = hb_dateEncode( ( long ) lYear, ( long ) lMonth, ( long ) lDay ); + lDate = hb_dateEncode( ( int ) lYear, ( int ) lMonth, ( int ) lDay ); if( lDate != 0 || ( lYear == 0 && lMonth == 0 && lDay == 0 ) ) { iType = NUM_DATE; diff --git a/src/compiler/genc.c b/src/compiler/genc.c index 060a915fb1..0d087fa0e2 100644 --- a/src/compiler/genc.c +++ b/src/compiler/genc.c @@ -439,15 +439,11 @@ void hb_compGenCCode( HB_COMP_DECL, PHB_FNAME pFileName ) /* generates the static void hb_writeEndInit( HB_COMP_DECL, FILE * yyc, const char * szModulname, const char * szSourceFile ) { -#if 0 - HB_SYMBOL_UNUSED( szSourceFile ); - fprintf( yyc, - "\nHB_INIT_SYMBOLS_END( hb_vm_SymbolInit_%s%s )\n\n", - HB_COMP_PARAM->szPrefix, szModulname ); -#endif fprintf( yyc, "\nHB_INIT_SYMBOLS_EX_END( hb_vm_SymbolInit_%s%s, ", HB_COMP_PARAM->szPrefix, szModulname ); + if( HB_COMP_PARAM->fHideSource ) + szSourceFile = ""; hb_compGenCString( yyc, ( const HB_BYTE * ) szSourceFile, strlen( szSourceFile ) ); fprintf( yyc, ", 0x%lx, 0x%04x )\n\n", 0L, HB_PCODE_VER ); @@ -2532,7 +2528,7 @@ static HB_GENC_FUNC( hb_p_pushaparams ) return 1; } -/* NOTE: The order of functions have to match the order of opcodes +/* NOTE: The order of functions have to match the order of opcodes * mnemonics */ static const PHB_GENC_FUNC s_verbose_table[] = { diff --git a/src/compiler/gencc.c b/src/compiler/gencc.c index b7c0ea1f08..40a95c4c02 100644 --- a/src/compiler/gencc.c +++ b/src/compiler/gencc.c @@ -2391,8 +2391,7 @@ void hb_compGenCRealCode( HB_COMP_DECL, PHB_HFUNC pFunc, FILE * yyc ) label_info.pnLabels = NULL; else { - label_info.pnLabels = ( HB_SIZE * ) hb_xgrab( pFunc->nPCodePos * sizeof( HB_SIZE ) ); - memset( label_info.pnLabels, 0, pFunc->nPCodePos * sizeof( HB_SIZE ) ); + label_info.pnLabels = ( HB_SIZE * ) hb_xgrabz( pFunc->nPCodePos * sizeof( HB_SIZE ) ); hb_compGenLabelTable( pFunc, &label_info ); } diff --git a/src/compiler/hbcomp.c b/src/compiler/hbcomp.c index f7c25f90e9..8a45b631ca 100644 --- a/src/compiler/hbcomp.c +++ b/src/compiler/hbcomp.c @@ -242,10 +242,8 @@ PHB_COMP hb_comp_new( void ) if( pPP ) { - pComp = ( PHB_COMP ) hb_xgrab( sizeof( HB_COMP ) ); - memset( pComp, 0, sizeof( HB_COMP ) ); - pComp->pLex = ( PHB_COMP_LEX ) hb_xgrab( sizeof( HB_COMP_LEX ) ); - memset( pComp->pLex, 0, sizeof( HB_COMP_LEX ) ); + pComp = ( PHB_COMP ) hb_xgrabz( sizeof( HB_COMP ) ); + pComp->pLex = ( PHB_COMP_LEX ) hb_xgrabz( sizeof( HB_COMP_LEX ) ); /* initialize default settings */ pComp->mode = HB_MODE_COMPILER; @@ -269,9 +267,11 @@ PHB_COMP hb_comp_new( void ) pComp->fAutoMemvarAssume = HB_FALSE; /* holds if undeclared variables are automatically assumed MEMVAR (-a)*/ pComp->fForceMemvars = HB_FALSE; /* holds if memvars are assumed when accesing undeclared variable (-v)*/ pComp->fDebugInfo = HB_FALSE; /* holds if generate debugger required info */ + pComp->fHideSource = HB_FALSE; /* do not stor .prg file names in PCODE */ pComp->fNoStartUp = HB_FALSE; /* C code generation embed HB_FS_FIRST or not */ pComp->fCredits = HB_FALSE; /* print credits */ pComp->fBuildInfo = HB_FALSE; /* print build info */ + pComp->fGauge = HB_TRUE; /* line counter gauge */ pComp->fLogo = HB_TRUE; /* print logo */ pComp->fSingleModule = HB_FALSE; pComp->fError = HB_FALSE; diff --git a/src/compiler/hbdbginf.c b/src/compiler/hbdbginf.c index c6c80588b0..36ae31aa65 100644 --- a/src/compiler/hbdbginf.c +++ b/src/compiler/hbdbginf.c @@ -125,8 +125,7 @@ PHB_DEBUGINFO hb_compGetDebugInfo( HB_COMP_DECL ) * parameter to hb_compGenPushString(). [druzus] */ pInfo->ulAllocated = ( ( ulLine >> 3 ) + 0x100 ) & 0xFFFFFF00L; - pInfo->pLineMap = ( HB_BYTE * ) hb_xgrab( pInfo->ulAllocated + 1 ); - memset( pInfo->pLineMap, 0, pInfo->ulAllocated + 1 ); + pInfo->pLineMap = ( HB_BYTE * ) hb_xgrabz( pInfo->ulAllocated + 1 ); pInfo->pNext = pLineInfo; pLineInfo = pInfo; } diff --git a/src/compiler/hbdead.c b/src/compiler/hbdead.c index 223cf8697d..974e4dfee3 100644 --- a/src/compiler/hbdead.c +++ b/src/compiler/hbdead.c @@ -558,8 +558,7 @@ void hb_compCodeTraceMarkDead( HB_COMP_DECL, PHB_HFUNC pFunc ) code_info.nPCodeSize = pFunc->nPCodePos; code_info.fFinished = HB_FALSE; - code_info.pCodeMark = ( HB_BYTE * ) hb_xgrab( code_info.nPCodeSize ); - memset( code_info.pCodeMark, 0, code_info.nPCodeSize ); + code_info.pCodeMark = ( HB_BYTE * ) hb_xgrabz( code_info.nPCodeSize ); hb_compPCodeTrace( pFunc, ( const PHB_PCODE_FUNC * ) pFuncTable, ( void * ) &code_info ); diff --git a/src/compiler/hbmain.c b/src/compiler/hbmain.c index 2e3a1d4aa3..1f10d1be4a 100644 --- a/src/compiler/hbmain.c +++ b/src/compiler/hbmain.c @@ -1882,10 +1882,7 @@ static void hb_compFinalizeFunction( HB_COMP_DECL ) /* fixes all last defined fu */ static PHB_HFUNC hb_compFunctionNew( HB_COMP_DECL, const char * szName, HB_SYMBOLSCOPE cScope ) { - PHB_HFUNC pFunc; - - pFunc = ( PHB_HFUNC ) hb_xgrab( sizeof( HB_HFUNC ) ); - memset( pFunc, 0, sizeof( HB_HFUNC ) ); + PHB_HFUNC pFunc = ( PHB_HFUNC ) hb_xgrabz( sizeof( HB_HFUNC ) ); pFunc->szName = szName; pFunc->cScope = cScope; @@ -1899,9 +1896,7 @@ static PHB_HFUNC hb_compFunctionNew( HB_COMP_DECL, const char * szName, HB_SYMBO static PHB_HINLINE hb_compInlineNew( HB_COMP_DECL, const char * szName, int iLine ) { - PHB_HINLINE pInline; - - pInline = ( PHB_HINLINE ) hb_xgrab( sizeof( HB_HINLINE ) ); + PHB_HINLINE pInline = ( PHB_HINLINE ) hb_xgrab( sizeof( HB_HINLINE ) ); pInline->szName = szName; pInline->pCode = NULL; @@ -4105,6 +4100,7 @@ static void hb_compGenIncluded( HB_COMP_DECL ) static void hb_compSaveSwitches( HB_COMP_DECL, PHB_COMP_SWITCHES pSwitches ) { pSwitches->fDebugInfo = HB_COMP_PARAM->fDebugInfo; + pSwitches->fHideSource = HB_COMP_PARAM->fHideSource; pSwitches->fAutoMemvarAssume = HB_COMP_PARAM->fAutoMemvarAssume; pSwitches->fI18n = HB_COMP_PARAM->fI18n; pSwitches->fLineNumbers = HB_COMP_PARAM->fLineNumbers; @@ -4114,6 +4110,7 @@ static void hb_compSaveSwitches( HB_COMP_DECL, PHB_COMP_SWITCHES pSwitches ) pSwitches->fForceMemvars = HB_COMP_PARAM->fForceMemvars; pSwitches->iStartProc = HB_COMP_PARAM->iStartProc; pSwitches->iWarnings = HB_COMP_PARAM->iWarnings; + pSwitches->iGenCOutput = HB_COMP_PARAM->iGenCOutput; pSwitches->iExitLevel = HB_COMP_PARAM->iExitLevel; pSwitches->iHidden = HB_COMP_PARAM->iHidden; pSwitches->supported = HB_COMP_PARAM->supported; @@ -4122,6 +4119,7 @@ static void hb_compSaveSwitches( HB_COMP_DECL, PHB_COMP_SWITCHES pSwitches ) static void hb_compRestoreSwitches( HB_COMP_DECL, PHB_COMP_SWITCHES pSwitches ) { HB_COMP_PARAM->fDebugInfo = pSwitches->fDebugInfo; + HB_COMP_PARAM->fHideSource = pSwitches->fHideSource; HB_COMP_PARAM->fAutoMemvarAssume = pSwitches->fAutoMemvarAssume; HB_COMP_PARAM->fI18n = pSwitches->fI18n; HB_COMP_PARAM->fLineNumbers = pSwitches->fLineNumbers; @@ -4131,6 +4129,7 @@ static void hb_compRestoreSwitches( HB_COMP_DECL, PHB_COMP_SWITCHES pSwitches ) HB_COMP_PARAM->fForceMemvars = pSwitches->fForceMemvars; HB_COMP_PARAM->iStartProc = pSwitches->iStartProc; HB_COMP_PARAM->iWarnings = pSwitches->iWarnings; + HB_COMP_PARAM->iGenCOutput = pSwitches->iGenCOutput; HB_COMP_PARAM->iExitLevel = pSwitches->iExitLevel; HB_COMP_PARAM->iHidden = pSwitches->iHidden; HB_COMP_PARAM->supported = pSwitches->supported; diff --git a/src/compiler/hbopt.c b/src/compiler/hbopt.c index 6478bdef0d..a245b468a0 100644 --- a/src/compiler/hbopt.c +++ b/src/compiler/hbopt.c @@ -1298,7 +1298,7 @@ static int hb_compPCodeTraceAssignedUnused( PHB_HFUNC pFunc, HB_SIZE nPos, HB_BY if( fCanBreak ) { nPos += hb_compPCodeSize( pFunc, nPos ); - while( pFunc->pCode[ nPos ] != HB_P_ENDPROC && pFunc->pCode[ nPos ] != HB_P_ENDBLOCK && + while( pFunc->pCode[ nPos ] != HB_P_ENDPROC && pFunc->pCode[ nPos ] != HB_P_ENDBLOCK && pFunc->pCode[ nPos ] != HB_P_SEQBEGIN && pFunc->pCode[ nPos ] != HB_P_SEQEND ) { nPos += hb_compPCodeSize( pFunc, nPos ); @@ -1618,8 +1618,7 @@ void hb_compPCodeTraceOptimizer( HB_COMP_DECL ) } /* Initial scan */ - pLocals = ( PHB_OPT_LOCAL ) hb_xgrab( sizeof( HB_OPT_LOCAL ) * usLocalCount ); - memset( pLocals, 0, sizeof( HB_OPT_LOCAL ) * usLocalCount ); + pLocals = ( PHB_OPT_LOCAL ) hb_xgrabz( sizeof( HB_OPT_LOCAL ) * usLocalCount ); hb_compPCodeEnumScanLocals( pFunc, pLocals ); /* Check */ diff --git a/src/compiler/hbusage.c b/src/compiler/hbusage.c index 62e0e4ed3b..6e5b811c8c 100644 --- a/src/compiler/hbusage.c +++ b/src/compiler/hbusage.c @@ -53,56 +53,57 @@ */ void hb_compPrintUsage( HB_COMP_DECL, const char * szSelf ) { - static const char * szOptions[] = + static const char * s_szOptions[] = { - "\nOptions: %ca automatic memvar declaration", - "\n %cb debug info", - "\n %cbuild display detailed version info", - "\n %ccredits display credits", - "\n %cd[=] #define ", - "\n %ces[] set exit severity", - "\n %cfn[:[l|u]|-] set filename casing (l=lower u=upper)", - "\n %cfd[:[l|u]|-] set directory casing (l=lower u=upper)", - "\n %cfp[:] set path separator", - "\n %cfs[-] turn filename space trimming on or off (default)", - "\n %cg output type generated is (see below)", - "\n %cgc[] output type: C source (.c) (default)", + "\nOptions: -a automatic memvar declaration", + "\n -b debug info", + "\n -build display detailed version info", + "\n -credits display credits", + "\n -d[=] #define ", + "\n -es[] set exit severity", + "\n -fn[:[l|u]|-] set filename casing (l=lower u=upper)", + "\n -fd[:[l|u]|-] set directory casing (l=lower u=upper)", + "\n -fp[:] set path separator", + "\n -fs[-] turn filename space trimming on or off (default)", + "\n -g output type generated is (see below)", + "\n -gc[] output type: C source (.c) (default)", "\n : 0=compact (default) 1=normal 2=verbose", "\n 3=generate real C code", - "\n %cgh output type: Harbour Portable Object (.hrb)", - "\n %cgd[.] generate dependencies list into (.d) file", - "\n %cge[] error output : 0=Clipper (default)", + "\n -gh output type: Harbour Portable Object (.hrb)", + "\n -gd[.] generate dependencies list into (.d) file", + "\n -ge[] error output : 0=Clipper (default)", "\n 1=IDE friendly", - "\n %ci #include file search path", - "\n %ci[-|+] disable/enable support for INCLUDE envvar", - "\n %cj[] generate i18n gettext file (.pot)", - "\n %ck compilation mode (type -k? for more data)", - "\n %cl suppress line number information", - "\n %cm compile module only", - "\n %cn[] no implicit starting procedure", + "\n -i #include file search path", + "\n -i[-|+] disable/enable support for INCLUDE envvar", + "\n -j[] generate i18n gettext file (.pot)", + "\n -k compilation mode (type -k? for more data)", + "\n -l suppress line number information", + "\n -m compile module only", + "\n -n[] no implicit starting procedure", "\n : 0=no implicit starting procedure", "\n 1=no starting procedure at all", "\n 2=add starting procedure if necessary", - "\n %co object file drive and/or path", - "\n %cp[] generate pre-processed output (.ppo) file", - "\n %cp+ generate pre-processor trace (.ppt) file", - "\n %cq quiet", - "\n %cq0 quiet and don't display program header", - "\n %cq2 disable all output messages", - "\n %cr: set maximum number of preprocessor iterations", -/* TODO: "\n %cr[] request linker to search (or none)", */ - "\n %cs[m] syntax check only [minimal for dependencies list]", -/* TODO: "\n %ct path for temp file creation", */ - "\n %cu[] use command def set in (or none)", - "\n %cu+ add command def set from ", - "\n %cundef: #undef ", - "\n %cv variables are assumed M->", - "\n %cw[] set warning level number (0..3, default 1)", - "\n %cx[] set symbol init function name prefix (for .c only)", + "\n -o object file drive and/or path", + "\n -p[] generate pre-processed output (.ppo) file", + "\n -p+ generate pre-processor trace (.ppt) file", + "\n -q quiet", + "\n -q0 quiet and don't display program header", + "\n -q2 disable all output messages", + "\n -ql hide line counter gauge", + "\n -r: set maximum number of preprocessor iterations", +/* TODO: "\n -r[] request linker to search (or none)", */ + "\n -s[m] syntax check only [minimal for dependencies list]", +/* TODO: "\n -t path for temp file creation", */ + "\n -u[] use command def set in (or none)", + "\n -u+ add command def set from ", + "\n -undef: #undef ", + "\n -v variables are assumed M->", + "\n -w[] set warning level number (0..3, default 1)", + "\n -x[] set symbol init function name prefix (for .c only)", #ifdef YYDEBUG - "\n %cy trace lex & yacc activity", + "\n -y trace lex & yacc activity", #endif - "\n %cz suppress shortcutting (.and. & .or.)", + "\n -z suppress shortcutting (.and. & .or.)", "\n @ compile list of modules in ", "\n" }; @@ -113,12 +114,8 @@ void hb_compPrintUsage( HB_COMP_DECL, const char * szSelf ) "\nSyntax: %s [options]\n", szSelf ); hb_compOutStd( HB_COMP_PARAM, buffer ); - for( iLine = 0; iLine < ( int ) ( sizeof( szOptions ) / sizeof( char * ) ); iLine++ ) - { - hb_snprintf( buffer, sizeof( buffer ), - szOptions[ iLine ], HB_OS_OPT_DELIM_LIST[ 0 ] ); - hb_compOutStd( HB_COMP_PARAM, buffer ); - } + for( iLine = 0; iLine < ( int ) ( sizeof( s_szOptions ) / sizeof( char * ) ); iLine++ ) + hb_compOutStd( HB_COMP_PARAM, s_szOptions[ iLine ] ); } /* @@ -126,7 +123,7 @@ void hb_compPrintUsage( HB_COMP_DECL, const char * szSelf ) */ void hb_compPrintModes( HB_COMP_DECL ) { - static const char * szOptions[] = + static const char * s_szOptions[] = { "\nOptions: c clear all flags (strict Clipper mode)", "\n h[-] Harbour mode", @@ -142,7 +139,7 @@ void hb_compPrintModes( HB_COMP_DECL ) "\n ? this info", "\n" }; - static const int flags[] = + static const int s_flags[] = { 0, HB_COMPFLAG_HARBOUR, @@ -161,12 +158,12 @@ void hb_compPrintModes( HB_COMP_DECL ) hb_compOutStd( HB_COMP_PARAM, "\nCompatibility flags: -k[options]\n" ); - for( iLine = 0; iLine < ( int ) ( sizeof( szOptions ) / sizeof( char * ) ); iLine++ ) + for( iLine = 0; iLine < ( int ) ( sizeof( s_szOptions ) / sizeof( char * ) ); iLine++ ) { - hb_compOutStd( HB_COMP_PARAM, szOptions[ iLine ] ); - if( iLine < ( int ) ( sizeof( flags ) / sizeof( int ) ) && - ( flags[ iLine ] < 0 ? HB_COMP_ISSUPPORTED( ~flags[ iLine ] ) == 0 : - HB_COMP_ISSUPPORTED( flags[ iLine ] ) != 0 ) ) + hb_compOutStd( HB_COMP_PARAM, s_szOptions[ iLine ] ); + if( iLine < ( int ) ( sizeof( s_flags ) / sizeof( int ) ) && + ( s_flags[ iLine ] < 0 ? HB_COMP_ISSUPPORTED( ~s_flags[ iLine ] ) == 0 : + HB_COMP_ISSUPPORTED( s_flags[ iLine ] ) != 0 ) ) hb_compOutStd( HB_COMP_PARAM, " (default)" ); } } diff --git a/src/compiler/ppcomp.c b/src/compiler/ppcomp.c index 9a766a0f19..36f4cc9be1 100644 --- a/src/compiler/ppcomp.c +++ b/src/compiler/ppcomp.c @@ -311,6 +311,19 @@ static HB_BOOL hb_pp_CompilerSwitch( void * cargo, const char * szSwitch, } } } + else if( hb_strnicmp( szSwitch, "gc", 2 ) == 0 ) + { + if( fSet ) + { + if( iValue == HB_COMPGENC_REALCODE || + iValue == HB_COMPGENC_VERBOSE || + iValue == HB_COMPGENC_NORMAL || + iValue == HB_COMPGENC_COMPACT ) + HB_COMP_PARAM->iGenCOutput = iValue; + } + else + iValue = HB_COMP_PARAM->iGenCOutput; + } else if( hb_strnicmp( szSwitch, "es", 2 ) == 0 ) { if( fSet ) @@ -385,7 +398,8 @@ void hb_compInitPP( HB_COMP_DECL, int argc, const char * const argv[], if( HB_COMP_PARAM->pLex->pPP ) { - hb_pp_init( HB_COMP_PARAM->pLex->pPP, HB_COMP_PARAM->fQuiet, + hb_pp_init( HB_COMP_PARAM->pLex->pPP, + HB_COMP_PARAM->fQuiet, HB_COMP_PARAM->fGauge, HB_COMP_PARAM->iMaxTransCycles, HB_COMP_PARAM, pOpenFunc, NULL, hb_pp_ErrorGen, hb_pp_Disp, hb_pp_PragmaDump, diff --git a/src/debug/dbgentry.c b/src/debug/dbgentry.c index 78f475e52b..f54cddf64f 100644 --- a/src/debug/dbgentry.c +++ b/src/debug/dbgentry.c @@ -898,9 +898,7 @@ static void hb_dbgAddStopLines( PHB_ITEM pItem ) const char * pNewBuffer = hb_arrayGetCPtr( pEntry, 3 ); HB_ISIZ nLen = ( ( nMax - nMin ) >> 3 ) + 1; HB_ISIZ k; - char * pBuffer = ( char * ) hb_xgrab( nLen + 1 ); - - hb_xmemset( pBuffer, 0, nLen ); + char * pBuffer = ( char * ) hb_xgrabz( nLen + 1 ); /* the bitfields with line numbers should use * 8bit alignment so it's safe to use byte copy diff --git a/src/debug/dbghelp.prg b/src/debug/dbghelp.prg index b88a949765..a45e8ee5be 100644 --- a/src/debug/dbghelp.prg +++ b/src/debug/dbghelp.prg @@ -79,7 +79,7 @@ PROCEDURE __dbgHelp( cTopic ) oBrw:GoBottomBlock := {|| oBrw:Cargo := Len( aTopics ) } IF HB_ISSTRING( cTopic ) .AND. ; - ( nTopic := Ascan( aTopics, {| x | hb_LeftEqI( x[ 1 ], cTopic ) } ) ) > 1 + ( nTopic := AScan( aTopics, {| x | hb_LeftEqI( x[ 1 ], cTopic ) } ) ) > 1 oBrw:nFirstVisible := nTopic ENDIF diff --git a/src/debug/dbgtmenu.prg b/src/debug/dbgtmenu.prg index 933538186f..12f2dd81dd 100644 --- a/src/debug/dbgtmenu.prg +++ b/src/debug/dbgtmenu.prg @@ -196,8 +196,9 @@ METHOD PROCEDURE ClosePopup( nPopup ) CLASS HBDbMenu IF nPopup != 0 oPopup := ::aItems[ nPopup ]:bAction IF HB_ISOBJECT( oPopup ) - RestScreen( oPopup:nTop, oPopup:nLeft, oPopup:nBottom + 1, oPopup:nRight + 2, ; - oPopup:cBackImage ) + __dbgRestScreen( oPopup:nTop, oPopup:nLeft, ; + oPopup:nBottom + 1, oPopup:nRight + 2, ; + oPopup:cBackImage ) oPopup:cBackImage := NIL ENDIF ::aItems[ nPopup ]:Display( ::cClrPopup, ::cClrHotKey ) @@ -218,7 +219,7 @@ METHOD PROCEDURE Display() CLASS HBDbMenu LOCAL oMenuItem IF ::lPopup - ::cBackImage := SaveScreen( ::nTop, ::nLeft, ::nBottom + 1, ::nRight + 2 ) + ::cBackImage := __dbgSaveScreen( ::nTop, ::nLeft, ::nBottom + 1, ::nRight + 2 ) hb_DispBox( ::nTop, ::nLeft, ::nBottom, ::nRight, HB_B_SINGLE_UNI, ::cClrPopup ) hb_Shadow( ::nTop, ::nLeft, ::nBottom, ::nRight ) ELSE diff --git a/src/debug/dbgtwin.prg b/src/debug/dbgtwin.prg index 6a8e974889..5de7b3677c 100644 --- a/src/debug/dbgtwin.prg +++ b/src/debug/dbgtwin.prg @@ -123,8 +123,8 @@ METHOD PROCEDURE Clear() CLASS HBDbWindow METHOD PROCEDURE Hide() CLASS HBDbWindow - RestScreen( ::nTop, ::nLeft, ::nBottom + iif( ::lShadow, 1, 0 ), ; - ::nRight + iif( ::lShadow, 2, 0 ), ::cBackImage ) + __dbgRestScreen( ::nTop, ::nLeft, ::nBottom + iif( ::lShadow, 1, 0 ), ; + ::nRight + iif( ::lShadow, 2, 0 ), ::cBackImage ) ::cBackImage := NIL ::lVisible := .F. @@ -191,8 +191,9 @@ METHOD PROCEDURE Refresh() CLASS HBDbWindow METHOD PROCEDURE Show( lFocused ) CLASS HBDbWindow - ::cBackImage := SaveScreen( ::nTop, ::nLeft, ::nBottom + iif( ::lShadow, 1, 0 ), ; - ::nRight + iif( ::lShadow, 2, 0 ) ) + ::cBackImage := __dbgSaveScreen( ::nTop, ::nLeft, ; + ::nBottom + iif( ::lShadow, 1, 0 ), ; + ::nRight + iif( ::lShadow, 2, 0 ) ) hb_Scroll( ::nTop, ::nLeft, ::nBottom, ::nRight,,, ::cColor ) ::SetFocus( hb_defaultValue( lFocused, ::lFocused ) ) @@ -264,7 +265,7 @@ METHOD PROCEDURE Move() CLASS HBDbWindow LOCAL nKey DO WHILE .T. - RestScreen( ,,,, ::cBackImage ) + __dbgRestScreen( ,,,, ::cBackImage ) hb_DispBox( ::nTop, ::nLeft, ::nRight, ::nBottom, Replicate( hb_UTF8ToStrBox( "░" ), 8 ) + " ", ::cColor ) SWITCH nKey := __dbgInkey() diff --git a/src/debug/debugger.prg b/src/debug/debugger.prg index 640f09cc6a..b9e2d7eabd 100644 --- a/src/debug/debugger.prg +++ b/src/debug/debugger.prg @@ -1681,7 +1681,7 @@ METHOD InputBox( cMsg, uValue, bValid, lEditable ) CLASS HBDebugger IF hb_defaultValue( lEditable, .T. ) IF ! cType == "C" .OR. Len( uValue ) < nWidth - uTemp := PadR( iif( cType == "N", hb_NToS( uValue ), ; + uTemp := PadR( iif( cType == "N", hb_ntos( uValue ), ; uValue ), nWidth ) ENDIF IF bValid == NIL .AND. cType $ "N" @@ -2138,7 +2138,7 @@ METHOD OpenPPO() CLASS HBDebugger METHOD PROCEDURE OSShell() CLASS HBDebugger - LOCAL cImage := SaveScreen() + LOCAL cImage := __dbgSaveScreen() LOCAL cColors := SetColor() LOCAL oE @@ -2166,7 +2166,7 @@ METHOD PROCEDURE OSShell() CLASS HBDebugger END SEQUENCE SetCursor( SC_NONE ) - RestScreen( ,,,, cImage ) + __dbgRestScreen( ,,,, cImage ) SetColor( cColors ) RETURN @@ -3710,6 +3710,26 @@ FUNCTION __dbgInkey() RETURN nKey +FUNCTION __dbgSaveScreen( ... ) + + LOCAL lAppCompatBuffer := hb_gtInfo( HB_GTI_COMPATBUFFER, .F. ) + LOCAL cScreen := SaveScreen( ... ) + + hb_gtInfo( HB_GTI_COMPATBUFFER, lAppCompatBuffer ) + + RETURN cScreen + + +FUNCTION __dbgRestScreen( ... ) + + LOCAL lAppCompatBuffer := hb_gtInfo( HB_GTI_COMPATBUFFER, .F. ) + + RestScreen( ... ) + hb_gtInfo( HB_GTI_COMPATBUFFER, lAppCompatBuffer ) + + RETURN NIL + + FUNCTION __dbgTextToArray( cString ) RETURN hb_ATokens( StrTran( cString, Chr( 13 ) ), Chr( 10 ) ) diff --git a/src/hbextern/hbextern.prg b/src/hbextern/hbextern.prg index 64096529ec..b1e147bcee 100644 --- a/src/hbextern/hbextern.prg +++ b/src/hbextern/hbextern.prg @@ -48,7 +48,7 @@ /* NOTE: Please do not add __HB_EXTERN__ symbol to hbextern.ch * This symbol should be only declared by programmer who - * prefer using hbextern library instead of including + * prefers using hbextern library instead of including * hbextern.ch file */ diff --git a/src/lang/l_el.c b/src/lang/l_el.c index f9a420a5e0..eae1b87baa 100644 --- a/src/lang/l_el.c +++ b/src/lang/l_el.c @@ -1,4 +1,4 @@ -/* Last Translator: Pete_wg (pete_westg yahoo.gr) */ +/* Last Translator: vszakats */ #include "hbapilng.h" @@ -41,9 +41,9 @@ static HB_LANG s_lang = /* CA-Cl*pper compatible natmsg items */ - "Βάση δεδομένων Εγγραφές Τελ. ενημέρωση Μέγεθος", - "Θέλετε περισσότερα παραδείγματα?", - "Αρ. Σελίδας", + "Βάση δεδομένων Εγγραφές Τελ.ενημέρωση Μέγεθος", + "Θέλετε κι άλλα παραδείγματα?", + "Αρ.Σελίδας", "** Μερικό σύνολο **", "* Υποσύνολο *", "*** Σύνολο ***", @@ -69,35 +69,35 @@ static HB_LANG s_lang = "", "", "Χαμηλή μνήμη", - "Απροσδιόριστη συνάρτηση /Undefined/", + "Απροσδιόριστη (undefined) συνάρτηση", "Μη εξαγώγιμη μέθοδος", "Ανύπαρκτη μεταβλητή", - "Το ψευδώνυμο /alias/ δεν υπάρχει", + "Το ψευδώνυμο (alias) δεν υπάρχει", "Μη εξαγώγιμη μεταβλητή", - "Ακυροι χαρακτήρες στο ψευδώνυμο /alias/", - "Tο ψευδώνυμο /alias/ χρησιμοποιείται ήδη", + "Ακυροι χαρακτήρες στο ψευδώνυμο (alias)", + "Tο ψευδώνυμο (alias) χρησιμοποιείται ήδη", "", - "Λάθος δημιουργίας", - "Λάθος ανοίγματος", - "Λάθος κλεισίματος", - "Λάθος ανάγνωσης", - "Λάθος εγγραφής", - "Λάθος εκτύπωσης", + "Σφάλμα δημιουργίας", + "Σφάλμα ανοίγματος", + "Σφάλμα κλεισίματος", + "Σφάλμα ανάγνωσης", + "Σφάλμα εγγραφής", + "Σφάλμα εκτύπωσης", "", "", "", "", "Η λειτουργία δεν υποστηρίζεται", - "Ξεπεράστηκε το όριο", - "Ανιχνεύτηκε φθορά αρχείων", - "Λανθασμένος τύπος δεδομένων", - "Λανθασμένο πλάτος δεδομένων", + "Υπέρβαση ορίου", + "Ανιχνεύτηκε φθορά", + "Λάθος τύπου δεδομένων", + "Λάθος πλάτους δεδομένων", "Η περιοχή-εργασίας δεν είναι σε χρήση", - "Η περιοχή-εργασίας δεν είναι ταξινομημένη", - "Απαιτείται αποκλειστική χρήση /Exclusive/", + "Αταξινόμητη περιοχή-εργασίας", + "Απαιτείται αποκλειστική χρήση", "Απαιτείται κλείδωμα", "Δεν επιτρέπεται η εγγραφή", - "Αποτυχία κλειδώματος νέας εγγραφής /Append/", + "Αποτυχία κλειδώματος νέας εγγραφής", "Αποτυχία κλειδώματος", "", "", @@ -114,29 +114,29 @@ static HB_LANG s_lang = "Μη αναστρέψιμο λάθος %d: ", "Αποτυχία επανόρθωσης λάθους", "Δεν υπάρχει ERRORBLOCK() για το λάθος", - "Πάρα πολλές επαναλαμβανόμενες κλήσεις χειρισμού σφαλμάτων", + "Υπερβολικές επαναληπτικές κλήσεις χειριστή σφαλμάτων", "Ακυρη RDD ή αποτυχία φόρτωσης", "Ακυρος τύπος μεθόδου από %s", - "Η συνάρτηση hb_xgrab δεν μπορεί να εκχωρήσει μνήμη", + "Η συνάρτηση hb_xgrab αδυνατεί να εκχωρήσει μνήμη", "Η συνάρτηση hb_xrealloc κλήθηκε με ένα δείκτη NULL", "Η συνάρτηση hb_xrealloc κλήθηκε με ένα άκυρο δείκτη", - "Η συνάρτηση hb_xrealloc δεν μπορεί να εκχωρήσει μνήμη", + "Η συνάρτηση hb_xrealloc αδυνατεί να εκχωρήσει μνήμη", "Η συνάρτηση hb_xfree κλήθηκε με ένα άκυρο δείκτη", "Η συνάρτηση hb_xfree κλήθηκε με ένα δείκτη NULL", "Αδυναμία εντοπισμού της εναρκτήριας διαδικασίας: '%s'", - "Δεν υπάρχει εναρκτήρια διαδικασία", + "Ανύπαρκτη εναρκτήρια διαδικασία", "Μη υσποστηριζόμενος VM opcode", "Συμβολοστοιχείο αναμενόταν από %s", "Ακυρος τύπος συμβόλου για self απο %s", "Αναμενόταν μπλοκ-κώδικα απο %s", "Ακυρος τύπος στοιχείου στοίβας επιχειρεί pop από %s", - "Ελειπής ροή στοίβας /stack underflow/", + "Ελειπής ροή στοίβας (stack underflow)", "Ενα στοιχείο επιχειρούσε να αντιγραφεί στον εαυτό του από %s", - "Ακυρο συμβολικό στοιχείο περάστηκε ως μεταβλητή μνήμης %s", - "Υπερχείλιση buffer Μνήμης", - "Η συνάρτηση hb_xgrab αιτήθηκε να διαθέσει μηδέν χαρακτήρες", - "Η συνάρτηση hb_xrealloc αιτήθηκε να αλλάξει μέγεθος σε μηδέν χαρακτήρες", - "Η συνάρτηση hb_xalloc αιτήθηκε να διαθέσει μηδέν χαρακτήρες", + "Ακυρο σύμβολο περάστηκε ως μεταβλητή μνήμης %s", + "Υπερχείλιση ενδιάμεσης μνήμης", + "Η συνάρτηση hb_xgrab ζητήθηκε να διαθέσει μηδέν χαρακτήρες", + "Η συνάρτηση hb_xrealloc ζητήθηκε να αλλάξει μέγεθος σε μηδέν χαρακτήρες", + "Η συνάρτηση hb_xalloc ζητήθηκε να διαθέσει μηδέν χαρακτήρες", /* Texts */ diff --git a/src/lang/l_es_419.c b/src/lang/l_es_419.c index da82d05bc1..d86889b61e 100644 --- a/src/lang/l_es_419.c +++ b/src/lang/l_es_419.c @@ -1,4 +1,4 @@ -/* Last Translator: pemedina (pablo.medina sysadminonline.com) */ +/* Last Translator: Pablo Emilio Medina (pablo.medina sysadminonline.com) */ #include "hbapilng.h" diff --git a/src/lang/l_fr.c b/src/lang/l_fr.c index 53ca4548b1..1d3a6b80e7 100644 --- a/src/lang/l_fr.c +++ b/src/lang/l_fr.c @@ -1,4 +1,4 @@ -/* Last Translator: jujuland (alain.aupeix wanadoo.fr) */ +/* Last Translator: Alain Aupeix (alain.aupeix wanadoo.fr) */ #include "hbapilng.h" diff --git a/src/lang/l_hu.c b/src/lang/l_hu.c index 024dc476ea..69c788dd4f 100644 --- a/src/lang/l_hu.c +++ b/src/lang/l_hu.c @@ -1,4 +1,4 @@ -/* Last Translator: vszakats */ +/* Last Translator: hbtest */ #include "hbapilng.h" @@ -112,9 +112,9 @@ static HB_LANG s_lang = /* Internal error names */ "Kezelhetetlen hiba %d: ", - "Hiba kezelési hiba", + "Hibakezelési hiba", "Nincs ERRORBLOCK() a hiba kezeléséhez", - "Túl sok rekurzív hiba kezelő hívás", + "Túl sok rekurzív hibakezelő hívás", "Az RDD hibás vagy nem sikerült betölteni", "Nem megfelelő típusú metódus (%s)", "hb_xgrab nem tud memóriát foglalni", diff --git a/src/lang/l_pt_br.c b/src/lang/l_pt_br.c index fc63f7f8f5..6efdcaa084 100644 --- a/src/lang/l_pt_br.c +++ b/src/lang/l_pt_br.c @@ -1,4 +1,4 @@ -/* Last Translator: SAMI (sami laham.com.br) */ +/* Last Translator: Sami Laham (sami laham.com.br) */ #include "hbapilng.h" diff --git a/src/lang/l_sk.c b/src/lang/l_sk.c index a0b80d5781..e9cee0b244 100644 --- a/src/lang/l_sk.c +++ b/src/lang/l_sk.c @@ -1,4 +1,4 @@ -/* Last Translator: hbtest */ +/* Last Translator: vszakats */ #include "hbapilng.h" diff --git a/src/lang/l_tr.c b/src/lang/l_tr.c index 1355945a34..f6de73ec94 100644 --- a/src/lang/l_tr.c +++ b/src/lang/l_tr.c @@ -1,4 +1,4 @@ -/* Last Translator: hbtest */ +/* Last Translator: vszakats */ #include "hbapilng.h" diff --git a/src/main/harbour.1 b/src/main/harbour.1 index 0b24dd892c..6deaed91fd 100644 --- a/src/main/harbour.1 +++ b/src/main/harbour.1 @@ -91,7 +91,7 @@ compile list of modules in .SH AUTHOR -Author of harbour: The Harbour team (http://harbour-project.org) +Authors of Harbour: Type 'harbour -credits' for the Harbour Team This manual page was written by Luis Mayoral , for the Debian GNU/Linux system (but may be used by others). diff --git a/src/pp/hbpp.c b/src/pp/hbpp.c index 8fa9d587bd..de00e5dc1a 100644 --- a/src/pp/hbpp.c +++ b/src/pp/hbpp.c @@ -800,7 +800,7 @@ int main( int argc, char * argv[] ) if( ! szRuleFile && ! szVerFile ) fWrite = HB_TRUE; - hb_pp_init( pState, iQuiet != 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); + hb_pp_init( pState, iQuiet != 0, HB_TRUE, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); szInclude = hb_getenv( "INCLUDE" ); if( szInclude ) diff --git a/src/pp/ppcore.c b/src/pp/ppcore.c index 3bba61b53a..19789a0cc4 100644 --- a/src/pp/ppcore.c +++ b/src/pp/ppcore.c @@ -94,14 +94,14 @@ /* warning messages */ -static const char * const hb_pp_szWarnings[] = +static const char * const s_pp_szWarnings[] = { "1%s", /* C10?? */ "1Redefinition or duplicate definition of #define %s" /* C1005 */ }; /* error messages */ -static const char * const hb_pp_szErrors[] = +static const char * const s_pp_szErrors[] = { "Illegal character '\\x%s'", /* C2004 */ "Unterminated string '%s'", /* C2007 */ @@ -214,7 +214,7 @@ static void hb_pp_disp( PHB_PP_STATE pState, const char * szMessage ) static void hb_pp_error( PHB_PP_STATE pState, char type, int iError, const char * szParam ) { - const char * const * szMsgTable = type == 'W' ? hb_pp_szWarnings : hb_pp_szErrors; + const char * const * szMsgTable = type == 'W' ? s_pp_szWarnings : s_pp_szErrors; if( pState->pErrorFunc ) { @@ -709,7 +709,7 @@ static void hb_pp_readLine( PHB_PP_STATE pState ) } pState->iLineTot += iLine; iLine = ++pState->pFile->iCurrentLine / 100; - if( ! pState->fQuiet && + if( ! pState->fQuiet && pState->fGauge && iLine != pState->pFile->iLastDisp ) { char szLine[ 12 ]; @@ -2034,8 +2034,7 @@ static PHB_PP_FILE hb_pp_FileNew( PHB_PP_STATE pState, const char * szFileName, ( pState->pIncFunc )( pState->cargo, szFileName ); } - pFile = ( PHB_PP_FILE ) hb_xgrab( sizeof( HB_PP_FILE ) ); - memset( pFile, '\0', sizeof( HB_PP_FILE ) ); + pFile = ( PHB_PP_FILE ) hb_xgrabz( sizeof( HB_PP_FILE ) ); pFile->szFileName = hb_strdup( szFileName ); pFile->file_in = file_in; @@ -2049,10 +2048,7 @@ static PHB_PP_FILE hb_pp_FileNew( PHB_PP_STATE pState, const char * szFileName, static PHB_PP_FILE hb_pp_FileBufNew( const char * pLineBuf, HB_SIZE nLineBufLen ) { - PHB_PP_FILE pFile; - - pFile = ( PHB_PP_FILE ) hb_xgrab( sizeof( HB_PP_FILE ) ); - memset( pFile, '\0', sizeof( HB_PP_FILE ) ); + PHB_PP_FILE pFile = ( PHB_PP_FILE ) hb_xgrabz( sizeof( HB_PP_FILE ) ); pFile->fFree = HB_FALSE; pFile->pLineBuf = pLineBuf; @@ -2126,9 +2122,7 @@ static void hb_pp_TraceFileFree( PHB_PP_STATE pState ) static PHB_PP_STATE hb_pp_stateNew( void ) { - PHB_PP_STATE pState = ( PHB_PP_STATE ) hb_xgrab( sizeof( HB_PP_STATE ) ); - - memset( pState, '\0', sizeof( HB_PP_STATE ) ); + PHB_PP_STATE pState = ( PHB_PP_STATE ) hb_xgrabz( sizeof( HB_PP_STATE ) ); /* create new line buffer */ pState->pBuffer = hb_membufNew(); @@ -2913,8 +2907,7 @@ static void hb_pp_defineNew( PHB_PP_STATE pState, PHB_PP_TOKEN pToken, HB_BOOL f if( usPCount ) { /* create regular match and result markers from parameters */ - pMarkers = ( PHB_PP_MARKER ) hb_xgrab( usPCount * sizeof( HB_PP_MARKER ) ); - memset( pMarkers, '\0', usPCount * sizeof( HB_PP_MARKER ) ); + pMarkers = ( PHB_PP_MARKER ) hb_xgrabz( usPCount * sizeof( HB_PP_MARKER ) ); } } hb_pp_defineAdd( pState, HB_PP_CMP_CASE, usPCount, pMarkers, pMatch, pResult ); @@ -3559,8 +3552,7 @@ static void hb_pp_directiveNew( PHB_PP_STATE pState, PHB_PP_TOKEN pToken, if( fValid && usPCount ) { /* create regular match and result markers from parameters */ - pMarkers = ( PHB_PP_MARKER ) hb_xgrab( usPCount * sizeof( HB_PP_MARKER ) ); - memset( pMarkers, '\0', usPCount * sizeof( HB_PP_MARKER ) ); + pMarkers = ( PHB_PP_MARKER ) hb_xgrabz( usPCount * sizeof( HB_PP_MARKER ) ); } /* free marker index list */ @@ -5456,8 +5448,7 @@ void hb_pp_initRules( PHB_PP_RULE * pRulesPtr, int * piRules, HB_USHORT marker; HB_ULONG ulBit; - pMarkers = ( PHB_PP_MARKER ) hb_xgrab( pDefRule->markers * sizeof( HB_PP_MARKER ) ); - memset( pMarkers, '\0', pDefRule->markers * sizeof( HB_PP_MARKER ) ); + pMarkers = ( PHB_PP_MARKER ) hb_xgrabz( pDefRule->markers * sizeof( HB_PP_MARKER ) ); for( marker = 0, ulBit = 1; marker < pDefRule->markers; ++marker, ulBit <<= 1 ) { if( pDefRule->repeatbits & ulBit ) @@ -5545,13 +5536,15 @@ void hb_pp_free( PHB_PP_STATE pState ) /* * initialize PP context */ -void hb_pp_init( PHB_PP_STATE pState, HB_BOOL fQuiet, int iCycles, void * cargo, +void hb_pp_init( PHB_PP_STATE pState, + HB_BOOL fQuiet, HB_BOOL fGauge, int iCycles, void * cargo, PHB_PP_OPEN_FUNC pOpenFunc, PHB_PP_CLOSE_FUNC pCloseFunc, PHB_PP_ERROR_FUNC pErrorFunc, PHB_PP_DISP_FUNC pDispFunc, PHB_PP_DUMP_FUNC pDumpFunc, PHB_PP_INLINE_FUNC pInLineFunc, PHB_PP_SWITCH_FUNC pSwitchFunc ) { pState->fQuiet = pState->fQuietSet = fQuiet; + pState->fGauge = fGauge; pState->iMaxCycles = pState->iMaxCyclesSet = ( iCycles > 0 ) ? iCycles : HB_PP_MAX_CYCLES; pState->cargo = cargo; pState->pOpenFunc = pOpenFunc; @@ -5654,19 +5647,19 @@ void hb_pp_initDynDefines( PHB_PP_STATE pState, HB_BOOL fArchDefs ) if( fArchDefs ) { - static const char * szPlatform = "__PLATFORM__%s"; + static const char * s_szPlatform = "__PLATFORM__%s"; if( hb_verPlatformMacro() ) { - hb_snprintf( szDefine, sizeof( szDefine ), szPlatform, hb_verPlatformMacro() ); + hb_snprintf( szDefine, sizeof( szDefine ), s_szPlatform, hb_verPlatformMacro() ); hb_pp_addDefine( pState, szDefine, NULL ); } #if defined( HB_OS_UNIX ) - hb_snprintf( szDefine, sizeof( szDefine ), szPlatform, "UNIX" ); + hb_snprintf( szDefine, sizeof( szDefine ), s_szPlatform, "UNIX" ); hb_pp_addDefine( pState, szDefine, NULL ); #endif #if defined( HB_OS_WIN_CE ) - hb_snprintf( szDefine, sizeof( szDefine ), szPlatform, "WINDOWS" ); + hb_snprintf( szDefine, sizeof( szDefine ), s_szPlatform, "WINDOWS" ); hb_pp_addDefine( pState, szDefine, NULL ); #endif @@ -6141,6 +6134,7 @@ PHB_PP_STATE hb_pp_lexNew( const char * pMacroString, HB_SIZE nLen ) PHB_PP_STATE pState = hb_pp_new(); pState->fQuiet = HB_TRUE; + pState->fGauge = HB_FALSE; pState->pFile = hb_pp_FileBufNew( pMacroString, nLen ); hb_pp_getLine( pState ); pState->pTokenOut = pState->pFile->pTokenList; diff --git a/src/pp/pplib.c b/src/pp/pplib.c index 07bf1af1f3..29c05cf8e6 100644 --- a/src/pp/pplib.c +++ b/src/pp/pplib.c @@ -169,7 +169,7 @@ HB_FUNC( __PP_INIT ) *pStatePtr = pState; ppItem = hb_itemPutPtrGC( NULL, ( void * ) pStatePtr ); - hb_pp_init( pState, HB_TRUE, 0, NULL, NULL, NULL, + hb_pp_init( pState, HB_TRUE, HB_FALSE, 0, NULL, NULL, NULL, hb_pp_ErrorMessage, hb_pp_Disp, NULL, NULL, hb_pp_CompilerSwitch ); diff --git a/src/rdd/Makefile b/src/rdd/Makefile index 328276aafc..27d303a7d4 100644 --- a/src/rdd/Makefile +++ b/src/rdd/Makefile @@ -4,7 +4,7 @@ include $(TOP)$(ROOT)config/global.mk ifneq ($(HB_PLATFORM),wce) ifneq ($(HB_COMPILER),pcc) - HB_PRGFLAGS := -gc3 + HB_PRGFLAGS += -gc3 endif endif @@ -28,11 +28,11 @@ C_SOURCES := \ wacore.c \ wafunc.c \ rddinfo.c \ + rddshort.c \ sdf1.c \ PRG_SOURCES := \ dbdelim.prg \ - dbfuncs.prg \ dbjoin.prg \ dblist.prg \ dbsdf.prg \ diff --git a/src/rdd/dbcmd.c b/src/rdd/dbcmd.c index 7ebf2e5300..64a5238c26 100644 --- a/src/rdd/dbcmd.c +++ b/src/rdd/dbcmd.c @@ -453,10 +453,16 @@ HB_FUNC( HB_DBCREATETEMP ) } /* - * I'm not sure if lKeepOpen open works exactly like in DBCREATE, I haven't + * I'm not sure if lKeepOpen open works exactly like in dbCreate(), I haven't * tested it with Clipper yet. If it doesn't then please inform me about it * and I'll update the code. [druzus] */ + +/* NOTE: The created table will be kept open if lOpenMode parameter + is of logical type. If .T. it will be opened in a new workarea, + if .F. it will be opened in the current one. */ +/* NOTE: Has an identical parameter list with dbCreate() */ + /* __dbOpenSDF( cFile, aStruct, cRDD, lKeepOpen, cAlias, cDelimArg, cCodePage, nConnection ) */ HB_FUNC( __DBOPENSDF ) { @@ -1229,7 +1235,7 @@ HB_FUNC( ORDCONDSET ) be removed on index close operation */ lpdbOrdCondInfo->fTemporary = hb_parl( 18 ); /* 19th parameter is CL5.2 USEFILTER parameter which means - that RDD should respect SET FILTER and SET DELETE flag */ + that RDD should respect SET FILTER and SET DELETED flag */ lpdbOrdCondInfo->fUseFilter = hb_parl( 19 ); /* 20th parameter is Harbour extenstion and informs RDD that index is not shared between other clients */ diff --git a/src/rdd/dbcmd53.c b/src/rdd/dbcmd53.c index 288a67e195..f42afec6f3 100644 --- a/src/rdd/dbcmd53.c +++ b/src/rdd/dbcmd53.c @@ -406,7 +406,7 @@ HB_FUNC( DBRECORDINFO ) } /* - * DBFILEGET/BLOB2FILE - retrieve memo contents into file + * dbFileGet()/Blob2File() - retrieve memo contents into file */ HB_FUNC( DBFILEGET ) { @@ -439,7 +439,7 @@ HB_FUNC( DBFILEGET ) } /* - * DBFILEPUT/FILE2BLOB - store file contents in MEMO + * dbFilePut()/File2Blob() - store file contents in MEMO */ HB_FUNC( DBFILEPUT ) { diff --git a/src/rdd/dbf1.c b/src/rdd/dbf1.c index 8dd8edc833..ce42ec0834 100644 --- a/src/rdd/dbf1.c +++ b/src/rdd/dbf1.c @@ -442,7 +442,7 @@ static void hb_dbfAllocNullFlag( DBFAREAP pArea, HB_USHORT uiField, HB_BOOL fLen if( ! pArea->pFieldBits ) { HB_SIZE nSize = sizeof( HB_DBFFIELDBITS ) * pArea->area.uiFieldExtent; - pArea->pFieldBits = ( PHB_DBFFIELDBITS ) memset( hb_xgrab( nSize ), 0, nSize ); + pArea->pFieldBits = ( PHB_DBFFIELDBITS ) hb_xgrabz( nSize ); } if( fLength ) pArea->pFieldBits[ uiField ].uiLengthBit = pArea->uiNullCount++; @@ -2864,10 +2864,7 @@ static HB_ERRCODE hb_dbfSetFieldExtent( DBFAREAP pArea, HB_USHORT uiFieldExtent /* Alloc field offsets array */ if( uiFieldExtent ) - { - pArea->pFieldOffset = ( HB_USHORT * ) hb_xgrab( uiFieldExtent * sizeof( HB_USHORT ) ); - memset( pArea->pFieldOffset, 0, uiFieldExtent * sizeof( HB_USHORT ) ); - } + pArea->pFieldOffset = ( HB_USHORT * ) hb_xgrabz( uiFieldExtent * sizeof( HB_USHORT ) ); return HB_SUCCESS; } @@ -3107,8 +3104,7 @@ static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) nSize = ( HB_SIZE ) pArea->area.uiFieldCount * sizeof( DBFFIELD ) + ( pArea->bTableType == DB_DBF_VFP ? 1 : 2 ); - pBuffer = ( HB_BYTE * ) hb_xgrab( nSize + sizeof( DBFFIELD ) + 1 ); - memset( pBuffer, 0, nSize + sizeof( DBFFIELD ) + 1 ); + pBuffer = ( HB_BYTE * ) hb_xgrabz( nSize + sizeof( DBFFIELD ) + 1 ); pThisField = ( DBFFIELD * ) pBuffer; pArea->fHasMemo = fError = HB_FALSE; @@ -4561,7 +4557,7 @@ static HB_ERRCODE hb_dbfPack( DBFAREAP pArea ) return HB_FAILURE; /* This is bad hack but looks that people begins to use it :-( - * so I'll add workaround to make it m ore safe + * so I'll add workaround to make it more safe */ if( pArea->area.valResult && HB_IS_ARRAY( pArea->area.valResult ) && hb_arrayLen( pArea->area.valResult ) == 2 && diff --git a/src/rdd/dbfcdx/dbfcdx1.c b/src/rdd/dbfcdx/dbfcdx1.c index 084cdae24c..2f2e9d8fd7 100644 --- a/src/rdd/dbfcdx/dbfcdx1.c +++ b/src/rdd/dbfcdx/dbfcdx1.c @@ -2825,7 +2825,7 @@ static int hb_cdxPageKeyLeafBalance( LPCDXPAGE pPage, int iChildRet ) iSize += ( iMaxReq - childs[ i ]->ReqByte ) * childs[ i ]->iKeys; if( iSize != childs[ i ]->iFree ) { - printf( "\r\ninserting, iSize=%d, childs[i]->iFree=%d", iSize, childs[ i ]->iFree ); fflush( stdout ); + printf( "\r\ninserting, iSize=%d, childs[ i ]->iFree=%d", iSize, childs[ i ]->iFree ); fflush( stdout ); printf( "\r\niKeys=%d, iMaxReq=%d", iKeys, iMaxReq ); fflush( stdout ); hb_cdxErrInternal( "hb_cdxPageGetChild: index corrupted." ); } @@ -2847,7 +2847,7 @@ static int hb_cdxPageKeyLeafBalance( LPCDXPAGE pPage, int iChildRet ) childs[ i - 1 ]->fChanged = HB_TRUE; if( lpTmpPage != NULL ) { - lpTmpPage->Left = childs[i]->Page; + lpTmpPage->Left = childs[ i ]->Page; lpTmpPage->fChanged = HB_TRUE; hb_cdxPageFree( lpTmpPage, HB_FALSE ); } @@ -3085,7 +3085,7 @@ static int hb_cdxPageKeyIntBalance( LPCDXPAGE pPage, int iChildRet ) if( iBlncKeys == 1 && iKeys > pPage->TagParent->MaxKeys && childs[ 0 ]->Right != CDX_DUMMYNODE ) { - lpTmpPage = hb_cdxPageNew( pPage->TagParent, pPage, childs[0]->Right ); + lpTmpPage = hb_cdxPageNew( pPage->TagParent, pPage, childs[ 0 ]->Right ); iKeys += lpTmpPage->iKeys; childs[ iBlncKeys++ ] = lpTmpPage; if( iFirstKey + iBlncKeys > pPage->iKeys ) @@ -3262,7 +3262,7 @@ static int hb_cdxPageKeyIntBalance( LPCDXPAGE pPage, int iChildRet ) if( iNodeKeys > pPage->TagParent->MaxKeys ) hb_cdxErrInternal( "hb_cdxPageKeyIntBalance: iNodeKeys calculated wrong!" ); #endif - /* TODO: do nothing if iNodeKeys == childs[i]->iKeys && i == iSkip */ + /* TODO: do nothing if iNodeKeys == childs[ i ]->iKeys && i == iSkip */ memcpy( hb_cdxPageIntKeyPool( childs[ i ] ), pPtr, iNodeKeys * iLen ); childs[ i ]->iKeys = iNodeKeys; childs[ i ]->fChanged = HB_TRUE; @@ -7313,7 +7313,7 @@ static HB_ERRCODE hb_cdxOrderListAdd( CDXAREAP pArea, LPDBORDERINFO pOrderInfo ) &fProd, szFileName, szBaseName ); /* - if( ! szBaseName[0] ) + if( ! szBaseName[ 0 ] ) return HB_FAILURE; */ pIndex = hb_cdxFindBag( pArea, szFileName ); @@ -9589,7 +9589,7 @@ static void hb_cdxTagDoIndex( LPCDXTAG pTag, HB_BOOL fReindex ) HB_USHORT uiSaveTag = pArea->uiTag; HB_ULONG ulStartRec = 0, ulNextCount = 0; HB_BOOL fDirectRead, fUseFilter = HB_FALSE; - HB_BYTE * pSaveRecBuff = pArea->dbfarea.pRecord, cTemp[8]; + HB_BYTE * pSaveRecBuff = pArea->dbfarea.pRecord, cTemp[ 8 ]; int iRecBuff = 0, iRecBufSize, iRec; pForItem = pTag->pForItem; diff --git a/src/rdd/dbfntx/dbfntx1.c b/src/rdd/dbfntx/dbfntx1.c index 76035b5d5d..b2999fec5d 100644 --- a/src/rdd/dbfntx/dbfntx1.c +++ b/src/rdd/dbfntx/dbfntx1.c @@ -1165,9 +1165,8 @@ static LPPAGEINFO hb_ntxPageGetBuffer( LPTAGINFO pTag, HB_ULONG ulPage ) pIndex->ulPages = 1; pIndex->ulPageLast = 0; pIndex->ulPagesDepth = NTX_PAGES_PER_TAG; - pIndex->pages = ( LPPAGEINFO * ) hb_xgrab( sizeof( LPPAGEINFO ) * NTX_PAGES_PER_TAG ); - memset( pIndex->pages, 0, sizeof( LPPAGEINFO ) * NTX_PAGES_PER_TAG ); - pPagePtr = &pIndex->pages[0]; + pIndex->pages = ( LPPAGEINFO * ) hb_xgrabz( sizeof( LPPAGEINFO ) * NTX_PAGES_PER_TAG ); + pPagePtr = &pIndex->pages[ 0 ]; } else { @@ -1199,16 +1198,10 @@ static LPPAGEINFO hb_ntxPageGetBuffer( LPTAGINFO pTag, HB_ULONG ulPage ) } if( ! *pPagePtr ) - { - *pPagePtr = ( LPPAGEINFO ) hb_xgrab( sizeof( HB_PAGEINFO ) ); - memset( *pPagePtr, 0, sizeof( HB_PAGEINFO ) ); - } + *pPagePtr = ( LPPAGEINFO ) hb_xgrabz( sizeof( HB_PAGEINFO ) ); #ifdef HB_NTX_EXTERNAL_PAGEBUFFER if( ! hb_ntxPageBuffer( *pPagePtr ) ) - { - hb_ntxPageBuffer( *pPagePtr ) = ( char * ) hb_xgrab( NTXBLOCKSIZE ); - memset( hb_ntxPageBuffer( *pPagePtr ), 0, NTXBLOCKSIZE ); - } + hb_ntxPageBuffer( *pPagePtr ) = ( char * ) hb_xgrabz( NTXBLOCKSIZE ); #endif ( *pPagePtr )->pPrev = NULL; ( *pPagePtr )->Page = ulPage; @@ -1442,8 +1435,7 @@ static LPTAGINFO hb_ntxTagNew( LPNTXINDEX pIndex, { LPTAGINFO pTag; - pTag = ( LPTAGINFO ) hb_xgrab( sizeof( TAGINFO ) ); - memset( pTag, 0, sizeof( TAGINFO ) ); + pTag = ( LPTAGINFO ) hb_xgrabz( sizeof( TAGINFO ) ); pTag->TagName = hb_strndup( szTagName, NTX_MAX_TAGNAME ); pTag->fTagName = fTagName; pTag->pIndex = pIndex; @@ -1801,8 +1793,7 @@ static LPNTXINDEX hb_ntxIndexNew( NTXAREAP pArea ) { LPNTXINDEX pIndex; - pIndex = ( LPNTXINDEX ) hb_xgrab( sizeof( NTXINDEX ) ); - memset( pIndex, 0, sizeof( NTXINDEX ) ); + pIndex = ( LPNTXINDEX ) hb_xgrabz( sizeof( NTXINDEX ) ); pIndex->DiskFile = NULL; pIndex->pArea = pArea; @@ -1987,7 +1978,7 @@ static HB_ERRCODE hb_ntxIndexHeaderRead( LPNTXINDEX pIndex ) pIndex->IndexName, 0, 0, NULL ); return HB_FAILURE; } - pTag = pIndex->iTags ? pIndex->lpTags[0] : NULL; + pTag = pIndex->iTags ? pIndex->lpTags[ 0 ] : NULL; ulVersion = HB_GET_LE_UINT16( lpNTX->version ); ulRootPage = HB_GET_LE_UINT32( lpNTX->root ); @@ -5020,8 +5011,7 @@ static LPNTXSORTINFO hb_ntxSortNew( LPTAGINFO pTag, HB_ULONG ulRecCount ) if( ulRecCount == 0 ) ulRecCount = 1; - pSort = ( LPNTXSORTINFO ) hb_xgrab( sizeof( NTXSORTINFO ) ); - memset( pSort, 0, sizeof( NTXSORTINFO ) ); + pSort = ( LPNTXSORTINFO ) hb_xgrabz( sizeof( NTXSORTINFO ) ); ulMin = ( HB_ULONG ) ceil( sqrt( ( double ) ulRecCount ) ); ulMax = ( ( HB_ULONG ) ceil( sqrt( ( double ) ulRecCount / ( iLen + 4 ) ) ) ) << 7; @@ -5090,8 +5080,7 @@ static LPNTXSORTINFO hb_ntxSortNew( LPTAGINFO pTag, HB_ULONG ulRecCount ) /* check for overflow on 32 bit machines when number of records is nearly 2^32 */ if( ! pSort->ulPages ) pSort->ulPages = ulRecCount / pSort->ulPgKeys + 1; - pSort->pSwapPage = ( LPNTXSWAPPAGE ) hb_xgrab( sizeof( NTXSWAPPAGE ) * pSort->ulPages ); - memset( pSort->pSwapPage, 0, sizeof( NTXSWAPPAGE ) * pSort->ulPages ); + pSort->pSwapPage = ( LPNTXSWAPPAGE ) hb_xgrabz( sizeof( NTXSWAPPAGE ) * pSort->ulPages ); return pSort; } @@ -7450,7 +7439,7 @@ static HB_ERRCODE hb_ntxOrderListAdd( NTXAREAP pArea, LPDBORDERINFO pOrderInfo ) &fProd, szFileName, szTagName ); /* - if( ! szTagName[0] ) + if( ! szTagName[ 0 ] ) return HB_FAILURE; */ @@ -7517,7 +7506,7 @@ static HB_ERRCODE hb_ntxOrderListAdd( NTXAREAP pArea, LPDBORDERINFO pOrderInfo ) if( ! pArea->lpCurTag && pIndex->iTags ) { - pArea->lpCurTag = pIndex->lpTags[0]; + pArea->lpCurTag = pIndex->lpTags[ 0 ]; errCode = SELF_GOTOP( &pArea->dbfarea.area ); } return errCode; diff --git a/src/rdd/dbfuncs.prg b/src/rdd/dbfuncs.prg deleted file mode 100644 index 1cdee2bb7e..0000000000 --- a/src/rdd/dbfuncs.prg +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Harbour Project source code: - * DataBase Function Mapped to 10 Characters length - * - * Copyright 2001 Luiz Rafael Culik - * www - http://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, or (at your option) - * any later version. - * - * 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 software; see the file COPYING.txt. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). - * - * As a special exception, the Harbour Project gives permission for - * additional uses of the text contained in its release of Harbour. - * - * The exception is that, if you link the Harbour libraries 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 Harbour library code into it. - * - * This exception does not however invalidate any other reasons why - * the executable file might be covered by the GNU General Public License. - * - * This exception applies only to the code released by the Harbour - * Project under the name Harbour. If you copy code from other - * Harbour Project or Free Software Foundation releases into a copy of - * Harbour, as the General Public License permits, the exception does - * not apply to the code that you add in this way. To avoid misleading - * anyone as to the status of such modified files, you must delete - * this exception notice from them. - * - * If you write modifications of your own for Harbour, it is your choice - * whether to permit this exception to apply to your modifications. - * If you do not wish that, delete this exception notice. - * - */ - -/* short (10 chars long) version of some functions for compatibility */ - -FUNCTION dbClearFil() - RETURN dbClearFilter() - -FUNCTION dbSetDrive( cRDD ) - RETURN dbSetDriver( cRDD ) - -FUNCTION dbSetRelat( xArea, bRelation, cRelation, lScoped ) - RETURN dbSetRelation( xArea, bRelation, cRelation, lScoped ) - -FUNCTION dbRLockLis() - RETURN dbRLockList() - -FUNCTION dbCloseAre() - RETURN dbCloseArea() - -FUNCTION dbSelectAr( xArea ) - RETURN dbSelectArea( xArea ) - -FUNCTION dbUnlockAl() - RETURN dbUnlockAll() - -FUNCTION dbClearRel() - RETURN dbClearRelation() - -FUNCTION dbSetFilte( bFilter, cFilter ) - RETURN dbSetFilter( bFilter, cFilter ) - -FUNCTION dbFieldInf( nType, nArea, xInfo ) - RETURN dbFieldInfo( nType, nArea, xInfo ) - -FUNCTION dbOrderInf( nInfo, cIndex, xOrder, xSet ) - RETURN dbOrderInfo( nInfo, cIndex, xOrder, xSet ) - -FUNCTION dbRecordIn( nInfo, nRecord, xSet ) - RETURN dbRecordInfo( nInfo, nRecord, xSet ) - -FUNCTION rddSetDefa( cRDD ) - RETURN rddSetDefault( cRDD ) - -FUNCTION __dbCopySt( cFileName, aFieldList ) - RETURN __dbCopyStruct( cFileName, aFieldList ) - -FUNCTION __dbCopyXS( cFileName ) - RETURN __dbCopyXStruct( cFileName ) - -/* NOTE: The created table will be kept open if lOpenMode parameter - is of logical type. If .T. it will be opened in a new workarea, - if .F. it will be opened in the current one. */ -/* NOTE: Has an identical parameter list with dbCreate() */ - -FUNCTION __dbOpenSD( cFile, aStruct, cRDD, lOpenMode, cAlias, cDelimArg, cCodePage, nConnection ) - RETURN __dbOpenSDF( cFile, aStruct, cRDD, lOpenMode, cAlias, cDelimArg, cCodePage, nConnection ) - -FUNCTION __dbArrang( nToArea, aStruct, bFor, bWhile, nNext, nRecord, lRest, aFields ) - RETURN __dbArrange( nToArea, aStruct, bFor, bWhile, nNext, nRecord, lRest, aFields ) - -FUNCTION ordListCle() - RETURN ordListClear() - -FUNCTION ordListReb() - RETURN ordListRebuild() - -FUNCTION ordSetFocu( xOrder, cFile ) - RETURN ordSetFocus( xOrder, cFile ) - -FUNCTION ordSetRela( xArea, bRelation, cRelation ) - RETURN ordSetRelation( xArea, bRelation, cRelation ) diff --git a/src/rdd/dbjoin.prg b/src/rdd/dbjoin.prg index ebbd30472e..13ed39a409 100644 --- a/src/rdd/dbjoin.prg +++ b/src/rdd/dbjoin.prg @@ -64,12 +64,14 @@ FUNCTION __dbJoin( cAlias, cFile, aFields, bFor, cRDD, nConnection, cCodePage ) dbSelectArea( nMaster ) IF Empty( aStruct := __FieldTwo( cAlias, aFields ) ) + /* NOTE: CA-Cl*pper will leave the wrong workarea (cAlias) selected here. + Harbour is bug compatible. [vszakats] */ RETURN .F. ENDIF BEGIN SEQUENCE - dbCreate( cFile, aStruct, cRDD, .T., "", NIL, cCodePage, nConnection ) + dbCreate( cFile, aStruct, cRDD, .T., "", , cCodePage, nConnection ) nResult := Select() aJoinList := __JoinList( nMaster, nDetail, nResult, aStruct ) @@ -132,7 +134,7 @@ STATIC FUNCTION __FieldTwo( cAlias, aFields ) AEval( dbStruct(), {| aFld | cField := aFld[ DBS_NAME ], ; iif( AScan( aFields, bFind ) == 0, NIL, AAdd( aStruct, aFld ) ) } ) - Select( cAlias ) + dbSelectArea( cAlias ) bFind := {| cFld | "->" $ cFld .AND. SubStr( cFld, At( "->", cFld ) + 2 ) == cField } AEval( dbStruct(), {| aFld | cField := aFld[ DBS_NAME ], ; iif( AScan( aFields, bFind ) == 0, NIL, AAdd( aStruct, aFld ) ) } ) diff --git a/src/rdd/dblist.prg b/src/rdd/dblist.prg index 7bae2b526b..197c1f4741 100644 --- a/src/rdd/dblist.prg +++ b/src/rdd/dblist.prg @@ -53,9 +53,6 @@ PROCEDURE __dbList( lOff, abEval, lAll, bFor, bWhile, nNext, nRecord, lRest, lTo LOCAL lOldPrinter LOCAL lOldExtra LOCAL cOldExtraFile - LOCAL cPath - LOCAL cName - LOCAL cExt LOCAL oError LOCAL lError := .F. @@ -77,12 +74,11 @@ PROCEDURE __dbList( lOff, abEval, lAll, bFor, bWhile, nNext, nRecord, lRest, lTo lOldPrinter := Set( _SET_PRINTER, .T. ) ENDIF IF ! Empty( cToFileName ) - hb_FNameSplit( cToFileName, @cPath, @cName, @cExt ) - IF Set( _SET_DEFEXTENSIONS ) .AND. Empty( cExt ) - cExt := ".txt" - ENDIF lOldExtra := Set( _SET_EXTRA, .T. ) - cOldExtraFile := Set( _SET_EXTRAFILE, hb_FNameMerge( cPath, cName, cExt ) ) + cOldExtraFile := Set( _SET_EXTRAFILE, ; + iif( Set( _SET_DEFEXTENSIONS ), ; + hb_FNameExtSetDef( cToFileName, ".txt" ), ; + cToFileName ) ) ENDIF /* Do the job */ diff --git a/src/rdd/dbnubs.c b/src/rdd/dbnubs.c index 69e2b7bd17..565e766665 100644 --- a/src/rdd/dbnubs.c +++ b/src/rdd/dbnubs.c @@ -58,9 +58,6 @@ HB_FUNC_TRANSLATE( __DBGOTO, DBGOTO ) HB_FUNC_TRANSLATE( __DBAPPEND, DBAPPEND ) HB_FUNC_TRANSLATE( __DBDELETE, DBDELETE ) HB_FUNC_TRANSLATE( __DBRECALL, DBRECALL ) -/* NOTE: Clipper does exactly that, __dbCommit() will call dbCommitAll() - This may be a bug. */ -HB_FUNC_TRANSLATE( __DBCOMMIT, DBCOMMITALL ) HB_FUNC_TRANSLATE( __DBCOMMITALL, DBCOMMITALL ) HB_FUNC_TRANSLATE( __DBUNLOCK, DBUNLOCK ) HB_FUNC_TRANSLATE( __DBUNLALL, DBUNLOCKALL ) diff --git a/src/rdd/dbsort.prg b/src/rdd/dbsort.prg index 21e64a2ee6..4da6c70b37 100644 --- a/src/rdd/dbsort.prg +++ b/src/rdd/dbsort.prg @@ -51,6 +51,7 @@ FUNCTION __dbSort( cToFileName, aFields, bFor, bWhile, nNext, nRecord, lRest,; cRDD, nConnection, cCodePage ) + LOCAL nOldArea LOCAL nToArea LOCAL aStruct @@ -66,7 +67,7 @@ FUNCTION __dbSort( cToFileName, aFields, bFor, bWhile, nNext, nRecord, lRest,; BEGIN SEQUENCE - dbCreate( cToFileName, aStruct, cRDD, .T., "", NIL, cCodePage, nConnection ) + dbCreate( cToFileName, aStruct, cRDD, .T., "", , cCodePage, nConnection ) nToArea := Select() dbSelectArea( nOldArea ) __dbArrange( nToArea, aStruct, bFor, bWhile, nNext, nRecord, lRest, aFields ) diff --git a/src/rdd/dbstrux.prg b/src/rdd/dbstrux.prg index 53781175d0..832e18eca4 100644 --- a/src/rdd/dbstrux.prg +++ b/src/rdd/dbstrux.prg @@ -52,6 +52,7 @@ FUNCTION __dbCopyStruct( cFileName, aFieldList ) RETURN dbCreate( cFileName, __dbStructFilter( dbStruct(), aFieldList ) ) FUNCTION __dbCopyXStruct( cFileName ) + LOCAL nOldArea LOCAL aStruct @@ -67,7 +68,7 @@ FUNCTION __dbCopyXStruct( cFileName ) BEGIN SEQUENCE dbSelectArea( 0 ) - __dbCreate( cFileName, NIL, NIL, .F., NIL ) + __dbCreate( cFileName, , , .F. ) AEval( aStruct, {| aField | ; iif( aField[ DBS_TYPE ] == "C" .AND. aField[ DBS_LEN ] > 255,; @@ -99,6 +100,7 @@ FUNCTION __dbCopyXStruct( cFileName ) (cCodePage, nConnection). */ FUNCTION __dbCreate( cFileName, cFileFrom, cRDD, lNew, cAlias, cCodePage, nConnection ) + LOCAL nOldArea := Select() LOCAL aStruct := {} @@ -107,7 +109,7 @@ FUNCTION __dbCreate( cFileName, cFileFrom, cRDD, lNew, cAlias, cCodePage, nConne __defaultNIL( @lNew, .F. ) IF cAlias == NIL - hb_FNameSplit( cFileName, NIL, @cAlias ) + hb_FNameSplit( cFileName, , @cAlias ) ENDIF IF Used() .AND. ! lNew @@ -123,9 +125,9 @@ FUNCTION __dbCreate( cFileName, cFileFrom, cRDD, lNew, cAlias, cCodePage, nConne { "FIELD_TYPE", "C", 1, 0 }, ; { "FIELD_LEN" , "N", 3, 0 }, ; { "FIELD_DEC" , "N", 3, 0 } }, ; - cRDD, .F., cAlias, NIL, cCodePage, nConnection ) + cRDD, .F., cAlias, , cCodePage, nConnection ) ELSE - dbUseArea( lNew, NIL, cFileFrom, "" ) + dbUseArea( lNew, , cFileFrom, "" ) dbEval( {|| AAdd( aStruct, { ; FIELD->FIELD_NAME ,; @@ -141,11 +143,11 @@ FUNCTION __dbCreate( cFileName, cFileFrom, cRDD, lNew, cAlias, cCodePage, nConne /* Type detection is more in sync with dbCreate() logic in Harbour, as lowercase "C" and padded/continued strings ("C ", "C...") are also accepted. */ - AEval( aStruct, {| aField | iif( Upper( Left( aField[ DBS_TYPE ], 1 ) ) == "C" .AND. aField[ DBS_DEC ] != 0,; - ( aField[ DBS_LEN ] += aField[ DBS_DEC ] * 256,; - aField[ DBS_DEC ] := 0 ), NIL ) } ) + AEval( aStruct, {| aField | iif( hb_LeftEqI( aField[ DBS_TYPE ], "C" ) .AND. aField[ DBS_DEC ] != 0,; + ( aField[ DBS_LEN ] += aField[ DBS_DEC ] * 256,; + aField[ DBS_DEC ] := 0 ), NIL ) } ) - dbCreate( cFileName, aStruct, cRDD, lNew, cAlias, NIL, cCodePage, nConnection ) + dbCreate( cFileName, aStruct, cRDD, lNew, cAlias, , cCodePage, nConnection ) ENDIF @@ -159,6 +161,7 @@ FUNCTION __dbCreate( cFileName, cFileFrom, cRDD, lNew, cAlias, cCodePage, nConne /* NOTE: Internal helper function, CA-Cl*pper name is: __FLedit() */ FUNCTION __dbStructFilter( aStruct, aFieldList ) + LOCAL aStructFiltered LOCAL bFindName LOCAL cName diff --git a/src/rdd/dbtotal.prg b/src/rdd/dbtotal.prg index 2b404fc615..30af1db0c7 100644 --- a/src/rdd/dbtotal.prg +++ b/src/rdd/dbtotal.prg @@ -50,7 +50,7 @@ #include "error.ch" /* NOTE: Compared to CA-Cl*pper, Harbour: - - will accept character expressions for xKey, xFor and xWhile. + - will accept character expressions and symbols for xKey, xFor and xWhile. - has three extra parameters (cRDD, nConnection, cCodePage). - will default to active index key for xKey parameter. - won't crash with "No exported method: EVAL" if xKey is not @@ -99,15 +99,13 @@ FUNCTION __dbTotal( cFile, xKey, aFields,; IF nRec != NIL dbGoto( nRec ) nNext := 1 - ELSE - IF nNext == NIL - nNext := -1 - IF ! lRest - dbGoTop() - ENDIF - ELSE - lRest := .T. + ELSEIF nNext == NIL + nNext := -1 + IF ! lRest + dbGoTop() ENDIF + ELSE + lRest := .T. ENDIF nOldArea := Select() @@ -138,7 +136,7 @@ FUNCTION __dbTotal( cFile, xKey, aFields,; aFieldsSum := Array( Len( aGetField ) ) /* Keep it open after creating it. */ - dbCreate( cFile, aNewDbStruct, cRDD, .T., "", NIL, cCodePage, nConnection ) + dbCreate( cFile, aNewDbStruct, cRDD, .T., "", , cCodePage, nConnection ) nNewArea := Select() dbSelectArea( nOldArea ) @@ -191,10 +189,10 @@ FUNCTION __dbTotal( cFile, xKey, aFields,; RETURN .T. STATIC FUNCTION __GetField( cField ) + LOCAL nCurrArea := Select() LOCAL nPos LOCAL oError - LOCAL lError /* Is the field aliased? */ IF ( nPos := At( "->", cField ) ) > 0 @@ -209,8 +207,7 @@ STATIC FUNCTION __GetField( cField ) oError:operation := cField oError:subCode := 1101 - lError := Eval( ErrorBlock(), oError ) - IF ! HB_ISLOGICAL( lError ) .OR. lError + IF hb_defaultValue( Eval( ErrorBlock(), oError ), .T. ) __errInHandler() ENDIF @@ -218,10 +215,9 @@ STATIC FUNCTION __GetField( cField ) ENDIF cField := SubStr( cField, nPos + 2 ) - ENDIF RETURN FieldBlock( cField ) FUNCTION __dbTransRec( nDstArea, aFieldsStru ) - RETURN __dbTrans( nDstArea, aFieldsStru, NIL, NIL, 1 ) + RETURN __dbTrans( nDstArea, aFieldsStru, , , 1 ) diff --git a/src/rdd/dbupdat.prg b/src/rdd/dbupdat.prg index 2f03f4a094..24329e72b8 100644 --- a/src/rdd/dbupdat.prg +++ b/src/rdd/dbupdat.prg @@ -47,6 +47,7 @@ */ FUNCTION __dbUpdate( cAlias, bKey, lRandom, bAssign ) + LOCAL nOldArea := Select() LOCAL xKey diff --git a/src/rdd/delim1.c b/src/rdd/delim1.c index 489db72164..1db268bb97 100644 --- a/src/rdd/delim1.c +++ b/src/rdd/delim1.c @@ -1180,10 +1180,7 @@ static HB_ERRCODE hb_delimSetFieldExtent( DELIMAREAP pArea, HB_USHORT uiFieldExt /* Alloc field offsets array */ if( uiFieldExtent ) - { - pArea->pFieldOffset = ( HB_USHORT * ) hb_xgrab( uiFieldExtent * sizeof( HB_USHORT ) ); - memset( pArea->pFieldOffset, 0, uiFieldExtent * sizeof( HB_USHORT ) ); - } + pArea->pFieldOffset = ( HB_USHORT * ) hb_xgrabz( uiFieldExtent * sizeof( HB_USHORT ) ); return HB_SUCCESS; } diff --git a/src/rdd/hbsix/sxcompat.prg b/src/rdd/hbsix/sxcompat.prg index 03155c5013..877ec180d1 100644 --- a/src/rdd/hbsix/sxcompat.prg +++ b/src/rdd/hbsix/sxcompat.prg @@ -78,10 +78,12 @@ */ #include "dbinfo.ch" +#include "dbstruct.ch" +#include "fileio.ch" #include "ord.ch" #include "hbsxdef.ch" -FUNCTION sxChar( nLen, xKeyVal ) +FUNCTION sxChar( nLen, /* @ */ xKeyVal ) SWITCH ValType( xKeyVal ) CASE "C" @@ -93,6 +95,9 @@ FUNCTION sxChar( nLen, xKeyVal ) CASE "D" xKeyVal := DToS( xKeyVal ) EXIT + CASE "T" + xKeyVal := hb_TToS( xKeyVal ) + EXIT CASE "L" xKeyVal := iif( xKeyVal, "T", "F" ) EXIT @@ -101,9 +106,13 @@ FUNCTION sxChar( nLen, xKeyVal ) EXIT ENDSWITCH - RETURN iif( HB_ISNUMERIC( nLen ), PadR( LTrim( xKeyVal ), nLen ), xKeyVal ) + IF HB_ISNUMERIC( nLen ) + xKeyVal := PadR( LTrim( xKeyVal ), nLen ) + ENDIF -FUNCTION sxNum( xKeyVal ) + RETURN xKeyVal + +FUNCTION sxNum( /* @ */ xKeyVal ) SWITCH ValType( xKeyVal ) CASE "N" @@ -112,6 +121,7 @@ FUNCTION sxNum( xKeyVal ) CASE "M" xKeyVal := Val( xKeyVal ) EXIT + CASE "T" CASE "D" xKeyVal := xKeyVal - hb_SToD() EXIT @@ -125,11 +135,14 @@ FUNCTION sxNum( xKeyVal ) RETURN xKeyVal -FUNCTION sxDate( xKeyVal ) +FUNCTION sxDate( /* @ */ xKeyVal ) SWITCH ValType( xKeyVal ) CASE "D" EXIT + CASE "T" + xKeyVal := hb_TToD( xKeyVal ) + EXIT CASE "C" CASE "M" xKeyVal := CToD( xKeyVal ) @@ -144,7 +157,7 @@ FUNCTION sxDate( xKeyVal ) RETURN xKeyVal -FUNCTION sxLog( xKeyVal ) +FUNCTION sxLog( /* @ */ xKeyVal ) SWITCH ValType( xKeyVal ) CASE "L" @@ -338,7 +351,7 @@ FUNCTION sx_KillTag( xTag, xIndex ) ENDIF IF ! Empty( cIndex ) IF ordBagClear( cIndex ) - lRet := FErase( cIndex ) != -1 + lRet := FErase( cIndex ) != F_ERROR ENDIF ENDIF ENDIF @@ -480,18 +493,18 @@ FUNCTION sx_dbCreate( cFileName, aStruct, cRDD ) aDbStruct := AClone( aStruct ) FOR EACH aField IN aDbStruct - SWITCH aField[ 2 ] + SWITCH aField[ DBS_TYPE ] CASE "V" - aField[ 3 ] += 6 + aField[ DBS_LEN ] += 6 EXIT CASE "D" - IF aField[ 3 ] == 3 - aField[ 2 ] := "V" + IF aField[ DBS_LEN ] == 3 + aField[ DBS_TYPE ] := "V" ENDIF EXIT CASE "I" - IF aField[ 3 ] == 4 - aField[ 2 ] := "V" + IF aField[ DBS_LEN ] == 4 + aField[ DBS_TYPE ] := "V" ENDIF EXIT ENDSWITCH diff --git a/src/rdd/hbsix/sxcrypt.c b/src/rdd/hbsix/sxcrypt.c index ea9bb17e9e..8170758340 100644 --- a/src/rdd/hbsix/sxcrypt.c +++ b/src/rdd/hbsix/sxcrypt.c @@ -64,7 +64,7 @@ static HB_U32 hb_sxInitSeed( const char * pKeyVal, HB_U16 * puiKey ) for( i = 0; i < 7; i++ ) { ulSeed = ( ( ( ulSeed >> 16 ) + ( ulSeed << 16 ) ) * 17 ) + - HB_GET_LE_UINT16( &pKeyVal[i] ); + HB_GET_LE_UINT16( &pKeyVal[ i ] ); } ulSeed |= 1; *puiKey = ( HB_U16 ) ulSeed; diff --git a/src/rdd/hbsix/sxini.prg b/src/rdd/hbsix/sxini.prg index 941ed070c0..85a372a2c4 100644 --- a/src/rdd/hbsix/sxini.prg +++ b/src/rdd/hbsix/sxini.prg @@ -76,7 +76,6 @@ STATIC FUNCTION _sx_INIlogical( cVal ) FUNCTION _sx_IniInit( nArea ) - LOCAL cFile, cPath, cName, cExt, cDrive LOCAL xShared, xReadOnly, xAlias, xTrigger LOCAL hIni, item, sect, h, a @@ -85,7 +84,7 @@ FUNCTION _sx_IniInit( nArea ) * by workarea number. In Harbour we are using hash arrays. */ - IF Left( Type( "SxIniInfo" ), 1 ) == "U" + IF hb_LeftEq( Type( "SxIniInfo" ), "U" ) PUBLIC SxIniInfo := { => } hb_HCaseMatch( SxIniInfo, .F. ) hb_HAutoAdd( SxIniInfo, HB_HAUTOADD_ASSIGN ) @@ -95,10 +94,7 @@ FUNCTION _sx_IniInit( nArea ) RETURN .F. ENDIF - cFile := ( nArea )->( dbInfo( DBI_FULLPATH ) ) - hb_FNameSplit( cFile, @cPath, @cName, @cExt, @cDrive ) - cFile := hb_FNameMerge( cPath, cName, ".ini", cDrive ) - hIni := hb_iniRead( cFile, .F.,, .F. ) + hIni := hb_iniRead( hb_FNameExtSet( ( nArea )->( dbInfo( DBI_FULLPATH ) ), ".ini" ), .F.,, .F. ) IF ! Empty( hIni ) IF HB_SIX_SECTION $ hIni diff --git a/src/rdd/hsx/hsx.c b/src/rdd/hsx/hsx.c index c0d52a6d82..8fb0b01ad3 100644 --- a/src/rdd/hsx/hsx.c +++ b/src/rdd/hsx/hsx.c @@ -604,7 +604,7 @@ static int hb_hsxEval( int iHandle, PHB_ITEM pExpr, HB_BYTE * pKey, HB_BOOL * fD if( ! pExpr ) return HSX_BADPARMS; - if( hb_itemType( pExpr ) & HB_IT_STRING ) + if( HB_IS_STRING( pExpr ) ) { pStr = hb_itemGetCPtr( pExpr ); nLen = hb_itemGetCLen( pExpr ); @@ -1231,8 +1231,7 @@ static LPHSXINFO hb_hsxNew( void ) if( pTable->iHandleSize == 0 ) { pTable->iHandleSize = HSX_HALLOC; - pTable->handleArray = ( LPHSXINFO * ) hb_xgrab( sizeof( LPHSXINFO ) * HSX_HALLOC ); - memset( pTable->handleArray, 0, sizeof( LPHSXINFO ) * pTable->iHandleSize ); + pTable->handleArray = ( LPHSXINFO * ) hb_xgrabz( sizeof( LPHSXINFO ) * HSX_HALLOC ); } else { @@ -1250,9 +1249,8 @@ static LPHSXINFO hb_hsxNew( void ) memset( &pTable->handleArray[ iHandle ], 0, sizeof( LPHSXINFO ) * HSX_HALLOC ); } } - pTable->handleArray[ iHandle ] = pHSX = ( LPHSXINFO ) hb_xgrab( sizeof( HSXINFO ) ); + pTable->handleArray[ iHandle ] = pHSX = ( LPHSXINFO ) hb_xgrabz( sizeof( HSXINFO ) ); pTable->iHandleCount++; - memset( pHSX, 0, sizeof( HSXINFO ) ); pHSX->iHandle = iHandle; pHSX->pFile = NULL; @@ -1426,7 +1424,7 @@ static int hb_hsxCreate( const char * szFile, int iBufSize, int iKeySize, if( iRetVal != HSX_SUCCESS ) return iRetVal; } - else if( hb_itemType( pExpr ) == HB_IT_BLOCK ) + else if( HB_IS_BLOCK( pExpr ) ) pKeyExpr = hb_itemNew( pExpr ); } @@ -1625,7 +1623,7 @@ static int hb_hsxFilter( int iHandle, const char * pSeek, HB_SIZE nSeek, return HSX_NOTABLE; } - if( ! pVerify || hb_itemType( pVerify ) == HB_IT_NIL ) + if( ! pVerify || HB_IS_NIL( pVerify ) ) pVerify = pHSX->pKeyItem; else { @@ -1636,7 +1634,7 @@ static int hb_hsxFilter( int iHandle, const char * pSeek, HB_SIZE nSeek, return HSX_BADPARMS; fDestroyExpr = HB_TRUE; } - else if( hb_itemType( pVerify ) != HB_IT_BLOCK ) + else if( ! HB_IS_BLOCK( pVerify ) ) { pVerify = NULL; } @@ -1879,7 +1877,7 @@ HB_FUNC( HS_FILTER ) } } } - if( iHandle >= 0 && nLen > 0 ) + if( iHandle >= 0 && nLen > 0 && szText ) { PHB_ITEM pItem = hb_itemNew( NULL ); AREAP pArea = ( AREAP ) hb_rddGetCurrentWorkAreaPointer(); @@ -2018,11 +2016,11 @@ HB_FUNC( HS_VERIFY ) /* hs_Version() -> */ HB_FUNC( HS_VERSION ) { - static const char szVer[] = "HiPer-SEEK / FTS library emulation"; - char * pszHBVersion, * pszVersion; + static const char sc_szVer[] = "HiPer-SEEK / FTS library emulation"; + + char * pszHBVersion = hb_verHarbour(); + char * pszVersion = hb_xstrcpy( NULL, sc_szVer, ": ", pszHBVersion, NULL ); - pszHBVersion = hb_verHarbour(); - pszVersion = hb_xstrcpy( NULL, szVer, ": ", pszHBVersion, NULL ); hb_retclen_buffer( pszVersion, strlen( pszVersion ) ); hb_xfree( pszHBVersion ); } diff --git a/src/rdd/rddshort.c b/src/rdd/rddshort.c new file mode 100644 index 0000000000..6aa9535bdc --- /dev/null +++ b/src/rdd/rddshort.c @@ -0,0 +1,99 @@ +/* + * Harbour Project source code: + * Short (10 chars long) version of some functions for Cl*pper compatibility + * + * Copyright 2014 Viktor Szakats (vszakats.net/harbour) + * www - http://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, or (at your option) + * any later version. + * + * 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 software; see the file COPYING.txt. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries 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 Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbapi.h" + +HB_FUNC_TRANSLATE( __DBARRANG, __DBARRANGE ) +HB_FUNC_TRANSLATE( __DBCLEARI, __DBCLEARINDEX ) +HB_FUNC_TRANSLATE( __DBCLEARR, __DBCLEARRELATION ) +HB_FUNC_TRANSLATE( __DBCLOSEA, __DBCLOSEAREA ) +HB_FUNC_TRANSLATE( __DBCOMMIT, __DBCOMMITALL ) /* NOTE: Cl*pper does exactly that, __dbCommit() will call __dbCommitAll(). This may have been unintended. */ +HB_FUNC_TRANSLATE( __DBCONTIN, __DBCONTINUE ) +HB_FUNC_TRANSLATE( __DBCOPYST, __DBCOPYSTRUCT ) +HB_FUNC_TRANSLATE( __DBCOPYXS, __DBCOPYXSTRUCT ) +HB_FUNC_TRANSLATE( __DBCREATI, __DBCREATINDEX ) +HB_FUNC_TRANSLATE( __DBGOBOTT, __DBGOBOTTOM ) +HB_FUNC_TRANSLATE( __DBOPENSD, __DBOPENSDF ) +HB_FUNC_TRANSLATE( __DBREINDE, __DBREINDEX ) +HB_FUNC_TRANSLATE( __DBSETFIL, __DBSETFILTER ) +HB_FUNC_TRANSLATE( __DBSETFOU, __DBSETFOUND ) +HB_FUNC_TRANSLATE( __DBSETIND, __DBSETINDEX ) +HB_FUNC_TRANSLATE( __DBSETLOC, __DBSETLOCATE ) +HB_FUNC_TRANSLATE( __DBSETORD, __DBSETORDER ) +HB_FUNC_TRANSLATE( __DBSETREL, __DBSETRELATION ) +HB_FUNC_TRANSLATE( __DBSTRUCT, __DBSTRUCTFILTER ) +HB_FUNC_TRANSLATE( __DBTRANSR, __DBTRANSREC ) +HB_FUNC_TRANSLATE( DBCLEARFIL, DBCLEARFILTER ) +HB_FUNC_TRANSLATE( DBCLEARIND, DBCLEARINDEX ) +HB_FUNC_TRANSLATE( DBCLEARREL, DBCLEARRELATION ) +HB_FUNC_TRANSLATE( DBCLOSEARE, DBCLOSEAREA ) +HB_FUNC_TRANSLATE( DBCOMMITAL, DBCOMMITALL ) +HB_FUNC_TRANSLATE( DBFIELDINF, DBFIELDINFO ) +HB_FUNC_TRANSLATE( DBORDERINF, DBORDERINFO ) +HB_FUNC_TRANSLATE( DBRECORDIN, DBRECORDINFO ) +HB_FUNC_TRANSLATE( DBRLOCKLIS, DBRLOCKLIST ) +HB_FUNC_TRANSLATE( DBSELECTAR, DBSELECTAREA ) +HB_FUNC_TRANSLATE( DBSETDRIVE, DBSETDRIVER ) +HB_FUNC_TRANSLATE( DBSETFILTE, DBSETFILTER ) +HB_FUNC_TRANSLATE( DBSETRELAT, DBSETRELATION ) +HB_FUNC_TRANSLATE( DBUNLOCKAL, DBUNLOCKALL ) +HB_FUNC_TRANSLATE( ORDBAGCLEA, ORDBAGCLEAR ) +HB_FUNC_TRANSLATE( ORDISUNIQU, ORDISUNIQUE ) +HB_FUNC_TRANSLATE( ORDKEYCOUN, ORDKEYCOUNT ) +HB_FUNC_TRANSLATE( ORDKEYRELP, ORDKEYRELPOS ) +HB_FUNC_TRANSLATE( ORDLISTCLE, ORDLISTCLEAR ) +HB_FUNC_TRANSLATE( ORDLISTREB, ORDLISTREBUILD ) +HB_FUNC_TRANSLATE( ORDSETFOCU, ORDSETFOCUS ) +HB_FUNC_TRANSLATE( ORDSETRELA, ORDSETRELATION ) +HB_FUNC_TRANSLATE( ORDSKIPUNI, ORDSKIPUNIQUE ) +HB_FUNC_TRANSLATE( RDDREGISTE, RDDREGISTER ) +HB_FUNC_TRANSLATE( RDDSETDEFA, RDDSETDEFAULT ) + +#ifdef HB_CLP_UNDOC +HB_FUNC_TRANSLATE( _DTXCONDSE, _DTXCONDSET ) +#endif diff --git a/src/rdd/sdf1.c b/src/rdd/sdf1.c index 96ba62093e..dd9f1dabd5 100644 --- a/src/rdd/sdf1.c +++ b/src/rdd/sdf1.c @@ -921,10 +921,7 @@ static HB_ERRCODE hb_sdfSetFieldExtent( SDFAREAP pArea, HB_USHORT uiFieldExtent /* Alloc field offsets array */ if( uiFieldExtent ) - { - pArea->pFieldOffset = ( HB_USHORT * ) hb_xgrab( uiFieldExtent * sizeof( HB_USHORT ) ); - memset( pArea->pFieldOffset, 0, uiFieldExtent * sizeof( HB_USHORT ) ); - } + pArea->pFieldOffset = ( HB_USHORT * ) hb_xgrabz( uiFieldExtent * sizeof( HB_USHORT ) ); return HB_SUCCESS; } diff --git a/src/rdd/usrrdd/usrrdd.c b/src/rdd/usrrdd/usrrdd.c index 17e2613ec1..7a31cba849 100644 --- a/src/rdd/usrrdd/usrrdd.c +++ b/src/rdd/usrrdd/usrrdd.c @@ -805,8 +805,7 @@ static HB_ERRCODE hb_usrInit( LPRDDNODE pRDD ) while( ++s_uiUsrNodes <= pRDD->rddID ); } - s_pUsrRddNodes[ pRDD->rddID ] = pNode = ( LPUSRRDDNODE ) hb_xgrab( sizeof( USRRDDNODE ) ); - memset( pNode, 0, sizeof( USRRDDNODE ) ); + s_pUsrRddNodes[ pRDD->rddID ] = pNode = ( LPUSRRDDNODE ) hb_xgrabz( sizeof( USRRDDNODE ) ); pNode->pSuperTable = &pRDD->pSuperTable; pNode->pMethods = ( PHB_ITEM ) pRDD->pTable.whoCares; pRDD->pTable.whoCares = pRDD->pSuperTable.whoCares; @@ -2874,7 +2873,7 @@ HB_FUNC( USRRDD_GETFUNCTABLE ) DBENTRYP_V * pFunction; const DBENTRYP_V * pUsrFunction, * pRddFunction; - * puiCount = RDDFUNCSCOUNT; + *puiCount = RDDFUNCSCOUNT; uiSize = ( HB_USHORT ) hb_arrayLen( pMethods ); pUsrFunction = usrFuncTable.funcentries; @@ -2883,11 +2882,11 @@ HB_FUNC( USRRDD_GETFUNCTABLE ) for( uiCount = 1; uiCount <= RDDFUNCSCOUNT; ++uiCount ) { - * pFunction = * pRddFunction; - if( * pFunction == NULL && * pUsrFunction && uiCount <= uiSize && + *pFunction = *pRddFunction; + if( *pFunction == NULL && *pUsrFunction && uiCount <= uiSize && hb_usrIsMethod( pMethods, uiCount ) ) { - * pFunction = * pUsrFunction; + *pFunction = *pUsrFunction; } ++pUsrFunction; ++pRddFunction; diff --git a/src/rdd/wafunc.c b/src/rdd/wafunc.c index a7502922aa..64e11125de 100644 --- a/src/rdd/wafunc.c +++ b/src/rdd/wafunc.c @@ -109,8 +109,7 @@ void * hb_rddNewAreaNode( LPRDDNODE pRddNode, HB_USHORT uiRddID ) { HB_USHORT uiSize; - pArea = ( AREAP ) hb_xgrab( sizeof( AREA ) ); - memset( pArea, 0, sizeof( AREA ) ); + pArea = ( AREAP ) hb_xgrabz( sizeof( AREA ) ); pArea->lprfsHost = &pRddNode->pTable; pArea->rddID = uiRddID; @@ -130,8 +129,7 @@ void * hb_rddNewAreaNode( LPRDDNODE pRddNode, HB_USHORT uiRddID ) } else { - pArea = ( AREAP ) hb_xgrab( pRddNode->uiAreaSize ); - memset( pArea, 0, pRddNode->uiAreaSize ); + pArea = ( AREAP ) hb_xgrabz( pRddNode->uiAreaSize ); pArea->lprfsHost = &pRddNode->pTable; pArea->rddID = uiRddID; } diff --git a/src/rdd/workarea.c b/src/rdd/workarea.c index 3035357ba5..279e6f5bee 100644 --- a/src/rdd/workarea.c +++ b/src/rdd/workarea.c @@ -628,10 +628,7 @@ static HB_ERRCODE hb_waSetFieldExtent( AREAP pArea, HB_USHORT uiFieldExtent ) /* Alloc field array */ if( uiFieldExtent ) - { - pArea->lpFields = ( LPFIELD ) hb_xgrab( uiFieldExtent * sizeof( FIELD ) ); - memset( pArea->lpFields, 0, uiFieldExtent * sizeof( FIELD ) ); - } + pArea->lpFields = ( LPFIELD ) hb_xgrabz( uiFieldExtent * sizeof( FIELD ) ); return HB_SUCCESS; } @@ -2144,8 +2141,7 @@ int hb_rddRegister( const char * szDriver, HB_USHORT uiType ) return 2; /* Not valid RDD */ /* Create a new RDD node */ - pRddNewNode = ( LPRDDNODE ) hb_xgrab( sizeof( RDDNODE ) ); - memset( pRddNewNode, 0, sizeof( RDDNODE ) ); + pRddNewNode = ( LPRDDNODE ) hb_xgrabz( sizeof( RDDNODE ) ); /* Fill the new RDD node */ hb_strncpy( pRddNewNode->szName, szDriver, sizeof( pRddNewNode->szName ) - 1 ); diff --git a/src/rtl/Makefile b/src/rtl/Makefile index 456db82bce..8442360e0c 100644 --- a/src/rtl/Makefile +++ b/src/rtl/Makefile @@ -4,7 +4,7 @@ include $(TOP)$(ROOT)config/global.mk ifneq ($(HB_PLATFORM),wce) ifneq ($(HB_COMPILER),pcc) - HB_PRGFLAGS := -gc3 + HB_PRGFLAGS += -gc3 endif endif @@ -156,6 +156,7 @@ C_SOURCES := \ replic.c \ right.c \ round.c \ + rtlshort.c \ run.c \ samples.c \ saverest.c \ @@ -184,6 +185,7 @@ C_SOURCES := \ strrepl.c \ strtoexp.c \ strtran.c \ + strutf8.c \ strxor.c \ strzero.c \ stuff.c \ diff --git a/src/rtl/achoice.prg b/src/rtl/achoice.prg index 7c55a64b2f..671494caee 100644 --- a/src/rtl/achoice.prg +++ b/src/rtl/achoice.prg @@ -7,22 +7,13 @@ * */ -/* TOFIX: - --- - #include "inkey.ch" - CLS - hb_keyPut( { K_DOWN, K_UP } ) // bogus '2' appears out of the area here. - AChoice( 0, 0, 0, 0, { "1", "2" } ) - --- - */ - #include "achoice.ch" #include "color.ch" #include "inkey.ch" #include "setcurs.ch" -#define INRANGE( xLo, xVal, xHi ) ( xVal >= xLo .AND. xVal <= xHi ) -#define BETWEEN( xLo, xVal, xHi ) Min( Max( xLo, xVal ), xHi ) +#define INRANGE( xLo, xVal, xHi ) ( xVal >= xLo .AND. xVal <= xHi ) +#define BETWEEN( xLo, xVal, xHi ) Min( Max( xLo, xVal ), xHi ) /* NOTE: Extension: Harbour supports codeblocks and function pointers as the xSelect parameter (both when supplied as is, or as an @@ -30,21 +21,21 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPos, nHiLiteRow ) - LOCAL nNumCols // Number of columns in the window - LOCAL nNumRows // Number of rows in the window - LOCAL nRowsClr // Number of rows to clear - LOCAL alSelect // Select permission - LOCAL nNewPos := 0 // The next item to be selected - LOCAL lFinished // Is processing finished? - LOCAL nKey := 0 // The keystroke to be processed - LOCAL nMode // The current operating mode - LOCAL nAtTop // The number of the item at the top - LOCAL nItems := 0 // The number of items - LOCAL nGap // The number of lines between top and current lines + LOCAL nNumCols // Number of columns in the window + LOCAL nNumRows // Number of rows in the window + LOCAL nRowsClr // Number of rows to clear + LOCAL alSelect // Select permission + LOCAL nNewPos := 0 // The next item to be selected + LOCAL lFinished // Is processing finished? + LOCAL nKey := 0 // The keystroke to be processed + LOCAL nMode // The current operating mode + LOCAL nAtTop // The number of the item at the top + LOCAL nItems := 0 // The number of items + LOCAL nGap // The number of lines between top and current lines // Block used to search for items - LOCAL lUserFunc // Is a user function to be used? - LOCAL nUserFunc // Return value from user function + LOCAL lUserFunc // Is a user function to be used? + LOCAL nUserFunc // Return value from user function LOCAL nSaveCsr LOCAL nFrstItem := 0 LOCAL nLastItem := 0 @@ -80,12 +71,12 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo supplied with Clipper 5.x. 6th parameter is the user function and 7th parameter is zero (empty I suppose). [vszakats] */ - IF Empty( xUserFunc ) .AND. ValType( xSelect ) $ "CB" + IF Empty( xUserFunc ) .AND. ValType( xSelect ) $ "CBS" xUserFunc := xSelect xSelect := NIL ENDIF - lUserFunc := ! Empty( xUserFunc ) .AND. ValType( xUserFunc ) $ "CB" + lUserFunc := ! Empty( xUserFunc ) .AND. ValType( xUserFunc ) $ "CBS" IF ! HB_ISARRAY( xSelect ) .AND. ! HB_ISLOGICAL( xSelect ) xSelect := .T. // Array or logical, what is selectable @@ -97,7 +88,6 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo nNumCols := nRight - nLeft + 1 nNumRows := nBottom - nTop + 1 - IF HB_ISARRAY( xSelect ) alSelect := xSelect ELSE @@ -105,9 +95,7 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo AFill( alSelect, xSelect ) ENDIF - - nMode := Ach_Limits( @nFrstItem, @nLastItem, @nItems, alSelect, acItems ) - IF nMode == AC_NOITEM + IF ( nMode := Ach_Limits( @nFrstItem, @nLastItem, @nItems, alSelect, acItems ) ) == AC_NOITEM nPos := 0 ENDIF @@ -127,14 +115,13 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo DispPage( acItems, alSelect, nTop, nLeft, nRight, nNumRows, nPos, nAtTop, nItems, nItems ) - lFinished := ( nMode == AC_NOITEM ) IF lFinished .AND. lUserFunc Do( xUserFunc, nMode, nPos, nPos - nAtTop ) ENDIF DO WHILE ! lFinished - IF nMode != AC_GOTO .AND. nMode != AC_NOITEM + IF nMode != AC_EXCEPT .AND. nMode != AC_NOITEM nKey := Inkey( 0 ) nMode := AC_IDLE ENDIF @@ -149,9 +136,8 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo ENDIF nRowsClr := Min( nNumRows, nItems ) - nMode := Ach_Limits( @nFrstItem, @nLastItem, @nItems, alSelect, acItems ) - IF nMode == AC_NOITEM + IF ( nMode := Ach_Limits( @nFrstItem, @nLastItem, @nItems, alSelect, acItems ) ) == AC_NOITEM nPos := 0 nAtTop := Max( 1, nPos - nNumRows + 1 ) ELSE @@ -172,7 +158,6 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo IF nAtTop < 1 nAtTop := 1 ENDIF - ENDIF DispPage( acItems, alSelect, nTop, nLeft, nRight, nNumRows, nPos, nAtTop, nItems, nRowsClr ) @@ -180,10 +165,10 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo CASE ( nKey == K_ESC .OR. nMode == AC_NOITEM ) .AND. ! lUserFunc IF nPos != 0 - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, .T., .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, .T., .F., nNumCols ) ENDIF - nMode := AC_ABORT + nMode := AC_IDLE nPos := 0 lFinished := .T. @@ -191,9 +176,9 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo nAux := HitTest( nTop, nLeft, nBottom, nRight, MRow(), MCol() ) IF nAux != 0 .AND. ( nNewPos := nAtTop + nAux - 1 ) <= nItems IF Ach_Select( alSelect, nNewPos ) - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) nPos := nNewPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) IF nKey == K_LDBLCLK hb_keyIns( K_ENTER ) ENDIF @@ -218,20 +203,22 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo nNewPos-- ENDDO IF INRANGE( nAtTop, nNewPos, nAtTop + nNumRows - 1 ) - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) nPos := nNewPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) ELSE DispBegin() - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) - hb_Scroll( nTop, nLeft, nBottom, nRight, ( nNewPos - ( nAtTop + nNumRows - 1 ) ) ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + hb_Scroll( nTop, nLeft, nBottom, nRight, nNewPos - ( nAtTop + nNumRows - 1 ) ) nAtTop := nNewPos nPos := Max( nPos, nAtTop + nNumRows - 1 ) DO WHILE nPos > nNewPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + IF nTop + nPos - nAtTop <= nBottom + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + ENDIF nPos-- ENDDO - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) DispEnd() ENDIF ENDIF @@ -258,23 +245,22 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo ENDDO IF INRANGE( nAtTop, nNewPos, nAtTop + nNumRows - 1 ) - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) nPos := nNewPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) ELSE DispBegin() - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) - hb_Scroll( nTop, nLeft, nBottom, nRight, ( nNewPos - ( nAtTop + nNumRows - 1 ) ) ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + hb_Scroll( nTop, nLeft, nBottom, nRight, nNewPos - ( nAtTop + nNumRows - 1 ) ) nAtTop := nNewPos - nNumRows + 1 nPos := Max( nPos, nAtTop ) DO WHILE nPos < nNewPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) nPos++ ENDDO - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) DispEnd() ENDIF - ENDIF CASE nKey == K_CTRL_PGUP .OR. ( nKey == K_HOME .AND. ! lUserFunc ) @@ -303,9 +289,9 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo ENDIF ELSE IF INRANGE( nAtTop, nLastItem, nAtTop + nNumRows - 1 ) - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) nPos := nLastItem - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) ELSE nPos := nLastItem nAtTop := Max( 1, nPos - nNumRows + 1 ) @@ -328,9 +314,9 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo nNewPos++ ENDDO IF nNewPos != nPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) nPos := nNewPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) ENDIF ENDIF @@ -349,9 +335,9 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo nNewPos-- ENDDO IF nNewPos != nPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) nPos := nNewPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) ENDIF ENDIF @@ -400,9 +386,9 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo ELSE IF INRANGE( nAtTop, nLastItem, nAtTop + nNumRows - 1 ) // On the same page as nLastItem - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) nPos := nLastItem - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) ELSE nGap := nPos - nAtTop nPos := Min( nLastItem, nPos + nNumRows - 1 ) @@ -430,16 +416,16 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo CASE nKey == K_ENTER .AND. ! lUserFunc IF nPos != 0 - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, .T., .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, .T., .F., nNumCols ) ENDIF - nMode := AC_SELECT + nMode := AC_IDLE lFinished := .T. CASE nKey == K_RIGHT .AND. ! lUserFunc IF nPos != 0 - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, .T., .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, .T., .F., nNumCols ) ENDIF nPos := 0 @@ -448,24 +434,24 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo CASE nKey == K_LEFT .AND. ! lUserFunc IF nPos != 0 - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, .T., .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, .T., .F., nNumCols ) ENDIF nPos := 0 lFinished := .T. - CASE ( ! lUserFunc .OR. nMode == AC_GOTO ) .AND. ; + CASE ( ! lUserFunc .OR. nMode == AC_EXCEPT ) .AND. ; ! ( cKey := Upper( hb_keyChar( nKey ) ) ) == "" // Find next selectable item FOR nNewPos := nPos + 1 TO nItems - IF Ach_Select( alSelect, nNewPos ) .AND. Upper( Left( acItems[ nNewPos ], Len( cKey ) ) ) == cKey + IF Ach_Select( alSelect, nNewPos ) .AND. hb_LeftEqI( acItems[ nNewPos ], cKey ) EXIT ENDIF NEXT IF nNewPos == nItems + 1 FOR nNewPos := 1 TO nPos - 1 - IF Ach_Select( alSelect, nNewPos ) .AND. Upper( Left( acItems[ nNewPos ], Len( cKey ) ) ) == cKey + IF Ach_Select( alSelect, nNewPos ) .AND. hb_LeftEqI( acItems[ nNewPos ], cKey ) EXIT ENDIF NEXT @@ -474,9 +460,9 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo IF nNewPos != nPos IF INRANGE( nAtTop, nNewPos, nAtTop + nNumRows - 1 ) // On same page - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .F., nNumCols ) nPos := nNewPos - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, Ach_Select( alSelect, nPos ), .T., nNumCols ) ELSE // On different page nPos := nNewPos @@ -487,59 +473,56 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo nMode := AC_IDLE - CASE nMode == AC_GOTO + CASE nMode == AC_EXCEPT - // Garbage collect gotos which aren't valid ASCII characters + // Handle keypresses which don't translate to characters nMode := AC_IDLE - OTHERWISE + CASE nMode != AC_NOITEM - IF nMode != AC_NOITEM - IF nKey == 0 // No keystroke - nMode := AC_IDLE - ELSE - nMode := AC_EXCEPT - ENDIF - ENDIF + nMode := iif( nKey == 0, AC_IDLE, AC_EXCEPT ) ENDCASE IF lUserFunc - nUserFunc := Do( xUserFunc, nMode, nPos, nPos - nAtTop ) + IF HB_ISNUMERIC( nUserFunc := Do( xUserFunc, nMode, nPos, nPos - nAtTop ) ) - IF HB_ISNUMERIC( nUserFunc ) - - DO CASE - CASE nUserFunc == AC_ABORT .OR. nMode == AC_NOITEM + SWITCH nUserFunc + CASE AC_ABORT + CASE AC_REDRAW /* QUESTION: Is this correct? */ IF nPos != 0 - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, .T., .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, .T., .F., nNumCols ) ENDIF lFinished := .T. nPos := 0 - CASE nUserFunc == AC_SELECT + EXIT + CASE AC_SELECT IF nPos != 0 - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, .T., .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, .T., .F., nNumCols ) ENDIF lFinished := .T. - CASE nUserFunc == AC_CONT .OR. nUserFunc == AC_REDRAW + EXIT + CASE AC_CONT // Do nothing - nMode := AC_CONT - CASE nUserFunc == AC_GOTO + nMode := AC_IDLE + EXIT + CASE AC_GOTO // Do nothing. The next keystroke won't be read and // this keystroke will be processed as a goto. - nMode := AC_GOTO - ENDCASE + nMode := AC_EXCEPT + EXIT + ENDSWITCH - IF nPos > 0 .AND. nMode != AC_GOTO + IF nPos > 0 .AND. nMode != AC_EXCEPT - // TOVERIFY: Disabled nRowsClr DispPage(). - // Please verify it, I do not know why it was added but - // it breaks code which adds dynamically new acItems positions - // nRowsClr := Min( nNumRows, nItems ) - nMode := Ach_Limits( @nFrstItem, @nLastItem, @nItems, alSelect, acItems ) - - IF nMode == AC_NOITEM +#if 0 + /* TOVERIFY: Disabled nRowsClr DispPage(). + Please verify it, I do not know why it was added but + it breaks code which adds dynamically new acItems positions */ + nRowsClr := Min( nNumRows, nItems ) +#endif + IF ( nMode := Ach_Limits( @nFrstItem, @nLastItem, @nItems, alSelect, acItems ) ) == AC_NOITEM nPos := 0 nAtTop := Max( 1, nPos - nNumRows + 1 ) ELSE @@ -560,20 +543,18 @@ FUNCTION AChoice( nTop, nLeft, nBottom, nRight, acItems, xSelect, xUserFunc, nPo IF nAtTop < 1 nAtTop := 1 ENDIF - ENDIF DispPage( acItems, alSelect, nTop, nLeft, nRight, nNumRows, nPos, nAtTop, nItems /*, nRowsClr */ ) ENDIF ELSE IF nPos != 0 - DispLine( acItems[ nPos ], nTop + ( nPos - nAtTop ), nLeft, .T., .F., nNumCols ) + DispLine( acItems[ nPos ], nTop + nPos - nAtTop, nLeft, .T., .F., nNumCols ) ENDIF nPos := 0 lFinished := .T. ENDIF ENDIF - ENDDO SetCursor( nSaveCsr ) @@ -594,10 +575,10 @@ STATIC FUNCTION HitTest( nTop, nLeft, nBottom, nRight, mRow, mCol ) STATIC PROCEDURE DispPage( acItems, alSelect, nTop, nLeft, nRight, nNumRows, nPos, nAtTop, nArrLen, nRowsClr ) LOCAL nCntr - LOCAL nRow // Screen row - LOCAL nIndex // Array index + LOCAL nRow // Screen row + LOCAL nIndex // Array index - hb_default( @nRowsClr, nNumRows ) + hb_default( @nRowsClr, nArrLen ) DispBegin() @@ -632,9 +613,8 @@ STATIC PROCEDURE DispLine( cLine, nRow, nCol, lSelect, lHiLite, nNumCols ) RETURN -STATIC FUNCTION Ach_Limits( nFrstItem, nLastItem, nItems, alSelect, acItems ) +STATIC FUNCTION Ach_Limits( /* @ */ nFrstItem, /* @ */ nLastItem, /* @ */ nItems, alSelect, acItems ) - LOCAL nMode LOCAL nCntr nFrstItem := nLastItem := nItems := 0 @@ -655,13 +635,11 @@ STATIC FUNCTION Ach_Limits( nFrstItem, nLastItem, nItems, alSelect, acItems ) NEXT IF nFrstItem == 0 - nMode := AC_NOITEM nLastItem := nItems - ELSE - nMode := AC_IDLE + RETURN AC_NOITEM ENDIF - RETURN nMode + RETURN AC_IDLE STATIC FUNCTION Ach_Select( alSelect, nPos ) diff --git a/src/rtl/adir.prg b/src/rtl/adir.prg index 9006fbe8f7..0105698648 100644 --- a/src/rtl/adir.prg +++ b/src/rtl/adir.prg @@ -63,7 +63,6 @@ FUNCTION ADir( cFileMask, aName, aSize, aDate, aTime, aAttr ) LOCAL cExt // CA-Cl*pper would fail on this case. - IF ! HB_ISSTRING( cFileMask ) RETURN 0 ENDIF @@ -78,12 +77,6 @@ FUNCTION ADir( cFileMask, aName, aSize, aDate, aTime, aAttr ) // - IF HB_ISARRAY( aAttr ) - aDir := Directory( cFileMask, "HSD" ) - ELSE - aDir := Directory( cFileMask ) - ENDIF - IF HB_ISARRAY( aName ) nNameLen := Len( aName ) ENDIF @@ -102,6 +95,7 @@ FUNCTION ADir( cFileMask, aName, aSize, aDate, aTime, aAttr ) // + aDir := Directory( cFileMask, iif( HB_ISARRAY( aAttr ), "HSD", ) ) nDirLen := Len( aDir ) FOR nDirPos := 1 TO nDirLen diff --git a/src/rtl/alert.prg b/src/rtl/alert.prg index b55fe04586..6710b6e8e2 100644 --- a/src/rtl/alert.prg +++ b/src/rtl/alert.prg @@ -42,6 +42,7 @@ FUNCTION Alert( cMessage, aOptions, cColorNorm ) LOCAL cColorHigh LOCAL aOptionsOK LOCAL cOption + LOCAL nPos #ifdef HB_CLP_UNDOC @@ -61,20 +62,19 @@ FUNCTION Alert( cMessage, aOptions, cColorNorm ) cMessage := StrTran( cMessage, ";", Chr( 10 ) ) - hb_default( @aOptions, {} ) - IF ! HB_ISSTRING( cColorNorm ) .OR. Empty( cColorNorm ) - cColorNorm := "W+/R" // first pair color (Box line and Text) - cColorHigh := "W+/B" // second pair color (Options buttons) + cColorNorm := "W+/R" // first pair color (Box line and Text) + cColorHigh := "W+/B" // second pair color (Options buttons) ELSE cColorNorm := hb_ColorIndex( cColorNorm, CLR_STANDARD ) - cColorHigh := StrTran( StrTran( ; - iif( At( "/", cColorNorm ) == 0, "N", SubStr( cColorNorm, At( "/", cColorNorm ) + 1 ) ) + "/" + ; - iif( At( "/", cColorNorm ) == 0, cColorNorm, Left( cColorNorm, At( "/", cColorNorm ) - 1 ) ), "+", "" ), "*", "" ) + cColorHigh := hb_StrReplace( ; + iif( ( nPos := At( "/", cColorNorm ) ) > 0, ; + SubStr( cColorNorm, nPos + 1 ) + "/" + Left( cColorNorm, nPos - 1 ), ; + "N/" + cColorNorm ), "+*" ) ENDIF aOptionsOK := {} - FOR EACH cOption IN aOptions + FOR EACH cOption IN hb_defaultValue( aOptions, {} ) IF HB_ISSTRING( cOption ) .AND. ! Empty( cOption ) AAdd( aOptionsOK, cOption ) ENDIF @@ -98,8 +98,8 @@ FUNCTION hb_Alert( xMessage, aOptions, cColorNorm, nDelay ) LOCAL cMessage LOCAL cColorHigh LOCAL aOptionsOK - LOCAL cOption - LOCAL nEval + LOCAL cString + LOCAL nPos #ifdef HB_CLP_UNDOC @@ -119,8 +119,8 @@ FUNCTION hb_Alert( xMessage, aOptions, cColorNorm, nDelay ) IF HB_ISARRAY( xMessage ) cMessage := "" - FOR nEval := 1 TO Len( xMessage ) - cMessage += iif( nEval == 1, "", Chr( 10 ) ) + hb_CStr( xMessage[ nEval ] ) + FOR EACH cString IN xMessage + cMessage += iif( cString:__enumIsFirst(), "", Chr( 10 ) ) + hb_CStr( cString ) NEXT ELSEIF HB_ISSTRING( xMessage ) cMessage := StrTran( xMessage, ";", Chr( 10 ) ) @@ -128,22 +128,21 @@ FUNCTION hb_Alert( xMessage, aOptions, cColorNorm, nDelay ) cMessage := hb_CStr( xMessage ) ENDIF - hb_default( @aOptions, {} ) - IF ! HB_ISSTRING( cColorNorm ) .OR. Empty( cColorNorm ) - cColorNorm := "W+/R" // first pair color (Box line and Text) - cColorHigh := "W+/B" // second pair color (Options buttons) + cColorNorm := "W+/R" // first pair color (Box line and Text) + cColorHigh := "W+/B" // second pair color (Options buttons) ELSE cColorNorm := hb_ColorIndex( cColorNorm, CLR_STANDARD ) - cColorHigh := StrTran( StrTran( ; - iif( At( "/", cColorNorm ) == 0, "N", SubStr( cColorNorm, At( "/", cColorNorm ) + 1 ) ) + "/" + ; - iif( At( "/", cColorNorm ) == 0, cColorNorm, Left( cColorNorm, At( "/", cColorNorm ) - 1 ) ), "+", "" ), "*", "" ) + cColorHigh := hb_StrReplace( ; + iif( ( nPos := At( "/", cColorNorm ) ) > 0, ; + SubStr( cColorNorm, nPos + 1 ) + "/" + Left( cColorNorm, nPos - 1 ), ; + "N/" + cColorNorm ), "+*" ) ENDIF aOptionsOK := {} - FOR EACH cOption IN aOptions - IF HB_ISSTRING( cOption ) .AND. ! Empty( cOption ) - AAdd( aOptionsOK, cOption ) + FOR EACH cString IN hb_defaultValue( aOptions, {} ) + IF HB_ISSTRING( cString ) .AND. ! Empty( cString ) + AAdd( aOptionsOK, cString ) ENDIF NEXT diff --git a/src/rtl/altd.prg b/src/rtl/altd.prg index 8b3c0c5ac9..f4d36b284e 100644 --- a/src/rtl/altd.prg +++ b/src/rtl/altd.prg @@ -60,17 +60,19 @@ PROCEDURE AltD( nAction ) /* do not activate the debugger imediatelly because the module where AltD() was called can have no debugger info - stop - on first LINE with debugged info - */ + on first LINE with debugged info */ __dbgInvokeDebug( Set( _SET_DEBUG ) ) ELSEIF HB_ISNUMERIC( nAction ) - IF nAction == ALTD_DISABLE + SWITCH nAction + CASE ALTD_DISABLE Set( _SET_DEBUG, .F. ) - ELSEIF nAction == ALTD_ENABLE + EXIT + CASE ALTD_ENABLE Set( _SET_DEBUG, .T. ) - ENDIF + EXIT + ENDSWITCH ENDIF diff --git a/src/rtl/base64d.c b/src/rtl/base64d.c index bd124875fa..636b6348c7 100644 --- a/src/rtl/base64d.c +++ b/src/rtl/base64d.c @@ -77,7 +77,7 @@ static HB_SIZE base64_decode_block( const char * code_in, const HB_SIZE length_i char * pszPlainchar = pszPlainttextOut; signed char fragment; - for(;; ) + for( ;; ) { do { diff --git a/src/rtl/browse.prg b/src/rtl/browse.prg index ff0e149499..0ecab6b09f 100644 --- a/src/rtl/browse.prg +++ b/src/rtl/browse.prg @@ -110,8 +110,9 @@ FUNCTION Browse( nTop, nLeft, nBottom, nRight ) lKeyPressed := ( nKey := Inkey() ) != 0 ENDDO - IF ! lKeyPressed - + IF lKeyPressed + lKeyPressed := .F. + ELSE IF oBrw:HitBottom .AND. ( ! lAppend .OR. RecNo() != LastRec() + 1 ) IF lAppend oBrw:RefreshCurrent() @@ -136,8 +137,6 @@ FUNCTION Browse( nTop, nLeft, nBottom, nRight ) Eval( bAction, ProcName( 1 ), ProcLine( 1 ), "" ) LOOP ENDIF - ELSE - lKeyPressed := .F. ENDIF SWITCH nKey @@ -373,26 +372,19 @@ STATIC FUNCTION DoGet( oBrw, lAppend ) STATIC FUNCTION ExitKey( lAppend ) - LOCAL nKey := LastKey() + LOCAL nKey - SWITCH nKey + SWITCH nKey := LastKey() CASE K_PGDN - nKey := iif( lAppend, 0, K_DOWN ) - EXIT - + RETURN iif( lAppend, 0, K_DOWN ) CASE K_PGUP - nKey := iif( lAppend, 0, K_UP ) - + RETURN iif( lAppend, 0, K_UP ) CASE K_DOWN CASE K_UP - EXIT - - OTHERWISE - nKey := iif( nKey == K_ENTER .OR. ; - !( hb_keyChar( nKey ) == "" ), K_RIGHT, 0 ) + RETURN nKey ENDSWITCH - RETURN nKey + RETURN iif( nKey == K_ENTER .OR. !( hb_keyChar( nKey ) == "" ), K_RIGHT, 0 ) STATIC PROCEDURE FreshOrder( oBrw ) diff --git a/src/rtl/cdpapi.c b/src/rtl/cdpapi.c index 04df423b34..4a0adeec8f 100644 --- a/src/rtl/cdpapi.c +++ b/src/rtl/cdpapi.c @@ -122,7 +122,7 @@ static HB_CDP_GET_FUNC( hb_cdpUTF8_get ); static HB_CDP_PUT_FUNC( hb_cdpUTF8_put ); static HB_CDP_LEN_FUNC( hb_cdpUTF8_len ); -HB_UNITABLE hb_uniTbl_UTF8 = { HB_CPID_437, s_uniCodes, NULL, 0 }; +static HB_UNITABLE hb_uniTbl_UTF8 = { HB_CPID_437, s_uniCodes, NULL, 0 }; static HB_UCHAR s_en_buffer[ 0x300 ]; @@ -168,8 +168,7 @@ void hb_cdpBuildTransTable( PHB_UNITABLE uniTable ) if( wc > wcMax ) wcMax = wc; } - uniTrans = ( HB_UCHAR * ) hb_xgrab( ( wcMax + 1 ) * sizeof( HB_UCHAR ) ); - memset( uniTrans, '\0', ( wcMax + 1 ) * sizeof( HB_UCHAR ) ); + uniTrans = ( HB_UCHAR * ) hb_xgrabz( ( wcMax + 1 ) * sizeof( HB_UCHAR ) ); for( i = 0; i < 256; ++i ) { if( uniTable->uniCodes[ i ] ) @@ -182,8 +181,7 @@ void hb_cdpBuildTransTable( PHB_UNITABLE uniTable ) if( s_rev_ctrl == NULL ) { wcMax = HB_MAX_CTRL_CODE; - s_rev_ctrl = ( HB_UCHAR * ) hb_xgrab( ( wcMax + 1 ) * sizeof( HB_UCHAR ) ); - memset( s_rev_ctrl, '\0', ( wcMax + 1 ) * sizeof( HB_UCHAR ) ); + s_rev_ctrl = ( HB_UCHAR * ) hb_xgrabz( ( wcMax + 1 ) * sizeof( HB_UCHAR ) ); for( i = 0; i < 32; ++i ) s_rev_ctrl[ s_uniCtrls[ i ] ] = ( HB_UCHAR ) i; } @@ -200,7 +198,7 @@ static HB_BOOL hb_cdpStd_get( PHB_CODEPAGE cdp, { if( *pnIndex < nLen ) { - HB_UCHAR uc = ( HB_UCHAR ) pSrc[ ( * pnIndex )++ ]; + HB_UCHAR uc = ( HB_UCHAR ) pSrc[ ( *pnIndex )++ ]; *wc = cdp->uniTable->uniCodes[ uc ]; if( *wc == 0 ) @@ -2814,8 +2812,7 @@ static PHB_CODEPAGE hb_buildCodePage( const char * id, const char * info, if( iMulti ) nSize += iMulti * sizeof( HB_MULTICHAR ); - buffer = ( HB_UCHAR * ) hb_xgrab( nSize ); - memset( buffer, '\0', nSize ); + buffer = ( HB_UCHAR * ) hb_xgrabz( nSize ); cdp = ( PHB_CODEPAGE ) &buffer[ ul ]; cdp->buffer = buffer; diff --git a/src/rtl/cdpdet.prg b/src/rtl/cdpdet.prg index b5a408da29..107372efa5 100644 --- a/src/rtl/cdpdet.prg +++ b/src/rtl/cdpdet.prg @@ -54,31 +54,22 @@ FUNCTION hb_cdpTerm() LOCAL cLang #if defined( __PLATFORM__WINDOWS ) - - cCP := __CPWinToCPStd( __wapi_GetOEMCP() ) + LOCAL tmp + cCP := __CPWinToCPStd( iif( ( tmp := __wapi_GetConsoleOutputCP() ) == 0, __wapi_GetOEMCP(), tmp ) ) cLang := hb_UserLang() #elif defined( __PLATFORM__UNIX ) - IF ! Empty( GetEnv( "LANG" ) ) - __UnixParseLangCP( GetEnv( "LANG" ), @cCP, @cLang ) - ELSE - __UnixParseLangCP( GetEnv( "LC_CTYPE" ), @cCP, @cLang ) - ENDIF - cCP := __CPUnixToCPStd( cCP ) + LOCAL tmp + cCP := __UnixParseLangCP( iif( Empty( tmp := GetEnv( "LANG" ) ), ; + GetEnv( "LC_CTYPE" ), tmp ), @cLang ) #elif defined( __PLATFORM__DOS ) /* TODO */ - cCP := NIL - cLang := NIL + cCP := cLang := NIL #elif defined( __PLATFORM__OS2 ) /* TODO */ - cCP := NIL - cLang := NIL + cCP := cLang := NIL #endif - IF ! Empty( cCP := __CPStdToHarbour( cCP, cLang ) ) - RETURN cCP - ENDIF - - RETURN NIL + RETURN __CPStdToHb( cCP, cLang ) FUNCTION hb_cdpOS() @@ -86,75 +77,83 @@ FUNCTION hb_cdpOS() LOCAL cLang #if defined( __PLATFORM__WINDOWS ) - cCP := __CPWinToCPStd( __wapi_GetACP() ) cLang := hb_UserLang() #elif defined( __PLATFORM__UNIX ) - IF ! Empty( GetEnv( "LANG" ) ) - __UnixParseLangCP( GetEnv( "LANG" ), @cCP, @cLang ) - ELSE - __UnixParseLangCP( GetEnv( "LC_CTYPE" ), @cCP, @cLang ) - ENDIF - cCP := __CPUnixToCPStd( cCP ) + LOCAL tmp + cCP := __UnixParseLangCP( iif( Empty( tmp := GetEnv( "LANG" ) ), ; + GetEnv( "LC_CTYPE" ), tmp ), @cLang ) #elif defined( __PLATFORM__DOS ) /* TODO */ - cCP := NIL - cLang := NIL + cCP := cLang := NIL #elif defined( __PLATFORM__OS2 ) /* TODO */ - cCP := NIL - cLang := NIL + cCP := cLang := NIL #endif - IF ! Empty( cCP := __CPStdToHarbour( cCP, cLang ) ) - RETURN cCP - ENDIF - - RETURN NIL + RETURN __CPStdToHb( cCP, cLang ) #if defined( __PLATFORM__WINDOWS ) STATIC FUNCTION __CPWinToCPStd( nCPWin ) - IF HB_ISNUMERIC( nCPWin ) - SWITCH nCPWin - CASE 437 ; RETURN "cp437" - CASE 737 ; RETURN "cp737" - CASE 775 ; RETURN "cp775" - CASE 850 ; RETURN "cp850" - CASE 852 ; RETURN "cp852" - CASE 857 ; RETURN "cp857" - CASE 860 ; RETURN "cp860" - CASE 861 ; RETURN "cp861" - CASE 865 ; RETURN "cp865" - CASE 866 ; RETURN "cp866" - CASE 1200 ; RETURN "utf16" - CASE 1250 ; RETURN "cp1250" - CASE 1251 ; RETURN "cp1251" - CASE 1252 ; RETURN "cp1252" - CASE 1253 ; RETURN "cp1253" - CASE 1254 ; RETURN "cp1254" - CASE 1257 ; RETURN "cp1257" - CASE 20866 ; RETURN "koi-8" - CASE 21866 ; RETURN "koi-8u" - CASE 28591 ; RETURN "iso8859-1" - CASE 28592 ; RETURN "iso8859-2" - CASE 28595 ; RETURN "iso8859-5" - CASE 28597 ; RETURN "iso8859-7" - CASE 28599 ; RETURN "iso8859-9" - CASE 65001 ; RETURN "utf8" - ENDSWITCH - ENDIF + SWITCH nCPWin + CASE 65001 ; RETURN "utf8" + CASE 1200 ; RETURN "utf16" + CASE 437 + CASE 737 + CASE 775 + CASE 850 + CASE 852 + CASE 855 + CASE 856 + CASE 857 + CASE 858 + CASE 860 + CASE 861 + CASE 862 + CASE 863 + CASE 864 + CASE 865 + CASE 866 + CASE 869 + CASE 874 + CASE 1250 + CASE 1251 + CASE 1252 + CASE 1253 + CASE 1254 + CASE 1255 + CASE 1256 + CASE 1257 + CASE 1258 ; RETURN "cp" + hb_ntos( nCPWin ) + CASE 28591 + CASE 28592 + CASE 28593 + CASE 28594 + CASE 28595 + CASE 28596 + CASE 28597 + CASE 28598 + CASE 28599 + CASE 28603 + CASE 28605 ; RETURN "iso8859-" + hb_ntos( nCPWin - 28590 ) + CASE 20866 ; RETURN "koi-8" + CASE 21866 ; RETURN "koi-8u" + CASE 936 ; RETURN "GBK" + CASE 950 ; RETURN "CP950" + ENDSWITCH - RETURN "" + RETURN NIL #elif defined( __PLATFORM__UNIX ) /* language[_territory][.codeset] */ /* [language[_territory][.codeset][@modifier]] */ /* TODO: handle "C"/"POSIX" values and values starting with "/" */ -STATIC PROCEDURE __UnixParseLangCP( cString, /* @ */ cCP, /* @ */ cLang ) +STATIC FUNCTION __UnixParseLangCP( cString, /* @ */ cLang ) LOCAL tmp + LOCAL cCP IF ( tmp := At( ".", cString ) ) > 0 cLang := Left( cString, tmp - 1 ) @@ -167,304 +166,337 @@ STATIC PROCEDURE __UnixParseLangCP( cString, /* @ */ cCP, /* @ */ cLang ) cCP := "UTF-8" ENDIF - RETURN + /* Tricks to make the manual translation table shorter */ + cCP := hb_StrReplace( Lower( cCP ), { "_" => "", "-" => "", "ibm" => "cp", "windows" => "cp" } ) + IF hb_LeftEq( cCP, "iso8859" ) + cCP := Stuff( cCP, Len( "iso8859" ) + 1, 0, "-" ) + ENDIF -STATIC FUNCTION __CPUnixToCPStd( cCPUnix ) + /* Convert UNIX CP name to Harbour CP ID */ + SWITCH cCP + CASE "utf8" + CASE "cp437" + CASE "cp737" + CASE "cp775" + CASE "cp850" + CASE "cp852" + CASE "cp855" + CASE "cp856" + CASE "cp857" + CASE "cp858" + CASE "cp860" + CASE "cp861" + CASE "cp862" + CASE "cp863" + CASE "cp864" + CASE "cp865" + CASE "cp866" + CASE "cp869" + CASE "cp874" + CASE "cp1250" + CASE "cp1251" + CASE "cp1252" + CASE "cp1253" + CASE "cp1254" + CASE "cp1255" + CASE "cp1256" + CASE "cp1257" + CASE "cp1258" + CASE "iso8859-1" + CASE "iso8859-2" + CASE "iso8859-3" + CASE "iso8859-4" + CASE "iso8859-5" + CASE "iso8859-6" + CASE "iso8859-7" + CASE "iso8859-8" + CASE "iso8859-9" + CASE "iso8859-13" + CASE "iso8859-15" ; RETURN cCP + CASE "koi8r" ; RETURN "koi-8" + CASE "koi8u" ; RETURN "koi-8u" + CASE "gbk" ; RETURN "GBK" + CASE "big5" ; RETURN "BIG5" + ENDSWITCH - IF HB_ISSTRING( cCPUnix ) + RETURN NIL - cCPUnix := StrTran( cCPUnix, "_" ) - cCPUnix := StrTran( cCPUnix, "-" ) +#endif - /* TOFIX: update the list of std unix cp names */ - SWITCH Lower( cCPUnix ) - CASE "ibm437" - CASE "cp437" ; RETURN "cp437" - CASE "ibm737" - CASE "cp737" ; RETURN "cp737" - CASE "ibm775" - CASE "cp775" ; RETURN "cp775" - CASE "ibm850" - CASE "cp850" ; RETURN "cp850" - CASE "ibm852" - CASE "cp852" ; RETURN "cp852" - CASE "ibm857" - CASE "cp857" ; RETURN "cp857" - CASE "ibm860" - CASE "cp860" ; RETURN "cp860" - CASE "ibm861" - CASE "cp861" ; RETURN "cp861" - CASE "ibm865" - CASE "cp865" ; RETURN "cp865" - CASE "ibm866" - CASE "cp866" ; RETURN "cp866" - CASE "windows1250" ; RETURN "cp1250" - CASE "windows1251" ; RETURN "cp1251" - CASE "windows1252" ; RETURN "cp1252" - CASE "windows1253" ; RETURN "cp1253" - CASE "windows1254" ; RETURN "cp1254" - CASE "windows1257" ; RETURN "cp1257" - CASE "koi8r" ; RETURN "koi-8" - CASE "koi8u" ; RETURN "koi-8u" - CASE "iso88591" ; RETURN "iso8859-1" - CASE "iso88592" ; RETURN "iso8859-2" - CASE "iso88595" ; RETURN "iso8859-5" - CASE "iso88597" ; RETURN "iso8859-7" - CASE "iso88599" ; RETURN "iso8859-9" - CASE "utf8" ; RETURN "utf8" +STATIC FUNCTION __CPStdToHb( cCPStd, cCtryStd ) + + LOCAL cCtryHb + LOCAL cdp + LOCAL aCP + + IF cCPStd != NIL + SWITCH cCPStd := Lower( cCPStd ) + CASE "utf8" + RETURN "UTF8" + CASE "utf16" + RETURN "UTF16LE" + OTHERWISE + aCP := hb_cdpList() + cCtryHb := __LangStdToCPCtryHb( cCtryStd ) + FOR EACH cdp IN aCP + IF hb_LeftEq( cdp, cCtryHb ) .AND. cCPStd == hb_cdpUniID( cdp ) + RETURN cdp + ENDIF + NEXT + FOR EACH cdp IN aCP + IF cCPStd == hb_cdpUniID( cdp ) + RETURN hb_cdpUniID( cdp ) + ENDIF + NEXT ENDSWITCH ENDIF - RETURN "" -#endif - -STATIC FUNCTION __CPStdToHarbour( cCPStd, cCtryStd ) - - LOCAL cCP - LOCAL cCtryHb - LOCAL cdp - - IF ! Empty( cCPStd ) - IF Lower( cCPStd ) == "utf8" - cCP := "UTF8" - ELSEIF Lower( cCPStd ) == "utf16" - cCP := "UTF16LE" - ELSE - IF ! Empty( cCtryHb := __LangStdToCPCtryHb( cCtryStd ) ) - FOR EACH cdp IN hb_cdpList() - IF Left( cdp, 2 ) == cCtryHb - IF Lower( cCPStd ) == hb_cdpUniID( cdp ) - cCP := cdp - EXIT - ENDIF - ENDIF - NEXT - ENDIF - IF Empty( cCP ) - FOR EACH cdp IN hb_cdpList() - IF Lower( cCPStd ) == hb_cdpUniID( cdp ) - cCP := cdp - EXIT - ENDIF - NEXT - ENDIF - ENDIF - ENDIF - - RETURN cCP + RETURN NIL STATIC FUNCTION __LangStdToCPCtryHb( cCtryStd ) - LOCAL cCtryHb := Left( hb_cdpSelect(), 2 ) + SWITCH Lower( cCtryStd ) +#if 0 + CASE "af-za" ; EXIT + CASE "af" ; EXIT + CASE "ar-ae" ; EXIT + CASE "ar-bh" ; EXIT + CASE "ar-dz" ; EXIT + CASE "ar-eg" ; EXIT + CASE "ar-iq" ; EXIT + CASE "ar-jo" ; EXIT + CASE "ar-kw" ; EXIT + CASE "ar-lb" ; EXIT + CASE "ar-ly" ; EXIT + CASE "ar-ma" ; EXIT + CASE "ar-om" ; EXIT + CASE "ar-qa" ; EXIT + CASE "ar-sa" ; EXIT + CASE "ar-sy" ; EXIT + CASE "ar-tn" ; EXIT + CASE "ar-ye" ; EXIT + CASE "ar" ; EXIT + CASE "az-az-cyrl" ; EXIT + CASE "az-az-latn" ; EXIT + CASE "az" ; EXIT + CASE "be-by" ; EXIT + CASE "be" ; EXIT +#endif + CASE "bg-bg" + CASE "bg" ; RETURN "BG" +#if 0 + CASE "ca-es" ; EXIT + CASE "ca" ; EXIT + CASE "cy-gb" ; EXIT +#endif + CASE "cs-cz" + CASE "cs" ; RETURN "CS" + CASE "da-dk" + CASE "da" ; RETURN "DK" + CASE "de-at" + CASE "de-ch" + CASE "de-de" + CASE "de-li" + CASE "de-lu" + CASE "de" ; RETURN "DE" +#if 0 + CASE "div-mv" ; EXIT + CASE "div" ; EXIT +#endif + CASE "el-gr" + CASE "el" ; RETURN "EL" + CASE "en-au" + CASE "en-bz" + CASE "en-ca" + CASE "en-cb" + CASE "en-gb" + CASE "en-ie" + CASE "en-jm" + CASE "en-nz" + CASE "en-ph" + CASE "en-tt" + CASE "en-us" + CASE "en-za" + CASE "en-zw" + CASE "en" ; RETURN "EN" +#if 0 + CASE "eo" ; EXIT +#endif + CASE "es-419" + CASE "es-ar" + CASE "es-bo" + CASE "es-cl" + CASE "es-co" + CASE "es-cr" + CASE "es-do" + CASE "es-ec" + CASE "es-es" + CASE "es-gt" + CASE "es-hn" + CASE "es-mx" + CASE "es-ni" + CASE "es-pa" + CASE "es-pe" + CASE "es-pr" + CASE "es-py" + CASE "es-sv" + CASE "es-uy" + CASE "es-ve" + CASE "es" ; RETURN "ES" +#if 0 + CASE "et-ee" ; EXIT + CASE "et" ; EXIT + CASE "eu-es" ; EXIT + CASE "eu" ; EXIT + CASE "fa-ir" ; EXIT + CASE "fa" ; EXIT +#endif + CASE "fi-fi" + CASE "fi" ; RETURN "FI" +#if 0 + CASE "fo-fo" ; EXIT + CASE "fo" ; EXIT +#endif + CASE "fr-be" + CASE "fr-ca" + CASE "fr-ch" + CASE "fr-fr" + CASE "fr-lu" + CASE "fr-mc" + CASE "fr" ; RETURN "FR" +#if 0 + CASE "gl-es" ; EXIT + CASE "gl" ; EXIT + CASE "gu-in" ; EXIT + CASE "gu" ; EXIT +#endif + CASE "he-il" + CASE "he" ; RETURN "HE" +#if 0 + CASE "hi-in" ; EXIT + CASE "hi" ; EXIT +#endif + CASE "hr-hr" + CASE "hr" ; RETURN "HR" + CASE "hu-hu" + CASE "hu" ; RETURN "HU" +#if 0 + CASE "hy-am" ; EXIT + CASE "hy" ; EXIT + CASE "id-id" ; EXIT + CASE "id" ; EXIT +#endif + CASE "is-is" + CASE "is" ; RETURN "IS" + CASE "it-ch" + CASE "it-it" + CASE "it" ; RETURN "IT" +#if 0 + CASE "ja-jp" ; EXIT + CASE "ja" ; EXIT + CASE "ka-ge" ; EXIT + CASE "ka" ; EXIT + CASE "kk-kz" ; EXIT + CASE "kk" ; EXIT + CASE "kn-in" ; EXIT + CASE "kn" ; EXIT + CASE "ko-kr" ; EXIT + CASE "ko" ; EXIT + CASE "kok-in" ; EXIT + CASE "kok" ; EXIT + CASE "ky-kz" ; EXIT + CASE "ky" ; EXIT +#endif + CASE "lt-lt" + CASE "lt" ; RETURN "LT" +#if 0 + CASE "lv-lv" ; EXIT + CASE "lv" ; EXIT + CASE "mk-mk" ; EXIT + CASE "mk" ; EXIT + CASE "mn-mn" ; EXIT + CASE "mn" ; EXIT + CASE "mr-in" ; EXIT + CASE "mr" ; EXIT + CASE "ms-bn" ; EXIT + CASE "ms-my" ; EXIT + CASE "ms" ; EXIT + CASE "nb-no" ; EXIT +#endif + CASE "nl-be" + CASE "nl-nl" + CASE "nl" ; RETURN "NL" +#if 0 + CASE "nn-no" ; EXIT +#endif + CASE "no" ; RETURN "NO" +#if 0 + CASE "pa-in" ; EXIT + CASE "pa" ; EXIT +#endif + CASE "pl-pl" + CASE "pl" ; RETURN "PL" + CASE "pt-br" + CASE "pt-pt" + CASE "pt" ; RETURN "PT" + CASE "ro-ro" + CASE "ro" ; RETURN "RO" + CASE "ru-ru" + CASE "ru" ; RETURN "RU" +#if 0 + CASE "sa-in" ; EXIT + CASE "sa" ; EXIT +#endif + CASE "sk-sk" + CASE "sk" ; RETURN "SK" + CASE "sl-si" + CASE "sl" ; RETURN "SL" +#if 0 + CASE "sq-al" ; EXIT + CASE "sq" ; EXIT +#endif + CASE "sr-sp-cyrl" + CASE "sr-sp-latn" ; RETURN "SR" + CASE "sv-fi" + CASE "sv-se" + CASE "sv" ; RETURN "SV" +#if 0 + CASE "sw-ke" ; EXIT + CASE "sw" ; EXIT + CASE "syr-sy" ; EXIT + CASE "syr" ; EXIT + CASE "ta-in" ; EXIT + CASE "ta" ; EXIT + CASE "te-in" ; EXIT + CASE "te" ; EXIT + CASE "th-th" ; EXIT + CASE "th" ; EXIT +#endif + CASE "tr-tr" + CASE "tr" ; RETURN "TR" +#if 0 + CASE "tt-ru" ; EXIT + CASE "tt" ; EXIT +#endif + CASE "uk-ua" + CASE "uk" ; RETURN "UA" +#if 0 + CASE "ur-pk" ; EXIT + CASE "ur" ; EXIT + CASE "uz-uz-cyrl" ; EXIT + CASE "uz-uz-latn" ; EXIT + CASE "uz" ; EXIT + CASE "vi-vn" ; EXIT + CASE "vi" ; EXIT + CASE "zh-chs" ; EXIT + CASE "zh-cht" ; EXIT + CASE "zh-cn" ; EXIT + CASE "zh-hk" ; EXIT + CASE "zh-mo" ; EXIT + CASE "zh-sg" ; EXIT + CASE "zh-tw" ; EXIT + CASE "zh" ; EXIT +#endif + ENDSWITCH - IF HB_ISSTRING( cCtryStd ) - SWITCH Lower( cCtryStd ) - CASE "af-za" ; EXIT - CASE "af" ; EXIT - CASE "ar-ae" ; EXIT - CASE "ar-bh" ; EXIT - CASE "ar-dz" ; EXIT - CASE "ar-eg" ; EXIT - CASE "ar-iq" ; EXIT - CASE "ar-jo" ; EXIT - CASE "ar-kw" ; EXIT - CASE "ar-lb" ; EXIT - CASE "ar-ly" ; EXIT - CASE "ar-ma" ; EXIT - CASE "ar-om" ; EXIT - CASE "ar-qa" ; EXIT - CASE "ar-sa" ; EXIT - CASE "ar-sy" ; EXIT - CASE "ar-tn" ; EXIT - CASE "ar-ye" ; EXIT - CASE "ar" ; EXIT - CASE "az-az-cyrl" ; EXIT - CASE "az-az-latn" ; EXIT - CASE "az" ; EXIT - CASE "be-by" ; EXIT - CASE "be" ; EXIT - CASE "bg-bg" - CASE "bg" ; cCtryHb := "BG" ; EXIT - CASE "ca-es" ; EXIT - CASE "ca" ; EXIT - CASE "cy-gb" ; EXIT - CASE "cs-cz" - CASE "cs" ; cCtryHb := "CS" ; EXIT - CASE "da-dk" - CASE "da" ; cCtryHb := "DK" ; EXIT - CASE "de-at" - CASE "de-ch" - CASE "de-de" - CASE "de-li" - CASE "de-lu" - CASE "de" ; cCtryHb := "DE" ; EXIT - CASE "div-mv" ; EXIT - CASE "div" ; EXIT - CASE "el-gr" - CASE "el" ; cCtryHb := "EL" ; EXIT - CASE "en-au" - CASE "en-bz" - CASE "en-ca" - CASE "en-cb" - CASE "en-gb" - CASE "en-ie" - CASE "en-jm" - CASE "en-nz" - CASE "en-ph" - CASE "en-tt" - CASE "en-us" - CASE "en-za" - CASE "en-zw" - CASE "en" ; cCtryHb := "EN" ; EXIT - CASE "eo" ; EXIT - CASE "es-419" - CASE "es-ar" - CASE "es-bo" - CASE "es-cl" - CASE "es-co" - CASE "es-cr" - CASE "es-do" - CASE "es-ec" - CASE "es-es" - CASE "es-gt" - CASE "es-hn" - CASE "es-mx" - CASE "es-ni" - CASE "es-pa" - CASE "es-pe" - CASE "es-pr" - CASE "es-py" - CASE "es-sv" - CASE "es-uy" - CASE "es-ve" - CASE "es" ; cCtryHb := "ES" ; EXIT - CASE "et-ee" ; EXIT - CASE "et" ; EXIT - CASE "eu-es" ; EXIT - CASE "eu" ; EXIT - CASE "fa-ir" ; EXIT - CASE "fa" ; EXIT - CASE "fi-fi" - CASE "fi" ; cCtryHb := "FI" ; EXIT - CASE "fo-fo" ; EXIT - CASE "fo" ; EXIT - CASE "fr-be" - CASE "fr-ca" - CASE "fr-ch" - CASE "fr-fr" - CASE "fr-lu" - CASE "fr-mc" - CASE "fr" ; cCtryHb := "FR" ; EXIT - CASE "gl-es" ; EXIT - CASE "gl" ; EXIT - CASE "gu-in" ; EXIT - CASE "gu" ; EXIT - CASE "he-il" - CASE "he" ; cCtryHb := "HE" ; EXIT - CASE "hi-in" ; EXIT - CASE "hi" ; EXIT - CASE "hr-hr" - CASE "hr" ; cCtryHb := "HR" ; EXIT - CASE "hu-hu" - CASE "hu" ; cCtryHb := "HU" ; EXIT - CASE "hy-am" ; EXIT - CASE "hy" ; EXIT - CASE "id-id" ; EXIT - CASE "id" ; EXIT - CASE "is-is" - CASE "is" ; cCtryHb := "IS" ; EXIT - CASE "it-ch" - CASE "it-it" - CASE "it" ; cCtryHb := "IT" ; EXIT - CASE "ja-jp" ; EXIT - CASE "ja" ; EXIT - CASE "ka-ge" ; EXIT - CASE "ka" ; EXIT - CASE "kk-kz" ; EXIT - CASE "kk" ; EXIT - CASE "kn-in" ; EXIT - CASE "kn" ; EXIT - CASE "ko-kr" ; EXIT - CASE "ko" ; EXIT - CASE "kok-in" ; EXIT - CASE "kok" ; EXIT - CASE "ky-kz" ; EXIT - CASE "ky" ; EXIT - CASE "lt-lt" - CASE "lt" ; cCtryHb := "LT" ; EXIT - CASE "lv-lv" ; EXIT - CASE "lv" ; EXIT - CASE "mk-mk" ; EXIT - CASE "mk" ; EXIT - CASE "mn-mn" ; EXIT - CASE "mn" ; EXIT - CASE "mr-in" ; EXIT - CASE "mr" ; EXIT - CASE "ms-bn" ; EXIT - CASE "ms-my" ; EXIT - CASE "ms" ; EXIT - CASE "nb-no" ; EXIT - CASE "nl-be" - CASE "nl-nl" - CASE "nl" ; cCtryHb := "NL" ; EXIT - CASE "nn-no" ; EXIT - CASE "no" ; cCtryHb := "NO" ; EXIT - CASE "pa-in" ; EXIT - CASE "pa" ; EXIT - CASE "pl-pl" - CASE "pl" ; cCtryHb := "PL" ; EXIT - CASE "pt-br" - CASE "pt-pt" - CASE "pt" ; cCtryHb := "PT" ; EXIT - CASE "ro-ro" - CASE "ro" ; cCtryHb := "RO" ; EXIT - CASE "ru-ru" - CASE "ru" ; cCtryHb := "RU" ; EXIT - CASE "sa-in" ; EXIT - CASE "sa" ; EXIT - CASE "sk-sk" - CASE "sk" ; cCtryHb := "SK" ; EXIT - CASE "sl-si" - CASE "sl" ; cCtryHb := "SL" ; EXIT - CASE "sq-al" ; EXIT - CASE "sq" ; EXIT - CASE "sr-sp-cyrl" - CASE "sr-sp-latn" ; cCtryHb := "SR" ; EXIT - CASE "sv-fi" - CASE "sv-se" - CASE "sv" ; cCtryHb := "SV" ; EXIT - CASE "sw-ke" ; EXIT - CASE "sw" ; EXIT - CASE "syr-sy" ; EXIT - CASE "syr" ; EXIT - CASE "ta-in" ; EXIT - CASE "ta" ; EXIT - CASE "te-in" ; EXIT - CASE "te" ; EXIT - CASE "th-th" ; EXIT - CASE "th" ; EXIT - CASE "tr-tr" - CASE "tr" ; cCtryHb := "TR" ; EXIT - CASE "tt-ru" ; EXIT - CASE "tt" ; EXIT - CASE "uk-ua" - CASE "uk" ; cCtryHb := "UA" ; EXIT - CASE "ur-pk" ; EXIT - CASE "ur" ; EXIT - CASE "uz-uz-cyrl" ; EXIT - CASE "uz-uz-latn" ; EXIT - CASE "uz" ; EXIT - CASE "vi-vn" ; EXIT - CASE "vi" ; EXIT - CASE "zh-chs" ; EXIT - CASE "zh-cht" ; EXIT - CASE "zh-cn" ; EXIT - CASE "zh-hk" ; EXIT - CASE "zh-mo" ; EXIT - CASE "zh-sg" ; EXIT - CASE "zh-tw" ; EXIT - CASE "zh" ; EXIT - ENDSWITCH - ENDIF - - RETURN cCtryHb + RETURN Left( hb_cdpSelect(), 2 ) /* Caller assumes this never returns strings shorter than two chars */ diff --git a/src/rtl/cdpdetc.c b/src/rtl/cdpdetc.c index 8861f7544f..cd4ecd3a98 100644 --- a/src/rtl/cdpdetc.c +++ b/src/rtl/cdpdetc.c @@ -69,3 +69,12 @@ HB_FUNC( __WAPI_GETOEMCP ) hb_retnl( 0 ); #endif } + +HB_FUNC( __WAPI_GETCONSOLEOUTPUTCP ) +{ +#if defined( HB_OS_WIN ) && ! defined( HB_OS_WIN_CE ) + hb_retnl( GetConsoleOutputCP() ); +#else + hb_retnl( 0 ); +#endif +} diff --git a/src/rtl/checkbox.prg b/src/rtl/checkbox.prg index 6fa4b6086c..bf10e7a775 100644 --- a/src/rtl/checkbox.prg +++ b/src/rtl/checkbox.prg @@ -151,7 +151,6 @@ METHOD killFocus() CLASS CheckBox ::display() SetCursor( ::nCursor ) - ENDIF RETURN Self @@ -217,7 +216,6 @@ METHOD display() CLASS CheckBox hb_DispOutAt( ::nCapRow, ::nCapCol + nPos - 1, SubStr( cCaption, nPos, 1 ), ; hb_ColorIndex( ::cColorSpec, 3 ) ) ENDIF - ENDIF DispEnd() @@ -328,11 +326,11 @@ METHOD New( nRow, nCol, cCaption ) CLASS CheckBox __defaultNIL( @cCaption, "" ) - ::caption := cCaption - ::capRow := nRow - ::capCol := nCol + 3 + 1 - ::row := nRow - ::col := nCol + ::caption := cCaption + ::capRow := nRow + ::capCol := nCol + 3 + 1 + ::row := nRow + ::col := nCol IF IsDefColor() ::cColorSpec := "W/N,W+/N,W/N,W+/N" diff --git a/src/rtl/color53.prg b/src/rtl/color53.prg index aa0e1e44a2..f549b5e565 100644 --- a/src/rtl/color53.prg +++ b/src/rtl/color53.prg @@ -85,16 +85,15 @@ FUNCTION GetPairPos( cColor, nColor ) FUNCTION GetPairLen( cColor, nColor ) - LOCAL nPos := GetPairPos( cColor, nColor ) + LOCAL nPos LOCAL nLen - IF nPos == 0 + IF ( nPos := GetPairPos( cColor, nColor ) ) == 0 RETURN 0 ENDIF - nLen := At( ",", SubStr( cColor, nPos ) ) - - RETURN iif( nLen == 0, Len( cColor ) - nPos + 1, nLen - 1 ) + RETURN iif( ( nLen := At( ",", SubStr( cColor, nPos ) ) ) == 0, ; + Len( cColor ) - nPos + 1, nLen - 1 ) FUNCTION GetClrFore( cColor ) @@ -104,7 +103,7 @@ FUNCTION GetClrFore( cColor ) RETURN "" ENDIF - RETURN SubStr( cColor, 1, nPos - 1 ) + RETURN Left( cColor, nPos - 1 ) FUNCTION GetClrBack( cColor ) @@ -164,11 +163,12 @@ FUNCTION ApplyDefau( cColor, xClr1, xClr2, xClr3, xClr4, xClr5, xClr6, xClr7, xC LOCAL xNewColor LOCAL n - IF PCount() == 0 + SWITCH PCount() + CASE 0 RETURN "" - ELSEIF PCount() == 1 + CASE 1 RETURN cColor - ENDIF + ENDSWITCH cSetColor := SetColor() diff --git a/src/rtl/datec.c b/src/rtl/datec.c index ad11200f15..a66c480347 100644 --- a/src/rtl/datec.c +++ b/src/rtl/datec.c @@ -108,3 +108,13 @@ HB_FUNC( CDOW ) else hb_errRT_BASE_SubstR( EG_ARG, 1117, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } + +HB_FUNC( HB_CDAY ) +{ + PHB_ITEM pDay = hb_param( 1, HB_IT_NUMERIC ); + + if( pDay ) + hb_retc_const( hb_dateCDOW( hb_itemGetNI( pDay ) ) ); + else + hb_errRT_BASE_SubstR( EG_ARG, 1117, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} diff --git a/src/rtl/dbedit.prg b/src/rtl/dbedit.prg index 3cc551813d..267feed7bb 100644 --- a/src/rtl/dbedit.prg +++ b/src/rtl/dbedit.prg @@ -95,9 +95,9 @@ FUNCTION dbEdit( nTop, nLeft, nBottom, nRight, ; oBrowse := TBrowseDB( nTop, nLeft, nBottom, nRight ) oBrowse:headSep := iif( HB_ISSTRING( xHeadingSeparators ), xHeadingSeparators, hb_UTF8ToStrBox( "═╤═" ) ) oBrowse:colSep := iif( HB_ISSTRING( xColumnSeparators ), xColumnSeparators, hb_UTF8ToStrBox( " │ " ) ) - oBrowse:footSep := iif( HB_ISSTRING( xFootingSeparators ), xFootingSeparators, "" ) + oBrowse:footSep := hb_defaultValue( xFootingSeparators, "" ) oBrowse:skipBlock := {| nRecs | Skipped( nRecs, lAppend ) } - oBrowse:autoLite := .F. /* Set to .F. just like in CA-Cl*pper. [vszakats] */ + oBrowse:autoLite := .F. /* Set to .F. just like in CA-Cl*pper. [vszakats] */ IF HB_ISARRAY( acColumns ) nColCount := 0 @@ -123,8 +123,8 @@ FUNCTION dbEdit( nTop, nLeft, nBottom, nRight, ; IF HB_ISARRAY( acColumns ) cBlock := acColumns[ nPos ] IF ( nAliasPos := At( "->", cBlock ) ) > 0 - cHeading := SubStr( cBlock, 1, nAliasPos - 1 ) + "->;" + ; - SubStr( cBlock, nAliasPos + 2 ) + cHeading := Left( cBlock, nAliasPos - 1 ) + "->;" + ; + SubStr( cBlock, nAliasPos + 2 ) ELSE cHeading := cBlock ENDIF @@ -177,7 +177,6 @@ FUNCTION dbEdit( nTop, nLeft, nBottom, nRight, ; ENDIF oBrowse:addColumn( oColumn ) - NEXT nOldCUrsor := SetCursor( SC_NONE ) diff --git a/src/rtl/dircmd.prg b/src/rtl/dircmd.prg index 563b98b1e1..4aa34acdc5 100644 --- a/src/rtl/dircmd.prg +++ b/src/rtl/dircmd.prg @@ -49,7 +49,7 @@ #include "directry.ch" #include "fileio.ch" -#define _DIR_HEADER 1 +#define _DIR_HEADER 1 PROCEDURE __Dir( cFileMask ) @@ -61,7 +61,7 @@ PROCEDURE __Dir( cFileMask ) /* NOTE: Although Cl*pper has this string in the national language module, it will not use it from there. - This is hard wired to English. So this is a small + This is hard-wired to English. So this is a small incompatibility. */ #ifdef HB_CLP_STRICT @@ -71,22 +71,29 @@ PROCEDURE __Dir( cFileMask ) #endif AEval( Directory( hb_FNameMerge( Set( _SET_DEFAULT ), "*", ".dbf" ) ), ; - {| aDirEntry | PutDbf( aDirEntry ) } ) + {| aDirEntry | PutDbf( aDirEntry ) } ) ELSE - hb_FNameSplit( LTrim( cFileMask ), @cPath, @cName, @cExt ) + hb_FNameSplit( iif( Set( _SET_TRIMFILENAME ), AllTrim( cFileMask ), cFileMask ), ; + @cPath, @cName, @cExt ) IF Empty( cPath ) cPath := Set( _SET_DEFAULT ) ENDIF AEval( Directory( hb_FNameMerge( cPath, cName, cExt ) ), ; - {| aDirEntry | PutNormal( aDirEntry ) } ) + {| aDirEntry | PutNormal( aDirEntry ) } ) ENDIF QOut() RETURN +#define _DBF_HEAD_MARK hb_BChar( 0x03 ) + hb_BChar( 0x06 ) + ; + hb_BChar( 0x30 ) + hb_BChar( 0x31 ) + ; + hb_BChar( 0x83 ) + hb_BChar( 0x86 ) + ; + hb_BChar( 0xE5 ) + hb_BChar( 0xE6 ) + ; + hb_BChar( 0xF5 ) + hb_BChar( 0xF6 ) + STATIC PROCEDURE PutDBF( aDirEntry ) LOCAL fhnd @@ -96,18 +103,13 @@ STATIC PROCEDURE PutDBF( aDirEntry ) IF ( fhnd := FOpen( aDirEntry[ F_NAME ] ) ) != F_ERROR - buffer := Space( 8 ) - - IF FRead( fhnd, @buffer, 8 ) == 8 .AND. ; - AScan( { 0x03, 0x06, 0x30, 0x31, 0x83, 0x86, 0xE5, 0xE6, 0xF5, 0xF6 }, ; - hb_BCode( buffer ) ) != 0 + buffer := hb_FReadLen( fhnd, 8 ) + IF hb_BLen( buffer ) == 8 .AND. hb_BAt( hb_BLeft( buffer, 1 ), _DBF_HEAD_MARK ) > 0 nRecCount := Bin2L( hb_BSubStr( buffer, 5, 4 ) ) - dLastUpdate := hb_SToD( ; - StrZero( hb_BCode( hb_BSubStr( buffer, 2, 1 ) ) + 1900, 4 ) + ; - StrZero( hb_BCode( hb_BSubStr( buffer, 3, 1 ) ), 2 ) + ; - StrZero( hb_BCode( hb_BSubStr( buffer, 4, 1 ) ), 2 ) ) - + dLastUpdate := hb_Date( hb_BPeek( buffer, 2 ) + 1900, ; + hb_BPeek( buffer, 3 ), ; + hb_BPeek( buffer, 4 ) ) ENDIF FClose( fhnd ) @@ -124,18 +126,17 @@ STATIC PROCEDURE PutDBF( aDirEntry ) STATIC PROCEDURE PutNormal( aDirEntry ) - LOCAL cName - LOCAL cExt + LOCAL cName, cExt - hb_FNameSplit( aDirEntry[ F_NAME ], NIL, @cName, @cExt ) + hb_FNameSplit( aDirEntry[ F_NAME ],, @cName, @cExt ) - /* strict MS-DOS like formatting, it does not play well with long - file names which do not stick to 8.3 MS-DOS convention */ + /* Strict MS-DOS like formatting, it does not play well with long + filenames which do not stick to 8.3 MS-DOS convention */ QOut( ; PadR( cName, 8 ), ; PadR( SubStr( cExt, 2 ), 3 ), ; Str( aDirEntry[ F_SIZE ], 8 ), "", ; - DToC( aDirEntry[ F_DATE ] ) ) + aDirEntry[ F_DATE ] ) RETURN diff --git a/src/rtl/direct.c b/src/rtl/direct.c index 4da5612718..6fc8a4ceee 100644 --- a/src/rtl/direct.c +++ b/src/rtl/direct.c @@ -99,7 +99,7 @@ this issue is very much platform specific, and this is not the only place which may need the conversion [vszakats]. */ -PHB_ITEM hb_fsDirectory( const char * pszDirSpec, const char * pszAttributes ) +PHB_ITEM hb_fsDirectory( const char * pszDirSpec, const char * pszAttributes, HB_BOOL fDateTime ) { PHB_ITEM pDir = hb_itemArrayNew( 0 ); char * pszFree = NULL; @@ -157,10 +157,14 @@ PHB_ITEM hb_fsDirectory( const char * pszDirSpec, const char * pszAttributes ) hb_arrayNew ( pSubarray, F_LEN ); hb_arraySetC ( pSubarray, F_NAME, ffind->szName ); hb_arraySetNInt( pSubarray, F_SIZE, ffind->size ); - hb_arraySetDL ( pSubarray, F_DATE, ffind->lDate ); hb_arraySetC ( pSubarray, F_TIME, ffind->szTime ); hb_arraySetC ( pSubarray, F_ATTR, hb_fsAttrDecode( ffind->attr, buffer ) ); + if( fDateTime ) + hb_arraySetTDT( pSubarray, F_DATE, ffind->lDate, ffind->lTime ); + else + hb_arraySetDL ( pSubarray, F_DATE, ffind->lDate ); + /* Don't exit when array limit is reached */ hb_arrayAddForward( pDir, pSubarray ); } @@ -179,5 +183,10 @@ PHB_ITEM hb_fsDirectory( const char * pszDirSpec, const char * pszAttributes ) HB_FUNC( DIRECTORY ) { - hb_itemReturnRelease( hb_fsDirectory( hb_parc( 1 ), hb_parc( 2 ) ) ); + hb_itemReturnRelease( hb_fsDirectory( hb_parc( 1 ), hb_parc( 2 ), HB_FALSE ) ); +} + +HB_FUNC( HB_DIRECTORY ) +{ + hb_itemReturnRelease( hb_fsDirectory( hb_parc( 1 ), hb_parc( 2 ), HB_TRUE ) ); } diff --git a/src/rtl/dirscan.prg b/src/rtl/dirscan.prg index b5c6291b23..f39d49e906 100644 --- a/src/rtl/dirscan.prg +++ b/src/rtl/dirscan.prg @@ -54,7 +54,7 @@ STATIC FUNCTION hb_doScan( cPath, cMask, cAttr, cPathSep ) LOCAL lMatch LOCAL aResult := {} - FOR EACH aFile IN Directory( cPath + hb_osFileMask(), cAttr + "D" ) + FOR EACH aFile IN hb_Directory( cPath + hb_osFileMask(), cAttr + "D" ) lMatch := hb_FileMatch( aFile[ F_NAME ], cMask ) IF "D" $ aFile[ F_ATTR ] IF lMatch .AND. "D" $ cAttr @@ -73,10 +73,7 @@ STATIC FUNCTION hb_doScan( cPath, cMask, cAttr, cPathSep ) RETURN aResult FUNCTION hb_DirScan( cPath, cFileMask, cAttr ) - - hb_default( @cPath, "" ) - - RETURN HB_DoScan( hb_DirSepAdd( cPath ), ; + RETURN HB_DoScan( hb_DirSepAdd( hb_defaultValue( cPath, "" ) ), ; iif( HB_ISSTRING( cFileMask ), cFileMask, hb_osFileMask() ), ; - iif( HB_ISSTRING( cAttr ), cAttr, "" ), ; + hb_defaultValue( cAttr, "" ), ; hb_ps() ) diff --git a/src/rtl/errapi.c b/src/rtl/errapi.c index 66e3de6b26..4779ea12f9 100644 --- a/src/rtl/errapi.c +++ b/src/rtl/errapi.c @@ -588,14 +588,14 @@ HB_USHORT hb_errLaunch( PHB_ITEM pError ) /* If the error block didn't return a logical value, */ /* or the canSubstitute flag has been set, consider it as a failure */ - if( hb_itemType( pResult ) != HB_IT_LOGICAL || ( uiFlags & EF_CANSUBSTITUTE ) ) + if( ! HB_IS_LOGICAL( pResult ) || ( uiFlags & EF_CANSUBSTITUTE ) ) bFailure = HB_TRUE; else { uiAction = hb_itemGetL( pResult ) ? E_RETRY : E_DEFAULT; if( ( uiAction == E_DEFAULT && !( uiFlags & EF_CANDEFAULT ) ) || - ( uiAction == E_RETRY && !( uiFlags & EF_CANRETRY ) ) ) + ( uiAction == E_RETRY && !( uiFlags & EF_CANRETRY ) ) ) bFailure = HB_TRUE; } diff --git a/src/rtl/errsys.prg b/src/rtl/errsys.prg index 41eb4ef074..74bc880525 100644 --- a/src/rtl/errsys.prg +++ b/src/rtl/errsys.prg @@ -57,7 +57,7 @@ PROCEDURE ErrorSys() STATIC FUNCTION DefError( oError ) LOCAL cMessage - LOCAL cDOSError + LOCAL cOSError LOCAL aOptions LOCAL nChoice @@ -94,7 +94,7 @@ STATIC FUNCTION DefError( oError ) cMessage := ErrorMessage( oError ) IF ! Empty( oError:osCode ) - cDOSError := hb_StrFormat( "(DOS Error %1$d)", oError:osCode ) + cOSError := hb_StrFormat( "(DOS Error %1$d)", oError:osCode ) ENDIF // Build buttons @@ -113,15 +113,8 @@ STATIC FUNCTION DefError( oError ) // Show alert box - nChoice := 0 - DO WHILE nChoice == 0 - - IF cDOSError == NIL - nChoice := Alert( cMessage, aOptions ) - ELSE - nChoice := Alert( cMessage + ";" + cDOSError, aOptions ) - ENDIF - + DO WHILE ( nChoice := Alert( cMessage + ; + iif( cOSError == NIL, "", ";" + cOSError ), aOptions ) ) == 0 ENDDO IF ! Empty( nChoice ) @@ -137,8 +130,8 @@ STATIC FUNCTION DefError( oError ) // "Quit" selected - IF cDOSError != NIL - cMessage += " " + cDOSError + IF cOSError != NIL + cMessage += " " + cOSError ENDIF OutErr( hb_eol() ) @@ -149,8 +142,8 @@ STATIC FUNCTION DefError( oError ) OutErr( hb_eol() ) OutErr( hb_StrFormat( "Called from %1$s(%2$d) ", ; - ProcName( n ), ; - ProcLine( n ) ) ) + ProcName( n ), ; + ProcLine( n ) ) ) ENDDO diff --git a/src/rtl/filebuf.c b/src/rtl/filebuf.c index 1699f8a410..ff3ef86ece 100644 --- a/src/rtl/filebuf.c +++ b/src/rtl/filebuf.c @@ -155,8 +155,7 @@ static PHB_FILE hb_fileNew( HB_FHANDLE hFile, HB_BOOL fShared, HB_BOOL fReadonly if( ! pFile ) { - pFile = ( PHB_FILE ) hb_xgrab( sizeof( HB_FILE ) ); - memset( pFile, 0, sizeof( HB_FILE ) ); + pFile = ( PHB_FILE ) hb_xgrabz( sizeof( HB_FILE ) ); pFile->pFuncs = s_fileMethods(); pFile->device = device; pFile->inode = inode; @@ -411,7 +410,7 @@ static PHB_ITEM s_fileDirectory( PHB_FILE_FUNCS pFuncs, const char * pszDirSpec, { HB_SYMBOL_UNUSED( pFuncs ); - return hb_fsDirectory( pszDirSpec, pszAttr ); + return hb_fsDirectory( pszDirSpec, pszAttr, HB_TRUE ); } static HB_BOOL s_fileTimeGet( PHB_FILE_FUNCS pFuncs, const char * pszFileName, long * plJulian, long * plMillisec ) @@ -1035,9 +1034,8 @@ static const HB_FILE_FUNCS * s_fileposMethods( void ) static PHB_FILE hb_fileposNew( PHB_FILE pFile ) { - PHB_FILEPOS pFilePos = ( PHB_FILEPOS ) hb_xgrab( sizeof( HB_FILEPOS ) ); + PHB_FILEPOS pFilePos = ( PHB_FILEPOS ) hb_xgrabz( sizeof( HB_FILEPOS ) ); - memset( pFilePos, 0, sizeof( HB_FILEPOS ) ); pFilePos->pFuncs = s_fileposMethods(); pFilePos->pFile = pFile; pFilePos->seek_pos = 0; @@ -1175,7 +1173,7 @@ PHB_ITEM hb_fileDirectory( const char * pszDirSpec, const char * pszAttr ) if( i >= 0 ) return s_pFileTypes[ i ]->Directory( s_pFileTypes[ i ], pszDirSpec, pszAttr ); - return hb_fsDirectory( pszDirSpec, pszAttr ); + return hb_fsDirectory( pszDirSpec, pszAttr, HB_TRUE ); } HB_BOOL hb_fileTimeGet( const char * pszFileName, long * plJulian, long * plMillisec ) diff --git a/src/rtl/filesys.c b/src/rtl/filesys.c index c30b2a0fda..45cb649b7e 100644 --- a/src/rtl/filesys.c +++ b/src/rtl/filesys.c @@ -834,7 +834,7 @@ int hb_fsIsPipeOrSock( HB_FHANDLE hPipeHandle ) } return 0; } -#elif defined( HB_OS_WIN ) +#elif defined( HB_OS_WIN ) && ! defined( HB_OS_WIN_CE ) { return ( GetFileType( ( HANDLE ) hb_fsGetOsHandle( hPipeHandle ) ) == FILE_TYPE_PIPE ) ? 1 : 0; @@ -1553,7 +1553,7 @@ HB_BOOL hb_fsSetFileTime( const char * pszFileName, long lJulian, long lMillisec fResult = hFile != FS_ERROR; if( fResult ) { - FILETIME ft, local_ft; + FILETIME local_ft; SYSTEMTIME st; if( lJulian <= 0 || lMillisec < 0 ) @@ -1574,9 +1574,16 @@ HB_BOOL hb_fsSetFileTime( const char * pszFileName, long lJulian, long lMillisec st.wSecond = ( WORD ) iSecond; st.wMilliseconds = ( WORD ) iMSec; } - SystemTimeToFileTime( &st, &local_ft ); - LocalFileTimeToFileTime( &local_ft, &ft ); - fResult = SetFileTime( DosToWinHandle( hFile ), NULL, &ft, &ft ) != 0; + + if( SystemTimeToFileTime( &st, &local_ft ) ) + { + FILETIME ft; + LocalFileTimeToFileTime( &local_ft, &ft ); + fResult = SetFileTime( DosToWinHandle( hFile ), NULL, &ft, &ft ) != 0; + } + else + fResult = HB_FALSE; + hb_fsSetIOError( fResult, 0 ); hb_fsClose( hFile ); } diff --git a/src/rtl/fnsplit.c b/src/rtl/fnsplit.c index 101336e428..0671ed49f3 100644 --- a/src/rtl/fnsplit.c +++ b/src/rtl/fnsplit.c @@ -69,7 +69,7 @@ HB_FUNC( HB_FNAMEMERGE ) pFileName.szPath = hb_parc( 1 ); pFileName.szName = hb_parc( 2 ); pFileName.szExtension = hb_parc( 3 ); - pFileName.szDrive = hb_parc( 4 ); + pFileName.szDrive = NULL; hb_retc( hb_fsFNameMerge( szFileName, &pFileName ) ); } diff --git a/src/rtl/gete.c b/src/rtl/gete.c index 53a2764efd..0f415c8f86 100644 --- a/src/rtl/gete.c +++ b/src/rtl/gete.c @@ -98,7 +98,9 @@ HB_FUNC( GETENV ) } /* NOTE: Undocumented Clipper function. [vszakats] */ +#ifdef HB_CLP_UNDOC HB_FUNC_TRANSLATE( GETE, GETENV ) +#endif /* NOTE: Harbour extended version of GetEnv(). The 2nd parameter can be used to specify a default value, returned if the diff --git a/src/rtl/gtcgi/gtcgi.c b/src/rtl/gtcgi/gtcgi.c index 7723b05de8..a91b15a94e 100644 --- a/src/rtl/gtcgi/gtcgi.c +++ b/src/rtl/gtcgi/gtcgi.c @@ -109,9 +109,7 @@ static void hb_gt_cgi_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil HB_TRACE( HB_TR_DEBUG, ( "hb_gt_cgi_Init(%p,%p,%p,%p)", pGT, ( void * ) ( HB_PTRDIFF ) hFilenoStdin, ( void * ) ( HB_PTRDIFF ) hFilenoStdout, ( void * ) ( HB_PTRDIFF ) hFilenoStderr ) ); - pGTCGI = ( PHB_GTCGI ) hb_xgrab( sizeof( HB_GTCGI ) ); - memset( pGTCGI, 0, sizeof( HB_GTCGI ) ); - HB_GTLOCAL( pGT ) = pGTCGI; + HB_GTLOCAL( pGT ) = pGTCGI = ( PHB_GTCGI ) hb_xgrabz( sizeof( HB_GTCGI ) ); pGTCGI->hStdout = hFilenoStdout; diff --git a/src/rtl/gtchrmap.c b/src/rtl/gtchrmap.c index 3be179e49a..49e3389997 100644 --- a/src/rtl/gtchrmap.c +++ b/src/rtl/gtchrmap.c @@ -165,7 +165,6 @@ static void skip_blank( char ** buf ) static int get_val( char ** buf ) { int n = -1; - char c; if( ( *buf )[ 0 ] == '\'' && ( *buf )[ 1 ] != '\0' && ( *buf )[ 2 ] == '\'' ) { @@ -178,16 +177,16 @@ static int get_val( char ** buf ) *buf += 2; for(; ( **buf >= '0' && **buf <= '9' ) || ( **buf >= 'A' && **buf <= 'F' ) || - ( **buf >= 'a' && **buf <= 'f' ); ( *buf )++ ) + ( **buf >= 'a' && **buf <= 'f' ); ++( *buf ) ) { - c = **buf | 0x20; + char c = **buf | 0x20; n = ( n << 4 ) + c - ( c > '9' ? ( 'a' - 10 ) : '0' ); } } else if( **buf >= '0' && **buf <= '9' ) { n = 0; - for(; ( **buf >= '0' && **buf <= '9' ); ( *buf )++ ) + for(; ( **buf >= '0' && **buf <= '9' ); ++( *buf ) ) n = n * 10 + ( **buf - '0' ); } return n > 0xff ? -1 : n; @@ -258,8 +257,8 @@ static int parse_line( char * buf, int * from, int * to, char * op, int * val, i s[ 1 ] == '|' || s[ 1 ] == '^' || s[ 1 ] == '=' || s[ 1 ] == ' ' ) ) { - *op = s[1]; - s+=2; + *op = s[ 1 ]; + s += 2; } *val = *op == ' ' ? 0 : get_val( &s ); if( *val >= 0 ) @@ -278,15 +277,16 @@ static int parse_line( char * buf, int * from, int * to, char * op, int * val, i static int chrmap_parse( FILE * fp, const char * pszTerm, int * nTransTbl, const char * pszFile ) { int line = 0, from = 0, to = 0, val = 0, mod = 0, i, n; - char buf[ 256 ], * s, op = 0; + char * s, op = 0; int isTerm = 0; fpos_t pos; fgetpos( fp, &pos ); - fseek( fp, 0, SEEK_SET ); + ( void ) fseek( fp, 0, SEEK_SET ); while( ! feof( fp ) && isTerm < 2 ) { + char buf[ 256 ]; ++line; if( fgets( buf, sizeof( buf ), fp ) != NULL ) { @@ -363,21 +363,20 @@ static int chrmap_parse( FILE * fp, const char * pszTerm, int * nTransTbl, const } } - fsetpos( fp, &pos ); + ( void ) fsetpos( fp, &pos ); return isTerm; } static int hb_gt_chrmapread( const char * pszFile, const char * pszTerm, int * nTransTbl ) { - FILE * fp; - char buf[ 256 ], * ptr, * pTerm; int isTerm = -1; - - fp = hb_fopen( pszFile, "r" ); + FILE * fp = hb_fopen( pszFile, "r" ); if( fp != NULL ) { + char buf[ 256 ], * ptr, * pTerm; + hb_strncpy( buf, pszTerm, sizeof( buf ) - 1 ); isTerm = 0; pTerm = buf; @@ -399,7 +398,7 @@ static int hb_gt_chrmapread( const char * pszFile, const char * pszTerm, int * n int hb_gt_chrmapinit( int * piTransTbl, const char * pszTerm, HB_BOOL fSetACSC ) { - char * pszFree = NULL, * pszFile, szFile[ HB_PATH_MAX ]; + char * pszFree = NULL; int nRet = -1; chrmap_init( piTransTbl ); @@ -415,7 +414,9 @@ int hb_gt_chrmapinit( int * piTransTbl, const char * pszTerm, HB_BOOL fSetACSC ) if( pszTerm != NULL && *pszTerm != '\0' ) { - pszFile = hb_getenv( "HB_CHARMAP" ); + char szFile[ HB_PATH_MAX ]; + char * pszFile = hb_getenv( "HB_CHARMAP" ); + if( pszFile != NULL && *pszFile != '\0' ) nRet = hb_gt_chrmapread( pszFile, pszTerm, piTransTbl ); if( nRet == -1 ) @@ -453,7 +454,7 @@ int hb_gt_chrmapinit( int * piTransTbl, const char * pszTerm, HB_BOOL fSetACSC ) } #if 0 -int main(int argc, char **argv) +int main( int argc, char ** argv ) { int piTransTbl[ 256 ], i; @@ -463,7 +464,7 @@ int main(int argc, char **argv) exit( 1 ); } - for( i = 0; i < 256; i++ ) + for( i = 0; i < 256; ++i ) printf( "%3d -> %3d : %d\n", i, piTransTbl[ i ] & 0xff, piTransTbl[ i ] >> 16 ); return 0; diff --git a/src/rtl/gtcrs/gtcrs.c b/src/rtl/gtcrs/gtcrs.c index ffb01ca153..61b3913f69 100644 --- a/src/rtl/gtcrs/gtcrs.c +++ b/src/rtl/gtcrs/gtcrs.c @@ -361,14 +361,14 @@ static int getClipKey( int nKey ) if( n >= 0 && n < NO_STDKEYS ) { if( ( nFlag & KEY_ALTMASK ) && ( nFlag & KEY_CTRLMASK ) && - stdKeyTab[n].shift_key != 0 ) - nRet = stdKeyTab[n].shift_key; - else if( ( nFlag & KEY_ALTMASK ) && stdKeyTab[n].alt_key != 0 ) - nRet = stdKeyTab[n].alt_key; - else if( ( nFlag & KEY_CTRLMASK ) && stdKeyTab[n].ctrl_key != 0 ) - nRet = stdKeyTab[n].ctrl_key; + stdKeyTab[ n ].shift_key != 0 ) + nRet = stdKeyTab[ n ].shift_key; + else if( ( nFlag & KEY_ALTMASK ) && stdKeyTab[ n ].alt_key != 0 ) + nRet = stdKeyTab[ n ].alt_key; + else if( ( nFlag & KEY_CTRLMASK ) && stdKeyTab[ n ].ctrl_key != 0 ) + nRet = stdKeyTab[ n ].ctrl_key; else - nRet = stdKeyTab[n].key; + nRet = stdKeyTab[ n ].key; } else nRet = nKey; @@ -1906,10 +1906,7 @@ static void setDispTrans( InOutBase * ioBase, PHB_CODEPAGE cdpHost, PHB_CODEPAGE ( ioBase->std_chmap[ i ] & A_ALTCHARSET ) == 0 ) { if( ioBase->out_transtbl == NULL ) - { - ioBase->out_transtbl = ( unsigned char * ) hb_xgrab( 256 ); - memset( ioBase->out_transtbl, 0, 256 ); - } + ioBase->out_transtbl = ( unsigned char * ) hb_xgrabz( 256 ); ioBase->out_transtbl[ i ] = ch & A_CHARTEXT; } } @@ -1928,10 +1925,7 @@ static void setDispTrans( InOutBase * ioBase, PHB_CODEPAGE cdpHost, PHB_CODEPAGE if( i != ( int ) uc ) { if( ioBase->out_transtbl == NULL ) - { - ioBase->out_transtbl = ( unsigned char * ) hb_xgrab( 256 ); - memset( ioBase->out_transtbl, 0, 256 ); - } + ioBase->out_transtbl = ( unsigned char * ) hb_xgrabz( 256 ); ioBase->out_transtbl[ i ] = uc; } } @@ -1947,8 +1941,7 @@ static InOutBase * create_ioBase( char * term, int infd, int outfd, int errfd, unsigned int i, n; char buf[ 256 ], * ptr, * crsterm = NULL; - ioBase = ( InOutBase * ) hb_xgrab( sizeof( InOutBase ) ); - memset( ioBase, 0, sizeof( InOutBase ) ); + ioBase = ( InOutBase * ) hb_xgrabz( sizeof( InOutBase ) ); if( ! term || ! *term ) term = getenv( "HB_TERM" ); diff --git a/src/rtl/gtsln/gtsln.c b/src/rtl/gtsln/gtsln.c index 294c0b2263..3b4d7e20d1 100644 --- a/src/rtl/gtsln/gtsln.c +++ b/src/rtl/gtsln/gtsln.c @@ -155,8 +155,8 @@ static void hb_sln_colorTrans( void ) * the same. */ clr = ( bg << 4 ) | ( fg ^ 0x07 ); - SLtt_set_color( clr, ( char * ) NULL, ( char * ) s_colorNames[ fg ], - ( char * ) s_colorNames[ bg ] ); + SLtt_set_color( clr, NULL, ( char * ) s_colorNames[ fg ], + ( char * ) s_colorNames[ bg ] ); #ifdef HB_SLN_UTF8 s_colorTab[ i ] = clr; #else diff --git a/src/rtl/gtsln/mousesln.c b/src/rtl/gtsln/mousesln.c index f84e0a2748..8d6fa9c78f 100644 --- a/src/rtl/gtsln/mousesln.c +++ b/src/rtl/gtsln/mousesln.c @@ -55,7 +55,6 @@ #include #include #include - Gpm_Connect Conn; #endif /* *********************************************************************** */ @@ -347,6 +346,7 @@ void hb_gt_sln_mouse_Init( void ) #if defined( HB_HAS_GPM ) else if( hb_sln_UnderLinuxConsole ) { + Gpm_Connect Conn; #ifdef HB_GPM_NOICE_DISABLE int iNull, iErr; @@ -359,8 +359,11 @@ void hb_gt_sln_mouse_Init( void ) /* give me move events but handle them anyway */ Conn.defaultMask= GPM_MOVE | GPM_HARD; /* only pure mouse events, no Ctrl,Alt,Shft events */ - Conn.minMod = 0; Conn.maxMod = 0; - gpm_zerobased = 1; gpm_visiblepointer = 1; + Conn.minMod = 0; + Conn.maxMod = 0; + + gpm_zerobased = 1; + gpm_visiblepointer = 1; if( Gpm_Open( &Conn, 0 ) >= 0 && gpm_fd >= 0 ) { diff --git a/src/rtl/gtstd/gtstd.c b/src/rtl/gtstd/gtstd.c index db7b764761..a623341681 100644 --- a/src/rtl/gtstd/gtstd.c +++ b/src/rtl/gtstd/gtstd.c @@ -193,9 +193,7 @@ static void hb_gt_std_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil HB_TRACE( HB_TR_DEBUG, ( "hb_gt_std_Init(%p,%p,%p,%p)", pGT, ( void * ) ( HB_PTRDIFF ) hFilenoStdin, ( void * ) ( HB_PTRDIFF ) hFilenoStdout, ( void * ) ( HB_PTRDIFF ) hFilenoStderr ) ); - pGTSTD = ( PHB_GTSTD ) hb_xgrab( sizeof( HB_GTSTD ) ); - memset( pGTSTD, 0, sizeof( HB_GTSTD ) ); - HB_GTLOCAL( pGT ) = pGTSTD; + HB_GTLOCAL( pGT ) = pGTSTD = ( PHB_GTSTD ) hb_xgrabz( sizeof( HB_GTSTD ) ); pGTSTD->hStdin = hFilenoStdin; pGTSTD->hStdout = hFilenoStdout; diff --git a/src/rtl/gttrm/gttrm.c b/src/rtl/gttrm/gttrm.c index 988959532f..35948dee75 100644 --- a/src/rtl/gttrm/gttrm.c +++ b/src/rtl/gttrm/gttrm.c @@ -913,7 +913,7 @@ static void set_tmevt( PHB_GTTRM pTerm, unsigned char * cMBuf, mouseEvent * mEvt break; } chk_mevtdblck( pTerm ); - /* printf("\n\rmouse event: %02x, %02x, %02x\n\r", cMBuf[0], cMBuf[1], cMBuf[2]); */ + /* printf( "\n\rmouse event: %02x, %02x, %02x\n\r", cMBuf[ 0 ], cMBuf[ 1 ], cMBuf[ 2 ] ); */ } #if defined( HB_HAS_GPM ) @@ -1496,7 +1496,7 @@ static void hb_gt_trm_LinuxSetCursorStyle( PHB_GTTRM pTerm, int iStyle ) lcurs = 8; break; case SC_SPECIAL2: - /* TODO: find a proper sequqnce to set a cursor + /* TODO: find a proper sequence to set a cursor to SC_SPECIAL2 under Linux console? There is no such mode in current stable kernels (2.4.20) */ @@ -3082,9 +3082,8 @@ static void hb_gt_trm_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil HB_TRACE( HB_TR_DEBUG, ( "hb_gt_trm_Init(%p,%p,%p,%p)", pGT, ( void * ) ( HB_PTRDIFF ) hFilenoStdin, ( void * ) ( HB_PTRDIFF ) hFilenoStdout, ( void * ) ( HB_PTRDIFF ) hFilenoStderr ) ); - pTerm = ( PHB_GTTRM ) hb_xgrab( sizeof( HB_GTTRM ) ); - memset( pTerm, 0, sizeof( HB_GTTRM ) ); - HB_GTLOCAL( pGT ) = pTerm; + HB_GTLOCAL( pGT ) = pTerm = ( PHB_GTTRM ) hb_xgrabz( sizeof( HB_GTTRM ) ); + pTerm->pGT = pGT; pTerm->hFilenoStdin = hFilenoStdin; pTerm->hFilenoStdout = hFilenoStdout; diff --git a/src/rtl/gtwin/gtwin.c b/src/rtl/gtwin/gtwin.c index 2793d187b7..38870be8b4 100644 --- a/src/rtl/gtwin/gtwin.c +++ b/src/rtl/gtwin/gtwin.c @@ -821,7 +821,7 @@ static HB_BOOL hb_gt_win_SetPalette( HB_BOOL bSet, COLORREF * colors ) #endif } -HWND hb_getConsoleWindowHandle( void ) +static HWND hb_getConsoleWindowHandle( void ) { TCHAR oldTitle[ 256 ], tmpTitle[ 32 ]; HWND hWnd = NULL; @@ -949,10 +949,13 @@ static void hb_gt_win_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil * so I used this hack with checking OSTYPE environemnt variable. [druzus] */ { - TCHAR lpOsType[ 10 ]; + TCHAR lpOsType[ 16 ]; + DWORD dwLen; - lpOsType[ 0 ] = lpOsType[ 9 ] = 0; - if( GetEnvironmentVariable( TEXT( "OSTYPE" ), lpOsType, 9 ) > 0 ) + lpOsType[ 0 ] = lpOsType[ HB_SIZEOFARRAY( lpOsType ) - 1 ] = TEXT( '\0' ); + dwLen = GetEnvironmentVariable( TEXT( "OSTYPE" ), lpOsType, + HB_SIZEOFARRAY( lpOsType ) - 1 ); + if( dwLen > 0 && dwLen < HB_SIZEOFARRAY( lpOsType ) - 1 ) { if( lstrcmp( lpOsType, TEXT( "msys" ) ) == 0 ) FreeConsole(); @@ -1458,7 +1461,7 @@ static int hb_gt_win_ReadKey( PHB_GT pGT, int iEventMask ) HB_SYMBOL_UNUSED( pGT ); - /* First check for Ctrl+Break, which is handled by gt/gtwin.c */ + /* First check for Ctrl+Break, which is handled by gtwin.c */ if( s_bBreak ) { /* Reset the global Ctrl+Break flag */ diff --git a/src/rtl/gtwvt/gtwvt.c b/src/rtl/gtwvt/gtwvt.c index c6661c23c6..6f08daa388 100644 --- a/src/rtl/gtwvt/gtwvt.c +++ b/src/rtl/gtwvt/gtwvt.c @@ -1585,7 +1585,7 @@ static void hb_gt_wvt_UpdateCaret( PHB_GTWVT pWVT ) { pWVT->CaretSize = iCaretSize; pWVT->CaretWidth = pWVT->PTEXTSIZE.x; - pWVT->CaretExist = CreateCaret( pWVT->hWnd, ( HBITMAP ) NULL, pWVT->PTEXTSIZE.x, + pWVT->CaretExist = CreateCaret( pWVT->hWnd, NULL, pWVT->PTEXTSIZE.x, pWVT->CaretSize < 0 ? - pWVT->CaretSize : pWVT->CaretSize ); } if( pWVT->CaretExist ) @@ -2901,10 +2901,12 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara case WM_QUERYENDSESSION: /* check if we can shutdown or logoff */ return 1; +#if defined( WM_ENDSESSION ) case WM_ENDSESSION: /* shutdown started */ if( wParam ) hb_vmRequestQuit(); return 0; +#endif case WM_CLOSE: /* Clicked 'X' on system menu */ if( pWVT->CloseMode == 0 ) @@ -3072,8 +3074,8 @@ static HB_BOOL hb_gt_wvt_FullScreen( PHB_GT pGT ) HB_GTWVT_LONG_PTR nStyle; HB_GTWVT_LONG_PTR nExtendedStyle; -/* Don't need this as Windows automatically maximizes to nearest [HVB] -#ifdef MONITOR_DEFAULTTONEAREST +/* Don't need this as Windows automatically maximizes to nearest [HVB] */ +#if defined( MONITOR_DEFAULTTONEAREST ) && 0 HMONITOR mon; MONITORINFO mi; typedef HMONITOR ( WINAPI * P_MFW )( HWND, DWORD ); @@ -3081,7 +3083,7 @@ static HB_BOOL hb_gt_wvt_FullScreen( PHB_GT pGT ) P_MFW pMonitorFromWindow; P_GMI pGetMonitorInfo; #endif -*/ + pWVT = HB_GTWVT_GET( pGT ); nStyle = GetWindowLongPtr( pWVT->hWnd, GWL_STYLE ); @@ -3833,8 +3835,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) pWVT->bIconToFree = HB_FALSE; pWVT->hIcon = LoadIcon( pWVT->hInstance, - MAKEINTRESOURCE( ( HB_MAXINT ) - hb_itemGetNInt( pInfo->pNewVal ) ) ); + MAKEINTRESOURCE( hb_itemGetNI( pInfo->pNewVal ) ) ); if( pWVT->hWnd ) { @@ -4160,11 +4161,11 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) #define SetGFXContext( c ) \ do { \ - COLORREF color = RGB( ( c ) >> 16, ( ( c ) & 0xFF00 ) >> 8, ( c ) & 0xFF ); \ + COLORREF color = RGB( HB_ULBYTE( c ), HB_HIBYTE( c ), HB_LOBYTE( c ) ); \ hdc = GetDC( pWVT->hWnd ); \ hPen = CreatePen( PS_SOLID, 1, color ); \ hOldPen = ( HPEN ) SelectObject( hdc, hPen ); \ - hBrush = ( HBRUSH ) CreateSolidBrush( color ); \ + hBrush = CreateSolidBrush( color ); \ hOldBrush = ( HBRUSH ) SelectObject( hdc, hBrush ); \ } while( 0 ) diff --git a/src/rtl/gtxwc/gtxwc.c b/src/rtl/gtxwc/gtxwc.c index 373f8db232..939547cf59 100644 --- a/src/rtl/gtxwc/gtxwc.c +++ b/src/rtl/gtxwc/gtxwc.c @@ -2293,7 +2293,11 @@ static HB_BOOL hb_gt_xwc_DefineBoxChar( PXWND_DEF wnd, HB_USHORT usCh, XWC_CharT bxCh->u.pts = ( XPoint * ) hb_xgrab( sizeof( XPoint ) * size ); memcpy( bxCh->u.pts, pts, sizeof( XPoint ) * size ); break; - default: + case CH_UNDEF: + case CH_CHAR: + case CH_CHBX: + case CH_NONE: + case CH_IMG: break; } return HB_TRUE; @@ -2325,7 +2329,10 @@ static void hb_gt_xwc_ResetCharTrans( PXWND_DEF wnd ) case CH_POLY: hb_xfree( wnd->boxTrans[ i ].u.pts ); break; - default: + case CH_UNDEF: + case CH_CHAR: + case CH_CHBX: + case CH_NONE: break; } } @@ -3587,11 +3594,11 @@ static HB_BOOL hb_gt_xwc_AllocColor( PXWND_DEF wnd, XColor * pColor ) * as the objective function, this accounts for differences * in the color sensitivity of the eye. */ - dDiff = 0.30 * ( ( ( int ) pColor->red ) - ( int ) colorTable[i].red ); + dDiff = 0.30 * ( ( ( int ) pColor->red ) - ( int ) colorTable[ i ].red ); dDistance = dDiff * dDiff; - dDiff = 0.61 * ( ( ( int ) pColor->green) - ( int ) colorTable[i].green ); + dDiff = 0.61 * ( ( ( int ) pColor->green ) - ( int ) colorTable[ i ].green ); dDistance += dDiff * dDiff; - dDiff = 0.11 * ( ( ( int ) pColor->blue ) - ( int ) colorTable[i].blue ); + dDiff = 0.11 * ( ( ( int ) pColor->blue ) - ( int ) colorTable[ i ].blue ); dDistance += dDiff * dDiff; if( dDistance < dClosestColorDist ) { @@ -4499,12 +4506,9 @@ static HB_BOOL hb_gt_xwc_isUTF8( void ) static PXWND_DEF hb_gt_xwc_CreateWndDef( PHB_GT pGT ) { - PXWND_DEF wnd = ( PXWND_DEF ) hb_xgrab( sizeof( XWND_DEF ) ); + PXWND_DEF wnd = ( PXWND_DEF ) hb_xgrabz( sizeof( XWND_DEF ) ); int i; - /* clear whole structure */ - memset( wnd, 0, sizeof( XWND_DEF ) ); - wnd->pGT = pGT; wnd->dpy = NULL; wnd->fInit = wnd->fData = HB_FALSE; diff --git a/src/rtl/gui.prg b/src/rtl/gui.prg index 2ee36a337b..3a73045776 100644 --- a/src/rtl/gui.prg +++ b/src/rtl/gui.prg @@ -77,7 +77,7 @@ FUNCTION _GetNumCol( cColor ) cColor := Left( cColor, nPos - 1 ) ENDIF - RETURN AScan( { "B", "G", "BG", "R", "RB", "GR", "W", "N+", "B+", "G+", "BG+", "R+", "RB+", "GR+", "W+" }, {| tmp | tmp == cColor } ) + RETURN hb_AScan( { "B", "G", "BG", "R", "RB", "GR", "W", "N+", "B+", "G+", "BG+", "R+", "RB+", "GR+", "W+" }, cColor,,, .T. ) FUNCTION __GUIColor( cColor, nPos ) RETURN hb_ColorIndex( cColor, nPos - 1 ) diff --git a/src/rtl/hbbfish.c b/src/rtl/hbbfish.c index 3b520c321e..a0b413058b 100644 --- a/src/rtl/hbbfish.c +++ b/src/rtl/hbbfish.c @@ -55,7 +55,7 @@ #include "hbbfish.h" -const HB_BLOWFISH s_blowFishInit = +static const HB_BLOWFISH s_blowFishInit = { { 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, diff --git a/src/rtl/hbdoc.prg b/src/rtl/hbdoc.prg index 97a39356e5..e52267dcd6 100644 --- a/src/rtl/hbdoc.prg +++ b/src/rtl/hbdoc.prg @@ -48,12 +48,15 @@ #include "directry.ch" #include "fileio.ch" +#include "hbserial.ch" #define _HBDOC_SRC_SUBDIR "doc" #define _HBDOC_SRC_EXT ".txt" #define _HBDOC_ADD_MSG( a, m ) IF HB_ISARRAY( a ); AAdd( a, m ); ENDIF +REQUEST hb_ZCompress + FUNCTION __hbdoc_FromSource( cFile, aErrMsg ) LOCAL aEntry := {} @@ -174,7 +177,7 @@ STATIC PROCEDURE __hbdoc__read_file( aEntry, cFileName, hMeta, aErrMsg ) /* Preselect the default template based on source filename */ FOR EACH tmp IN aFilenameTemplateMap - IF Lower( Left( cFileName, Len( tmp ) ) ) == tmp + IF hb_LeftEqI( cFileName, tmp ) hMeta[ "TEMPLATE" ] := tmp:__enumKey() ENDIF NEXT @@ -237,13 +240,13 @@ STATIC PROCEDURE __hbdoc__read_stream( aEntry, cFile, cFileName, hMeta, aErrMsg hEntry[ cSection ] := "" ENDIF ELSEIF ! Empty( cSection ) - IF ! Empty( hEntry[ cSection ] ) - hEntry[ cSection ] += Chr( 13 ) + Chr( 10 ) - ELSE + IF Empty( hEntry[ cSection ] ) /* some "heuristics" to detect in which column the real content starts, we assume the first line of content is correct, and use this with all consecutive lines. [vszakats] */ nStartCol := Len( cLine ) - Len( LTrim( cLine ) ) + 1 + ELSE + hEntry[ cSection ] += Chr( 13 ) + Chr( 10 ) ENDIF hEntry[ cSection ] += SubStr( cLine, nStartCol ) ELSEIF ! Empty( cLine ) @@ -271,8 +274,7 @@ FUNCTION __hbdoc_ToSource( aEntry ) cSource += hb_eol() cSource += "/* $DOC$" + hb_eol() FOR EACH item IN hEntry - IF HB_ISSTRING( item ) .AND. ; - !( Left( item:__enumKey(), 1 ) == "_" ) + IF HB_ISSTRING( item ) .AND. ! hb_LeftEq( item:__enumKey(), "_" ) cSource += " $" + item:__enumKey() + "$" + hb_eol() FOR EACH cLine IN hb_ATokens( StrTran( item, Chr( 13 ) ), Chr( 10 ) ) cLineOut := iif( Len( cLine ) == 0, "", Space( 4 ) + cLine ) @@ -365,10 +367,9 @@ FUNCTION __hbdoc_SaveHBD( cFileName, aEntry ) cFileName := hb_FNameExtSetDef( cFileName, _HBDOC_EXT ) ENDIF - fhnd := hb_FCreate( cFileName, FC_NORMAL, FO_CREAT + FO_TRUNC + FO_READWRITE + FO_EXCLUSIVE ) - IF fhnd != F_ERROR + IF ( fhnd := hb_FCreate( cFileName,, FO_CREAT + FO_TRUNC + FO_READWRITE + FO_EXCLUSIVE ) ) != F_ERROR FWrite( fhnd, _HBDOC_SIGNATURE ) - FWrite( fhnd, hb_ZCompress( hb_Serialize( aEntry ) ) ) + FWrite( fhnd, hb_Serialize( aEntry, HB_SERIALIZE_COMPRESS ) ) FClose( fhnd ) RETURN .T. ENDIF @@ -389,19 +390,16 @@ FUNCTION __hbdoc_LoadHBD( cFileName ) cFileName := hb_FNameExtSetDef( cFileName, _HBDOC_EXT ) ENDIF - fhnd := FOpen( cFileName, FO_READ ) - IF fhnd != F_ERROR + IF ( fhnd := FOpen( cFileName ) ) != F_ERROR - cBuffer := Space( _HBDOC_SIG_LEN ) - FRead( fhnd, @cBuffer, hb_BLen( cBuffer ) ) - IF cBuffer == _HBDOC_SIGNATURE + IF hb_FReadLen( fhnd, _HBDOC_SIG_LEN ) == _HBDOC_SIGNATURE cBuffer := Space( FSeek( fhnd, 0, FS_END ) - _HBDOC_SIG_LEN ) FSeek( fhnd, _HBDOC_SIG_LEN, FS_SET ) FRead( fhnd, @cBuffer, hb_BLen( cBuffer ) ) FClose( fhnd ) - aEntry := hb_Deserialize( hb_ZUncompress( cBuffer ) ) + aEntry := hb_Deserialize( cBuffer ) cBuffer := NIL IF ! HB_ISARRAY( aEntry ) diff --git a/src/rtl/hbdyn.c b/src/rtl/hbdyn.c index 967e5a724c..4a826c4114 100644 --- a/src/rtl/hbdyn.c +++ b/src/rtl/hbdyn.c @@ -923,10 +923,7 @@ void hb_dynCall( int iFuncFlags, void * pFunctionRaw, int iParams, int iFirst, i iRetTypeRaw = _RETTYPERAW_INT64; if( iParams ) - { - pArg = ( HB_DYNARG * ) hb_xgrab( iParams * sizeof( HB_DYNARG ) ); - memset( pArg, 0, iParams * sizeof( HB_DYNARG ) ); - } + pArg = ( HB_DYNARG * ) hb_xgrabz( iParams * sizeof( HB_DYNARG ) ); else pArg = NULL; @@ -1031,10 +1028,7 @@ void hb_dynCall( int iFuncFlags, void * pFunctionRaw, int iParams, int iFirst, i iRetTypeRaw = _RETTYPERAW_INT32; if( iParams ) - { - pArg = ( HB_DYNARG * ) hb_xgrab( iParams * sizeof( HB_DYNARG ) ); - memset( pArg, 0, iParams * sizeof( HB_DYNARG ) ); - } + pArg = ( HB_DYNARG * ) hb_xgrabz( iParams * sizeof( HB_DYNARG ) ); else pArg = NULL; diff --git a/src/rtl/hbfilehi.prg b/src/rtl/hbfilehi.prg index fce5044d0f..93093bfbb4 100644 --- a/src/rtl/hbfilehi.prg +++ b/src/rtl/hbfilehi.prg @@ -118,9 +118,7 @@ FUNCTION hb_PathJoin( cPathA, cPathR ) RETURN cPathR ENDIF - hb_FNameSplit( cPathA, @cDirA ) - - IF Empty( cDirA ) + IF Empty( cDirA := hb_FNameDir( cPathA ) ) RETURN cPathR ENDIF @@ -142,8 +140,6 @@ FUNCTION hb_PathRelativize( cPathBase, cPathTarget, lForceRelative ) RETURN "" ENDIF - hb_default( @lForceRelative, .T. ) - cPathBase := hb_PathJoin( hb_DirBase(), hb_DirSepAdd( cPathBase ) ) cPathTarget := hb_PathJoin( hb_DirBase(), cPathTarget ) @@ -181,7 +177,8 @@ FUNCTION hb_PathRelativize( cPathBase, cPathTarget, lForceRelative ) ENDIF /* Force to return relative paths even when base is different. */ - IF lForceRelative .AND. hb_DirExists( cPathBase + ( cTestTarget := s_FN_FromArray( aPathTarget, tmp, cTargetFileName, Replicate( ".." + hb_ps(), Len( aPathBase ) - tmp ) ) ) ) + IF hb_defaultValue( lForceRelative, .T. ) .AND. ; + hb_DirExists( cPathBase + ( cTestTarget := s_FN_FromArray( aPathTarget, tmp, cTargetFileName, Replicate( ".." + hb_ps(), Len( aPathBase ) - tmp ) ) ) ) RETURN cTestTarget ENDIF diff --git a/src/rtl/hbgtcore.c b/src/rtl/hbgtcore.c index dc56a6e9af..0c1f485fc8 100644 --- a/src/rtl/hbgtcore.c +++ b/src/rtl/hbgtcore.c @@ -134,10 +134,9 @@ static void * hb_gt_def_New( PHB_GT pGT ) pGT->screenBuffer = ( PHB_SCREENCELL ) hb_xgrab( sizeof( HB_SCREENCELL ) * nSize ); pGT->prevBuffer = - ( PHB_SCREENCELL ) hb_xgrab( sizeof( HB_SCREENCELL ) * nSize ); + ( PHB_SCREENCELL ) hb_xgrabz( sizeof( HB_SCREENCELL ) * nSize ); pGT->pLines = ( HB_BOOL * ) hb_xgrab( sizeof( HB_BOOL ) * pGT->iHeight ); - memset( pGT->prevBuffer, 0, sizeof( HB_SCREENCELL ) * nSize ); for( i = 0; i < pGT->iHeight; ++i ) pGT->pLines[ i ] = HB_TRUE; @@ -491,8 +490,7 @@ static void hb_gt_def_StringToColors( PHB_GT pGT, const char * szColorString, in if( *piColorCount == 0 ) { *piColorCount = HB_CLR_MAX_ + 1; - *pColorsPtr = ( int * ) hb_xgrab( *piColorCount * sizeof( int ) ); - memset( *pColorsPtr, 0, *piColorCount * sizeof( int ) ); + *pColorsPtr = ( int * ) hb_xgrabz( *piColorCount * sizeof( int ) ); } pColors = *pColorsPtr; @@ -1186,9 +1184,7 @@ static void hb_gt_def_WriteConW( PHB_GT pGT, const HB_WCHAR * szText, HB_SIZE nL if( bDisp || nIndex == nLength ) { if( iLen ) - { HB_GTSELF_WRITEW( pGT, szString, iLen ); - } iLen = 0; if( iRow > iMaxRow ) @@ -1243,19 +1239,21 @@ static void hb_gt_def_Save( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iR while( iTop <= iBottom ) { - int iColor; - HB_BYTE bAttr; - HB_USHORT usChar; int iCol; for( iCol = iLeft; iCol <= iRight; ++iCol ) { + int iColor; + HB_BYTE bAttr; + HB_USHORT usChar; + if( ! HB_GTSELF_GETCHAR( pGT, iTop, iCol, &iColor, &bAttr, &usChar ) ) { usChar = HB_GTSELF_GETCLEARCHAR( pGT ); iColor = HB_GTSELF_GETCLEARCOLOR( pGT ); bAttr = 0x00; } + if( pGT->fVgaCell ) { *pbyBuffer++ = hb_cdpGetChar( cdp, usChar ); @@ -1281,13 +1279,14 @@ static void hb_gt_def_Rest( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iR while( iTop <= iBottom ) { - int iColor; - HB_BYTE bAttr; - HB_USHORT usChar; int iCol; for( iCol = iLeft; iCol <= iRight; ++iCol ) { + int iColor; + HB_BYTE bAttr; + HB_USHORT usChar; + if( pGT->fVgaCell ) { usChar = hb_cdpGetU16( cdp, *pbyBuffer++ ); @@ -1312,13 +1311,14 @@ static void hb_gt_def_SetAttribute( PHB_GT pGT, int iTop, int iLeft, int iBottom { while( iTop <= iBottom ) { - int iColorOld; - HB_BYTE bAttr; - HB_USHORT usChar; int iCol; for( iCol = iLeft; iCol <= iRight; ++iCol ) { + int iColorOld; + HB_BYTE bAttr; + HB_USHORT usChar; + if( ! HB_GTSELF_GETCHAR( pGT, iTop, iCol, &iColorOld, &bAttr, &usChar ) ) break; if( ! HB_GTSELF_PUTCHAR( pGT, iTop, iCol, iColor, bAttr, usChar ) ) @@ -1553,7 +1553,7 @@ static void hb_gt_def_ScrollUp( PHB_GT pGT, int iRows, int iColor, HB_USHORT usC static void hb_gt_def_BoxW( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iRight, const HB_WCHAR * szFrame, int iColor ) { - int iMaxRow, iMaxCol, iRows, iCols, iFirst, i; + int iMaxRow, iMaxCol, i; if( iTop > iBottom ) { @@ -1597,11 +1597,12 @@ static void hb_gt_def_BoxW( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iR else { HB_BYTE bAttr = HB_GT_ATTR_BOX; - iRows = ( iBottom > iMaxRow ? iMaxRow + 1 : iBottom ) - - ( iTop < 0 ? -1 : iTop ) - 1; - iCols = ( iRight > iMaxCol ? iMaxCol + 1 : iRight ) - - ( iLeft < 0 ? -1 : iLeft ) - 1; - iFirst = iLeft < 0 ? 0 : iLeft + 1; + + int iRows = ( iBottom > iMaxRow ? iMaxRow + 1 : iBottom ) - + ( iTop < 0 ? -1 : iTop ) - 1; + int iCols = ( iRight > iMaxCol ? iMaxCol + 1 : iRight ) - + ( iLeft < 0 ? -1 : iLeft ) - 1; + int iFirst = iLeft < 0 ? 0 : iLeft + 1; if( iTop >= 0 ) { @@ -3646,21 +3647,21 @@ static char s_gtNameBuf[ HB_GT_NAME_MAX_ + 1 ]; /* NOTE: Must be in sync with gtsys.c */ #if defined( HB_GT_LIB ) - const char * hb_gt_szNameDefault = HB_GT_DRVNAME( HB_GT_LIB ); + static const char * s_szNameDefault = HB_GT_DRVNAME( HB_GT_LIB ); #elif defined( HB_OS_WIN_CE ) - const char * hb_gt_szNameDefault = "wvt"; + static const char * s_szNameDefault = "wvt"; #elif defined( HB_OS_WIN ) - const char * hb_gt_szNameDefault = "win"; + static const char * s_szNameDefault = "win"; #elif defined( HB_OS_DOS ) - const char * hb_gt_szNameDefault = "dos"; + static const char * s_szNameDefault = "dos"; #elif defined( HB_OS_OS2 ) - const char * hb_gt_szNameDefault = "os2"; + static const char * s_szNameDefault = "os2"; #elif defined( HB_OS_VXWORKS ) || defined( HB_OS_SYMBIAN ) - const char * hb_gt_szNameDefault = "std"; + static const char * s_szNameDefault = "std"; #elif defined( HB_OS_UNIX ) - const char * hb_gt_szNameDefault = "trm"; + static const char * s_szNameDefault = "trm"; #else - const char * hb_gt_szNameDefault = "std"; + static const char * s_szNameDefault = "std"; #endif static const HB_GT_INIT * s_gtInit[ HB_GT_MAX_ ]; @@ -3707,7 +3708,7 @@ static int hb_gt_FindEntry( const char * pszID ) void hb_gtSetDefault( const char * szGtName ) { hb_strncpy( s_gtNameBuf, szGtName, sizeof( s_gtNameBuf ) - 1 ); - hb_gt_szNameDefault = s_gtNameBuf; + s_szNameDefault = s_gtNameBuf; } HB_BOOL hb_gtRegister( const HB_GT_INIT * gtInit ) @@ -3735,8 +3736,7 @@ PHB_GT hb_gtLoad( const char * szGtName, PHB_GT pGT, PHB_GT_FUNCS pSuperTable ) if( pGT || pSuperTable ) hb_errInternal( 9996, "Harbour terminal (GT) initialization failure", NULL, NULL ); - pGT = ( PHB_GT_BASE ) hb_xgrab( sizeof( HB_GT_BASE ) ); - memset( pGT, 0, sizeof( HB_GT_BASE ) ); + pGT = ( PHB_GT_BASE ) hb_xgrabz( sizeof( HB_GT_BASE ) ); pGT->pFuncTable = ( PHB_GT_FUNCS ) hb_xgrab( sizeof( HB_GT_FUNCS ) ); memcpy( pGT->pFuncTable, &s_gtCoreFunc, sizeof( HB_GT_FUNCS ) ); pGT->iUsed++; @@ -3748,8 +3748,7 @@ PHB_GT hb_gtLoad( const char * szGtName, PHB_GT pGT, PHB_GT_FUNCS pSuperTable ) if( fNew ) { - pGT = ( PHB_GT_BASE ) hb_xgrab( sizeof( HB_GT_BASE ) ); - memset( pGT, 0, sizeof( HB_GT_BASE ) ); + pGT = ( PHB_GT_BASE ) hb_xgrabz( sizeof( HB_GT_BASE ) ); pGT->pFuncTable = ( PHB_GT_FUNCS ) hb_xgrab( sizeof( HB_GT_FUNCS ) ); memcpy( pGT->pFuncTable, &s_gtCoreFunc, sizeof( HB_GT_FUNCS ) ); pGT->iUsed++; @@ -3914,7 +3913,7 @@ void hb_gtStartupInit( void ) return; if( hb_gtTryInit( hb_gt_FindDefault(), HB_FALSE ) ) return; - if( hb_gtTryInit( hb_gt_szNameDefault, HB_FALSE ) ) + if( hb_gtTryInit( s_szNameDefault, HB_FALSE ) ) return; if( hb_dynsymFind( "HB_GT_NUL" ) ) /* GTNUL was explicitly REQUESTed */ diff --git a/src/rtl/hbi18n1.c b/src/rtl/hbi18n1.c index ff074d5513..aba1452931 100644 --- a/src/rtl/hbi18n1.c +++ b/src/rtl/hbi18n1.c @@ -317,8 +317,7 @@ static PHB_I18N_TRANS hb_i18n_new( void ) PHB_I18N_TRANS pI18N; PHB_ITEM pKey; - pI18N = ( PHB_I18N_TRANS ) memset( hb_xgrab( sizeof( HB_I18N_TRANS ) ), - 0, sizeof( HB_I18N_TRANS ) ); + pI18N = ( PHB_I18N_TRANS ) hb_xgrabz( sizeof( HB_I18N_TRANS ) ); hb_atomic_set( &pI18N->iUsers, 1 ); pI18N->table = hb_hashNew( hb_itemNew( NULL ) ); pI18N->context_table = hb_hashNew( hb_itemNew( NULL ) ); @@ -394,8 +393,7 @@ static PHB_I18N_TRANS hb_i18n_initialize( PHB_ITEM pTable ) if( pContext && pDefContext ) { - pI18N = ( PHB_I18N_TRANS ) memset( hb_xgrab( sizeof( HB_I18N_TRANS ) ), - 0, sizeof( HB_I18N_TRANS ) ); + pI18N = ( PHB_I18N_TRANS ) hb_xgrabz( sizeof( HB_I18N_TRANS ) ); hb_atomic_set( &pI18N->iUsers, 1 ); pI18N->table = pTable; pI18N->context_table = hb_itemNew( pContext ); diff --git a/src/rtl/hbi18n2.prg b/src/rtl/hbi18n2.prg index 7f00626687..acb7eae430 100644 --- a/src/rtl/hbi18n2.prg +++ b/src/rtl/hbi18n2.prg @@ -60,8 +60,6 @@ #define _I18N_EOL Chr( 10 ) #define _I18N_DELIM ( Chr( 0 ) + Chr( 3 ) + Chr( 0 ) ) -#define LEFTEQUAL( l, r ) ( Left( l, Len( r ) ) == r ) - STATIC FUNCTION __i18n_fileName( cFileName ) IF Set( _SET_DEFEXTENSIONS ) @@ -102,7 +100,7 @@ FUNCTION __i18n_potArrayLoad( cFile, /* @ */ cErrorMsg ) LOCAL hFile __i18n_fileName( @cFile ) - IF ( hFile := FOpen( cFile, FO_READ ) ) == F_ERROR + IF ( hFile := FOpen( cFile ) ) == F_ERROR cErrorMsg := hb_StrFormat( "cannot open file: %1$s", cFile ) RETURN NIL ENDIF @@ -140,8 +138,8 @@ FUNCTION __i18n_potArrayLoad( cFile, /* @ */ cErrorMsg ) IF lCont cValue += hb_eol() ELSE - IF LEFTEQUAL( cLine, "#" ) .AND. nMode == _I18N_NONE - IF LEFTEQUAL( cLine, "#:" ) // source code references + IF hb_LeftEq( cLine, "#" ) .AND. nMode == _I18N_NONE + IF hb_LeftEq( cLine, "#:" ) // source code references IF Empty( aItem[ _I18N_SOURCE ] ) aItem[ _I18N_SOURCE ] := "" ELSE @@ -149,7 +147,7 @@ FUNCTION __i18n_potArrayLoad( cFile, /* @ */ cErrorMsg ) ENDIF aItem[ _I18N_SOURCE ] += StrTran( LTrim( SubStr( cLine, 3 ) ), "\", "/" ) #if 0 - ELSEIF LEFTEQUAL( cLine, "#," ) // flags + ELSEIF hb_LeftEq( cLine, "#," ) // flags cLine := LTrim( SubStr( cLine, 3 ) ) IF cLine == "c-format" ELSE @@ -159,11 +157,11 @@ FUNCTION __i18n_potArrayLoad( cFile, /* @ */ cErrorMsg ) #endif ENDIF cLine := "" - ELSEIF LEFTEQUAL( cLine, "msgctxt " ) .AND. nMode == _I18N_NONE + ELSEIF hb_LeftEq( cLine, "msgctxt " ) .AND. nMode == _I18N_NONE cLine := LTrim( SubStr( cLine, 9 ) ) nMode := _I18N_CONTEXT cValue := NIL - ELSEIF LEFTEQUAL( cLine, "msgid " ) .AND. ; + ELSEIF hb_LeftEq( cLine, "msgid " ) .AND. ; ( nMode == _I18N_NONE .OR. nMode == _I18N_CONTEXT ) nIndex := 1 cLine := LTrim( SubStr( cLine, 7 ) ) @@ -176,7 +174,7 @@ FUNCTION __i18n_potArrayLoad( cFile, /* @ */ cErrorMsg ) ENDIF nMode := _I18N_MSGID cValue := NIL - ELSEIF LEFTEQUAL( cLine, "msgid_plural" ) .AND. nMode == _I18N_MSGID + ELSEIF hb_LeftEq( cLine, "msgid_plural" ) .AND. nMode == _I18N_MSGID nOldIndex := nIndex nIndex := 2 n := 13 @@ -202,7 +200,7 @@ FUNCTION __i18n_potArrayLoad( cFile, /* @ */ cErrorMsg ) AAdd( aItem[ _I18N_MSGID ], cValue ) cLine := LTrim( SubStr( cLine, n ) ) cValue := NIL - ELSEIF LEFTEQUAL( cLine, "msgstr " ) .AND. nMode == _I18N_MSGID + ELSEIF hb_LeftEq( cLine, "msgstr " ) .AND. nMode == _I18N_MSGID nIndex := 0 cLine := LTrim( SubStr( cLine, 8 ) ) nMode := _I18N_MSGSTR @@ -212,7 +210,7 @@ FUNCTION __i18n_potArrayLoad( cFile, /* @ */ cErrorMsg ) ENDIF AAdd( aItem[ _I18N_MSGID ], cValue ) cValue := NIL - ELSEIF LEFTEQUAL( cLine, "msgstr[" ) .AND. ; + ELSEIF hb_LeftEq( cLine, "msgstr[" ) .AND. ; ( nMode == _I18N_MSGID .OR. nMode == _I18N_MSGSTR ) nOldIndex := iif( nMode == _I18N_MSGSTR, nIndex, -1 ) nIndex := 0 @@ -298,7 +296,7 @@ STATIC FUNCTION __i18n_IsBOM_UTF8( cFileName ) LOCAL cBuffer LOCAL nLen - IF ( fhnd := FOpen( cFileName, FO_READ ) ) != F_ERROR + IF ( fhnd := FOpen( cFileName ) ) != F_ERROR nLen := hb_BLen( _UTF8_BOM ) cBuffer := Space( nLen ) FRead( fhnd, @cBuffer, nLen ) @@ -311,10 +309,7 @@ STATIC FUNCTION __i18n_IsBOM_UTF8( cFileName ) RETURN .F. FUNCTION __i18n_potArraySort( aTrans ) - - ASort( aTrans,,, {| item1, item2 | __i18n_ItemToStr( item1 ) < __i18n_ItemToStr( item2 ) } ) - - RETURN aTrans + RETURN ASort( aTrans,,, {| item1, item2 | __i18n_ItemToStr( item1 ) < __i18n_ItemToStr( item2 ) } ) STATIC FUNCTION __i18n_ItemToStr( item ) @@ -408,13 +403,16 @@ FUNCTION __i18n_potArraySave( cFile, aTrans, /* @ */ cErrorMsg, lVersionNo, lSou cPOT += cEol ENDIF FOR EACH msg IN aItem[ _I18N_MSGID ] - IF msg:__enumIndex() == 1 + SWITCH msg:__enumIndex() + CASE 1 cPOT += "msgid " - ELSEIF msg:__enumIndex() == 2 + EXIT + CASE 2 cPOT += "msgid_plural " - ELSE + EXIT + OTHERWISE cPOT += "msgid_plural" + hb_ntos( msg:__enumIndex() - 1 ) + " " - ENDIF + ENDSWITCH cPOT += __i18n_strEncode( msg ) cPOT += cEol NEXT @@ -458,10 +456,10 @@ FUNCTION __i18n_potArrayToHash( aTrans, lEmpty, hI18N ) FOR EACH aItem IN aTrans IF lEmpty .OR. ! Empty( aItem[ _I18N_MSGSTR, 1 ] ) cContext := aItem[ _I18N_CONTEXT ] - IF ! cContext $ hTrans - hTrans[ cContext ] := hContext := { => } - ELSE + IF cContext $ hTrans hContext := hTrans[ cContext ] + ELSE + hTrans[ cContext ] := hContext := { => } ENDIF IF Empty( aItem[ _I18N_MSGSTR, 1 ] ) IF ! aItem[ _I18N_MSGID, 1 ] $ hContext @@ -515,9 +513,7 @@ FUNCTION __i18n_hashJoin( hTrans, hTrans2 ) hContext := hTrans[ "CONTEXT" ] FOR EACH hCtx in hTrans2[ "CONTEXT" ] - IF ! hCtx:__enumKey() $ hContext - hContext[ hCtx:__enumKey() ] := hb_HClone( hCtx ) - ELSE + IF hCtx:__enumKey() $ hContext hDstCtx := hContext[ hCtx:__enumKey() ] FOR EACH xTrans IN hCtx IF ! Empty( xTrans ) .AND. ; @@ -527,6 +523,8 @@ FUNCTION __i18n_hashJoin( hTrans, hTrans2 ) AClone( xTrans ), xTrans ) ENDIF NEXT + ELSE + hContext[ hCtx:__enumKey() ] := hb_HClone( hCtx ) ENDIF NEXT @@ -547,10 +545,7 @@ FUNCTION __i18n_potArrayJoin( aTrans, aTrans2, hIndex ) FOR EACH aItem in aTrans2 ctx := aItem[ _I18N_CONTEXT ] + _I18N_DELIM + aItem[ _I18N_MSGID, 1 ] - IF ! ctx $ hIndex - AAdd( aTrans, AClone( aItem ) ) - hIndex[ ctx ] := Len( aTrans ) - ELSE + IF ctx $ hIndex aDest := aTrans[ hIndex[ ctx ] ] IF aItem[ _I18N_PLURAL ] aDest[ _I18N_PLURAL ] := .T. @@ -574,6 +569,9 @@ FUNCTION __i18n_potArrayJoin( aTrans, aTrans2, hIndex ) Empty( aDest[ _I18N_MSGSTR, 1 ] ) ) ) aDest[ _I18N_MSGSTR ] := AClone( aItem[ _I18N_MSGSTR ] ) ENDIF + ELSE + AAdd( aTrans, AClone( aItem ) ) + hIndex[ ctx ] := Len( aTrans ) ENDIF NEXT diff --git a/src/rtl/hbinet.c b/src/rtl/hbinet.c index 7353ebb1d3..50a4ae65f3 100644 --- a/src/rtl/hbinet.c +++ b/src/rtl/hbinet.c @@ -91,7 +91,7 @@ typedef struct HB_INET_CFUNC cleanFunc; } HB_SOCKET_STRUCT, * PHB_SOCKET_STRUCT; -#define HB_INET_BUFFER_LEN 256 +#define HB_INET_BUFFER_LEN 1500 #define HB_INET_INITIALIZE() if( s_initialize ) hb_inetAutoInit() @@ -610,7 +610,8 @@ HB_FUNC( HB_INETSETRCVBUFSIZE ) * TCP receive and send functions ***/ -static long s_inetRecv( PHB_SOCKET_STRUCT socket, char * buffer, long size, HB_BOOL readahead ) +static long s_inetRecv( PHB_SOCKET_STRUCT socket, char * buffer, long size, + HB_BOOL readahead, HB_MAXINT timeout ) { long rec = 0; @@ -622,10 +623,10 @@ static long s_inetRecv( PHB_SOCKET_STRUCT socket, char * buffer, long size, HB_B if( socket->recvFunc ) rec = socket->recvFunc( socket->stream, socket->sd, socket->buffer, socket->readahead, - socket->iTimeout ); + timeout ); else rec = hb_socketRecv( socket->sd, socket->buffer, socket->readahead, - 0, socket->iTimeout ); + 0, timeout ); socket->inbuffer = HB_MAX( 0, rec ); } else @@ -637,26 +638,22 @@ static long s_inetRecv( PHB_SOCKET_STRUCT socket, char * buffer, long size, HB_B memcpy( buffer, socket->buffer + socket->posbuffer, rec ); socket->posbuffer += rec; socket->inbuffer -= rec; - if( size > rec && ! readahead ) - { - if( socket->recvFunc ) - rec = socket->recvFunc( socket->stream, socket->sd, - buffer + rec, size - rec, - socket->iTimeout ); - else - size = hb_socketRecv( socket->sd, buffer + rec, size - rec, 0, 0 ); - - if( size > 0 ) - rec += size; - } } - else if( ! readahead ) + + if( size > rec && ! readahead ) { if( socket->recvFunc ) - rec = socket->recvFunc( socket->stream, socket->sd, - buffer, size, socket->iTimeout ); + size = socket->recvFunc( socket->stream, socket->sd, + buffer + rec, size - rec, + rec ? 0 : timeout ); else - rec = hb_socketRecv( socket->sd, buffer, size, 0, socket->iTimeout ); + size = hb_socketRecv( socket->sd, buffer + rec, size - rec, 0, + rec ? 0 : timeout ); + + if( rec == 0 ) + rec = size; + else if( size > 0 ) + rec += size; } return rec; @@ -701,7 +698,8 @@ static void s_inetRecvInternal( int iMode ) socket->iError = HB_INET_ERR_OK; do { - iLen = s_inetRecv( socket, buffer + iReceived, iMaxLen - iReceived, HB_FALSE ); + iLen = s_inetRecv( socket, buffer + iReceived, iMaxLen - iReceived, + HB_FALSE, socket->iTimeout ); if( iLen >= 0 ) { iReceived += iLen; @@ -795,7 +793,7 @@ static void s_inetRecvPattern( const char * const * patterns, int * patternsizes buffer = ( char * ) hb_xrealloc( buffer, iAllocated ); } - iLen = s_inetRecv( socket, &cChar, 1, HB_TRUE ); + iLen = s_inetRecv( socket, &cChar, 1, HB_TRUE, socket->iTimeout ); if( iLen == -1 && hb_socketGetError() == HB_SOCKET_ERR_TIMEOUT ) { iLen = -2; /* this signals timeout */ @@ -936,7 +934,6 @@ HB_FUNC( HB_INETRECVENDBLOCK ) HB_FUNC( HB_INETDATAREADY ) { PHB_SOCKET_STRUCT socket = HB_PARSOCKET( 1 ); - int iVal; if( socket == NULL || ( hb_pcount() >= 2 && ! HB_ISNUM( 2 ) ) ) hb_inetErrRT(); @@ -944,12 +941,29 @@ HB_FUNC( HB_INETDATAREADY ) hb_retni( -1 ); else { + int iVal; + socket->iError = HB_INET_ERR_OK; if( socket->inbuffer > 0 ) iVal = 1; else { - iVal = hb_socketSelectRead( socket->sd, hb_parnint( 2 ) /* default to 0 */ ); + HB_MAXINT timeout = hb_parnint( 2 ); /* default to 0 */ + + if( socket->readahead > 0 && socket->recvFunc ) + { + char buffer[ 1 ]; + + iVal = ( int ) s_inetRecv( socket, buffer, 1, HB_TRUE, timeout ); + if( iVal == 1 ) + { + socket->posbuffer--; + socket->inbuffer++; + } + } + else + iVal = hb_socketSelectRead( socket->sd, timeout ); + if( iVal < 0 ) hb_inetGetError( socket ); } diff --git a/src/rtl/hbini.prg b/src/rtl/hbini.prg index 32b56f9826..b8b34bccd1 100644 --- a/src/rtl/hbini.prg +++ b/src/rtl/hbini.prg @@ -91,9 +91,7 @@ FUNCTION hb_iniNew( lAutoMain ) LOCAL hIni := { => } - hb_default( @lAutoMain, .T. ) - - IF lAutoMain + IF hb_defaultValue( lAutoMain, .T. ) hIni[ "MAIN" ] := { => } ENDIF @@ -109,9 +107,7 @@ FUNCTION hb_iniReadStr( cData, lKeyCaseSens, cSplitters, lAutoMain ) /* Default case sensitiveness for keys */ hb_default( @lKeyCaseSens, .T. ) - hb_default( @cSplitters, "=" ) hb_default( @lAutoMain, .T. ) - hb_default( @cData, "" ) hb_HCaseMatch( hIni, lKeyCaseSens ) @@ -119,7 +115,8 @@ FUNCTION hb_iniReadStr( cData, lKeyCaseSens, cSplitters, lAutoMain ) hIni[ "MAIN" ] := { => } ENDIF - RETURN hb_iniStringLow( hIni, cData, lKeyCaseSens, cSplitters, lAutoMain ) + RETURN hb_iniStringLow( hIni, hb_defaultValue( cData, "" ), lKeyCaseSens, ; + hb_defaultValue( cSplitters, "=" ), lAutoMain ) STATIC FUNCTION hb_iniFileLow( cFileSpec ) @@ -168,32 +165,22 @@ STATIC FUNCTION hb_iniStringLow( hIni, cData, lKeyCaseSens, cSplitters, lAutoMai reSplitters := hb_regexComp( cSplitters ) /* Always begin with the MAIN section */ - IF lAutoMain - hCurrentSection := hIni[ "MAIN" ] - ELSE - hCurrentSection := hIni - ENDIF + hCurrentSection := iif( lAutoMain, hIni[ "MAIN" ], hIni ) cLine := "" DO WHILE Len( cData ) > 0 nLen := 2 - nLineEnd := At( Chr( 13 ) + Chr( 10 ), cData ) - IF nLineEnd == 0 - nLineEnd := At( Chr( 10 ) + Chr( 13 ), cData ) - IF nLineEnd == 0 - nLen := 1 - nLineEnd := At( Chr( 10 ), cData ) - IF nLineEnd == 0 - nLineEnd := At( Chr( 13 ), cData ) - IF nLineEnd == 0 - nLineEnd := Len( cData ) + 1 - ENDIF - ENDIF + IF ( nLineEnd := At( Chr( 13 ) + Chr( 10 ), cData ) ) == 0 .AND. ; + ( nLineEnd := At( Chr( 10 ) + Chr( 13 ), cData ) ) == 0 + nLen := 1 + IF ( nLineEnd := At( Chr( 10 ), cData ) ) == 0 .AND. ; + ( nLineEnd := At( Chr( 13 ), cData ) ) == 0 + nLineEnd := Len( cData ) + 1 ENDIF ENDIF /* Get the current line */ - cLine += AllTrim( SubStr( cData, 1, nLineEnd - 1 ) ) + cLine += AllTrim( Left( cData, nLineEnd - 1 ) ) /* remove current line */ cData := SubStr( cData, nLineEnd + nLen ) @@ -203,19 +190,17 @@ STATIC FUNCTION hb_iniStringLow( hIni, cData, lKeyCaseSens, cSplitters, lAutoMai ENDIF /* Sum up lines terminating with "||" ...*/ - IF Len( cLine ) > 3 .AND. SubStr( cLine, -3, 3 ) == " ||" + IF Len( cLine ) > 3 .AND. Right( cLine, 3 ) == " ||" - cLine := SubStr( cLine, 1, Len( cLine ) - 2 ) + cLine := hb_StrShrink( cLine, 2 ) /* ... but proceed if stream over */ IF Len( cData ) > 0 LOOP ENDIF - ENDIF /* remove eventual comments */ - aKeyVal := hb_regexSplit( reComment, cLine ) - IF ! Empty( aKeyVal ) + IF ! Empty( aKeyVal := hb_regexSplit( reComment, cLine ) ) cLine := AllTrim( aKeyVal[ 1 ] ) ENDIF @@ -225,8 +210,7 @@ STATIC FUNCTION hb_iniStringLow( hIni, cData, lKeyCaseSens, cSplitters, lAutoMai ENDIF /* Is it an "INCLUDE" statement ? */ - aKeyVal := hb_regex( reInclude, cLine ) - IF ! Empty( aKeyVal ) + IF ! Empty( aKeyVal := hb_regex( reInclude, cLine ) ) /* ignore void includes */ aKeyVal[ 2 ] := AllTrim( aKeyVal[ 2 ] ) IF Len( aKeyVal[ 2 ] ) == 0 @@ -238,8 +222,7 @@ STATIC FUNCTION hb_iniStringLow( hIni, cData, lKeyCaseSens, cSplitters, lAutoMai ENDIF /* Is it a NEW section? */ - aKeyVal := hb_regex( reSection, cLine ) - IF ! Empty( aKeyVal ) + IF ! Empty( aKeyVal := hb_regex( reSection, cLine ) ) cLine := AllTrim( aKeyVal[ 2 ] ) IF Len( cLine ) != 0 hCurrentSection := { => } @@ -253,8 +236,7 @@ STATIC FUNCTION hb_iniStringLow( hIni, cData, lKeyCaseSens, cSplitters, lAutoMai ENDIF /* Is it a valid key */ - aKeyVal := hb_regexSplit( reSplitters, cLine,,, 1 ) - IF Len( aKeyVal ) == 1 + IF Len( aKeyVal := hb_regexSplit( reSplitters, cLine,,, 1 ) ) == 1 /* TODO: Signal error */ cLine := "" LOOP @@ -279,7 +261,6 @@ FUNCTION hb_iniWrite( xFileName, hIni, cCommentBegin, cCommentEnd, lAutoMain ) cBuffer := hb_iniWriteStr( hIni, cCommentBegin, cCommentEnd, lAutoMain ) - // if cBuffer == NIL I have to stop here IF ! HB_ISSTRING( cBuffer ) RETURN .F. ENDIF @@ -335,14 +316,12 @@ FUNCTION hb_iniWriteStr( hIni, cCommentBegin, cCommentEnd, lAutoMain ) /* Write toplevel section */ IF lAutoMain /* When automain is on, write the main section */ - hb_HEval( hIni[ "MAIN" ], ; - {| cKey, xVal | cBuffer += hb_CStr( cKey ) + "=" + ; - hb_CStr( xVal ) + cNewLine } ) + hb_HEval( hIni[ "MAIN" ], {| cKey, xVal | ; + cBuffer += hb_CStr( cKey ) + "=" + hb_CStr( xVal ) + cNewLine } ) ELSE /* When automain is off, just write all the toplevel variables. */ - hb_HEval( hIni, {| cKey, xVal | iif( ! HB_ISHASH( xVal ), ; - cBuffer += hb_CStr( cKey ) + "=" + ; - hb_CStr( xVal ) + cNewLine, /* nothing */ ) } ) + hb_HEval( hIni, {| cKey, xVal | iif( HB_ISHASH( xVal ), /* nothing */, ; + cBuffer += hb_CStr( cKey ) + "=" + hb_CStr( xVal ) + cNewLine ) } ) ENDIF FOR EACH cSection IN hIni @@ -371,4 +350,4 @@ FUNCTION hb_iniWriteStr( hIni, cCommentBegin, cCommentEnd, lAutoMain ) cBuffer += cCommentEnd + cNewLine ENDIF - RETURN iif( ! Empty( cBuffer ), cBuffer, NIL ) + RETURN iif( Empty( cBuffer ), NIL, cBuffer ) diff --git a/src/rtl/hbjson.c b/src/rtl/hbjson.c index 6e2f82e9d9..d71c69b227 100644 --- a/src/rtl/hbjson.c +++ b/src/rtl/hbjson.c @@ -666,6 +666,8 @@ char * hb_jsonEncode( PHB_ITEM pValue, HB_SIZE * pnLen, HB_BOOL fHuman ) pCtx->iEolLen = ( int ) strlen( pCtx->szEol ); _hb_jsonEncode( pValue, pCtx, 0, HB_FALSE ); + if( fHuman ) + _hb_jsonCtxAdd( pCtx, pCtx->szEol, pCtx->iEolLen ); nLen = pCtx->pHead - pCtx->pBuffer; szRet = ( char * ) hb_xrealloc( pCtx->pBuffer, nLen + 1 ); diff --git a/src/rtl/hblpp.c b/src/rtl/hblpp.c index 0f85ccc997..77591bfc8f 100644 --- a/src/rtl/hblpp.c +++ b/src/rtl/hblpp.c @@ -57,8 +57,7 @@ PHB_LPP hb_lppCreate( HB_SOCKET sd ) { PHB_LPP pSocket; - pSocket = ( PHB_LPP ) hb_xgrab( sizeof( HB_LPP ) ); - memset( pSocket, 0, sizeof( HB_LPP ) ); + pSocket = ( PHB_LPP ) hb_xgrabz( sizeof( HB_LPP ) ); pSocket->sd = sd; pSocket->nLimit = 1024; return pSocket; diff --git a/src/rtl/hblpphb.c b/src/rtl/hblpphb.c index 54b805f06c..3c5b3e40fb 100644 --- a/src/rtl/hblpphb.c +++ b/src/rtl/hblpphb.c @@ -97,12 +97,12 @@ hLPP := hb_lppCreate( hSocket ) DO WHILE ! ( lI := hb_lppSend( hLPP, cData, nTimeout ) ) .AND. ; hb_lppError( hLPP ) == HB_SOCKET_ERR_TIMEOUT ) - // draw progressbar using hb_lppSendLen( hLPP ) + // draw progressbar using hb_lppSendLen( hLPP ) ENDDO - IF lI // or hb_lppError( hLPP ) == 0 - // Sent OK + IF lI // or hb_lppError( hLPP ) == 0 + // Sent OK ELSE - // error + // error ENDIF hb_hsctpDestroy( hLPP ) @@ -110,21 +110,18 @@ // recv sample DO WHILE ! ( lI := hb_lppRecv( hLPP, @cData, nTimeout ) ) .AND. ; hb_lppError( hLPP ) == HB_SOCKET_ERR_TIMEOUT ) - // draw progressbar using hb_lppRecvLen( hLPP ) + // draw progressbar using hb_lppRecvLen( hLPP ) ENDDO IF lI - // Rcvd OK, data in cData + // Rcvd OK, data in cData + ELSEIF hb_lppError( hLPP ) == 0 + // remote side shutdown connection ELSE - IF hb_lppError( hLPP ) == 0 - // remote side shutdown connection - ELSE - // error - ENDIF + // error ENDIF */ - #include "hbapiitm.h" #include "hbapierr.h" #include "hblpp.h" diff --git a/src/rtl/hbregexc.c b/src/rtl/hbregexc.c index 296056f5dc..801f41dedc 100644 --- a/src/rtl/hbregexc.c +++ b/src/rtl/hbregexc.c @@ -102,7 +102,7 @@ HB_BOOL hb_regexIs( PHB_ITEM pItem ) return hb_itemGetPtrGC( pItem, &s_gcRegexFuncs ) != NULL; } -PHB_REGEX hb_regexCompile( const char *szRegEx, HB_SIZE nLen, int iFlags ) +PHB_REGEX hb_regexCompile( const char * szRegEx, HB_SIZE nLen, int iFlags ) { PHB_REGEX pRegEx; @@ -164,7 +164,7 @@ void hb_regexFree( PHB_REGEX pRegEx ) } } -HB_BOOL hb_regexMatch( PHB_REGEX pRegEx, const char *szString, HB_SIZE nLen, HB_BOOL fFull ) +HB_BOOL hb_regexMatch( PHB_REGEX pRegEx, const char * szString, HB_SIZE nLen, HB_BOOL fFull ) { HB_REGMATCH aMatches[ HB_REGMATCH_SIZE( 1 ) ]; HB_BOOL fMatch; diff --git a/src/rtl/hbsocket.c b/src/rtl/hbsocket.c index e08d2cf191..8b59cf99a3 100644 --- a/src/rtl/hbsocket.c +++ b/src/rtl/hbsocket.c @@ -597,7 +597,7 @@ long hb_socketRecvFrom( HB_SOCKET sd, void * data, long len, int flags, void ** HB_SYMBOL_UNUSED( timeout ); hb_socketSetRawError( HB_SOCKET_ERR_INVALIDHANDLE ); *pSockAddr = NULL; - *puiLen = 0; + *puiSockLen = 0; return -1; } diff --git a/src/rtl/hbzlibgz.c b/src/rtl/hbzlibgz.c index adcfb2be86..5625b18113 100644 --- a/src/rtl/hbzlibgz.c +++ b/src/rtl/hbzlibgz.c @@ -54,6 +54,12 @@ #include +#if !defined( HB_NO_GZLIB ) && \ + defined( HB_OS_WIN_CE ) && defined( _MSC_VER ) && ZLIB_VERNUM >= 0x1240 + #define HB_NO_GZLIB +#endif + +#ifndef HB_NO_GZLIB /* GZIP stream destructor */ static HB_GARBAGE_FUNC( hb_gz_Destructor ) { @@ -84,12 +90,14 @@ static gzFile hb_gzParam( int iParam ) hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); return NULL; } +#endif /* * hb_gzOpen( , ) => or NIL on Error */ HB_FUNC( HB_GZOPEN ) { +#ifndef HB_NO_GZLIB const char * cFile = hb_parc( 1 ), * cMode = hb_parc( 2 ); if( cFile && cMode ) @@ -118,6 +126,7 @@ HB_FUNC( HB_GZOPEN ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -125,6 +134,7 @@ HB_FUNC( HB_GZOPEN ) */ HB_FUNC( HB_GZDOPEN ) { +#ifndef HB_NO_GZLIB const char * cMode = hb_parc( 2 ); if( HB_ISNUM( 1 ) && cMode ) @@ -145,6 +155,7 @@ HB_FUNC( HB_GZDOPEN ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -152,6 +163,7 @@ HB_FUNC( HB_GZDOPEN ) */ HB_FUNC( HB_GZCLOSE ) { +#ifndef HB_NO_GZLIB gzFile * gzHolder = ( gzFile * ) hb_parptrGC( &s_gcGZFuncs, 1 ); if( gzHolder ) @@ -169,6 +181,7 @@ HB_FUNC( HB_GZCLOSE ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -176,6 +189,7 @@ HB_FUNC( HB_GZCLOSE ) */ HB_FUNC( HB_GZSETPARAMS ) { +#ifndef HB_NO_GZLIB if( HB_ISNUM( 2 ) && HB_ISNUM( 3 ) ) { gzFile gz = hb_gzParam( 1 ); @@ -184,6 +198,7 @@ HB_FUNC( HB_GZSETPARAMS ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -191,6 +206,7 @@ HB_FUNC( HB_GZSETPARAMS ) */ HB_FUNC( HB_GZREAD ) { +#ifndef HB_NO_GZLIB PHB_ITEM pBuffer = HB_ISBYREF( 2 ) ? hb_param( 2, HB_IT_STRING ) : NULL; char * szBuffer; HB_SIZE nLen; @@ -218,6 +234,7 @@ HB_FUNC( HB_GZREAD ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -225,6 +242,7 @@ HB_FUNC( HB_GZREAD ) */ HB_FUNC( HB_GZWRITE ) { +#ifndef HB_NO_GZLIB const char * szData = hb_parc( 2 ); if( szData ) @@ -245,6 +263,7 @@ HB_FUNC( HB_GZWRITE ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -252,6 +271,7 @@ HB_FUNC( HB_GZWRITE ) */ HB_FUNC( HB_GZGETS ) { +#ifndef HB_NO_GZLIB int iLen = hb_parni( 2 ); if( iLen > 0 ) @@ -278,6 +298,7 @@ HB_FUNC( HB_GZGETS ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -285,6 +306,7 @@ HB_FUNC( HB_GZGETS ) */ HB_FUNC( HB_GZPUTS ) { +#ifndef HB_NO_GZLIB const char * szData = hb_parc( 2 ); if( szData ) @@ -303,6 +325,7 @@ HB_FUNC( HB_GZPUTS ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -310,6 +333,7 @@ HB_FUNC( HB_GZPUTS ) */ HB_FUNC( HB_GZPUTC ) { +#ifndef HB_NO_GZLIB if( HB_ISNUM( 2 ) ) { gzFile gz = hb_gzParam( 1 ); @@ -326,6 +350,7 @@ HB_FUNC( HB_GZPUTC ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -333,6 +358,7 @@ HB_FUNC( HB_GZPUTC ) */ HB_FUNC( HB_GZGETC ) { +#ifndef HB_NO_GZLIB gzFile gz = hb_gzParam( 1 ); if( gz ) @@ -345,6 +371,7 @@ HB_FUNC( HB_GZGETC ) hb_retni( iResult ); } +#endif } /* @@ -352,6 +379,7 @@ HB_FUNC( HB_GZGETC ) */ HB_FUNC( HB_GZUNGETC ) { +#ifndef HB_NO_GZLIB if( HB_ISNUM( 1 ) ) { #if ZLIB_VERNUM >= 0x1202 @@ -370,6 +398,7 @@ HB_FUNC( HB_GZUNGETC ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -377,6 +406,7 @@ HB_FUNC( HB_GZUNGETC ) */ HB_FUNC( HB_GZFLUSH ) { +#ifndef HB_NO_GZLIB gzFile gz = hb_gzParam( 1 ); if( gz ) @@ -389,6 +419,7 @@ HB_FUNC( HB_GZFLUSH ) hb_retni( iResult ); } +#endif } /* @@ -396,6 +427,7 @@ HB_FUNC( HB_GZFLUSH ) */ HB_FUNC( HB_GZSEEK ) { +#ifndef HB_NO_GZLIB if( HB_ISNUM( 2 ) ) { gzFile gz = hb_gzParam( 1 ); @@ -413,6 +445,7 @@ HB_FUNC( HB_GZSEEK ) } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +#endif } /* @@ -420,6 +453,7 @@ HB_FUNC( HB_GZSEEK ) */ HB_FUNC( HB_GZREWIND ) { +#ifndef HB_NO_GZLIB gzFile gz = hb_gzParam( 1 ); if( gz ) @@ -432,6 +466,7 @@ HB_FUNC( HB_GZREWIND ) hb_retni( iResult ); } +#endif } /* @@ -439,6 +474,7 @@ HB_FUNC( HB_GZREWIND ) */ HB_FUNC( HB_GZTELL ) { +#ifndef HB_NO_GZLIB gzFile gz = hb_gzParam( 1 ); if( gz ) @@ -451,6 +487,7 @@ HB_FUNC( HB_GZTELL ) hb_retnint( nResult ); } +#endif } /* @@ -458,6 +495,7 @@ HB_FUNC( HB_GZTELL ) */ HB_FUNC( HB_GZEOF ) { +#ifndef HB_NO_GZLIB gzFile gz = hb_gzParam( 1 ); if( gz ) @@ -470,6 +508,7 @@ HB_FUNC( HB_GZEOF ) hb_retl( iResult != 0 ); } +#endif } /* @@ -477,6 +516,7 @@ HB_FUNC( HB_GZEOF ) */ HB_FUNC( HB_GZDIRECT ) { +#ifndef HB_NO_GZLIB #if ZLIB_VERNUM >= 0x1230 gzFile gz = hb_gzParam( 1 ); if( gz ) @@ -490,6 +530,7 @@ HB_FUNC( HB_GZDIRECT ) hb_retl( iResult != 0 ); } #endif +#endif } /* @@ -497,6 +538,7 @@ HB_FUNC( HB_GZDIRECT ) */ HB_FUNC( HB_GZERROR ) { +#ifndef HB_NO_GZLIB gzFile gz = hb_gzParam( 1 ); if( gz ) @@ -506,6 +548,7 @@ HB_FUNC( HB_GZERROR ) hb_retc( gzerror( gz, &iErrNum ) ); hb_storni( iErrNum, 2 ); } +#endif } /* @@ -513,9 +556,11 @@ HB_FUNC( HB_GZERROR ) */ HB_FUNC( HB_GZCLEARERR ) { +#ifndef HB_NO_GZLIB #if ZLIB_VERNUM >= 0x1202 gzFile gz = hb_gzParam( 1 ); if( gz ) gzclearerr( gz ); #endif +#endif } diff --git a/src/rtl/hbznet.c b/src/rtl/hbznet.c index e6943be0fc..f308d6095f 100644 --- a/src/rtl/hbznet.c +++ b/src/rtl/hbznet.c @@ -112,9 +112,7 @@ void hb_znetClose( PHB_ZNETSTREAM pStream ) */ PHB_ZNETSTREAM hb_znetOpen( int level, int strategy ) { - PHB_ZNETSTREAM pStream = ( PHB_ZNETSTREAM ) hb_xgrab( sizeof( HB_ZNETSTREAM ) ); - - memset( pStream, 0, sizeof( HB_ZNETSTREAM ) ); + PHB_ZNETSTREAM pStream = ( PHB_ZNETSTREAM ) hb_xgrabz( sizeof( HB_ZNETSTREAM ) ); if( level != Z_DEFAULT_COMPRESSION && !( level >= Z_NO_COMPRESSION && level <= Z_BEST_COMPRESSION ) ) diff --git a/src/rtl/iousr.c b/src/rtl/iousr.c index 5a22789f34..a1c8e102cc 100644 --- a/src/rtl/iousr.c +++ b/src/rtl/iousr.c @@ -141,8 +141,7 @@ static PHB_IOUSR s_iousrAddNew( const char * pszPrefix ) { if( s_iCount == 0 ) hb_vmAtQuit( s_iousrFreeAll, NULL ); - pIO = ( PHB_IOUSR ) hb_xgrab( sizeof( HB_IOUSR ) ); - memset( pIO, 0, sizeof( HB_IOUSR ) ); + pIO = ( PHB_IOUSR ) hb_xgrabz( sizeof( HB_IOUSR ) ); pIO->prefix = hb_strdup( pszPrefix ); pIO->prefix_len = ( int ) strlen( pszPrefix ); s_ioUsrs[ s_iCount++ ] = pIO; diff --git a/src/rtl/memvarhb.prg b/src/rtl/memvarhb.prg index 84523a6943..48de985bb8 100644 --- a/src/rtl/memvarhb.prg +++ b/src/rtl/memvarhb.prg @@ -86,7 +86,6 @@ FUNCTION hb_mvSave( cFileName, cMask, lIncludeMask ) LOCAL tmp LOCAL oError - LOCAL xRecover LOCAL nRetries IF HB_ISSTRING( cFileName ) @@ -96,7 +95,7 @@ FUNCTION hb_mvSave( cFileName, cMask, lIncludeMask ) ENDIF IF ! HB_ISSTRING( cMask ) .OR. ; - Empty( cMask ) .OR. Left( cMask, 1 ) == "*" + Empty( cMask ) .OR. hb_LeftEq( cMask, "*" ) cMask := "*" ENDIF @@ -119,8 +118,7 @@ FUNCTION hb_mvSave( cFileName, cMask, lIncludeMask ) nRetries := 0 DO WHILE .T. - fhnd := hb_FCreate( cFileName, FC_NORMAL, FO_CREAT + FO_TRUNC + FO_READWRITE + FO_EXCLUSIVE ) - IF fhnd == F_ERROR + IF ( fhnd := hb_FCreate( cFileName, FC_NORMAL, FO_CREAT + FO_TRUNC + FO_READWRITE + FO_EXCLUSIVE ) ) == F_ERROR oError := ErrorNew() oError:severity := ES_ERROR @@ -133,8 +131,7 @@ FUNCTION hb_mvSave( cFileName, cMask, lIncludeMask ) oError:osCode := FError() oError:tries := ++nRetries - xRecover := Eval( ErrorBlock(), oError ) - IF HB_ISLOGICAL( xRecover ) .AND. xRecover + IF hb_defaultValue( Eval( ErrorBlock(), oError ), .F. ) LOOP ENDIF ENDIF @@ -176,14 +173,11 @@ FUNCTION hb_mvRestore( cFileName, lAdditive, cMask, lIncludeMask ) LOCAL fhnd LOCAL oError - LOCAL xRecover LOCAL nRetries IF HB_ISSTRING( cFileName ) - hb_default( @lAdditive, .T. ) - - IF ! lAdditive + IF ! hb_defaultValue( lAdditive, .T. ) __mvClear() ENDIF @@ -192,7 +186,7 @@ FUNCTION hb_mvRestore( cFileName, lAdditive, cMask, lIncludeMask ) ENDIF IF ! HB_ISSTRING( cFileName ) .OR. ; - Empty( cMask ) .OR. Left( cMask, 1 ) == "*" + Empty( cMask ) .OR. hb_LeftEq( cMask, "*" ) cMask := "*" ENDIF @@ -200,8 +194,8 @@ FUNCTION hb_mvRestore( cFileName, lAdditive, cMask, lIncludeMask ) nRetries := 0 DO WHILE .T. - fhnd := FOpen( cFileName, FO_READ ) - IF fhnd == F_ERROR + + IF ( fhnd := FOpen( cFileName ) ) == F_ERROR oError := ErrorNew() oError:severity := ES_ERROR @@ -214,8 +208,7 @@ FUNCTION hb_mvRestore( cFileName, lAdditive, cMask, lIncludeMask ) oError:osCode := FError() oError:tries := ++nRetries - xRecover := Eval( ErrorBlock(), oError ) - IF HB_ISLOGICAL( xRecover ) .AND. xRecover + IF hb_defaultValue( Eval( ErrorBlock(), oError ), .F. ) LOOP ENDIF ENDIF @@ -228,9 +221,7 @@ FUNCTION hb_mvRestore( cFileName, lAdditive, cMask, lIncludeMask ) xValue := NIL - cBuffer := Space( _HBMEM_SIG_LEN ) - FRead( fhnd, @cBuffer, Len( cBuffer ) ) - IF cBuffer == _HBMEM_SIGNATURE + IF hb_FReadLen( fhnd, _HBMEM_SIG_LEN ) == _HBMEM_SIGNATURE cBuffer := Space( FSeek( fhnd, 0, FS_END ) - _HBMEM_SIG_LEN ) FSeek( fhnd, _HBMEM_SIG_LEN, FS_SET ) diff --git a/src/rtl/menusys.prg b/src/rtl/menusys.prg index dea407418d..40fd676337 100644 --- a/src/rtl/menusys.prg +++ b/src/rtl/menusys.prg @@ -74,7 +74,7 @@ FUNCTION ShowMsg( aMsg, lMode ) * ShortCut processing for initial Get or Menu Item. * ***/ -FUNCTION IsShortcut( oMenu, nKey, nID ) +FUNCTION IsShortcut( oMenu, nKey, /* @ */ nID ) LOCAL nItem LOCAL nTotal @@ -135,7 +135,7 @@ FUNCTION IsShortcut( oMenu, nKey, nID ) * Current if more than one uses the same ShortCut. * ***/ -FUNCTION IsQuick( oMenu, nKey, nID ) +FUNCTION IsQuick( oMenu, nKey, /* @ */ nID ) LOCAL nItem LOCAL nTotal diff --git a/src/rtl/menuto.prg b/src/rtl/menuto.prg index f0e1883fc7..da56848c49 100644 --- a/src/rtl/menuto.prg +++ b/src/rtl/menuto.prg @@ -14,6 +14,12 @@ #include "hbmemvar.ch" #include "setcurs.ch" +#define _ITM_ROW 1 +#define _ITM_COL 2 +#define _ITM_PROMPT 3 +#define _ITM_MSG 4 +#define _ITM_COLOR 5 + THREAD STATIC t_aLevel := {} THREAD STATIC t_nPointer := 1 @@ -31,7 +37,12 @@ FUNCTION __AtPrompt( nRow, nCol, cPrompt, cMsg, cColor ) ENDDO // add to the static array - AAdd( t_aLevel[ t_nPointer ], { nRow, nCol, cPrompt, cMsg, cColor } ) + AAdd( t_aLevel[ t_nPointer ], ; + { nRow, ; // _ITM_ROW + nCol, ; // _ITM_COL + cPrompt, ; // _ITM_PROMPT + cMsg, ; // _ITM_MSG + cColor } ) // _ITM_COLOR // put this prompt on the screen right now DispOutAt( nRow, nCol, cPrompt, cColor ) @@ -123,9 +134,9 @@ FUNCTION __MenuTo( bBlock, cVariable ) DispOutAt( nMsgRow, nMsgCol, Space( Len( xMsg ) ) ) ENDIF - xMsg := t_aLevel[ nPointer - 1, n, 4 ] + xMsg := t_aLevel[ nPointer - 1 ][ n ][ _ITM_MSG ] - // Code Block messages ( yes, they are documented! ) + // Codeblock messages (yes, they are documented!) IF HB_ISEVALITEM( xMsg ) xMsg := Eval( xMsg ) ENDIF @@ -143,7 +154,7 @@ FUNCTION __MenuTo( bBlock, cVariable ) // save the current row q := n - cColor := t_aLevel[ t_nPointer - 1, n, 5 ] + cColor := t_aLevel[ t_nPointer - 1 ][ n ][ _ITM_COLOR ] cColorNormal := hb_ColorIndex( iif( Empty( hb_ColorIndex( cColor, CLR_STANDARD ) ), SetColor(), cColor ), CLR_STANDARD ) IF Set( _SET_INTENSITY ) cColorSelect := hb_ColorIndex( iif( Empty( hb_ColorIndex( cColor, CLR_ENHANCED ) ), SetColor(), cColor ), CLR_ENHANCED ) @@ -158,9 +169,9 @@ FUNCTION __MenuTo( bBlock, cVariable ) #endif // highlight the prompt DispOutAt( ; - t_aLevel[ nPointer - 1, n, 1 ], ; - t_aLevel[ nPointer - 1, n, 2 ], ; - t_aLevel[ nPointer - 1, n, 3 ], ; + t_aLevel[ nPointer - 1 ][ n ][ _ITM_ROW ], ; + t_aLevel[ nPointer - 1 ][ n ][ _ITM_COL ], ; + t_aLevel[ nPointer - 1 ][ n ][ _ITM_PROMPT ], ; cColorSelect ) #ifndef HB_CLP_STRICT ENDIF @@ -241,7 +252,7 @@ FUNCTION __MenuTo( bBlock, cVariable ) // did user hit a hot key? IF Len( cKey := Upper( hb_keyChar( nKey ) ) ) > 0 FOR y := 1 TO nArrLen - IF Upper( Left( LTrim( t_aLevel[ nPointer - 1, y, 3 ] ), Len( cKey ) ) ) == cKey + IF hb_LeftEqI( LTrim( t_aLevel[ nPointer - 1 ][ y ][ _ITM_PROMPT ] ), cKey ) n := y lExit := .T. EXIT @@ -257,9 +268,9 @@ FUNCTION __MenuTo( bBlock, cVariable ) nHiLited := 0 #endif DispOutAt( ; - t_aLevel[ nPointer - 1, q, 1 ], ; - t_aLevel[ nPointer - 1, q, 2 ], ; - t_aLevel[ nPointer - 1, q, 3 ], ; + t_aLevel[ nPointer - 1 ][ q ][ _ITM_ROW ], ; + t_aLevel[ nPointer - 1 ][ q ][ _ITM_COL ], ; + t_aLevel[ nPointer - 1 ][ q ][ _ITM_PROMPT ], ; cColorNormal ) #ifndef HB_CLP_STRICT ENDIF @@ -294,9 +305,9 @@ STATIC FUNCTION HitTest( aMenu, nMRow, nMCol ) LOCAL aMenuItem FOR EACH aMenuItem IN aMenu - IF nMRow == aMenuItem[ 1 ] .AND. ; - nMCol >= aMenuItem[ 2 ] .AND. ; - nMCol < aMenuItem[ 2 ] + Len( aMenuItem[ 3 ] ) + IF nMRow == aMenuItem[ _ITM_ROW ] .AND. ; + nMCol >= aMenuItem[ _ITM_COL ] .AND. ; + nMCol < aMenuItem[ _ITM_COL ] + Len( aMenuItem[ _ITM_PROMPT ] ) RETURN aMenuItem:__enumIndex() ENDIF diff --git a/src/rtl/objfunc.prg b/src/rtl/objfunc.prg index a5ef1128eb..591cffcad9 100644 --- a/src/rtl/objfunc.prg +++ b/src/rtl/objfunc.prg @@ -68,7 +68,7 @@ FUNCTION __objHasData( oObject, cSymbol ) IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ENDIF RETURN ; @@ -78,7 +78,7 @@ FUNCTION __objHasData( oObject, cSymbol ) FUNCTION __objHasMethod( oObject, cSymbol ) IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ENDIF RETURN ; @@ -93,24 +93,23 @@ FUNCTION __objGetMsgList( oObject, lDataMethod, nClassType ) LOCAL nFirst IF ! HB_ISOBJECT( oObject ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ENDIF hb_default( @lDataMethod, .T. ) - hb_default( @nClasstype, HB_MSGLISTALL ) - aInfo := oObject:ClassSel( nClassType ) + aInfo := oObject:ClassSel( hb_defaultValue( nClasstype, HB_MSGLISTALL ) ) aData := {} - nFirst := AScan( aInfo, {| n | Left( n, 1 ) == "_" } ) + nFirst := AScan( aInfo, {| n | hb_LeftEq( n, "_" ) } ) FOR EACH cName IN aInfo /* Set functions begin with a leading underscore */ - IF !( Left( cName, 1 ) == "_" ) + IF ! hb_LeftEq( cName, "_" ) /* Find position of matching set function in array with all symbols */ /* If found: DATA, else: METHOD */ - IF ( AScan( aInfo, {| tmp | tmp == ( "_" + cName ) }, nFirst ) != 0 ) == lDataMethod + IF ( AScan( aInfo, {| tmp | tmp == ( "_" + cName ) }, nFirst ) > 0 ) == lDataMethod AAdd( aData, cName ) ENDIF ENDIF @@ -121,32 +120,25 @@ FUNCTION __objGetMsgList( oObject, lDataMethod, nClassType ) FUNCTION __objGetMethodList( oObject ) IF ! HB_ISOBJECT( oObject ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ENDIF RETURN __objGetMsgList( oObject, .F. ) FUNCTION __objGetValueList( oObject, aExcept ) - LOCAL aDataSymbol - LOCAL nLen LOCAL aData LOCAL cSymbol - LOCAL n IF ! HB_ISOBJECT( oObject ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ENDIF hb_default( @aExcept, {} ) - aDataSymbol := __objGetMsgList( oObject ) - nLen := Len( aDataSymbol ) - aData := {} - - FOR n := 1 TO nLen - cSymbol := aDataSymbol[ n ] - IF AScan( aExcept, {| tmp | tmp == cSymbol } ) == 0 + aData := {} + FOR EACH cSymbol IN __objGetMsgList( oObject ) + IF hb_AScan( aExcept, cSymbol,,, .T. ) == 0 AAdd( aData, { cSymbol, __objSendMsg( oObject, cSymbol ) } ) ENDIF NEXT @@ -155,10 +147,10 @@ FUNCTION __objGetValueList( oObject, aExcept ) FUNCTION __objSetValueList( oObject, aData ) - IF ! HB_ISOBJECT( oObject ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) - ELSE + IF HB_ISOBJECT( oObject ) AEval( aData, {| aItem | __objSendMsg( oObject, "_" + aItem[ HB_OO_DATA_SYMBOL ], aItem[ HB_OO_DATA_VALUE ] ) } ) + ELSE + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ENDIF RETURN oObject @@ -166,9 +158,9 @@ FUNCTION __objSetValueList( oObject, aData ) FUNCTION __objAddMethod( oObject, cSymbol, nFuncPtr ) IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol ) .OR. ! HB_ISSYMBOL( nFuncPtr ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ELSEIF ! __objHasMsg( oObject, cSymbol ) - __clsAddMsg( oObject:ClassH, cSymbol, nFuncPtr, HB_OO_MSG_METHOD, NIL, 1 ) + __clsAddMsg( oObject:ClassH, cSymbol, nFuncPtr, HB_OO_MSG_METHOD, , 1 ) ENDIF RETURN oObject @@ -176,9 +168,9 @@ FUNCTION __objAddMethod( oObject, cSymbol, nFuncPtr ) FUNCTION __objAddInline( oObject, cSymbol, bInline ) IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ELSEIF ! __objHasMsg( oObject, cSymbol ) - __clsAddMsg( oObject:ClassH, cSymbol, bInline, HB_OO_MSG_INLINE, NIL, 1 ) + __clsAddMsg( oObject:ClassH, cSymbol, bInline, HB_OO_MSG_INLINE, , 1 ) ENDIF RETURN oObject @@ -188,12 +180,12 @@ FUNCTION __objAddData( oObject, cSymbol ) LOCAL nSeq, hClass IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ELSEIF ! __objHasMsg( oObject, cSymbol ) .AND. ! __objHasMsg( oObject, "_" + cSymbol ) hClass := oObject:ClassH nSeq := __cls_IncData( hClass ) // Allocate new Seq# - __clsAddMsg( hClass, cSymbol, nSeq, HB_OO_MSG_ACCESS, NIL, 1 ) - __clsAddMsg( hClass, "_" + cSymbol, nSeq, HB_OO_MSG_ASSIGN, NIL, 1 ) + __clsAddMsg( hClass, cSymbol, nSeq, HB_OO_MSG_ACCESS, , 1 ) + __clsAddMsg( hClass, "_" + cSymbol, nSeq, HB_OO_MSG_ASSIGN, , 1 ) ENDIF RETURN oObject @@ -201,7 +193,7 @@ FUNCTION __objAddData( oObject, cSymbol ) FUNCTION __objModMethod( oObject, cSymbol, nFuncPtr ) IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol ) .OR. ! HB_ISSYMBOL( nFuncPtr ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ELSEIF __objHasMethod( oObject, cSymbol ) __clsModMsg( oObject:ClassH, cSymbol, nFuncPtr ) ENDIF @@ -211,7 +203,7 @@ FUNCTION __objModMethod( oObject, cSymbol, nFuncPtr ) FUNCTION __objModInline( oObject, cSymbol, bInline ) IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol ) .OR. ! HB_ISBLOCK( bInline ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ELSEIF __objHasMethod( oObject, cSymbol ) __clsModMsg( oObject:ClassH, cSymbol, bInline ) ENDIF @@ -221,7 +213,7 @@ FUNCTION __objModInline( oObject, cSymbol, bInline ) FUNCTION __objDelMethod( oObject, cSymbol ) IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ELSEIF __objHasMethod( oObject, cSymbol ) __clsDelMsg( oObject:ClassH, cSymbol ) ENDIF @@ -234,7 +226,7 @@ FUNCTION __objDelInline( oObject, cSymbol ) FUNCTION __objDelData( oObject, cSymbol ) IF ! HB_ISOBJECT( oObject ) .OR. ! HB_ISSTRING( cSymbol ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ELSEIF __objHasData( oObject, cSymbol ) __clsDelMsg( oObject:ClassH, cSymbol ) __clsDelMsg( oObject:ClassH, "_" + cSymbol ) @@ -248,7 +240,7 @@ FUNCTION __objDerivedFrom( oObject, xSuper ) LOCAL cClassName IF ! HB_ISOBJECT( oObject ) - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ENDIF IF HB_ISOBJECT( xSuper ) @@ -256,7 +248,7 @@ FUNCTION __objDerivedFrom( oObject, xSuper ) ELSEIF HB_ISSTRING( xSuper ) cClassName := hb_asciiUpper( xSuper ) ELSE - __errRT_BASE( EG_ARG, 3101, NIL, ProcName( 0 ) ) + __errRT_BASE( EG_ARG, 3101, , ProcName( 0 ) ) ENDIF RETURN __clsParent( oObject:ClassH, cClassName ) diff --git a/src/rtl/padc.c b/src/rtl/padc.c index f1b6d9efe3..0f493d7e9d 100644 --- a/src/rtl/padc.c +++ b/src/rtl/padc.c @@ -79,9 +79,6 @@ static const char * s_hb_padGet( PHB_CODEPAGE cdp, HB_SIZE * pnPad ) /* centre-pads a date, number, or string with spaces or supplied character */ HB_FUNC( PADC ) { - HB_SIZE nSize; - HB_BOOL bFreeReq; - char * szText; HB_ISIZ nLen = hb_parns( 2 ); if( nLen > 0 ) @@ -96,7 +93,10 @@ HB_FUNC( PADC ) } else { - szText = hb_itemPadConv( pItem, &nSize, &bFreeReq ); + HB_SIZE nSize; + HB_BOOL bFreeReq; + char * szText = hb_itemPadConv( pItem, &nSize, &bFreeReq ); + if( szText ) { if( HB_CDP_ISCHARIDX( cdp ) ) diff --git a/src/rtl/padl.c b/src/rtl/padl.c index cf4e252be5..6f02eff423 100644 --- a/src/rtl/padl.c +++ b/src/rtl/padl.c @@ -79,9 +79,6 @@ static const char * s_hb_padGet( PHB_CODEPAGE cdp, HB_SIZE * pnPad ) /* left-pads a date, number, or string with spaces or supplied character */ HB_FUNC( PADL ) { - HB_SIZE nSize; - HB_BOOL bFreeReq; - char * szText; HB_ISIZ nLen = hb_parns( 2 ); if( nLen > 0 ) @@ -96,7 +93,10 @@ HB_FUNC( PADL ) } else { - szText = hb_itemPadConv( pItem, &nSize, &bFreeReq ); + HB_SIZE nSize; + HB_BOOL bFreeReq; + char * szText = hb_itemPadConv( pItem, &nSize, &bFreeReq ); + if( szText ) { if( HB_CDP_ISCHARIDX( cdp ) ) diff --git a/src/rtl/padr.c b/src/rtl/padr.c index 58810ad29d..7764f790ef 100644 --- a/src/rtl/padr.c +++ b/src/rtl/padr.c @@ -79,9 +79,6 @@ static const char * s_hb_padGet( PHB_CODEPAGE cdp, HB_SIZE * pnPad ) /* right-pads a date, number, or string with spaces or supplied character */ HB_FUNC( PADR ) { - HB_SIZE nSize; - HB_BOOL bFreeReq; - char * szText; HB_ISIZ nLen = hb_parns( 2 ); if( nLen > 0 ) @@ -96,7 +93,10 @@ HB_FUNC( PADR ) } else { - szText = hb_itemPadConv( pItem, &nSize, &bFreeReq ); + HB_SIZE nSize; + HB_BOOL bFreeReq; + char * szText = hb_itemPadConv( pItem, &nSize, &bFreeReq ); + if( szText ) { if( HB_CDP_ISCHARIDX( cdp ) ) diff --git a/src/rtl/philes.c b/src/rtl/philes.c index 88999c5650..6b7db4ea88 100644 --- a/src/rtl/philes.c +++ b/src/rtl/philes.c @@ -260,6 +260,27 @@ HB_FUNC( FREADSTR ) hb_fsSetFError( uiError ); } +HB_FUNC( HB_FREADLEN ) +{ + HB_ERRCODE uiError = 0; + HB_SIZE nToRead = hb_parns( 2 ); + + if( nToRead > 0 && HB_ISNUM( 1 ) ) + { + HB_FHANDLE fhnd = hb_numToHandle( hb_parnint( 1 ) ); + char * buffer = ( char * ) hb_xgrab( nToRead + 1 ); + HB_SIZE nRead; + + nRead = hb_fsReadLarge( fhnd, buffer, nToRead ); + uiError = hb_fsError(); + + hb_retclen_buffer( buffer, nRead ); + } + else + hb_retc_null(); + hb_fsSetFError( uiError ); +} + /* NOTE: This function should not return the leading and trailing */ /* (back)slashes. [vszakats] */ diff --git a/src/rtl/philes53.c b/src/rtl/philes53.c index 36de52c974..5b7ae8b145 100644 --- a/src/rtl/philes53.c +++ b/src/rtl/philes53.c @@ -49,7 +49,7 @@ #include "hbapi.h" #include "hbapifs.h" -#ifdef HB_COMPAT_C53 +#if defined( HB_COMPAT_C53 ) && defined( HB_CLP_UNDOC ) /* NOTE: Clipper 5.3 undocumented */ diff --git a/src/rtl/profiler.prg b/src/rtl/profiler.prg index d81e0b999a..7c2bdfefc8 100644 --- a/src/rtl/profiler.prg +++ b/src/rtl/profiler.prg @@ -81,8 +81,8 @@ /* TODO: * - * o Handle any TODO: items in the source. - * o Document the classes and the class hierarchy. + * - Handle any TODO: items in the source. + * - Document the classes and the class hierarchy. * */ @@ -241,9 +241,7 @@ METHOD reset() CLASS HBProfile METHOD ignoreSymbol( cSymbol ) CLASS HBProfile - LOCAL cProfPrefix := "HBPROFILE" - - RETURN Left( cSymbol, Len( cProfPrefix ) ) == cProfPrefix .OR. cSymbol == "__SETPROFILER" + RETURN hb_LeftEq( cSymbol, "HBPROFILE" ) .OR. cSymbol == "__SETPROFILER" METHOD gatherFunctions() CLASS HBProfile @@ -452,7 +450,7 @@ METHOD gatherOPCodes() CLASS HBProfileLowLevel // Loop over all the harbour OP codes. Note that they start at 0. FOR nOP := 0 TO nMax - 1 // If we're not ignoring this opcode. - IF ! ::ignoreSymbol( cName := "OPCODE( " + PadL( nOP, 3 ) + " )" ) + IF ! ::ignoreSymbol( cName := "OPCODE( " + Str( nOP, 3 ) + " )" ) // Add it to the profile. AAdd( ::aProfile, HBProfileOpcode():new( cName, __opGetPrf( nOP ) ) ) ENDIF @@ -517,8 +515,8 @@ METHOD line( oEntity ) CLASS HBProfileReport RETURN { ; PadR( oEntity:cName, 35 ) + " " + ; PadR( oEntity:describe(), 8 ) + " " + ; - PadL( oEntity:nCalls, 10 ) + " " + ; - PadL( oEntity:nTicks, 11 ) + " " + ; + Str( oEntity:nCalls, 10 ) + " " + ; + Str( oEntity:nTicks, 11 ) + " " + ; Str( oEntity:nSeconds, 11, 2 ) } METHOD emitLine( oEntity ) CLASS HBProfileReport @@ -570,9 +568,7 @@ METHOD generate( bFilter, cFile ) CLASS HBProfileReportToFile LOCAL lProfile := __SetProfiler( .F. ) - hb_default( @cFile, "hbprof.txt" ) - - IF ( ::hFile := FCreate( cFile ) ) != F_ERROR + IF ( ::hFile := FCreate( hb_defaultValue( cFile, "hbprof.txt" ) ) ) != F_ERROR ::super:generate( bFilter ) FClose( ::hFile ) ELSE diff --git a/src/rtl/radiobtn.prg b/src/rtl/radiobtn.prg index 2434210777..6ccb00427c 100644 --- a/src/rtl/radiobtn.prg +++ b/src/rtl/radiobtn.prg @@ -325,11 +325,9 @@ METHOD New( nRow, nCol, cCaption, cData ) CLASS RadioButtn RETURN NIL ENDIF - hb_default( @cCaption, "" ) - ::nCapRow := nRow ::nCapCol := nCol + 3 + 1 - ::cCaption := cCaption + ::cCaption := hb_defaultValue( cCaption, "" ) ::nCol := nCol ::nRow := nRow ::cData := cData /* NOTE: Every type is allowed here to be fully compatible */ diff --git a/src/rtl/radiogrp.prg b/src/rtl/radiogrp.prg index 39c1d0e9c9..89b1eaac47 100644 --- a/src/rtl/radiogrp.prg +++ b/src/rtl/radiogrp.prg @@ -71,7 +71,7 @@ CREATE CLASS RadioGroup FUNCTION HBRadioGroup METHOD addItem( oRadioButton ) METHOD delItem( nPos ) METHOD display() - METHOD getAccel( xValue ) + METHOD getAccel( xKey ) METHOD getItem( nPos ) METHOD hitTest( nMRow, nMCol ) METHOD insItem( nPos, oRadioButton ) @@ -180,7 +180,7 @@ METHOD display() CLASS RadioGroup IF ! Empty( cCaption := ::cCaption ) - IF !( ( nPos := At( "&", cCaption ) ) == 0 ) + IF ( nPos := At( "&", cCaption ) ) > 0 IF nPos == Len( cCaption ) nPos := 0 ELSE @@ -190,7 +190,7 @@ METHOD display() CLASS RadioGroup hb_DispOutAt( ::nCapRow, ::nCapCol, cCaption, hb_ColorIndex( ::cColorSpec, 1 ) ) - IF nPos != 0 + IF nPos > 0 hb_DispOutAt( ::nCapRow, ::nCapCol + nPos - 1, SubStr( cCaption, nPos, 1 ), hb_ColorIndex( ::cColorSpec, 2 ) ) ENDIF @@ -202,21 +202,21 @@ METHOD display() CLASS RadioGroup RETURN Self -METHOD getAccel( xValue ) CLASS RadioGroup +METHOD getAccel( xKey ) CLASS RadioGroup - LOCAL cValue + LOCAL cKey - IF HB_ISSTRING( xValue ) - cValue := xValue - ELSEIF HB_ISNUMERIC( xValue ) - cValue := hb_keyChar( xValue ) + IF HB_ISSTRING( xKey ) + cKey := xKey + ELSEIF HB_ISNUMERIC( xKey ) + cKey := hb_keyChar( xKey ) ELSE RETURN 0 ENDIF - IF Len( cValue ) > 0 - cValue := Lower( cValue ) - RETURN AScan( ::aItems, {| o | o:isAccel( cValue ) } ) + IF Len( cKey ) > 0 + cKey := Lower( cKey ) + RETURN AScan( ::aItems, {| o | o:isAccel( cKey ) } ) ENDIF RETURN 0 @@ -264,8 +264,7 @@ METHOD hitTest( nMRow, nMCol ) CLASS RadioGroup nLen := Len( ::cCaption ) - IF ( nPos := At( "&", ::cCaption ) ) == 0 - ELSEIF nPos < nLen + IF ( nPos := At( "&", ::cCaption ) ) > 0 .AND. nPos < nLen nLen-- ENDIF @@ -401,11 +400,11 @@ METHOD prevItem() CLASS RadioGroup METHOD select( xValue ) CLASS RadioGroup - LOCAL cType := ValType( xValue ) LOCAL nPos LOCAL nLen - IF cType == "C" + SWITCH ValType( xValue ) + CASE "C" nLen := ::nItemCount FOR nPos := 1 TO nLen @@ -424,16 +423,20 @@ METHOD select( xValue ) CLASS RadioGroup IF nPos > nLen ::xBuffer := xValue ENDIF + EXIT - ELSEIF cType == "N" .AND. xValue >= 1 .AND. xValue <= ::nItemCount + CASE "N" - IF ::xBuffer == NIL - ::xBuffer := 0 + IF xValue >= 1 .AND. xValue <= ::nItemCount + IF ::xBuffer == NIL + ::xBuffer := 0 + ENDIF + + ::changeButton( ::nValue, xValue ) ENDIF + EXIT - ::changeButton( ::nValue, xValue ) - - ENDIF + ENDSWITCH RETURN Self @@ -636,9 +639,9 @@ FUNCTION RadioGroup( nTop, nLeft, nBottom, nRight ) FUNCTION _RADIOGRP_( nTop, nLeft, nBottom, nRight, xValue, aItems, cCaption, cMessage, cColorSpec, bFBlock ) - LOCAL o := RadioGroup( nTop, nLeft, nBottom, nRight ) + LOCAL o - IF o != NIL + IF ( o := RadioGroup( nTop, nLeft, nBottom, nRight ) ) != NIL o:caption := cCaption o:message := cMessage diff --git a/src/rtl/rtlshort.c b/src/rtl/rtlshort.c new file mode 100644 index 0000000000..3ecaf725b1 --- /dev/null +++ b/src/rtl/rtlshort.c @@ -0,0 +1,80 @@ +/* + * Harbour Project source code: + * Short (10 chars long) version of some functions for Cl*pper compatibility + * + * Copyright 2014 Viktor Szakats (vszakats.net/harbour) + * www - http://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, or (at your option) + * any later version. + * + * 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 software; see the file COPYING.txt. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries 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 Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbapi.h" + +HB_FUNC_TRANSLATE( ACCELERATO, ACCELERATOR ) +HB_FUNC_TRANSLATE( COLORSELEC, COLORSELECT ) +HB_FUNC_TRANSLATE( ERASEGETMS, ERASEGETMSG ) +HB_FUNC_TRANSLATE( FIELDWBLOC, FIELDWBLOCK ) +HB_FUNC_TRANSLATE( GETAPPLYKE, GETAPPLYKEY ) +HB_FUNC_TRANSLATE( GETDOSETKE, GETDOSETKEY ) +HB_FUNC_TRANSLATE( GETPOSTVAL, GETPOSTVALIDATE ) +HB_FUNC_TRANSLATE( GETPREVALI, GETPREVALIDATE ) +HB_FUNC_TRANSLATE( GUIAPPLYKE, GUIAPPLYKEY ) +HB_FUNC_TRANSLATE( GUIPOSTVAL, GUIPOSTVALIDATE ) +HB_FUNC_TRANSLATE( GUIPREVALI, GUIPREVALIDATE ) +HB_FUNC_TRANSLATE( MEMVARBLOC, MEMVARBLOCK ) +HB_FUNC_TRANSLATE( READUPDATE, READUPDATED ) +HB_FUNC_TRANSLATE( SETTYPEAHE, SETTYPEAHEAD ) +HB_FUNC_TRANSLATE( TBCOLUMNNE, TBCOLUMNNEW ) +HB_FUNC_TRANSLATE( _NATSORTVE, _NATSORTVER ) +HB_FUNC_TRANSLATE( __ACCEPTST, __ACCEPTSTR ) +HB_FUNC_TRANSLATE( __CAPLENGT, __CAPLENGTH ) +HB_FUNC_TRANSLATE( __CAPMETRI, __CAPMETRICS ) +HB_FUNC_TRANSLATE( __LABELFOR, __LABELFORM ) +HB_FUNC_TRANSLATE( __MXRELEAS, __MXRELEASE ) +HB_FUNC_TRANSLATE( __NONOALER, __NONOALERT ) +HB_FUNC_TRANSLATE( __QUITCANC, __QUITCANCEL ) +HB_FUNC_TRANSLATE( __REPORTFO, __REPORTFORM ) +HB_FUNC_TRANSLATE( __SETCENTU, __SETCENTURY ) +HB_FUNC_TRANSLATE( __SETFORMA, __SETFORMAT ) +HB_FUNC_TRANSLATE( __SETFUNCT, __SETFUNCTION ) +HB_FUNC_TRANSLATE( __TEXTREST, __TEXTRESTORE ) +HB_FUNC_TRANSLATE( __XRESTSCR, __XRESTSCREEN ) +HB_FUNC_TRANSLATE( __XSAVESCR, __XSAVESCREEN ) diff --git a/src/rtl/setcolor.c b/src/rtl/setcolor.c index 500fb03224..ec2978f8c6 100644 --- a/src/rtl/setcolor.c +++ b/src/rtl/setcolor.c @@ -105,7 +105,7 @@ HB_FUNC( HB_NTOCOLOR ) colors[ 0 ] = hb_parni( 1 ); - hb_gtColorsToString( colors, 1, szColorString, 10 ); + hb_gtColorsToString( colors, HB_SIZEOFARRAY( colors ), szColorString, sizeof( szColorString ) ); hb_retc( szColorString ); } diff --git a/src/rtl/strclear.c b/src/rtl/strclear.c index dabf82d9c9..1206f1e0f3 100644 --- a/src/rtl/strclear.c +++ b/src/rtl/strclear.c @@ -64,8 +64,12 @@ HB_FUNC( HB_STRCLEAR ) HB_SIZE nSize; pszPtr = hb_itemGetCPtr( pItem ); - hb_itemGetWriteCL( pItem, &pBuffer, &nSize ); - memset( pBuffer, '\0', nSize + 1 ); - hb_retl( pszPtr == pBuffer ); + if( hb_itemGetWriteCL( pItem, &pBuffer, &nSize ) ) + { + memset( pBuffer, '\0', nSize + 1 ); + hb_retl( pszPtr == pBuffer ); + } + else + hb_retl( HB_FALSE ); } } diff --git a/src/rtl/strutf8.c b/src/rtl/strutf8.c new file mode 100644 index 0000000000..3761cc6ebc --- /dev/null +++ b/src/rtl/strutf8.c @@ -0,0 +1,89 @@ +/* + * Harbour Project source code: + * hb_StrIsUTF8() function + * + * Copyright 2014 Przemyslaw Czerpak + * www - http://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, or (at your option) + * any later version. + * + * 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 software; see the file COPYING.txt. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries 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 Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbapi.h" + +HB_FUNC( HB_STRISUTF8 ) +{ + HB_SIZE nLen = hb_parclen( 1 ); + HB_BOOL fUtf8 = HB_FALSE; + + if( nLen > 0 ) + { + const char * szText = hb_parc( 1 ); + + do + { + char c = *szText++; + + if( c & 0x80 ) + { + int i = 0; + + while( ( c <<= 1 ) & 0x80 ) + ++i; + if( i == 0 || ( HB_SIZE ) i >= nLen ) + break; + nLen -= i; + do + if( ( *szText++ & 0xC0 ) != 0x80 ) + break; + while( --i ); + if( i != 0 ) + break; + + fUtf8 = HB_TRUE; + } + } + while( --nLen ); + if( nLen != 0 ) + fUtf8 = HB_FALSE; + } + + hb_retl( fUtf8 ); +} diff --git a/src/rtl/tbcolumn.prg b/src/rtl/tbcolumn.prg index a987eb903c..31561dd64f 100644 --- a/src/rtl/tbcolumn.prg +++ b/src/rtl/tbcolumn.prg @@ -57,7 +57,7 @@ CREATE CLASS TBColumn EXPORTED: - /* === Start of CA-Cl*pper compatible TBColumn instance area === */ + /* --- Start of CA-Cl*pper compatible TBColumn instance area --- */ VAR cargo /* 01. User-definable variable */ VAR nWidth PROTECTED /* 02. */ VAR bBlock PROTECTED /* 03. */ @@ -74,7 +74,7 @@ CREATE CLASS TBColumn VAR bPostBlock PROTECTED /* 13. */ VAR aSetStyle PROTECTED INIT { .F., .F., .F. } /* 14. TBC_READWRITE, TBC_MOVE, TBC_SIZE */ #endif - /* === End of CA-Cl*pper compatible TBColumn instance area === */ + /* --- End of CA-Cl*pper compatible TBColumn instance area --- */ METHOD block( bBlock ) SETGET /* Code block to retrieve data for the column */ METHOD colorBlock( bColorBlock ) SETGET /* Code block that determines color of data items */ @@ -190,7 +190,7 @@ METHOD setStyle( nStyle, lNewValue ) CLASS TBColumn /* NOTE: CA-Cl*pper 5.3 does no checks on the value of nStyle, so in case it is zero or non-numeric, a regular RTE will happen. [vszakats] */ - IF nStyle > Len( ::aSetStyle ) .AND. nStyle <= 4096 /* Some reasonable limit for maximum number of styles */ + IF nStyle > Len( ::aSetStyle ) .AND. nStyle <= 4096 /* Some reasonable limit for maximum number of styles */ ASize( ::aSetStyle, nStyle ) ENDIF @@ -204,8 +204,8 @@ METHOD setStyle( nStyle, lNewValue ) CLASS TBColumn METHOD New( cHeading, bBlock ) CLASS TBColumn - ::cHeading := cHeading /* NOTE: CA-Cl*pper will allow any types for the heading here. [vszakats] */ - ::bBlock := bBlock /* NOTE: CA-Cl*pper allows any types here. [vszakats] */ + ::cHeading := cHeading /* NOTE: CA-Cl*pper allows any type here. [vszakats] */ + ::bBlock := bBlock /* NOTE: CA-Cl*pper allows any type here. [vszakats] */ RETURN Self diff --git a/src/rtl/tbrowse.prg b/src/rtl/tbrowse.prg index d86f36d525..65e0d7b781 100644 --- a/src/rtl/tbrowse.prg +++ b/src/rtl/tbrowse.prg @@ -1510,7 +1510,7 @@ STATIC FUNCTION _DECODE_FH( cName, nHeight, nWidth ) * does not calculate it as separator */ IF Right( cName, 1 ) == _TBR_CHR_LINEDELIMITER - cName := Left( cName, Len( cName ) - 1 ) + cName := hb_StrShrink( cName ) ENDIF nHeight := hb_tokenCount( cName, _TBR_CHR_LINEDELIMITER ) FOR i := 1 TO nHeight @@ -2625,21 +2625,21 @@ METHOD setKey( nKey, bBlock ) CLASS TBrowse IF ::keys == NIL ::keys := { ; - { K_DOWN , {| o | o:Down() , TBR_CONTINUE } },; - { K_END , {| o | o:End() , TBR_CONTINUE } },; - { K_CTRL_PGDN , {| o | o:GoBottom(), TBR_CONTINUE } },; - { K_CTRL_PGUP , {| o | o:GoTop() , TBR_CONTINUE } },; - { K_HOME , {| o | o:Home() , TBR_CONTINUE } },; - { K_LEFT , {| o | o:Left() , TBR_CONTINUE } },; - { K_PGDN , {| o | o:PageDown(), TBR_CONTINUE } },; - { K_PGUP , {| o | o:PageUp() , TBR_CONTINUE } },; - { K_CTRL_END , {| o | o:PanEnd() , TBR_CONTINUE } },; - { K_CTRL_HOME , {| o | o:PanHome() , TBR_CONTINUE } },; - { K_CTRL_LEFT , {| o | o:PanLeft() , TBR_CONTINUE } },; - { K_CTRL_RIGHT , {| o | o:PanRight(), TBR_CONTINUE } },; - { K_RIGHT , {| o | o:Right() , TBR_CONTINUE } },; - { K_UP , {| o | o:Up() , TBR_CONTINUE } },; - { K_ESC , {| | TBR_EXIT } },; + { K_DOWN , {| o | o:Down() , TBR_CONTINUE } }, ; + { K_END , {| o | o:End() , TBR_CONTINUE } }, ; + { K_CTRL_PGDN , {| o | o:GoBottom(), TBR_CONTINUE } }, ; + { K_CTRL_PGUP , {| o | o:GoTop() , TBR_CONTINUE } }, ; + { K_HOME , {| o | o:Home() , TBR_CONTINUE } }, ; + { K_LEFT , {| o | o:Left() , TBR_CONTINUE } }, ; + { K_PGDN , {| o | o:PageDown(), TBR_CONTINUE } }, ; + { K_PGUP , {| o | o:PageUp() , TBR_CONTINUE } }, ; + { K_CTRL_END , {| o | o:PanEnd() , TBR_CONTINUE } }, ; + { K_CTRL_HOME , {| o | o:PanHome() , TBR_CONTINUE } }, ; + { K_CTRL_LEFT , {| o | o:PanLeft() , TBR_CONTINUE } }, ; + { K_CTRL_RIGHT , {| o | o:PanRight(), TBR_CONTINUE } }, ; + { K_RIGHT , {| o | o:Right() , TBR_CONTINUE } }, ; + { K_UP , {| o | o:Up() , TBR_CONTINUE } }, ; + { K_ESC , {| | TBR_EXIT } }, ; { K_LBUTTONDOWN, {| o | TBMouse( o, MRow(), MCol() ) } } } #ifndef HB_CLP_STRICT diff --git a/src/rtl/tclass.prg b/src/rtl/tclass.prg index 84f4fc2b7c..3d6adad77e 100644 --- a/src/rtl/tclass.prg +++ b/src/rtl/tclass.prg @@ -170,8 +170,6 @@ STATIC FUNCTION New( cClassName, xSuper, sClassFunc, lModuleFriendly ) LOCAL Self := QSelf() LOCAL i - hb_default( @lModuleFriendly, .F. ) - IF HB_ISSYMBOL( xSuper ) ::asSuper := { xSuper } ELSEIF Empty( xSuper ) @@ -191,7 +189,7 @@ STATIC FUNCTION New( cClassName, xSuper, sClassFunc, lModuleFriendly ) ::cName := hb_asciiUpper( cClassName ) ::sClassFunc := sClassFunc - ::lModFriendly := lModuleFriendly + ::lModFriendly := hb_defaultValue( lModuleFriendly, .F. ) ::aDatas := {} ::aMethods := {} @@ -214,30 +212,26 @@ STATIC PROCEDURE Create( /* MetaClass */ ) LOCAL ahSuper := {} #if 0 - Self:Class := MetaClass + ::Class := MetaClass #endif FOR EACH n IN ::asSuper - hClass := __clsInstSuper( n ) /* Super handle available */ - IF hClass != 0 + IF ( hClass := __clsInstSuper( n ) ) != 0 /* Super handle available */ AAdd( ahSuper, hClass ) ENDIF NEXT - hClass := __clsNew( ::cName, Len( ::aDatas ), ahSuper, ::sClassFunc, ::lModFriendly ) - ::hClass := hClass + ::hClass := hClass := __clsNew( ::cName, Len( ::aDatas ), ahSuper, ::sClassFunc, ::lModFriendly ) - IF ! Empty( ahSuper ) - IF ahSuper[ 1 ] != 0 - __clsAddMsg( hClass, "SUPER" , 0, HB_OO_MSG_SUPER, ahSuper[ 1 ], HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_NONVIRTUAL ) - __clsAddMsg( hClass, "__SUPER", 0, HB_OO_MSG_SUPER, ahSuper[ 1 ], HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_NONVIRTUAL ) - ENDIF + IF ! Empty( ahSuper ) .AND. ahSuper[ 1 ] != 0 + __clsAddMsg( hClass, "SUPER" , 0, HB_OO_MSG_SUPER, ahSuper[ 1 ], HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_NONVIRTUAL ) + __clsAddMsg( hClass, "__SUPER", 0, HB_OO_MSG_SUPER, ahSuper[ 1 ], HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_NONVIRTUAL ) ENDIF __clsAddMsg( hClass, "REALCLASS", 0, HB_OO_MSG_REALCLASS, 0, HB_OO_CLSTP_EXPORTED ) #if 0 - // We will work here on the MetaClass object to add the Class Method - // as needed + /* We will work here on the MetaClass object to add the Class Method + as needed */ FOR EACH n IN ::aClsMethods // do it NEXT @@ -253,21 +247,21 @@ STATIC PROCEDURE Create( /* MetaClass */ ) NEXT FOR EACH n IN ::aMethods - __clsAddMsg( hClass, n[ HB_OO_MTHD_SYMBOL ], n[ HB_OO_MTHD_PFUNCTION ],; - HB_OO_MSG_METHOD, NIL, n[ HB_OO_MTHD_SCOPE ] ) + __clsAddMsg( hClass, n[ HB_OO_MTHD_SYMBOL ], n[ HB_OO_MTHD_PFUNCTION ], ; + HB_OO_MSG_METHOD, , n[ HB_OO_MTHD_SCOPE ] ) NEXT nClassBegin := __cls_CntClsData( hClass ) FOR EACH n IN ::aClsDatas - __clsAddMsg( hClass, n[ HB_OO_CLSD_SYMBOL ] , n:__enumIndex() + nClassBegin,; + __clsAddMsg( hClass, n[ HB_OO_CLSD_SYMBOL ] , n:__enumIndex() + nClassBegin, ; HB_OO_MSG_CLSACCESS, n[ HB_OO_CLSD_VALUE ], n[ HB_OO_CLSD_SCOPE ] ) - __clsAddMsg( hClass, "_" + n[ HB_OO_CLSD_SYMBOL ], n:__enumIndex() + nClassBegin,; + __clsAddMsg( hClass, "_" + n[ HB_OO_CLSD_SYMBOL ], n:__enumIndex() + nClassBegin, ; HB_OO_MSG_CLSASSIGN, , n[ HB_OO_CLSD_SCOPE ] ) NEXT FOR EACH n IN ::aInlines - __clsAddMsg( hClass, n[ HB_OO_MTHD_SYMBOL ], n[ HB_OO_MTHD_PFUNCTION ],; - HB_OO_MSG_INLINE, NIL, n[ HB_OO_MTHD_SCOPE ] ) + __clsAddMsg( hClass, n[ HB_OO_MTHD_SYMBOL ], n[ HB_OO_MTHD_PFUNCTION ], ; + HB_OO_MSG_INLINE, , n[ HB_OO_MTHD_SCOPE ] ) NEXT FOR EACH n IN ::aVirtuals @@ -302,17 +296,14 @@ STATIC PROCEDURE Create( /* MetaClass */ ) STATIC FUNCTION Instance() - LOCAL Self := QSelf() - - RETURN __clsInst( ::hClass ) + RETURN __clsInst( QSelf():hClass ) STATIC PROCEDURE AddData( cData, xInit, cType, nScope, lNoinit ) - hb_default( @lNoInit, .F. ) - hb_default( @nScope, HB_OO_CLSTP_EXPORTED ) - /* Default Init for Logical and numeric */ - IF ! lNoInit .AND. cType != NIL .AND. xInit == NIL + IF ! hb_defaultValue( lNoInit, .F. ) .AND. ; + cType != NIL .AND. xInit == NIL + SWITCH Asc( cType ) CASE Asc( "L" ) /* Logical */ CASE Asc( "l" ) /* Logical */ @@ -335,7 +326,7 @@ STATIC PROCEDURE AddData( cData, xInit, cType, nScope, lNoinit ) ENDSWITCH ENDIF - AAdd( QSelf():aDatas, { cData, xInit, cType, nScope } ) + AAdd( QSelf():aDatas, { cData, xInit, cType, hb_defaultValue( nScope, HB_OO_CLSTP_EXPORTED ) } ) RETURN @@ -353,13 +344,10 @@ STATIC PROCEDURE AddMultiData( cType, xInit, nScope, aData, lNoInit ) STATIC PROCEDURE AddClassData( cData, xInit, cType, nScope, lNoInit ) - hb_default( @lNoInit, .F. ) - hb_default( @nScope, HB_OO_CLSTP_EXPORTED ) - - nScope := hb_bitOr( nScope, HB_OO_CLSTP_CLASS ) - /* Default Init for Logical and numeric */ - IF ! lNoInit .AND. cType != NIL .AND. xInit == NIL + IF ! hb_defaultValue( lNoInit, .F. ) .AND. ; + cType != NIL .AND. xInit == NIL + SWITCH Asc( cType ) CASE Asc( "L" ) /* Logical */ CASE Asc( "l" ) /* Logical */ @@ -382,7 +370,9 @@ STATIC PROCEDURE AddClassData( cData, xInit, cType, nScope, lNoInit ) ENDSWITCH ENDIF - AAdd( QSelf():aClsDatas, { cData, xInit, cType, nScope } ) + AAdd( QSelf():aClsDatas, { cData, xInit, cType, ; + hb_bitOr( hb_defaultValue( nScope, HB_OO_CLSTP_EXPORTED ), ; + HB_OO_CLSTP_CLASS ) } ) RETURN @@ -400,27 +390,21 @@ STATIC PROCEDURE AddMultiClsData( cType, xInit, nScope, aData, lNoInit ) STATIC PROCEDURE AddInline( cMethod, bCode, nScope ) - hb_default( @nScope, HB_OO_CLSTP_EXPORTED ) - - AAdd( QSelf():aInlines, { cMethod, bCode, nScope } ) + AAdd( QSelf():aInlines, { cMethod, bCode, hb_defaultValue( nScope, HB_OO_CLSTP_EXPORTED ) } ) RETURN STATIC PROCEDURE AddMethod( cMethod, sFuncSym, nScope ) - hb_default( @nScope, HB_OO_CLSTP_EXPORTED ) - - AAdd( QSelf():aMethods, { cMethod, sFuncSym, nScope } ) + AAdd( QSelf():aMethods, { cMethod, sFuncSym, hb_defaultValue( nScope, HB_OO_CLSTP_EXPORTED ) } ) RETURN STATIC PROCEDURE AddClsMethod( cMethod, sFuncSym, nScope ) - hb_default( @nScope, HB_OO_CLSTP_EXPORTED ) - - nScope := hb_bitOr( nScope, HB_OO_CLSTP_CLASS ) - - AAdd( QSelf():aClsMethods, { cMethod, sFuncSym, nScope } ) + AAdd( QSelf():aClsMethods, { cMethod, sFuncSym, ; + hb_bitOr( hb_defaultValue( nScope, HB_OO_CLSTP_EXPORTED ), ; + HB_OO_CLSTP_CLASS ) } ) RETURN diff --git a/src/rtl/tgetint.prg b/src/rtl/tgetint.prg index 5653c2ba93..39b5f045fb 100644 --- a/src/rtl/tgetint.prg +++ b/src/rtl/tgetint.prg @@ -75,7 +75,7 @@ FUNCTION __Get( bSetGet, cVarName, cPicture, bValid, bWhen ) */ Eval( bSetGet ) - oGet := GetNew(,, bSetGet, cVarName, cPicture ) + oGet := GetNew( ,, bSetGet, cVarName, cPicture ) oGet:PreBlock := bWhen oGet:PostBlock := bValid @@ -105,7 +105,7 @@ FUNCTION __GetA( bGetArray, cVarName, cPicture, bValid, bWhen, aIndex ) RETURN NIL ENDIF - oGet := GetNew(,, bGetArray, cVarName, cPicture ) + oGet := GetNew( ,, bGetArray, cVarName, cPicture ) oGet:SubScript := aIndex oGet:PreBlock := bWhen diff --git a/src/rtl/tgetlist.prg b/src/rtl/tgetlist.prg index 073e54cbec..24b5bfa49e 100644 --- a/src/rtl/tgetlist.prg +++ b/src/rtl/tgetlist.prg @@ -172,7 +172,7 @@ METHOD ReadModal() CLASS HBGetList ::nReadProcLine := ProcLine( 2 ) #ifdef HB_COMPAT_C53 - ::nPos := ::Settle( iif( HB_ISNUMERIC( nPos ), nPos, 0 ), .T. ) + ::nPos := ::Settle( hb_defaultValue( nPos, 0 ), .T. ) IF ( lMsgFlag := HB_ISNUMERIC( nMsgRow ) .AND. ; HB_ISNUMERIC( nMsgLeft ) .AND. ; @@ -547,7 +547,7 @@ METHOD GetPreValidate( oGet, aMsg ) CLASS HBGetList IF oGet:preBlock != NIL - lUpdated := ::lUpdated + lUpdated := ::lUpdated lWhen := Eval( oGet:preBlock, oGet, aMsg ) @@ -652,8 +652,6 @@ METHOD GetDoSetKey( bKeyBlock, oGet ) CLASS HBGetList lSetKey := Eval( bKeyBlock, ::cReadProcName, ::nReadProcLine, ::ReadVar() ) - hb_default( @lSetKey, .T. ) - ::ShowScoreboard() oGet:updateBuffer() @@ -665,18 +663,17 @@ METHOD GetDoSetKey( bKeyBlock, oGet ) CLASS HBGetList oGet:exitState := GE_ESCAPE ENDIF - RETURN lSetKey + RETURN hb_defaultValue( lSetKey, .T. ) METHOD Settle( nPos, lInit ) CLASS HBGetList LOCAL nExitState hb_default( @nPos, ::nPos ) - hb_default( @lInit, .F. ) IF nPos == 0 nExitState := GE_DOWN - ELSEIF nPos > 0 .AND. lInit /* NOTE: Never .T. in C5.2 mode. */ + ELSEIF nPos > 0 .AND. hb_defaultValue( lInit, .F. ) /* NOTE: Never .T. in C5.2 mode. */ nExitState := GE_NOEXIT ELSE nExitState := ::aGetList[ nPos ]:exitState @@ -912,14 +909,14 @@ METHOD GUIReader( oGet, oMenu, aMsg ) CLASS HBGetList // De-activate the GET SWITCH oGUI:ClassName() - CASE "LISTBOX" - CASE "RADIOGROUP" - IF HB_ISNUMERIC( oGet:varGet() ) - oGet:varPut( oGUI:value ) - EXIT - ENDIF - OTHERWISE - oGet:varPut( oGUI:buffer ) + CASE "LISTBOX" + CASE "RADIOGROUP" + IF HB_ISNUMERIC( oGet:varGet() ) + oGet:varPut( oGUI:value ) + EXIT + ENDIF + OTHERWISE + oGet:varPut( oGUI:buffer ) ENDSWITCH oGUI:killFocus() @@ -1186,14 +1183,14 @@ METHOD GUIPostValidate( oGet, oGUI, aMsg ) CLASS HBGetList IF !( oGUI:ClassName() == "TBROWSE" ) xOldValue := oGet:varGet() SWITCH oGUI:ClassName() - CASE "LISTBOX" - CASE "RADIOGROUP" - IF HB_ISNUMERIC( oGet:varGet() ) - xNewValue := oGUI:value - EXIT - ENDIF - OTHERWISE - xNewValue := oGUI:buffer + CASE "LISTBOX" + CASE "RADIOGROUP" + IF HB_ISNUMERIC( oGet:varGet() ) + xNewValue := oGUI:value + EXIT + ENDIF + OTHERWISE + xNewValue := oGUI:buffer ENDSWITCH ENDIF diff --git a/src/rtl/tmenusys.prg b/src/rtl/tmenusys.prg index fca2a7b49d..433501ef98 100644 --- a/src/rtl/tmenusys.prg +++ b/src/rtl/tmenusys.prg @@ -147,10 +147,10 @@ METHOD Modal( nSelection, nMsgRow, nMsgLeft, nMsgRight, cMsgColor, GetList ) CLA oTopMenu:select( nSelection ) - IF !( oTopMenu:ClassName() == "TOPBARMENU" ) .AND. ! oTopMenu:isOpen - oTopMenu:open() - ELSE + IF oTopMenu:ClassName() == "TOPBARMENU" .OR. oTopMenu:isOpen oTopMenu:display() + ELSE + oTopMenu:open() ENDIF IF nSelection <= 0 @@ -617,7 +617,7 @@ METHOD ShowMsg( lMode ) CLASS HBMenuSys LOCAL nCurrent LOCAL cMsg - IF HB_ISLOGICAL( ::lOldMsgFlag ) .AND. ::lOldMsgFlag + IF hb_defaultValue( ::lOldMsgFlag, .F. ) RestScreen( ::nMsgRow, ::nMsgLeft, ::nMsgRow, ::nMsgRight, ::cMsgSaveS ) ENDIF diff --git a/src/rtl/tobject.prg b/src/rtl/tobject.prg index a5fdbeea73..d92ffd32eb 100644 --- a/src/rtl/tobject.prg +++ b/src/rtl/tobject.prg @@ -76,14 +76,14 @@ FUNCTION HBObject() oClass:SetOnError( @HBObject_DftonError() ) - oClass:AddInline( "MSGNOTFOUND" , {| Self, cMsg | ::Error( "Message not found", ::className(), cMsg, iif( Left( cMsg, 1 ) == "_", 1005, 1004 ) ) }, HB_OO_CLSTP_EXPORTED ) + oClass:AddInline( "MSGNOTFOUND" , {| Self, cMsg | ::Error( "Message not found", ::className(), cMsg, iif( hb_LeftEq( cMsg, "_" ), 1005, 1004 ) ) }, HB_OO_CLSTP_EXPORTED ) #if 0 oClass:AddMultiData( , , HB_OO_CLSTP_EXPORTED, { "CLASS" }, .F. ) - oClass:AddInline( "ADDMETHOD" , {| Self, cMeth, pFunc, nScopeMeth | __clsAddMsg( __classH( Self ), cMeth, pFunc, HB_OO_MSG_METHOD , NIL, iif( nScopeMeth == NIL, 1, nScopeMeth ) ) }, HB_OO_CLSTP_EXPORTED ) - oClass:AddInline( "ADDVAR" , {| Self, cVAR, nScopeMeth, uiData, hClass | __clsAddMsg( hClass := __classH( Self ), cVar , uidata := __cls_IncData( hClass ), HB_OO_MSG_ACCESS, NIL, iif( nScopeMeth == NIL, 1, nScopeMeth ) ) , ; - __clsAddMsg( hClass , "_"+cVar , uiData , HB_OO_MSG_ASSIGN, NIL, iif( nScopeMeth == NIL, 1, nScopeMeth ) ) }, HB_OO_CLSTP_EXPORTED ) + oClass:AddInline( "ADDMETHOD" , {| Self, cMeth, pFunc, nScopeMeth | __clsAddMsg( __classH( Self ), cMeth, pFunc, HB_OO_MSG_METHOD, , iif( nScopeMeth == NIL, 1, nScopeMeth ) ) }, HB_OO_CLSTP_EXPORTED ) + oClass:AddInline( "ADDVAR" , {| Self, cVAR, nScopeMeth, uiData, hClass | __clsAddMsg( hClass := __classH( Self ), cVar , uidata := __cls_IncData( hClass ), HB_OO_MSG_ACCESS, , iif( nScopeMeth == NIL, 1, nScopeMeth ) ) , ; + __clsAddMsg( hClass , "_" + cVar , uiData , HB_OO_MSG_ASSIGN, , iif( nScopeMeth == NIL, 1, nScopeMeth ) ) }, HB_OO_CLSTP_EXPORTED ) /* These ones exist within Class(y), so we will probably try to implement it */ diff --git a/src/rtl/tpersist.prg b/src/rtl/tpersist.prg index 1d2acccb5c..aea4bb1829 100644 --- a/src/rtl/tpersist.prg +++ b/src/rtl/tpersist.prg @@ -50,6 +50,8 @@ REQUEST Array +#define _INDENT 3 + CREATE CLASS HBPersistent METHOD CreateNew() INLINE Self @@ -64,17 +66,18 @@ METHOD LoadFromText( cObjectText, lIgnoreErrors ) CLASS HBPersistent LOCAL nPos LOCAL cLine + LOCAL cProp + LOCAL uValue + LOCAL aWords LOCAL lStart := .T. LOCAL aObjects := { Self } LOCAL bError - PRIVATE oSelf - IF Empty( cObjectText ) RETURN .F. ENDIF - bError := iif( HB_ISLOGICAL( lIgnoreErrors ) .AND. lIgnoreErrors, ; + bError := iif( hb_defaultValue( lIgnoreErrors, .F. ), ; {| e | Break( e ) }, ErrorBlock() ) FOR EACH cLine IN hb_ATokens( StrTran( cObjectText, Chr( 13 ) ), Chr( 10 ) ) @@ -83,51 +86,51 @@ METHOD LoadFromText( cObjectText, lIgnoreErrors ) CLASS HBPersistent BEGIN SEQUENCE WITH bError - DO CASE - CASE Empty( cLine ) .OR. Left( cLine, 2 ) == "//" + cProp := NIL + + IF Empty( cLine ) .OR. hb_LeftEq( cLine, "//" ) /* ignore comments and empty lines */ + ELSEIF hb_LeftEq( cLine, "::" ) - CASE hb_asciiUpper( LTrim( hb_tokenGet( cLine, 1 ) ) ) == "OBJECT" - IF lStart - lStart := .F. - ELSE - cLine := SubStr( cLine, At( "::", cLine ) ) - MEMVAR->oSelf := ATail( aObjects ) - cLine := StrTran( cLine, "::", "oSelf:",, 1 ) - cLine := StrTran( cLine, " AS ", " := " ) + "():CreateNew()" - AAdd( aObjects, &( cLine ) ) + IF ( nPos := At( ":=", cLine ) ) > 0 + cProp := RTrim( SubStr( cLine, 3, nPos - 3 ) ) + uValue := &( LTrim( SubStr( cLine, nPos + 2 ) ) ) + ELSEIF ( nPos := At( "=", cLine ) ) > 0 /* fix for older versions */ + cProp := RTrim( SubStr( cLine, 3, nPos - 3 ) ) + uValue := &( LTrim( SubStr( cLine, nPos + 1 ) ) ) ENDIF - - CASE hb_asciiUpper( LTrim( hb_tokenGet( cLine, 1 ) ) ) == "ENDOBJECT" - ASize( aObjects, Len( aObjects ) - 1 ) - - CASE hb_asciiUpper( LTrim( hb_tokenGet( cLine, 1 ) ) ) == "ARRAY" - cLine := SubStr( cLine, At( "::", cLine ) ) - MEMVAR->oSelf := ATail( aObjects ) - cLine := StrTran( cLine, "::", "oSelf:",, 1 ) - cLine := StrTran( cLine, " LEN ", " := Array( " ) + " )" - &( cLine ) - - CASE Left( cLine, 2 ) == "::" - /* fix for older versions */ - nPos := At( "=", cLine ) - IF nPos > 0 - IF !( SubStr( cLine, nPos - 1, 1 ) == ":" ) - cLine := Stuff( cLine, nPos, 0, ":" ) + ELSE + aWords := hb_ATokens( hb_asciiUpper( cLine ) ) + SWITCH aWords[ 1 ] + CASE "OBJECT" + IF lStart + lStart := .F. + ELSEIF aWords[ 3 ] == "AS" .AND. hb_LeftEq( aWords[ 2 ], "::" ) + cProp := SubStr( aWords[ 2 ], 3 ) + uValue := &( aWords[ 4 ] )():CreateNew() ENDIF - ENDIF - MEMVAR->oSelf := ATail( aObjects ) - cLine := StrTran( cLine, "::", "oSelf:",, 1 ) - &( cLine ) + EXIT + CASE "ENDOBJECT" + ASize( aObjects, Len( aObjects ) - 1 ) + EXIT + CASE "ARRAY" + IF hb_LeftEq( aWords[ 2 ], "::" ) + cProp := SubStr( aWords[ 2 ], 3 ) + uValue := Array( Val( ATail( aWords ) ) ) + ENDIF + EXIT + ENDSWITCH + ENDIF - ENDCASE + IF !Empty( cProp ) + ATail( aObjects ):&cProp := uValue + ENDIF END SEQUENCE IF Empty( aObjects ) EXIT ENDIF - NEXT RETURN .T. @@ -135,19 +138,19 @@ METHOD LoadFromText( cObjectText, lIgnoreErrors ) CLASS HBPersistent METHOD SaveToText( cObjectName, nIndent ) CLASS HBPersistent LOCAL oNew := &( ::ClassName() + "()" ):CreateNew() - LOCAL aProperties - LOCAL prop + LOCAL cProp LOCAL uValue LOCAL uNewValue LOCAL cObject LOCAL cType + LOCAL lSpacer := .T. IF ! HB_ISSTRING( cObjectName ) cObjectName := "o" + ::ClassName() ENDIF IF HB_ISNUMERIC( nIndent ) - nIndent += 3 + nIndent += _INDENT ELSE nIndent := 0 ENDIF @@ -156,31 +159,24 @@ METHOD SaveToText( cObjectName, nIndent ) CLASS HBPersistent "OBJECT " + iif( nIndent != 0, "::", "" ) + cObjectName + " AS " + ; ::ClassName() + hb_eol() - aProperties := __clsGetProperties( ::ClassH ) + FOR EACH cProp IN __clsGetProperties( ::ClassH ) - FOR EACH prop IN aProperties - uValue := __objSendMsg( Self, prop ) - uNewValue := __objSendMsg( oNew, prop ) - cType := ValType( uValue ) + uValue := Self:&cProp + uNewValue := oNew:&cProp - IF !( cType == ValType( uNewValue ) ) .OR. !( uValue == uNewValue ) + IF !( ( cType := ValType( uValue ) ) == ValType( uNewValue ) ) .OR. ; + !( uValue == uNewValue ) SWITCH cType CASE "A" - nIndent += 3 - cObject += ArrayToText( uValue, prop, nIndent ) - nIndent -= 3 - IF ! prop:__enumIsLast() - cObject += hb_eol() - ENDIF + cObject += ArrayToText( uValue, cProp, nIndent + _INDENT ) + lSpacer := .T. EXIT CASE "O" - IF __objDerivedFrom( uValue, "HBPERSISTENT" ) - cObject += uValue:SaveToText( prop, nIndent ) - ENDIF - IF ! prop:__enumIsLast() - cObject += hb_eol() + IF __objDerivedFrom( uValue, "HBPersistent" ) + cObject += uValue:SaveToText( cProp, nIndent ) + lSpacer := .T. ENDIF EXIT @@ -190,11 +186,12 @@ METHOD SaveToText( cObjectName, nIndent ) CLASS HBPersistent EXIT OTHERWISE - IF prop:__enumIsFirst() + IF lSpacer + lSpacer := .F. cObject += hb_eol() ENDIF - cObject += Space( nIndent ) + " ::" + ; - prop + " := " + hb_ValToExp( uValue ) + ; + cObject += Space( nIndent + _INDENT ) + "::" + ; + cProp + " := " + hb_ValToExp( uValue ) + ; hb_eol() ENDSWITCH @@ -208,27 +205,23 @@ METHOD SaveToText( cObjectName, nIndent ) CLASS HBPersistent STATIC FUNCTION ArrayToText( aArray, cName, nIndent ) - LOCAL nLen := Len( aArray ) LOCAL cArray := hb_eol() + Space( nIndent ) + "ARRAY ::" + cName + ; - " LEN " + hb_ntos( nLen ) + hb_eol() - LOCAL n + " LEN " + hb_ntos( Len( aArray ) ) + hb_eol() LOCAL uValue - FOR n := 1 TO nLen - uValue := aArray[ n ] + FOR EACH uValue IN aArray SWITCH ValType( uValue ) CASE "A" - nIndent += 3 - cArray += ArrayToText( uValue, cName + "[ " + ; - hb_ntos( n ) + " ]", nIndent ) + hb_eol() - nIndent -= 3 + cArray += ArrayToText( uValue, cName + ; + "[ " + hb_ntos( uValue:__enumIndex() ) + " ]", ; + nIndent + _INDENT ) + hb_eol() EXIT CASE "O" - IF __objDerivedFrom( uValue, "HBPERSISTENT" ) - cArray += uValue:SaveToText( cName + "[ " + hb_ntos( n ) + ; - " ]", nIndent ) + IF __objDerivedFrom( uValue, "HBPersistent" ) + cArray += uValue:SaveToText( cName + ; + "[ " + hb_ntos( uValue:__enumIndex() ) + " ]", nIndent ) ENDIF EXIT @@ -238,11 +231,11 @@ STATIC FUNCTION ArrayToText( aArray, cName, nIndent ) EXIT OTHERWISE - IF n == 1 + IF uValue:__enumIsFirst() cArray += hb_eol() ENDIF - cArray += Space( nIndent ) + " ::" + cName + ; - + "[ " + hb_ntos( n ) + " ]" + " := " + ; + cArray += Space( nIndent + _INDENT ) + "::" + cName + ; + "[ " + hb_ntos( uValue:__enumIndex() ) + " ] := " + ; hb_ValToExp( uValue ) + hb_eol() ENDSWITCH NEXT diff --git a/src/rtl/tpopup.prg b/src/rtl/tpopup.prg index f9b55f3305..e8de8d2ab1 100644 --- a/src/rtl/tpopup.prg +++ b/src/rtl/tpopup.prg @@ -247,10 +247,10 @@ METHOD display() CLASS PopupMenu IF ( nCharPos := RAt( SubStr( item:style, 2, 1 ), cCaption ) ) > 0 cCaption := Stuff( cCaption, nCharPos - 1, 1, "" ) ELSE - cCaption := SubStr( cCaption, 1, Len( cCaption ) - 1 ) + cCaption := hb_StrShrink( cCaption ) ENDIF ELSEIF nHotKeyPos == Len( RTrim( cCaption ) ) - cCaption := SubStr( cCaption, 1, Len( cCaption ) - 1 ) + cCaption := hb_StrShrink( cCaption ) nHotKeyPos := 0 ELSE cCaption := Stuff( cCaption, nHotKeyPos, 1, "" ) diff --git a/src/rtl/tpopuphb.prg b/src/rtl/tpopuphb.prg index 185d78da8d..a2e026e0c0 100644 --- a/src/rtl/tpopuphb.prg +++ b/src/rtl/tpopuphb.prg @@ -58,8 +58,8 @@ CREATE CLASS hb_PopupMenu INHERIT HBPopupMenu METHOD shadowed( lShadowed ) SETGET METHOD setCoors( nRow, nCol, lTop ) - METHOD isShortCut( nKey, nID ) - METHOD isQuick( nKey, nID ) + METHOD isShortCut( nKey, /* @ */ nID ) + METHOD isQuick( nKey, /* @ */ nID ) ENDCLASS @@ -121,7 +121,7 @@ METHOD setCoors( nRow, nCol, lTop ) CLASS hb_PopupMenu RETURN Self -METHOD isShortCut( nKey, nID ) CLASS hb_PopupMenu +METHOD isShortCut( nKey, /* @ */ nID ) CLASS hb_PopupMenu LOCAL nItem LOCAL nTotal @@ -152,9 +152,9 @@ METHOD isShortCut( nKey, nID ) CLASS hb_PopupMenu // Loop to wrap around through TopMenu from Current Item: FOR i := 1 TO nTotal - IF !( oItem := ::getItem( nItem ) ):enabled - ELSEIF ! oItem:isPopUp() - ELSEIF oItem:data:isQuick( nKey, @nID ) + IF ( oItem := ::getItem( nItem ) ):enabled .AND. ; + oItem:isPopUp() .AND. ; + oItem:data:isQuick( nKey, @nID ) RETURN .T. ENDIF IF ++nItem > nTotal @@ -166,21 +166,17 @@ METHOD isShortCut( nKey, nID ) CLASS hb_PopupMenu RETURN .F. -METHOD isQuick( nKey, nID ) CLASS hb_PopupMenu +METHOD isQuick( nKey, /* @ */ nID ) CLASS hb_PopupMenu - LOCAL nItem - LOCAL nTotal LOCAL nShortCut LOCAL oItem IF ( nShortCut := ::getShortCt( nKey ) ) == 0 - nTotal := ::nItemCount - - FOR nItem := 1 TO nTotal - IF !( oItem := ::getItem( nItem ) ):Enabled - ELSEIF ! oItem:isPopUp() - ELSEIF oItem:Data:isQuick( nKey, @nID ) + FOR EACH oItem IN ::aItems + IF oItem:Enabled .AND. ; + oItem:isPopUp() .AND. ; + oItem:data:isQuick( nKey, @nID ) RETURN .T. ENDIF NEXT @@ -189,7 +185,7 @@ METHOD isQuick( nKey, nID ) CLASS hb_PopupMenu IF oItem:enabled ::select( nShortCut ) - Eval( oItem:Data, oItem ) + Eval( oItem:data, oItem ) nID := oItem:id RETURN .T. ENDIF diff --git a/src/rtl/treport.prg b/src/rtl/treport.prg index f669ad510f..dfce5d6e11 100644 --- a/src/rtl/treport.prg +++ b/src/rtl/treport.prg @@ -226,14 +226,9 @@ METHOD New( cFrmName AS STRING, ; // Set output devices lPrintOn := iif( lPrinter, Set( _SET_PRINTER, lPrinter ), Set( _SET_PRINTER ) ) - lConsoleOn := iif( lNoConsole, Set( _SET_CONSOLE, .F. ), Set( _SET_CONSOLE ) ) - IF lPrinter // To the printer - ::lFormFeeds := .T. - ELSE - ::lFormFeeds := .F. - ENDIF + ::lFormFeeds := lPrinter IF ! Empty( cAltFile ) // To file lExtraState := Set( _SET_EXTRA, .T. ) @@ -266,7 +261,7 @@ METHOD New( cFrmName AS STRING, ; // ::aReportData[ RPT_LMARGIN ] += Set( _SET_MARGIN ) ::nPageNumber := 1 // Set the initial page number - ::lFirstPass := .T. // Set the first pass flag + ::lFirstPass := .T. // Set the first pass flag ::nLinesLeft := ::aReportData[ RPT_LINES ] diff --git a/src/rtl/tscalar.prg b/src/rtl/tscalar.prg index 15a2fd58c5..0298c0e68e 100644 --- a/src/rtl/tscalar.prg +++ b/src/rtl/tscalar.prg @@ -178,7 +178,7 @@ METHOD Copy() CLASS Array METHOD DeleteAt( n ) CLASS Array - IF n > 0 .AND. n <= Len( Self ) + IF n >= 1 .AND. n <= Len( Self ) hb_ADel( Self, n, .T. ) ENDIF @@ -189,7 +189,7 @@ METHOD InsertAt( n, x ) CLASS Array IF n > Len( Self ) ASize( Self, n ) Self[ n ] := x - ELSEIF n > 0 + ELSEIF n >= 1 hb_AIns( Self, n, x, .T. ) ENDIF diff --git a/src/rtl/tsymbol.prg b/src/rtl/tsymbol.prg index 4e830915d6..6ed784752b 100644 --- a/src/rtl/tsymbol.prg +++ b/src/rtl/tsymbol.prg @@ -52,14 +52,14 @@ CREATE CLASS Symbol EXPORTED: - METHOD New( cSymName ) // Constructor. cSymName may already exists or not - METHOD name() // retrieves the symbol name - METHOD isEqual( oSymbol ) // Compares two symbol objects - METHOD exec( ... ) // Executes the function referred to by the - // Symbol object, with an optional parameters list + METHOD New( cSymName ) // Constructor. cSymName may already exists or not + METHOD name() // retrieves the symbol name + METHOD isEqual( oSymbol ) // Compares two symbol objects + METHOD exec( ... ) // Executes the function referred to by the + // Symbol object, with an optional parameters list PROTECTED: - VAR nSym // internal pointer to the Symbols table symbol + VAR nSym // internal pointer to the Symbols table symbol ENDCLASS diff --git a/src/rtl/ttextlin.prg b/src/rtl/ttextlin.prg index fd23b53d22..6ba6856fb7 100644 --- a/src/rtl/ttextlin.prg +++ b/src/rtl/ttextlin.prg @@ -60,7 +60,7 @@ ENDCLASS /* Creates a new line of text */ METHOD New( cLine, lSoftCR ) CLASS HBTextLine - ::cText := iif( HB_ISSTRING( cLine ), cLine, "" ) - ::lSoftCR := iif( HB_ISLOGICAL( lSoftCR ), lSoftCR, .F. ) + ::cText := hb_defaultValue( cLine, "" ) + ::lSoftCR := hb_defaultValue( lSoftCR, .F. ) RETURN Self diff --git a/src/rtl/typefile.prg b/src/rtl/typefile.prg index 594dafee7f..b78fc60a1e 100644 --- a/src/rtl/typefile.prg +++ b/src/rtl/typefile.prg @@ -49,7 +49,7 @@ #include "error.ch" #include "fileio.ch" -#define BUFFER_LENGTH 8192 +#define BUFFER_LENGTH 8192 PROCEDURE __TypeFile( cFile, lPrint ) @@ -60,7 +60,6 @@ PROCEDURE __TypeFile( cFile, lPrint ) LOCAL nSize LOCAL nBuffer LOCAL oErr - LOCAL xRecover LOCAL nRetries LOCAL aSaveSet[ 2 ] LOCAL cDir, cName, cExt @@ -113,8 +112,7 @@ PROCEDURE __TypeFile( cFile, lPrint ) oErr:fileName := cFile oErr:OsCode := FError() oErr:tries := ++nRetries - xRecover := Eval( ErrorBlock(), oErr ) - IF HB_ISLOGICAL( xRecover ) .AND. ! xRecover /* user select "Default" */ + IF ! hb_defaultValue( Eval( ErrorBlock(), oErr ), .T. ) /* user select "Default" */ RETURN ENDIF ENDDO @@ -130,7 +128,7 @@ PROCEDURE __TypeFile( cFile, lPrint ) nSize := FSeek( nHandle, 0, FS_END ) nBuffer := Min( nSize, BUFFER_LENGTH ) - FSeek( nHandle, 0 ) /* go top */ + FSeek( nHandle, 0 ) /* go top */ /* Here we try to read a line at a time but I think we could just display the whole buffer since it said: @@ -138,7 +136,7 @@ PROCEDURE __TypeFile( cFile, lPrint ) nHasRead := 0 cBuffer := Space( nBuffer ) - QOut() /* starting a new line */ + QOut() /* starting a new line */ DO WHILE ( nRead := FRead( nHandle, @cBuffer, nBuffer ) ) > 0 nHasRead += nRead QQOut( cBuffer ) diff --git a/src/rtl/vfile.c b/src/rtl/vfile.c index e5f60cddab..4a87057fd0 100644 --- a/src/rtl/vfile.c +++ b/src/rtl/vfile.c @@ -124,7 +124,7 @@ static void hb_fileReturn( PHB_FILE pFile ) hb_ret(); } -/* HB_VFEXISTS( , [ @ ] ) -> */ +/* hb_VFExists( , [ @ ] ) -> */ HB_FUNC( HB_VFEXISTS ) { const char * pszFileName = hb_parc( 1 ); @@ -151,7 +151,7 @@ HB_FUNC( HB_VFEXISTS ) hb_retl( fResult ); } -/* HB_VFERASE( ) -> */ +/* hb_VFErase( ) -> */ HB_FUNC( HB_VFERASE ) { const char * pszFile = hb_parc( 1 ); @@ -169,7 +169,7 @@ HB_FUNC( HB_VFERASE ) hb_retni( iResult ); } -/* HB_VFRENAME( , ) -> */ +/* hb_VFRename( , ) -> */ HB_FUNC( HB_VFRENAME ) { const char * szFileOld = hb_parc( 1 ), @@ -188,7 +188,7 @@ HB_FUNC( HB_VFRENAME ) hb_retni( iResult ); } -/* HB_VFCOPYFILE( , ) -> */ +/* hb_VFCopyFile( , ) -> */ HB_FUNC( HB_VFCOPYFILE ) { const char * pszSource = hb_parc( 1 ), @@ -207,7 +207,7 @@ HB_FUNC( HB_VFCOPYFILE ) hb_retni( iResult ); } -/* HB_VFDIREXISTS( ) -> */ +/* hb_VFDirExists( ) -> */ HB_FUNC( HB_VFDIREXISTS ) { const char * pszDirName = hb_parc( 1 ); @@ -224,7 +224,7 @@ HB_FUNC( HB_VFDIREXISTS ) hb_retl( fResult ); } -/* HB_VFDIRMAKE( ) -> */ +/* hb_VFDirMake( ) -> */ HB_FUNC( HB_VFDIRMAKE ) { const char * pszDirName = hb_parc( 1 ); @@ -242,7 +242,7 @@ HB_FUNC( HB_VFDIRMAKE ) hb_retni( iResult ); } -/* HB_VFDIRREMOVE( ) -> */ +/* hb_VFDirRemove( ) -> */ HB_FUNC( HB_VFDIRREMOVE ) { const char * pszDirName = hb_parc( 1 ); @@ -260,14 +260,14 @@ HB_FUNC( HB_VFDIRREMOVE ) hb_retni( iResult ); } -/* HB_VFDIRECTORY( [ ], [ ] ) -> */ +/* hb_VFDirectory( [ ], [ ] ) -> */ HB_FUNC( HB_VFDIRECTORY ) { hb_itemReturnRelease( hb_fileDirectory( hb_parc( 1 ), hb_parc( 2 ) ) ); hb_fsSetFError( hb_fsError() ); } -/* HB_VFDIRSPACE( , [ ] ) -> */ +/* hb_VFDirSpace( , [ ] ) -> */ HB_FUNC( HB_VFDIRSPACE ) { HB_USHORT uiType = ( HB_USHORT ) hb_parnidef( 2, HB_DISK_AVAIL ); @@ -276,7 +276,7 @@ HB_FUNC( HB_VFDIRSPACE ) hb_fsSetFError( hb_fsError() ); } -/* HB_VFATTRGET( , @ ) -> */ +/* hb_VFAttrGet( , @ ) -> */ HB_FUNC( HB_VFATTRGET ) { HB_FATTR nAttr = 0; @@ -287,14 +287,14 @@ HB_FUNC( HB_VFATTRGET ) hb_stornl( nAttr, 2 ); } -/* HB_VFATTRSET( , ) -> */ +/* hb_VFAttrSet( , ) -> */ HB_FUNC( HB_VFATTRSET ) { hb_retl( hb_fileAttrSet( hb_parcx( 1 ), ( HB_FATTR ) hb_parnl( 2 ) ) ); hb_fsSetFError( hb_fsError() ); } -/* HB_VFTIMEGET( , @ ) -> */ +/* hb_VFTimeGet( , @ ) -> */ HB_FUNC( HB_VFTIMEGET ) { long lJulian, lMillisec; @@ -333,7 +333,7 @@ HB_FUNC( HB_VFTIMEGET ) } } -/* HB_VFTIMESET( , ) -> */ +/* hb_VFTimeSet( , ) -> */ HB_FUNC( HB_VFTIMESET ) { long lDate = -1, lTime = -1; @@ -356,7 +356,7 @@ HB_FUNC( HB_VFTIMESET ) hb_fsSetFError( hb_fsError() ); } -/* HB_VFLINK( , ) -> */ +/* hb_VFLink( , ) -> */ HB_FUNC( HB_VFLINK ) { const char * pszExisting = hb_parc( 1 ), * pszNewFile = hb_parc( 2 ); @@ -374,7 +374,7 @@ HB_FUNC( HB_VFLINK ) hb_retni( iResult ); } -/* HB_VFLINKSYM( , ) -> */ +/* hb_VFLinkSym( , ) -> */ HB_FUNC( HB_VFLINKSYM ) { const char * pszTarget = hb_parc( 1 ), * pszNewFile = hb_parc( 2 ); @@ -392,7 +392,7 @@ HB_FUNC( HB_VFLINKSYM ) hb_retni( iResult ); } -/* HB_VFLINKREAD( ) -> | "" */ +/* hb_VFLinkRead( ) -> | "" */ HB_FUNC( HB_VFLINKREAD ) { const char * pszFile = hb_parc( 1 ); @@ -409,7 +409,7 @@ HB_FUNC( HB_VFLINKREAD ) hb_retc_buffer( pszResult ); } -/* HB_VFOPEN( [@], [ ] ) -> | NIL */ +/* hb_VFOpen( [@], [ ] ) -> | NIL */ HB_FUNC( HB_VFOPEN ) { const char * pszFile = hb_parc( 1 ); @@ -464,7 +464,7 @@ HB_FUNC( HB_VFOPEN ) } } -/* HB_VFCLOSE( ) -> */ +/* hb_VFClose( ) -> */ HB_FUNC( HB_VFCLOSE ) { PHB_FILE * pFilePtr = hb_fileParamPtr( 1 ); @@ -479,7 +479,7 @@ HB_FUNC( HB_VFCLOSE ) } } -/* HB_VFLOCK( , , , [ ] ) -> */ +/* hb_VFLock( , , , [ ] ) -> */ HB_FUNC( HB_VFLOCK ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -502,7 +502,7 @@ HB_FUNC( HB_VFLOCK ) } } -/* HB_VFUNLOCK( , , ) -> */ +/* hb_VFUnlock( , , ) -> */ HB_FUNC( HB_VFUNLOCK ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -525,7 +525,7 @@ HB_FUNC( HB_VFUNLOCK ) } } -/* HB_VFLOCKTEST( , , , [ ] ) -> | 0 (nolock) | -1 (err) */ +/* hb_VFLockTest( , , , [ ] ) -> | 0 (nolock) | -1 (err) */ HB_FUNC( HB_VFLOCKTEST ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -548,7 +548,7 @@ HB_FUNC( HB_VFLOCKTEST ) } } -/* HB_VFREAD( , @, [ ], [ ] ) -> */ +/* hb_VFRead( , @, [ ], [ ] ) -> */ HB_FUNC( HB_VFREAD ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -579,7 +579,34 @@ HB_FUNC( HB_VFREAD ) } } -/* HB_VFWRITE( , , [ ], [ ] ) -> */ +/* hb_VFReadLen( , , [ ] ) -> */ +HB_FUNC( HB_VFREADLEN ) +{ + PHB_FILE pFile = hb_fileParam( 1 ); + + if( pFile && HB_ISNUM( 2 ) ) + { + HB_ERRCODE uiError = 0; + HB_SIZE nToRead = hb_parns( 2 ); + + if( nToRead > 0 ) + { + char * buffer = ( char * ) hb_xgrab( nToRead + 1 ); + HB_SIZE nRead; + + nRead = hb_fileRead( pFile, buffer, nToRead, hb_parnintdef( 3, -1 ) ); + uiError = hb_fsError(); + + hb_retclen_buffer( buffer, nRead ); + } + else + hb_retc_null(); + + hb_fsSetFError( uiError ); + } +} + +/* hb_VFWrite( , , [ ], [ ] ) -> */ HB_FUNC( HB_VFWRITE ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -610,7 +637,7 @@ HB_FUNC( HB_VFWRITE ) } } -/* HB_VFREADAT( , @, [ ], [ ] ) -> */ +/* hb_VFReadAt( , @, [ ], [ ] ) -> */ HB_FUNC( HB_VFREADAT ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -642,7 +669,7 @@ HB_FUNC( HB_VFREADAT ) } } -/* HB_VFWRITEAT( , , [ ], [ ] ) -> */ +/* hb_VFWriteAt( , , [ ], [ ] ) -> */ HB_FUNC( HB_VFWRITEAT ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -674,7 +701,7 @@ HB_FUNC( HB_VFWRITEAT ) } } -/* HB_VFSEEK( , , [ ] ) -> */ +/* hb_VFSeek( , , [ ] ) -> */ HB_FUNC( HB_VFSEEK ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -696,7 +723,7 @@ HB_FUNC( HB_VFSEEK ) } } -/* HB_VFTRUNC( , [ ] ) -> */ +/* hb_VFTrunc( , [ ] ) -> */ HB_FUNC( HB_VFTRUNC ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -708,7 +735,7 @@ HB_FUNC( HB_VFTRUNC ) } } -/* HB_VFSIZE( ) -> */ +/* hb_VFSize( ) -> */ HB_FUNC( HB_VFSIZE ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -720,7 +747,7 @@ HB_FUNC( HB_VFSIZE ) } } -/* HB_VFEOF( ) -> */ +/* hb_VFEof( ) -> */ HB_FUNC( HB_VFEOF ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -732,7 +759,7 @@ HB_FUNC( HB_VFEOF ) } } -/* HB_VFFLUSH( , [ ] ) -> NIL */ +/* hb_VFFlush( , [ ] ) -> NIL */ HB_FUNC( HB_VFFLUSH ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -744,7 +771,7 @@ HB_FUNC( HB_VFFLUSH ) } } -/* HB_VFCOMMIT( ) -> NIL */ +/* hb_VFCommit( ) -> NIL */ HB_FUNC( HB_VFCOMMIT ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -756,7 +783,7 @@ HB_FUNC( HB_VFCOMMIT ) } } -/* HB_VFCONFIG( , , [ ] ) -> */ +/* hb_VFConfig( , , [ ] ) -> */ HB_FUNC( HB_VFCONFIG ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -776,7 +803,7 @@ HB_FUNC( HB_VFCONFIG ) } } -/* HB_VFHANDLE( ) -> */ +/* hb_VFHandle( ) -> */ HB_FUNC( HB_VFHANDLE ) { PHB_FILE pFile = hb_fileParam( 1 ); @@ -785,7 +812,7 @@ HB_FUNC( HB_VFHANDLE ) hb_retnint( ( HB_NHANDLE ) hb_fileHandle( pFile ) ); } -/* HB_VFTEMPFILE( @, [ ], [ ], [ ], [ ] ) -> | NIL */ +/* hb_VFTempFile( @, [ ], [ ], [ ], [ ] ) -> | NIL */ HB_FUNC( HB_VFTEMPFILE ) { char szName[ HB_PATH_MAX ]; diff --git a/src/vm/Makefile b/src/vm/Makefile index 68c4e2ccb1..565b36929b 100644 --- a/src/vm/Makefile +++ b/src/vm/Makefile @@ -107,6 +107,7 @@ C_SOURCES += \ proc.c \ procaddr.c \ runner.c \ + short.c \ vm.c \ $(C_MAIN) \ diff --git a/src/vm/classes.c b/src/vm/classes.c index 6d3e11f838..7ee7274167 100644 --- a/src/vm/classes.c +++ b/src/vm/classes.c @@ -469,8 +469,7 @@ static HB_BOOL hb_clsDictRealloc( PCLASS pClass ) hb_errInternal( 6002, "Unable to realloc class message in __clsDictRealloc()", NULL, NULL ); #ifdef HB_MSG_POOL - puiMsgIdx = ( HB_USHORT * ) hb_xgrab( ( nNewHashKey << BUCKETBITS ) * sizeof( HB_USHORT ) ); - memset( puiMsgIdx, 0, ( nNewHashKey << BUCKETBITS ) * sizeof( HB_USHORT ) ); + puiMsgIdx = ( HB_USHORT * ) hb_xgrabz( ( nNewHashKey << BUCKETBITS ) * sizeof( HB_USHORT ) ); for( n = 0; n < nLimit; n++ ) { @@ -508,8 +507,7 @@ static HB_BOOL hb_clsDictRealloc( PCLASS pClass ) #else - pNewMethods = ( PMETHOD ) hb_xgrab( ( nNewHashKey << BUCKETBITS ) * sizeof( METHOD ) ); - memset( pNewMethods, 0, ( nNewHashKey << BUCKETBITS ) * sizeof( METHOD ) ); + pNewMethods = ( PMETHOD ) hb_xgrabz( ( nNewHashKey << BUCKETBITS ) * sizeof( METHOD ) ); for( n = 0; n < nLimit; n++ ) { @@ -559,16 +557,13 @@ static void hb_clsDictInit( PCLASS pClass, HB_USHORT uiHashKey ) pClass->uiHashKey = uiHashKey; #ifdef HB_MSG_POOL nSize = ( ( ( HB_SIZE ) uiHashKey + 1 ) << BUCKETBITS ) * sizeof( HB_USHORT ); - pClass->puiMsgIdx = ( HB_USHORT * ) hb_xgrab( nSize ); - memset( pClass->puiMsgIdx, 0, nSize ); + pClass->puiMsgIdx = ( HB_USHORT * ) hb_xgrabz( nSize ); pClass->uiMethodCount = 1; - pClass->pMethods = ( PMETHOD ) hb_xgrab( sizeof( METHOD ) ); - memset( pClass->pMethods, 0, sizeof( METHOD ) ); + pClass->pMethods = ( PMETHOD ) hb_xgrabz( sizeof( METHOD ) ); #else nSize = ( ( ( HB_SIZE ) uiHashKey + 1 ) << BUCKETBITS ) * sizeof( METHOD ); - pClass->pMethods = ( PMETHOD ) hb_xgrab( nSize ); - memset( pClass->pMethods, 0, nSize ); + pClass->pMethods = ( PMETHOD ) hb_xgrabz( nSize ); #endif } @@ -2375,8 +2370,7 @@ static void hb_objSuperDestructorCall( PHB_ITEM pObject, PCLASS pClass ) char * pcClasses; HB_USHORT uiClass; - pcClasses = ( char * ) hb_xgrab( ( HB_SIZE ) s_uiClasses + 1 ); - memset( pcClasses, 0, s_uiClasses + 1 ); + pcClasses = ( char * ) hb_xgrabz( ( HB_SIZE ) s_uiClasses + 1 ); do { @@ -3459,8 +3453,7 @@ static HB_USHORT hb_clsNew( const char * szClassName, HB_USHORT uiDatas, uiSuper = ( HB_USHORT ) ( pSuperArray ? hb_arrayLen( pSuperArray ) : 0 ); pClassFunc = hb_vmGetRealFuncSym( pClassFunc ); - pNewCls = ( PCLASS ) hb_xgrab( sizeof( CLASS ) ); - memset( pNewCls, 0, sizeof( CLASS ) ); + pNewCls = ( PCLASS ) hb_xgrabz( sizeof( CLASS ) ); HB_CLASS_LOCK(); @@ -5176,8 +5169,7 @@ static PHB_ITEM hb_objGetIVars( PHB_ITEM pObject, pClass = s_pClasses[ uiClass ]; nLen = nCount = hb_arrayLen( pObject ); nSize = 0; - pIndex = ( PHB_IVARINFO ) hb_xgrab( nLen * sizeof( HB_IVARINFO ) ); - memset( pIndex, 0, nLen * sizeof( HB_IVARINFO ) ); + pIndex = ( PHB_IVARINFO ) hb_xgrabz( nLen * sizeof( HB_IVARINFO ) ); if( fChanged && pClass->uiInitDatas ) { @@ -5422,7 +5414,6 @@ HB_FUNC( __OBJRESTOREIVARS ) * if second parameter is true and message has corresponding * assign message (with "_" prefix) */ - HB_FUNC( __CLSGETPROPERTIES ) { HB_USHORT uiClass = ( HB_USHORT ) hb_parni( 1 ); diff --git a/src/vm/debug.c b/src/vm/debug.c index 100f08096d..b1b4432c95 100644 --- a/src/vm/debug.c +++ b/src/vm/debug.c @@ -199,6 +199,7 @@ HB_FUNC( __DBGVMSTKLCOUNT ) } /* + * __dbgVMStkLList() --> * Returns the stack of the calling function * "[]" Means symbol. * @@ -207,7 +208,6 @@ HB_FUNC( __DBGVMSTKLCOUNT ) * [3 .. x] Parameters * [x+1 .. y] Locals * [y+1 ..] Pushed data - * __dbgVMStkLList() --> */ HB_FUNC( __DBGVMSTKLLIST ) { diff --git a/src/vm/dynsym.c b/src/vm/dynsym.c index f68612eba5..30d0cf4604 100644 --- a/src/vm/dynsym.c +++ b/src/vm/dynsym.c @@ -119,8 +119,7 @@ static PHB_DYNS hb_dynsymInsert( PHB_SYMB pSymbol, HB_UINT uiPos ) sizeof( DYNHB_ITEM ) * ( s_uiDynSymbols - uiPos - 1 ) ); } - pDynSym = ( PHB_DYNS ) hb_xgrab( sizeof( HB_DYNS ) ); - memset( pDynSym, 0, sizeof( HB_DYNS ) ); + pDynSym = ( PHB_DYNS ) hb_xgrabz( sizeof( HB_DYNS ) ); pDynSym->pSymbol = pSymbol; pDynSym->uiSymNum = s_uiDynSymbols; diff --git a/src/vm/estack.c b/src/vm/estack.c index 6b43c9af7c..02dbae1f79 100644 --- a/src/vm/estack.c +++ b/src/vm/estack.c @@ -289,8 +289,7 @@ void * hb_stackGetTSD( PHB_TSD pTSD ) HB_SIZE nSize = ( hb_stack.iTSD + 2 ) * sizeof( HB_TSD_HOLDER ); if( hb_stack.iTSD == 0 ) { - hb_stack.pTSD = ( PHB_TSD_HOLDER ) hb_xgrab( nSize ); - memset( hb_stack.pTSD, 0, nSize ); + hb_stack.pTSD = ( PHB_TSD_HOLDER ) hb_xgrabz( nSize ); } else { @@ -300,8 +299,7 @@ void * hb_stackGetTSD( PHB_TSD pTSD ) #endif hb_stack.pTSD[ pTSD->iHandle ].pTSD = pTSD; - hb_stack.pTSD[ pTSD->iHandle ].value = hb_xgrab( pTSD->iSize ); - memset( hb_stack.pTSD[ pTSD->iHandle ].value, 0, pTSD->iSize ); + hb_stack.pTSD[ pTSD->iHandle ].value = hb_xgrabz( pTSD->iSize ); if( pTSD->pInitFunc ) pTSD->pInitFunc( hb_stack.pTSD[ pTSD->iHandle ].value ); } @@ -353,7 +351,7 @@ void hb_stackInit( void ) #endif { HB_STACK_TLS_PRELOAD - hb_stack_init(&hb_stack ); + hb_stack_init( &hb_stack ); hb_xinit_thread(); } } diff --git a/src/vm/extrap.c b/src/vm/extrap.c index 6857f55634..b539e127bc 100644 --- a/src/vm/extrap.c +++ b/src/vm/extrap.c @@ -113,20 +113,35 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti #if defined( HB_OS_WIN_64 ) && defined( HB_CPU_X86_64 ) { + char buf[ 32 ]; PCONTEXT pCtx = pExceptionInfo->ContextRecord; + const char * szCode; + + /* two most common codes */ + switch( pExceptionInfo->ExceptionRecord->ExceptionCode ) + { + case EXCEPTION_ACCESS_VIOLATION: + szCode = " " "ACCESS_VIOLATION"; + break; + case EXCEPTION_IN_PAGE_ERROR: + szCode = " " "IN_PAGE_ERROR"; + break; + default: + szCode = ""; + } hb_snprintf( errmsg, errmsglen, "\n\n" - " Exception Code:%08X\n" - " Exception Address:0x%016" PFLL "X\n" - " RAX:0x%016" PFLL "X RBX:0x%016" PFLL "X RCX:0x%016" PFLL "X RDX:0x%016" PFLL "X\n" - " RSI:0x%016" PFLL "X RDI:0x%016" PFLL "X RBP:0x%016" PFLL "X\n" - " R8 :0x%016" PFLL "X R9 :0x%016" PFLL "X R10:0x%016" PFLL "X R11:0x%016" PFLL "X\n" - " R12:0x%016" PFLL "X R13:0x%016" PFLL "X R14:0x%016" PFLL "X R15:0x%016" PFLL "X\n" - " CS:RIP:%04X:0x%016" PFLL "X SS:RSP:%04X:0x%016" PFLL "X\n" + " Exception Code:%08X%s\n" + " Exception Address:%016" PFLL "X\n" + " RAX:%016" PFLL "X RBX:%016" PFLL "X RCX:%016" PFLL "X RDX:%016" PFLL "X\n" + " RSI:%016" PFLL "X RDI:%016" PFLL "X RBP:%016" PFLL "X\n" + " R8 :%016" PFLL "X R9 :%016" PFLL "X R10:%016" PFLL "X R11:%016" PFLL "X\n" + " R12:%016" PFLL "X R13:%016" PFLL "X R14:%016" PFLL "X R15:%016" PFLL "X\n" + " CS:RIP:%04X:%016" PFLL "X SS:RSP:%04X:%016" PFLL "X\n" " DS:%04X ES:%04X FS:%04X GS:%04X\n" " Flags:%08X\n", - ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionCode, + ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionCode, szCode, ( HB_PTRDIFF ) pExceptionInfo->ExceptionRecord->ExceptionAddress, pCtx->Rax, pCtx->Rbx, pCtx->Rcx, pCtx->Rdx, pCtx->Rsi, pCtx->Rdi, pCtx->Rbp, @@ -136,6 +151,20 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti ( HB_U32 ) pCtx->SegDs, ( HB_U32 ) pCtx->SegEs, ( HB_U32 ) pCtx->SegFs, ( HB_U32 ) pCtx->SegGs, ( HB_U32 ) pCtx->EFlags ); + if( pExceptionInfo->ExceptionRecord->NumberParameters && + pExceptionInfo->ExceptionRecord->NumberParameters < ( DWORD ) EXCEPTION_MAXIMUM_PARAMETERS ) + { + DWORD arg; + + hb_strncat( errmsg, " Exception Parameters:", errmsglen ); + for( arg = 0; arg < pExceptionInfo->ExceptionRecord->NumberParameters; ++arg ) + { + hb_snprintf( buf, sizeof( buf ), " %016" PFLL "X", ( HB_U64 ) pExceptionInfo->ExceptionRecord->ExceptionInformation[ arg ] ); + hb_strncat( errmsg, buf, errmsglen ); + } + hb_strncat( errmsg, "\n", errmsglen ); + } + /* TODO: 64-bit stack trace. See: - StackWalk64() - http://www.codeproject.com/KB/threads/StackWalker.aspx?fid=202364 */ @@ -147,16 +176,16 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti hb_snprintf( errmsg, errmsglen, "\n\n" " Exception Code:%08X\n" - " Exception Address:0x%016" PFLL "X\n" - " IS0 :0x%016" PFLL "X IS1 :0x%016" PFLL "X IS2 :0x%016" PFLL "X IS3 :0x%016" PFLL "X\n" - " IT0 :0x%016" PFLL "X IT1 :0x%016" PFLL "X IT2 :0x%016" PFLL "X IT3 :0x%016" PFLL "X\n" - " IT4 :0x%016" PFLL "X IT5 :0x%016" PFLL "X IT6 :0x%016" PFLL "X IT7 :0x%016" PFLL "X\n" - " IT8 :0x%016" PFLL "X IT9 :0x%016" PFLL "X IT10:0x%016" PFLL "X IT11:0x%016" PFLL "X\n" - " IT12:0x%016" PFLL "X IT13:0x%016" PFLL "X IT14:0x%016" PFLL "X IT15:0x%016" PFLL "X\n" - " IT16:0x%016" PFLL "X IT17:0x%016" PFLL "X IT18:0x%016" PFLL "X IT19:0x%016" PFLL "X\n" - " IT20:0x%016" PFLL "X IT21:0x%016" PFLL "X IT22:0x%016" PFLL "X\n" - " IGp :0x%016" PFLL "X IV0 :0x%016" PFLL "X ISp :0x%016" PFLL "X ITeb:0x%016" PFLL "X\n" - " INat:0x%016" PFLL "X\n", + " Exception Address:%016" PFLL "X\n" + " IS0 :%016" PFLL "X IS1 :%016" PFLL "X IS2 :%016" PFLL "X IS3 :%016" PFLL "X\n" + " IT0 :%016" PFLL "X IT1 :%016" PFLL "X IT2 :%016" PFLL "X IT3 :%016" PFLL "X\n" + " IT4 :%016" PFLL "X IT5 :%016" PFLL "X IT6 :%016" PFLL "X IT7 :%016" PFLL "X\n" + " IT8 :%016" PFLL "X IT9 :%016" PFLL "X IT10:%016" PFLL "X IT11:%016" PFLL "X\n" + " IT12:%016" PFLL "X IT13:%016" PFLL "X IT14:%016" PFLL "X IT15:%016" PFLL "X\n" + " IT16:%016" PFLL "X IT17:%016" PFLL "X IT18:%016" PFLL "X IT19:%016" PFLL "X\n" + " IT20:%016" PFLL "X IT21:%016" PFLL "X IT22:%016" PFLL "X\n" + " IGp :%016" PFLL "X IV0 :%016" PFLL "X ISp :%016" PFLL "X ITeb:%016" PFLL "X\n" + " INat:%016" PFLL "X\n", ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionCode, pExceptionInfo->ExceptionRecord->ExceptionAddress, pCtx->IntS0 , pCtx->IntS1 , pCtx->IntS2 , pCtx->IntS3 , @@ -176,12 +205,12 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti hb_snprintf( errmsg, errmsglen, "\n\n" " Exception Code:%08X\n" - " Exception Address:0x%08X\n" - " R0 :0x%08X R1 :0x%08X R2 :0x%08X R3 :0x%08X\n" - " R4 :0x%08X R5 :0x%08X R6 :0x%08X R7 :0x%08X\n" - " R8 :0x%08X R9 :0x%08X R10:0x%08X R11:0x%08X\n" - " R12:0x%08X\n" - " SP :0x%08X LR :0x%08X PC :0x%08X\n" + " Exception Address:%08X\n" + " R0 :%08X R1 :%08X R2 :%08X R3 :%08X\n" + " R4 :%08X R5 :%08X R6 :%08X R7 :%08X\n" + " R8 :%08X R9 :%08X R10:%08X R11:%08X\n" + " R12:%08X\n" + " SP :%08X LR :%08X PC :%08X\n" " Flags:%08X\n", ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionCode, ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionAddress, @@ -199,17 +228,17 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti hb_snprintf( errmsg, errmsglen, "\n\n" " Exception Code:%08X\n" - " Exception Address:0x%08X\n" - " IZe:0x%08X IAt:0x%08X ILo:0x%08X IHi:0x%08X\n" - " IA0:0x%08X IA1:0x%08X IA2:0x%08X IA3:0x%08X\n" - " IT0:0x%08X IT1:0x%08X IT2:0x%08X IT3:0x%08X\n" - " IT4:0x%08X IT5:0x%08X IT6:0x%08X IT7:0x%08X\n" - " IT8:0x%08X IT9:0x%08X IV0:0x%08X IV1:0x%08X\n" - " IS0:0x%08X IS1:0x%08X IS2:0x%08X IS3:0x%08X\n" - " IS4:0x%08X IS5:0x%08X IS6:0x%08X IS7:0x%08X\n" - " IS8:0x%08X IK0:0x%08X IK1:0x%08X\n" - " IGp:0x%08X ISp:0x%08X IRa:0x%08X\n" - " Fsr:0x%08X Fir:0x%08X Psr:0x%08X\n", + " Exception Address:%08X\n" + " IZe:%08X IAt:%08X ILo:%08X IHi:%08X\n" + " IA0:%08X IA1:%08X IA2:%08X IA3:%08X\n" + " IT0:%08X IT1:%08X IT2:%08X IT3:%08X\n" + " IT4:%08X IT5:%08X IT6:%08X IT7:%08X\n" + " IT8:%08X IT9:%08X IV0:%08X IV1:%08X\n" + " IS0:%08X IS1:%08X IS2:%08X IS3:%08X\n" + " IS4:%08X IS5:%08X IS6:%08X IS7:%08X\n" + " IS8:%08X IK0:%08X IK1:%08X\n" + " IGp:%08X ISp:%08X IRa:%08X\n" + " Fsr:%08X Fir:%08X Psr:%08X\n", ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionCode, ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionAddress, ( HB_U32 ) pCtx->IntZero, ( HB_U32 ) pCtx->IntAt, ( HB_U32 ) pCtx->IntLo, ( HB_U32 ) pCtx->IntHi, @@ -230,17 +259,17 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti hb_snprintf( errmsg, errmsglen, "\n\n" " Exception Code:%08X\n" - " Exception Address:0x%016" PFLL "X\n" - " IZe:0x%016" PFLL "X IAt:0x%016" PFLL "X ILo:0x%016" PFLL "X IHi:0x%016" PFLL "X\n" - " IA0:0x%016" PFLL "X IA1:0x%016" PFLL "X IA2:0x%016" PFLL "X IA3:0x%016" PFLL "X\n" - " IT0:0x%016" PFLL "X IT1:0x%016" PFLL "X IT2:0x%016" PFLL "X IT3:0x%016" PFLL "X\n" - " IT4:0x%016" PFLL "X IT5:0x%016" PFLL "X IT6:0x%016" PFLL "X IT7:0x%016" PFLL "X\n" - " IT8:0x%016" PFLL "X IT9:0x%016" PFLL "X IV0:0x%016" PFLL "X IV1:0x%016" PFLL "X\n" - " IS0:0x%016" PFLL "X IS1:0x%016" PFLL "X IS2:0x%016" PFLL "X IS3:0x%016" PFLL "X\n" - " IS4:0x%016" PFLL "X IS5:0x%016" PFLL "X IS6:0x%016" PFLL "X IS7:0x%016" PFLL "X\n" - " IS8:0x%016" PFLL "X IK0:0x%016" PFLL "X IK1:0x%016" PFLL "X\n" - " IGp:0x%016" PFLL "X ISp:0x%016" PFLL "X IRa:0x%016" PFLL "X\n" - " Fsr:0x%016" PFLL "X Fir:0x%016" PFLL "X Psr:0x%016" PFLL "X\n", + " Exception Address:%016" PFLL "X\n" + " IZe:%016" PFLL "X IAt:%016" PFLL "X ILo:%016" PFLL "X IHi:%016" PFLL "X\n" + " IA0:%016" PFLL "X IA1:%016" PFLL "X IA2:%016" PFLL "X IA3:%016" PFLL "X\n" + " IT0:%016" PFLL "X IT1:%016" PFLL "X IT2:%016" PFLL "X IT3:%016" PFLL "X\n" + " IT4:%016" PFLL "X IT5:%016" PFLL "X IT6:%016" PFLL "X IT7:%016" PFLL "X\n" + " IT8:%016" PFLL "X IT9:%016" PFLL "X IV0:%016" PFLL "X IV1:%016" PFLL "X\n" + " IS0:%016" PFLL "X IS1:%016" PFLL "X IS2:%016" PFLL "X IS3:%016" PFLL "X\n" + " IS4:%016" PFLL "X IS5:%016" PFLL "X IS6:%016" PFLL "X IS7:%016" PFLL "X\n" + " IS8:%016" PFLL "X IK0:%016" PFLL "X IK1:%016" PFLL "X\n" + " IGp:%016" PFLL "X ISp:%016" PFLL "X IRa:%016" PFLL "X\n" + " Fsr:%016" PFLL "X Fir:%016" PFLL "X Psr:%016" PFLL "X\n", ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionCode, pExceptionInfo->ExceptionRecord->ExceptionAddress, pCtx->IntZero, pCtx->IntAt, pCtx->IntLo, pCtx->IntHi, @@ -261,12 +290,12 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti hb_snprintf( errmsg, errmsglen, "\n\n" " Exception Code:%08X\n" - " Exception Address:0x%08X\n" - " R0 :0x%08X R1 :0x%08X R2 :0x%08X R3 :0x%08X\n" - " R4 :0x%08X R5 :0x%08X R6 :0x%08X R7 :0x%08X\n" - " R8 :0x%08X R9 :0x%08X R10:0x%08X R11:0x%08X\n" - " R12:0x%08X R13:0x%08X R14:0x%08X R15:0x%08X\n" - " PR :0x%08X MACH:0x%08X MACL:0x%08X GBR:0x%08X\n", + " Exception Address:%08X\n" + " R0 :%08X R1 :%08X R2 :%08X R3 :%08X\n" + " R4 :%08X R5 :%08X R6 :%08X R7 :%08X\n" + " R8 :%08X R9 :%08X R10:%08X R11:%08X\n" + " R12:%08X R13:%08X R14:%08X R15:%08X\n" + " PR :%08X MACH:%08X MACL:%08X GBR:%08X\n", ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionCode, ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionAddress, ( HB_U32 ) pCtx->R0 , ( HB_U32 ) pCtx->R1 , ( HB_U32 ) pCtx->R2 , ( HB_U32 ) pCtx->R3 , @@ -277,25 +306,33 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti } #elif defined( HB_CPU_X86 ) { - char buf[ 64 + MAX_PATH ]; - PCONTEXT pCtx = pExceptionInfo->ContextRecord; - unsigned char * pc; - unsigned int * sc; - unsigned int * ebp; - unsigned int eip; - unsigned int j; - int i; + char buf[ 64 + MAX_PATH ]; + PCONTEXT pCtx = pExceptionInfo->ContextRecord; + const char * szCode; + + /* two most common codes */ + switch( pExceptionInfo->ExceptionRecord->ExceptionCode ) + { + case EXCEPTION_ACCESS_VIOLATION: + szCode = " " "ACCESS_VIOLATION"; + break; + case EXCEPTION_IN_PAGE_ERROR: + szCode = " " "IN_PAGE_ERROR"; + break; + default: + szCode = ""; + } hb_snprintf( errmsg, errmsglen, "\n\n" - " Exception Code:%08X\n" + " Exception Code:%08X%s\n" " Exception Address:%08X\n" " EAX:%08X EBX:%08X ECX:%08X EDX:%08X\n" " ESI:%08X EDI:%08X EBP:%08X\n" " CS:EIP:%04X:%08X SS:ESP:%04X:%08X\n" " DS:%04X ES:%04X FS:%04X GS:%04X\n" " Flags:%08X\n", - ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionCode, + ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionCode, szCode, ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionAddress, ( HB_U32 ) pCtx->Eax, ( HB_U32 ) pCtx->Ebx, ( HB_U32 ) pCtx->Ecx, ( HB_U32 ) pCtx->Edx, ( HB_U32 ) pCtx->Esi, ( HB_U32 ) pCtx->Edi, ( HB_U32 ) pCtx->Ebp, @@ -303,52 +340,75 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti ( HB_U32 ) pCtx->SegDs, ( HB_U32 ) pCtx->SegEs, ( HB_U32 ) pCtx->SegFs, ( HB_U32 ) pCtx->SegGs, ( HB_U32 ) pCtx->EFlags ); - hb_strncat( errmsg, " CS:EIP:", errmsglen ); - pc = ( unsigned char * ) pCtx->Eip; - for( i = 0; i < 16; i++ ) + if( pExceptionInfo->ExceptionRecord->NumberParameters && + pExceptionInfo->ExceptionRecord->NumberParameters < ( DWORD ) EXCEPTION_MAXIMUM_PARAMETERS ) { - /* TOFIX: Unsafe funcion. */ - if( IsBadReadPtr( pc, 1 ) ) - break; - hb_snprintf( buf, sizeof( buf ) - 1, " %02X", ( int ) pc[ i ] ); - hb_strncat( errmsg, buf, errmsglen ); - } - hb_strncat( errmsg, "\n SS:ESP:", errmsglen ); - sc = ( unsigned int * ) pCtx->Esp; - for( i = 0; i < 16; i++ ) - { - /* TOFIX: Unsafe funcion. */ - if( IsBadReadPtr( sc, 4 ) ) - break; - hb_snprintf( buf, sizeof( buf ), " %08X", sc[ i ] ); - hb_strncat( errmsg, buf, errmsglen ); - } - hb_strncat( errmsg, "\n\n", errmsglen ); - hb_strncat( errmsg, " C stack:\n", errmsglen ); - hb_strncat( errmsg, " EIP: EBP: Frame: OldEBP, RetAddr, Params...\n", errmsglen ); - eip = pCtx->Eip; - ebp = ( unsigned int * ) pCtx->Ebp; - /* TOFIX: Unsafe funcion. */ - if( ! IsBadWritePtr( ebp, 8 ) ) - { - for( i = 0; i < 20; i++ ) + DWORD arg; + + hb_strncat( errmsg, " Exception Parameters:", errmsglen ); + for( arg = 0; arg < pExceptionInfo->ExceptionRecord->NumberParameters; ++arg ) { - /* TOFIX: Unsafe funcion. */ - if( ( unsigned int ) ebp % 4 != 0 || IsBadWritePtr( ebp, 40 ) || ( unsigned int ) ebp >= ebp[ 0 ] ) - break; - hb_snprintf( buf, sizeof( buf ), " %08X %08X ", ( int ) eip, ( int ) ebp ); + hb_snprintf( buf, sizeof( buf ), " %08X", ( HB_U32 ) pExceptionInfo->ExceptionRecord->ExceptionInformation[ arg ] ); hb_strncat( errmsg, buf, errmsglen ); - for( j = 0; j < 10 && ( unsigned int ) ( ebp + j ) < ebp[ 0 ]; j++ ) - { - hb_snprintf( buf, sizeof( buf ), " %08X", ebp[ j ] ); - hb_strncat( errmsg, buf, errmsglen ); - } - hb_strncat( errmsg, "\n", errmsglen ); - eip = ebp[ 1 ]; - ebp = ( unsigned int * ) ebp[ 0 ]; } hb_strncat( errmsg, "\n", errmsglen ); } + + { + unsigned char * pc; + unsigned int * sc; + unsigned int * ebp; + unsigned int eip; + unsigned int j; + int i; + + hb_strncat( errmsg, " CS:EIP:", errmsglen ); + pc = ( unsigned char * ) pCtx->Eip; + for( i = 0; i < 16; i++ ) + { + /* TOFIX: Unsafe funcion. */ + if( IsBadReadPtr( pc, 1 ) ) + break; + hb_snprintf( buf, sizeof( buf ), " %02X", ( int ) pc[ i ] ); + hb_strncat( errmsg, buf, errmsglen ); + } + hb_strncat( errmsg, "\n SS:ESP:", errmsglen ); + sc = ( unsigned int * ) pCtx->Esp; + for( i = 0; i < 16; i++ ) + { + /* TOFIX: Unsafe funcion. */ + if( IsBadReadPtr( sc, 4 ) ) + break; + hb_snprintf( buf, sizeof( buf ), " %08X", sc[ i ] ); + hb_strncat( errmsg, buf, errmsglen ); + } + hb_strncat( errmsg, "\n\n", errmsglen ); + hb_strncat( errmsg, " C stack:\n", errmsglen ); + hb_strncat( errmsg, " EIP: EBP: Frame: OldEBP, RetAddr, Params...\n", errmsglen ); + eip = pCtx->Eip; + ebp = ( unsigned int * ) pCtx->Ebp; + /* TOFIX: Unsafe funcion. */ + if( ! IsBadWritePtr( ebp, 8 ) ) + { + for( i = 0; i < 20; i++ ) + { + /* TOFIX: Unsafe funcion. */ + if( ( unsigned int ) ebp % 4 != 0 || IsBadWritePtr( ebp, 40 ) || ( unsigned int ) ebp >= ebp[ 0 ] ) + break; + hb_snprintf( buf, sizeof( buf ), " %08X %08X ", ( int ) eip, ( int ) ebp ); + hb_strncat( errmsg, buf, errmsglen ); + for( j = 0; j < 10 && ( unsigned int ) ( ebp + j ) < ebp[ 0 ]; j++ ) + { + hb_snprintf( buf, sizeof( buf ), " %08X", ebp[ j ] ); + hb_strncat( errmsg, buf, errmsglen ); + } + hb_strncat( errmsg, "\n", errmsglen ); + eip = ebp[ 1 ]; + ebp = ( unsigned int * ) ebp[ 0 ]; + } + hb_strncat( errmsg, "\n", errmsglen ); + } + } } #endif @@ -404,7 +464,7 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti char buf[ 256 ]; #if defined( HB_OS_WIN_64 ) /* TOFIX: me32.szExePath seemed trashed in some (standalone) tests. */ - hb_snprintf( buf, sizeof( buf ), "0x%016" PFLL "X 0x%016" PFLL "X %s\n", ( HB_PTRDIFF ) me32.modBaseAddr, ( HB_PTRDIFF ) me32.modBaseSize, me32.szExePath ); + hb_snprintf( buf, sizeof( buf ), "%016" PFLL "X %016" PFLL "X %s\n", ( HB_PTRDIFF ) me32.modBaseAddr, ( HB_PTRDIFF ) me32.modBaseSize, me32.szExePath ); #else char szBuffer[ MAX_PATH ]; #if defined( HB_OS_WIN_CE ) @@ -412,7 +472,7 @@ static LONG WINAPI hb_winExceptionHandler( struct _EXCEPTION_POINTERS * pExcepti #else hb_strncpy( szBuffer, me32.szExePath, HB_SIZEOFARRAY( szBuffer ) - 1 ); #endif - hb_snprintf( buf, sizeof( buf ), "0x%08lX 0x%08lX %s\n", ( HB_PTRDIFF ) me32.modBaseAddr, ( HB_PTRDIFF ) me32.modBaseSize, szBuffer ); + hb_snprintf( buf, sizeof( buf ), "%08lX %08lX %s\n", ( HB_PTRDIFF ) me32.modBaseAddr, ( HB_PTRDIFF ) me32.modBaseSize, szBuffer ); #endif hb_strncat( errmsg, buf, errmsglen ); } diff --git a/src/vm/runner.c b/src/vm/runner.c index a0407fe5c8..4edcc09fd9 100644 --- a/src/vm/runner.c +++ b/src/vm/runner.c @@ -423,8 +423,7 @@ static PHRB_BODY hb_hrbLoad( const char * szHrbBody, HB_SIZE nBodySize, HB_USHOR if( pHrbBody->ulFuncs ) { - pDynFunc = ( PHB_DYNF ) hb_xgrab( pHrbBody->ulFuncs * sizeof( HB_DYNF ) ); - memset( pDynFunc, 0, pHrbBody->ulFuncs * sizeof( HB_DYNF ) ); + pDynFunc = ( PHB_DYNF ) hb_xgrabz( pHrbBody->ulFuncs * sizeof( HB_DYNF ) ); pHrbBody->pDynFunc = pDynFunc; for( ul = 0; ul < pHrbBody->ulFuncs; ul++ ) diff --git a/src/vm/set.c b/src/vm/set.c index 60985b9bd7..7825da1d0d 100644 --- a/src/vm/set.c +++ b/src/vm/set.c @@ -326,7 +326,7 @@ static void open_handle( PHB_SET_STRUCT pSet, const char * file_name, else handle = hb_fileExtOpen( szFileName, hb_stackSetStruct()->HB_SET_DEFEXTENSIONS ? def_ext : NULL, - ( !fStripEof || set_specifier == HB_SET_PRINTFILE ? FO_WRITE : FO_READWRITE ) | + ( ! fStripEof || set_specifier == HB_SET_PRINTFILE ? FO_WRITE : FO_READWRITE ) | FO_DENYWRITE | FXO_SHARELOCK | ( fAppend ? FXO_APPEND : FXO_TRUNCATE ) | ( szDevice ? 0 : FXO_DEFAULTS ), @@ -1228,10 +1228,8 @@ int hb_setListenerAdd( HB_SET_LISTENER_CALLBACK * callback ) PHB_SET_LISTENER_LST pList; if( ! pSet->hb_set_listener ) - { - pSet->hb_set_listener = hb_xgrab( sizeof( HB_SET_LISTENER_LST ) ); - memset( pSet->hb_set_listener, 0, sizeof( HB_SET_LISTENER_LST ) ); - } + pSet->hb_set_listener = hb_xgrabz( sizeof( HB_SET_LISTENER_LST ) ); + pList = ( PHB_SET_LISTENER_LST ) pSet->hb_set_listener; p_sl->callback = callback; diff --git a/src/vm/short.c b/src/vm/short.c new file mode 100644 index 0000000000..5760fbcf03 --- /dev/null +++ b/src/vm/short.c @@ -0,0 +1,52 @@ +/* + * Harbour Project source code: + * Short (10 chars long) version of some functions for Cl*pper compatibility + * + * Copyright 2014 Viktor Szakats (vszakats.net/harbour) + * www - http://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, or (at your option) + * any later version. + * + * 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 software; see the file COPYING.txt. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries 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 Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbapi.h" + +HB_FUNC_TRANSLATE( __CLASSINS, __CLASSINSTANCE ) +HB_FUNC_TRANSLATE( __CLASSNAM, __CLASSNAME ) diff --git a/src/vm/task.c b/src/vm/task.c index 0bff82af9b..7c0168670d 100644 --- a/src/vm/task.c +++ b/src/vm/task.c @@ -507,8 +507,7 @@ static PHB_TASKINFO hb_taskNew( long stack_size ) if( stack_size < HB_TASK_STACK_MIN ) stack_size = HB_TASK_STACK_MIN; - pTask = ( PHB_TASKINFO ) memset( hb_xgrab( sizeof( HB_TASKINFO ) ), 0, - sizeof( HB_TASKINFO ) ); + pTask = ( PHB_TASKINFO ) hb_xgrabz( sizeof( HB_TASKINFO ) ); pTask->stack = ( char * ) hb_xgrab( stack_size ); stack_size += ( HB_PTRDIFF ) pTask->stack; @@ -561,8 +560,7 @@ void hb_taskInit( void ) { if( s_iTaskID == 0 ) { - s_mainTask = s_currTask = ( PHB_TASKINFO ) - memset( hb_xgrab( sizeof( HB_TASKINFO ) ), 0, sizeof( HB_TASKINFO ) ); + s_mainTask = s_currTask = ( PHB_TASKINFO ) hb_xgrabz( sizeof( HB_TASKINFO ) ); /* main task uses default application stack */ s_currTask->id = ++s_iTaskID; s_currTask->state = TASK_RUNNING; @@ -745,7 +743,7 @@ void hb_taskResume( void * pTaskPtr ) { #if ! defined( HB_HAS_UCONTEXT ) case TASK_INIT: - /* save current execution context */ + /* save current execution context */ if( setjmp( s_currTask->context ) == 0 ) { s_currTask = pTask; @@ -769,7 +767,7 @@ void hb_taskResume( void * pTaskPtr ) /* save current execution context and switch to the new one */ swapcontext( &pCurrTask->context, &pTask->context ); #else - /* save current execution context */ + /* save current execution context */ if( setjmp( s_currTask->context ) == 0 ) { s_currTask = pTask;