diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 025a9642bd..e87578e688 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,17 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ +2007-09-10 22:51 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * contrib/libct/ctnet.c + * contrib/libct/dattime2.c + * contrib/samples/date.c + * contrib/bmdbfcdx/bmdbfcdx1.c + * Changed hb_set. access to hb_setGet*() in all + contrib code. + + * source/rtl/hbini.prg + + Further cleanup. + 2007-09-10 22:12 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/source/rtl/hbtoken.c ! fixed bad typo in hb_tokenCount() diff --git a/harbour/contrib/bmdbfcdx/bmdbfcdx1.c b/harbour/contrib/bmdbfcdx/bmdbfcdx1.c index 1e17f9a3a5..d5cd32815a 100644 --- a/harbour/contrib/bmdbfcdx/bmdbfcdx1.c +++ b/harbour/contrib/bmdbfcdx/bmdbfcdx1.c @@ -3883,7 +3883,7 @@ static BOOL hb_cdxCheckRecordFilter( CDXAREAP pArea, ULONG ulRecNo ) if( pArea->ulRecNo != ulRecNo || pArea->lpdbPendingRel ) SELF_GOTO( ( AREAP ) pArea, ulRecNo ); - if( hb_set.HB_SET_DELETED ) + if( hb_setGetL( HB_SET_DELETED ) ) SUPER_DELETED( ( AREAP ) pArea, &lResult ); if( !lResult && pArea->dbfi.itmCobExpr ) @@ -3903,12 +3903,12 @@ static BOOL hb_cdxCheckRecordFilter( CDXAREAP pArea, ULONG ulRecNo ) else lResult = TRUE; } - else if ( pArea->dbfi.itmCobExpr || hb_set.HB_SET_DELETED ) + else if ( pArea->dbfi.itmCobExpr || hb_setGetL( HB_SET_DELETED ) ) { if( pArea->ulRecNo != ulRecNo || pArea->lpdbPendingRel ) SELF_GOTO( ( AREAP ) pArea, ulRecNo ); - if( hb_set.HB_SET_DELETED ) + if( hb_setGetL( HB_SET_DELETED ) ) SUPER_DELETED( ( AREAP ) pArea, &lResult ); if( !lResult && pArea->dbfi.itmCobExpr ) @@ -6852,7 +6852,7 @@ HB_FUNC( BM_DBSEEKWILD ) if( !ISNIL( 1 ) ) { pKey = hb_param( 1, HB_IT_ANY ); - bSoftSeek = ISLOG( 2 ) ? (BOOL) hb_parl( 2 ) : hb_set.HB_SET_SOFTSEEK; + bSoftSeek = ISLOG( 2 ) ? (BOOL) hb_parl( 2 ) : hb_setGetL( HB_SET_SOFTSEEK ); bFindLast = ISLOG( 3 ) ? hb_parl( 3 ) : FALSE; bNext = ISLOG( 4 ) ? hb_parl( 4 ) : FALSE; bAll = ISLOG( 5 ) ? hb_parl( 5 ) : FALSE; @@ -6974,7 +6974,7 @@ ERRCODE hb_cdxSkipFilter( CDXAREAP pArea, LONG lUpDown ) HB_TRACE(HB_TR_DEBUG, ("hb_cdxSkipFilter(%p, %ld)", pArea, lUpDown)); - if( !hb_set.HB_SET_DELETED && pArea->dbfi.itmCobExpr == NULL ) + if( !hb_setGetL( HB_SET_DELETED ) && pArea->dbfi.itmCobExpr == NULL ) return SUCCESS; /* Since lToSkip is passed to SkipRaw, it should never request more than @@ -6990,7 +6990,7 @@ ERRCODE hb_cdxSkipFilter( CDXAREAP pArea, LONG lUpDown ) while( !pArea->fBof && !pArea->fEof ) { /* SET DELETED */ - if( hb_set.HB_SET_DELETED ) + if( hb_setGetL( HB_SET_DELETED ) ) { LPCDXTAG pTag = hb_cdxGetActiveTag( pArea ); @@ -7239,7 +7239,7 @@ static ERRCODE hb_cdxFlush( CDXAREAP pArea ) uiError = SUPER_FLUSH( ( AREAP ) pArea ); - if ( hb_set.HB_SET_HARDCOMMIT ) + if ( hb_setGetL( HB_SET_HARDCOMMIT ) ) { pIndex = pArea->lpIndexes; while ( pIndex ) @@ -7583,9 +7583,9 @@ static ERRCODE hb_cdxOpen( CDXAREAP pArea, LPDBOPENINFO pOpenInfo ) /* If SET_AUTOPEN open index */ #ifdef HB_CDX_CLIP_AUTOPEN - if ( hb_set.HB_SET_AUTOPEN ) + if ( hb_setGetL( HB_SET_AUTOPEN ) ) #else - if ( pArea->fHasTags && hb_set.HB_SET_AUTOPEN ) + if ( pArea->fHasTags && hb_setGetL( HB_SET_AUTOPEN ) ) #endif { char szFileName[ _POSIX_PATH_MAX + 1 ]; @@ -7603,7 +7603,7 @@ static ERRCODE hb_cdxOpen( CDXAREAP pArea, LPDBOPENINFO pOpenInfo ) errCode = SELF_ORDLSTADD( ( AREAP ) pArea, &pOrderInfo ); if( errCode == SUCCESS ) { - pOrderInfo.itmOrder = hb_itemPutNI( NULL, hb_set.HB_SET_AUTORDER ); + pOrderInfo.itmOrder = hb_itemPutNI( NULL, hb_setGetNI( HB_SET_AUTORDER ) ); errCode = SELF_ORDLSTFOCUS( ( AREAP ) pArea, &pOrderInfo ); hb_itemRelease( pOrderInfo.itmOrder ); if( errCode == SUCCESS ) @@ -7803,9 +7803,9 @@ static ERRCODE hb_cdxOrderListClear( CDXAREAP pArea ) return FAILURE; #ifdef HB_CDX_CLIP_AUTOPEN - hb_cdxOrdListClear( pArea, !hb_set.HB_SET_AUTOPEN, NULL ); + hb_cdxOrdListClear( pArea, !hb_setGetL( HB_SET_AUTOPEN ), NULL ); #else - hb_cdxOrdListClear( pArea, !pArea->fHasTags || !hb_set.HB_SET_AUTOPEN, NULL ); + hb_cdxOrdListClear( pArea, !pArea->fHasTags || !hb_setGetL( HB_SET_AUTOPEN ), NULL ); #endif pArea->uiTag = 0; @@ -8043,9 +8043,9 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo if ( !pArea->lpdbOrdCondInfo || ( pArea->lpdbOrdCondInfo->fAll && !pArea->lpdbOrdCondInfo->fAdditive ) ) #ifdef HB_CDX_CLIP_AUTOPEN - hb_cdxOrdListClear( pArea, !hb_set.HB_SET_AUTOPEN, NULL ); + hb_cdxOrdListClear( pArea, !hb_setGetL( HB_SET_AUTOPEN ), NULL ); #else - hb_cdxOrdListClear( pArea, !pArea->fHasTags || !hb_set.HB_SET_AUTOPEN, NULL ); + hb_cdxOrdListClear( pArea, !pArea->fHasTags || !hb_setGetL( HB_SET_AUTOPEN ), NULL ); #endif pIndex = hb_cdxFindBag( pArea, szFileName ); @@ -8166,9 +8166,9 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo !pArea->lpdbOrdCondInfo->fAdditive ) ) { #ifdef HB_CDX_CLIP_AUTOPEN - hb_cdxOrdListClear( pArea, !hb_set.HB_SET_AUTOPEN, pIndex ); + hb_cdxOrdListClear( pArea, !hb_setGetL( HB_SET_AUTOPEN ), pIndex ); #else - hb_cdxOrdListClear( pArea, !pArea->fHasTags || !hb_set.HB_SET_AUTOPEN, pIndex ); + hb_cdxOrdListClear( pArea, !pArea->fHasTags || !hb_setGetL( HB_SET_AUTOPEN ), pIndex ); #endif } hb_cdxIndexUnLockWrite( pIndex ); @@ -8179,7 +8179,7 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo if ( !pArea->fReadonly && ( pArea->dbfHeader.bHasTags & 0x01 ) == 0 ) { #ifdef HB_CDX_CLIP_AUTOPEN - if ( hb_set.HB_SET_AUTOPEN ) + if ( hb_setGetL( HB_SET_AUTOPEN ) ) #endif SELF_WRITEDBHEADER( ( AREAP ) pArea ); } @@ -8250,7 +8250,7 @@ static ERRCODE hb_cdxOrderDestroy( CDXAREAP pArea, LPDBORDERINFO pOrderInfo ) if ( !pArea->fReadonly && ( pArea->dbfHeader.bHasTags & 0x01 ) != 0 ) { #ifdef HB_CDX_CLIP_AUTOPEN - if ( hb_set.HB_SET_AUTOPEN ) + if ( hb_setGetL( HB_SET_AUTOPEN ) ) #endif SELF_WRITEDBHEADER( ( AREAP ) pArea ); } @@ -9014,7 +9014,7 @@ static ERRCODE hb_cdxSetFilter( CDXAREAP pArea, LPDBFILTERINFO pFilterInfo ) if ( SUPER_SETFILTER( ( AREAP ) pArea, pFilterInfo ) != SUCCESS ) return FAILURE; - pArea->dbfi.fOptimized = hb_set.HB_SET_OPTIMIZE; + pArea->dbfi.fOptimized = hb_setGetL( HB_SET_OPTIMIZE ); if ( pArea->dbfi.fOptimized ) { @@ -9882,7 +9882,7 @@ static void hb_cdxTagDoIndex( LPCDXTAG pTag, BOOL fReindex ) pArea->uiTag = 0; } } - fDirectRead = !hb_set.HB_SET_STRICTREAD && /* !pArea->lpdbRelations && */ + fDirectRead = !hb_setGetL( HB_SET_STRICTREAD ) && /* !pArea->lpdbRelations && */ ( !pArea->lpdbOrdCondInfo || pArea->lpdbOrdCondInfo->fAll || ( pArea->uiTag == 0 && !fUseFilter ) ); diff --git a/harbour/contrib/libct/ctnet.c b/harbour/contrib/libct/ctnet.c index da6f67968f..bddd6bbb72 100644 --- a/harbour/contrib/libct/ctnet.c +++ b/harbour/contrib/libct/ctnet.c @@ -1,45 +1,14 @@ /* * $Id$ - * + */ + +/* * xHarbour Project source code: * CT3 NET functions to PC-LAN/MS-NET. * * Copyright 2004 Eduardo Fernandes * www - http://www.xharbour.org * - ******* - * - * CT3 NET Functions Comments: - * - * NETCANCEL( ) -> lReleased - * Return true if was disconnected. - * - * NETDISK( cDrive ) -> lSuccess - * Return true if is a network drive, otherwise return false if is a local drive. - * - * NETLOCNAME( cSahredDevice ) -> cLocalDevice - * Not implemented yet. - * - * NETPRINTER() -> lSuccess - * Return true if a current local printer seted by SET PRINTER TO was connected to a - * network printer. - * - * NETREDIR( cLocalDevice, cSharedDevice, [ cPassword ], [ lShowError] ) -> lSuccess - * Return true if was connected to with , if any. - * - * NETRMTNAME( cLocalDevice ) -> cSharedName - * Return the shared resource name connected to a . - * The original parameter in CA-Clipper Tools was changed to in - * xHarbour because in Windows Network I didnīt find a number table like in MS-DOS. See - * CA-Tools help for more details. - * - * NETWORK() -> lSuccess - * Return true if a PC-LAN/MS-NET or Netware type is active. - * - * NNETWORK() -> lSuccess - * Return true if a Netware type is active. - * - ****** * 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) @@ -79,8 +48,38 @@ * whether to permit this exception to apply to your modifications. * If you do not wish that, delete this exception notice. * + */ + +/* + * CT3 NET Functions Comments: * - * See doc/license.txt for licensing terms. + * NETCANCEL( ) -> lReleased + * Return true if was disconnected. + * + * NETDISK( cDrive ) -> lSuccess + * Return true if is a network drive, otherwise return false if is a local drive. + * + * NETLOCNAME( cSahredDevice ) -> cLocalDevice + * Not implemented yet. + * + * NETPRINTER() -> lSuccess + * Return true if a current local printer seted by SET PRINTER TO was connected to a + * network printer. + * + * NETREDIR( cLocalDevice, cSharedDevice, [ cPassword ], [ lShowError] ) -> lSuccess + * Return true if was connected to with , if any. + * + * NETRMTNAME( cLocalDevice ) -> cSharedName + * Return the shared resource name connected to a . + * The original parameter in CA-Clipper Tools was changed to in + * xHarbour because in Windows Network I didnīt find a number table like in MS-DOS. See + * CA-Tools help for more details. + * + * NETWORK() -> lSuccess + * Return true if a PC-LAN/MS-NET or Netware type is active. + * + * NNETWORK() -> lSuccess + * Return true if a Netware type is active. * */ @@ -180,7 +179,7 @@ HB_FUNC( NETCANCEL ) HB_FUNC( NETPRINTER ) { - char *cPrn = hb_set.HB_SET_PRINTFILE; /* query default local printer port. */ + char * cPrn = hb_setGetCPtr( HB_SET_PRINTFILE ); /* query default local printer port. */ if( !cPrn || !*cPrn || stricmp( cPrn, "PRN" ) == 0 ) cPrn = "LPT1"; diff --git a/harbour/contrib/libct/dattime2.c b/harbour/contrib/libct/dattime2.c index 2f8b111cbe..ada935822c 100644 --- a/harbour/contrib/libct/dattime2.c +++ b/harbour/contrib/libct/dattime2.c @@ -152,7 +152,7 @@ HB_FUNC( CTODOW ) szDow = hb_strdup( ( char * ) hb_langDGetItem( HB_LANG_ITEM_BASE_DAY + iDow ) ); hb_strupr( szDow ); - if( hb_set.HB_SET_EXACT ) + if( hb_setGetL( HB_SET_EXACT ) ) { iEqual = ( strlen( szDow ) == strlen( szParam ) ) && !memcmp( szDow, szParam, strlen( szParam ) ); @@ -227,7 +227,7 @@ HB_FUNC( CTOMONTH ) szMonth = hb_strdup( ( char * ) hb_langDGetItem( HB_LANG_ITEM_BASE_MONTH + iMonth - 1 ) ); hb_strupr( szMonth ); - if( hb_set.HB_SET_EXACT ) + if( hb_setGetL( HB_SET_EXACT ) ) { iEqual = ( strlen( szMonth ) == strlen( szParam ) ) && !memcmp( szMonth, szParam, strlen( szParam ) ); @@ -339,7 +339,7 @@ HB_FUNC( DMY ) szMDY[iLen] = ' '; iLen++; - if( hb_set.hb_set_century ) + if( hb_setGetL( hb_set_century ) ) { snprintf( szMDY + iLen, 5, "%04d", iYear ); iLen += 4; @@ -425,7 +425,7 @@ HB_FUNC( MDY ) } szMDY[iLen++] = ' '; - if( hb_set.hb_set_century ) + if( hb_setGetL( hb_set_century ) ) { snprintf( szMDY + iLen, 5, "%04d", iYear ); iLen += 4; @@ -945,8 +945,8 @@ HB_FUNC( WEEK ) { LONG lDate2; - if( hb_set.HB_SET_DATEFORMAT && ( hb_set.HB_SET_DATEFORMAT[0] == 'd' || - hb_set.HB_SET_DATEFORMAT[0] == 'D' ) ) + if( hb_setGetCPtr( HB_SET_DATEFORMAT ) && ( hb_setGetCPtr( HB_SET_DATEFORMAT )[0] == 'd' || + hb_setGetCPtr( HB_SET_DATEFORMAT )[0] == 'D' ) ) lDate2 = lDate + 3 - ( hb_dateDOW( iYear, iMonth, iDay ) + 5 ) % 7; else lDate2 = lDate + 4 - hb_dateDOW( iYear, iMonth, iDay ); diff --git a/harbour/contrib/samples/date.c b/harbour/contrib/samples/date.c index a4c5eab7da..706db1bedc 100644 --- a/harbour/contrib/samples/date.c +++ b/harbour/contrib/samples/date.c @@ -71,14 +71,14 @@ HB_FUNC( MDY ) iLen = strlen( hb_dateCMonth( iMonth ) ); - iBufferLen = iLen + ( hb_set.hb_set_century ? 9 : 7 ); + iBufferLen = iLen + ( hb_setGetL( hb_set_century ) ? 9 : 7 ); szReturn = ( char * ) hb_xgrab( iBufferLen ); memset( szReturn, ' ', iBufferLen + 1 ); memcpy( szReturn, hb_dateCMonth( iMonth ), iLen ); memcpy( szReturn + iLen + 1, szFormatted + 3, 2 ); szReturn[ iLen + 3 ] = ','; - memcpy( szReturn + iLen + 5, szFormatted + 6 + ( hb_set.hb_set_century ? 0 : 2 ), 2 + ( hb_set.hb_set_century ? 2 : 0 ) ); + memcpy( szReturn + iLen + 5, szFormatted + 6 + ( hb_setGetL( hb_set_century ) ? 0 : 2 ), 2 + ( hb_setGetL( hb_set_century ) ? 2 : 0 ) ); hb_retclen( szReturn, iBufferLen ); hb_xfree( szReturn ); @@ -100,13 +100,13 @@ HB_FUNC( DMY ) iLen = strlen( hb_dateCMonth( iMonth ) ); - iBufferLen = iLen + ( hb_set.hb_set_century ? 9 : 7 ); + iBufferLen = iLen + ( hb_setGetL( hb_set_century ) ? 9 : 7 ); szReturn = ( char * ) hb_xgrab( iBufferLen ); memset( szReturn, ' ', iBufferLen ); memcpy( szReturn, szFormatted + 3, 2 ); memcpy( szReturn + 3, hb_dateCMonth( iMonth ), iLen ); - memcpy( szReturn + iLen + 4, szFormatted + 6 + ( hb_set.hb_set_century ? 0 : 2 ), 2 + ( hb_set.hb_set_century ? 2 : 0 ) ); + memcpy( szReturn + iLen + 4, szFormatted + 6 + ( hb_setGetL( hb_set_century ) ? 0 : 2 ), 2 + ( hb_setGetL( hb_set_century ) ? 2 : 0 ) ); hb_retclen( szReturn, iBufferLen ); hb_xfree( szReturn ); diff --git a/harbour/source/rtl/hbini.prg b/harbour/source/rtl/hbini.prg index 2acde4a340..0720a77159 100644 --- a/harbour/source/rtl/hbini.prg +++ b/harbour/source/rtl/hbini.prg @@ -4,32 +4,7 @@ /* * xHarbour Project source code: - * HB_ReadIni - Reading .ini files - * - * Copyright 2002 Giancarlo Niccolai [gian@niccolai.ws] - * www - http://www.xharbour.org - * - * This small procedure reads a .ini file in the standard .ini format into - * an hash array: - * ; A line starting with a ';' is a comment - * # Also, a '#' marks a comment up to the end of the line - * [NewSection] - * Variable = Value - * OtherVariable: Value - * - * You can pass a list of "potential" .ini files in a ';' separated path; - * the first readable file will be loaded. - * - * On error, the function returns NIL. On success, you will have an hash - * array of this form: - * - * { 'MAIN' => { 'Key1' => 'Val1', ... ,'KeyN' => 'ValN'}, - * 'Section1' => { 'Key1' => 'Val1', ... ,'KeyN' => 'ValN'}, - * ... - * 'SectionN' => { 'Key1' => 'Val1', ... ,'KeyN' => 'ValN'} - * } - * - * Main is the default section (variables that are declared without a section). + * Handling .ini files * * Copyright 2002 Giancarlo Niccolai [gian@niccolai.ws] * www - http://www.xharbour.org @@ -74,46 +49,63 @@ * */ -#include "fileio.ch" +/* + * This small procedure reads a .ini file in the standard .ini format into + * an hash array: + * ; A line starting with a ';' is a comment + * # Also, a '#' marks a comment up to the end of the line + * [NewSection] + * Variable = Value + * OtherVariable: Value + * + * You can pass a list of "potential" .ini files in a ';' separated path; + * the first readable file will be loaded. + * + * On error, the function returns NIL. On success, you will have an hash + * array of this form: + * + * { 'MAIN' => { 'Key1' => 'Val1', ... ,'KeyN' => 'ValN'}, + * 'Section1' => { 'Key1' => 'Val1', ... ,'KeyN' => 'ValN'}, + * ... + * 'SectionN' => { 'Key1' => 'Val1', ... ,'KeyN' => 'ValN'} + * } + * + * Main is the default section (variables that are declared without a section). + * + */ + #include "common.ch" - -static s_cLineComment := ";" -static s_cHalfLineComment := "#" +#include "fileio.ch" -PROCEDURE HB_SetIniComment( cLc, cHlc ) +STATIC s_cLineComment := ";" +STATIC s_cHalfLineComment := "#" + + +PROCEDURE hb_SetIniComment( cLc, cHlc ) s_cLineComment := cLc s_cHalfLineComment := cHlc RETURN -FUNCTION HB_ReadIni( cFileSpec, bKeyCaseSens, cSplitters, bAutoMain ) - LOCAL hIni +FUNCTION hb_ReadIni( cFileSpec, bKeyCaseSens, cSplitters, bAutoMain ) + LOCAL hIni := hb_Hash() /* Default case sensitiveness for keys */ - IF bKeyCaseSens == NIL - bKeyCaseSens := .T. - ENDIF + DEFAULT bKeyCaseSens TO .T. + DEFAULT cSplitters TO "=|:" + DEFAULT bAutoMain TO .T. - IF cSplitters == NIL - cSplitters := "=|:" - ENDIF - - IF bAutoMain == NIL - bAutoMain := .T. - END - - hIni := HB_Hash() - HB_HCaseMatch( hIni, bKeyCaseSens ) - HB_HAutoAdd( hIni, HB_HAUTOADD_ASSIGN ) + hb_HCaseMatch( hIni, bKeyCaseSens ) + hb_HAutoAdd( hIni, HB_HAUTOADD_ASSIGN ) IF bAutoMain hIni[ "MAIN" ] := hb_Hash() - END + ENDIF -RETURN HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMain ) +RETURN hb_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMain ) -STATIC FUNCTION HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMain ) +STATIC FUNCTION hb_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMain ) LOCAL aFiles LOCAL cFile, nLen LOCAL aKeyVal, hCurrentSection @@ -121,26 +113,26 @@ STATIC FUNCTION HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMai LOCAL cData, cBuffer, cLine LOCAL reComment, reInclude, reSection, reSplitters - reComment := HB_RegexComp( s_cHalfLineComment + "|^[ \t]*" + s_cLineComment ) - reInclude := HB_RegexComp( "include (.*)" ) - reSection := HB_RegexComp( "[[](.*)[]]" ) - reSplitters := HB_RegexComp( cSplitters ) + reComment := hb_RegexComp( s_cHalfLineComment + "|^[ \t]*" + s_cLineComment ) + reInclude := hb_RegexComp( "include (.*)" ) + reSection := hb_RegexComp( "[[](.*)[]]" ) + reSplitters := hb_RegexComp( cSplitters ) - aFiles := HB_aTokens( cFileSpec, HB_OSPATHLISTSEPARATOR() ) + aFiles := hb_aTokens( cFileSpec, hb_OSPathListSeparator() ) IF Empty( aFiles ) aFiles := { cFileSpec } ENDIF - hFile := -1 + hFile := F_ERROR FOR EACH cFile IN aFiles - IF !EMPTY( cFile ) .AND. File( cFile ) - IF ( hFile := FOpen( cFile ) ) != -1 + IF ! Empty( cFile ) .AND. File( cFile ) + IF ( hFile := FOpen( cFile ) ) != F_ERROR EXIT ENDIF ENDIF NEXT - IF hFile == -1 + IF hFile == F_ERROR RETURN NIL ENDIF @@ -156,19 +148,19 @@ STATIC FUNCTION HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMai hCurrentSection := hIni[ "MAIN" ] ELSE hCurrentSection := hIni - END + ENDIF cLine := "" DO WHILE Len( cData ) > 0 nLen := 2 - nLineEnd := At( chr( 13 ) + chr( 10 ), cData ) + nLineEnd := At( Chr( 13 ) + Chr( 10 ), cData ) IF nLineEnd == 0 - nLineEnd := At( chr( 10 ) + chr( 13 ), cData ) + nLineEnd := At( Chr( 10 ) + Chr( 13 ), cData ) IF nLineEnd == 0 nLen := 1 - nLineEnd := At( chr( 10 ), cData ) + nLineEnd := At( Chr( 10 ), cData ) IF nLineEnd == 0 - nLineEnd := At( chr( 13 ), cData ) + nLineEnd := At( Chr( 13 ), cData ) IF nLineEnd == 0 nLineEnd := Len( cData ) ENDIF @@ -177,9 +169,9 @@ STATIC FUNCTION HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMai ENDIF /* Get the current line */ - cLine += AllTrim( Substr( cData, 1, nLineEnd - 1 ) ) + cLine += AllTrim( SubStr( cData, 1, nLineEnd - 1 ) ) /* remove current line */ - cData := Substr( cData, nLineEnd + nLen ) + cData := SubStr( cData, nLineEnd + nLen ) /* Skip void lines */ IF Empty( cLine ) @@ -187,9 +179,9 @@ STATIC FUNCTION HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMai ENDIF /* Sum up lines terminating with "||" ...*/ - IF Len( cLine ) > 3 .and. SubStr( cLine, -3, 3 ) == " ||" + IF Len( cLine ) > 3 .AND. SubStr( cLine, -3, 3 ) == " ||" - cLine := Substr( cLine, 1, Len( cLine ) -2 ) + cLine := SubStr( cLine, 1, Len( cLine ) - 2 ) /* ... but proceed if stream over */ IF Len( cData ) > 0 LOOP @@ -198,9 +190,9 @@ STATIC FUNCTION HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMai ENDIF /* remove eventual comments */ - aKeyVal := HB_RegexSplit( reComment, cLine ) + aKeyVal := hb_RegexSplit( reComment, cLine ) IF ! Empty( aKeyVal ) - cLine := AllTrim( aKeyVal[1] ) + cLine := AllTrim( aKeyVal[ 1 ] ) ENDIF /* Skip all comment lines */ @@ -209,20 +201,20 @@ STATIC FUNCTION HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMai ENDIF /* Is it an "INCLUDE" statement ? */ - aKeyVal := HB_RegEx( reInclude, cLine ) + aKeyVal := hb_RegEx( reInclude, cLine ) IF ! Empty( aKeyVal ) /* ignore void includes */ aKeyVal[ 2 ] := AllTrim( aKeyVal[ 2 ] ) IF Len( aKeyVal[ 2 ] ) == 0 LOOP ENDIF - HB_ReadIni2( hIni, aKeyVal[ 2 ], bKeyCaseSens, cSplitters, bAutoMain ) + hb_ReadIni2( hIni, aKeyVal[ 2 ], bKeyCaseSens, cSplitters, bAutoMain ) cLine := "" LOOP ENDIF /* Is it a NEW section? */ - aKeyVal := HB_Regex( reSection, cLine ) + aKeyVal := hb_Regex( reSection, cLine ) IF ! Empty( aKeyVal ) cLine := AllTrim( aKeyVal[ 2 ] ) IF Len( cLine ) != 0 @@ -237,7 +229,7 @@ STATIC FUNCTION HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMai ENDIF /* Is it a valid key */ - aKeyVal := HB_RegexSplit( reSplitters, cLine,,, 2 ) + aKeyVal := hb_RegexSplit( reSplitters, cLine,,, 2 ) IF Len( aKeyVal ) == 1 /* TODO: Signal error */ cLine := "" @@ -256,29 +248,28 @@ STATIC FUNCTION HB_ReadIni2( hIni, cFileSpec, bKeyCaseSens, cSplitters, bAutoMai RETURN hIni -FUNCTION HB_WriteIni( cFileName, hIni, cCommentBegin, cCommentEnd, bAutoMain ) - LOCAL hFile := -1 - LOCAL lClose := .F. - LOCAL cNewLine := HB_OSNewLine() +FUNCTION hb_WriteIni( xFileName, hIni, cCommentBegin, cCommentEnd, bAutoMain ) + LOCAL hFile + LOCAL lClose + LOCAL cNewLine := hb_OSNewLine() LOCAL cSection LOCAL cBuffer - IF bAutoMain == NIL - bAutoMain := .T. - END - - IF VALTYPE( cFileName ) == "C" - hFile := FCreate( cFileName ) + IF ISCHARACTER( xFileName ) + hFile := FCreate( xFileName ) lClose := .T. - ELSEIF VALTYPE( cFileName ) == "N" - hFile := cFileName - ENDIF - - IF hFile == -1 + ELSEIF ISNUMBER( xFileName ) + hFile := xFileName + lClose := .F. + ELSE RETURN .F. ENDIF - IF !Empty( cCommentBegin ) + IF hFile == F_ERROR + RETURN .F. + ENDIF + + IF ! Empty( cCommentBegin ) cBuffer := cCommentBegin + cNewLine IF FWrite( hFile, cBuffer ) != Len( cBuffer ) IF lClose @@ -288,18 +279,20 @@ FUNCTION HB_WriteIni( cFileName, hIni, cCommentBegin, cCommentEnd, bAutoMain ) ENDIF ENDIF + DEFAULT bAutoMain TO .T. + /* Write toplevel section */ IF bAutoMain /* When automain is on, write the main section */ hb_HEval( hIni[ "MAIN" ], ; - { |cKey, xVal| FWrite( hFile, HB_CStr( cKey ) + " = " + ; - HB_CStr( xVal ) + cNewLine ) } ) + { |cKey, xVal| FWrite( hFile, 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 ),; - FWrite( hFile, HB_CStr( cKey ) + " = " + ; - HB_CStr( xVal ) + cNewLine ), /* nothing */ ) } ) + hb_HEval( hIni, { |cKey, xVal| IIF( ! hb_IsHash( xVal ),; + FWrite( hFile, hb_CStr( cKey ) + " = " + ; + hb_CStr( xVal ) + cNewLine ), /* nothing */ ) } ) ENDIF FOR EACH cSection IN hIni @@ -312,12 +305,12 @@ FUNCTION HB_WriteIni( cFileName, hIni, cCommentBegin, cCommentEnd, bAutoMain ) ENDIF ELSE /* When automain is off, skip all the toplevel variables. */ - IF ! HB_IsHash( cSection ) + IF ! hb_IsHash( cSection ) LOOP - END + ENDIF ENDIF - cBuffer := cNewLine + "[" + HB_CStr( cSection:__enumKey ) + "]" + cNewLine + cBuffer := cNewLine + "[" + hb_CStr( cSection:__enumKey ) + "]" + cNewLine IF FWrite( hFile, cBuffer ) != Len( cBuffer ) IF lClose FClose( hFile ) @@ -326,11 +319,11 @@ FUNCTION HB_WriteIni( cFileName, hIni, cCommentBegin, cCommentEnd, bAutoMain ) ENDIF hb_HEval( cSection, ; - { |cKey, xVal| FWrite( hFile, HB_CStr( cKey ) + "=" + ; - HB_CStr( xVal ) + cNewLine ) } ) + { |cKey, xVal| FWrite( hFile, hb_CStr( cKey ) + "=" + ; + hb_CStr( xVal ) + cNewLine ) } ) NEXT - IF !Empty( cCommentEnd ) + IF ! Empty( cCommentEnd ) cBuffer := cCommentEnd + cNewLine IF FWrite( hFile, cBuffer ) != Len( cBuffer ) IF lClose