* contrib/hbtpathy/telepath.prg
* using hb_default() instead of rolling it manually
* contrib/gtwvg/tests/wvgactivex.prg
* contrib/gtwvg/tests/wvgmodal.prg
* contrib/hbhttpd/core.prg
* contrib/hbhttpd/log.prg
* contrib/hbide/hbqreportsmanager.prg
* contrib/hbide/hbqtoolbar.prg
* contrib/hbide/idebrowse.prg
* contrib/hbide/ideconsole.prg
* contrib/hbide/idedict.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/ideharbourhelp.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/ideshortcuts.prg
* contrib/hbide/idesources.prg
* contrib/hbide/idestylesheets.prg
* contrib/hbide/idethemes.prg
* contrib/hbide/idetools.prg
* contrib/hbide/ideuisrcmanager.prg
* contrib/hbmagic/hbmagis.prg
* contrib/hbmxml/tests/custom.prg
* contrib/hbnetio/utils/hbnetio/netiomgm.prg
* contrib/hbnetio/utils/hbnetio/netiosrv.prg
* contrib/hbnf/menutonf.prg
* contrib/hbnf/ontick.prg
* contrib/hboslib/core.prg
* contrib/hbqt/tests/cls_dbstruct.prg
* contrib/hbqt/tests/demoqt.prg
* contrib/hbxbp/tests/xbpqtc.prg
* contrib/xhb/stream.prg
* contrib/xhb/xhbole.prg
* examples/hbxlsxml/xlsxml_s.prg
* examples/hbxlsxml/xlsxml_y.prg
* examples/hbxlsxml/xlsxml.prg
* tests/parseini.prg
* formatting HB_IS*() calls
! using HB_ISSTRING() instead of HB_ISCHAR() on .prg level
* utils/hbmk2/hbmk2.prg
! minor typo on help screen
184 lines
3.8 KiB
Plaintext
184 lines
3.8 KiB
Plaintext
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/******************************************************************
|
|
* Test for Ini file reading/writing
|
|
*
|
|
* Giancarlo Niccolai
|
|
*/
|
|
|
|
PROCEDURE Main( cName )
|
|
|
|
LOCAL hIni, aSect, cIni
|
|
LOCAL cSection
|
|
LOCAL cKey
|
|
LOCAL nRow := 1
|
|
|
|
SET COLOR TO w +/ b
|
|
CLEAR SCREEN
|
|
@ nRow++, 20 SAY "H A R B O U R - .ini file parser test"
|
|
@ nRow++, 5 SAY "Call from command line using a .ini filename as the only parameter"
|
|
nRow++
|
|
|
|
IF Empty( cName )
|
|
cName := "parseini.ini"
|
|
@nRow++ , 5 SAY "Using default parseini.ini file"
|
|
ENDIF
|
|
|
|
hIni := hb_iniRead( cName )
|
|
|
|
@ nRow, 0
|
|
|
|
? "Content of " + cName
|
|
|
|
IF Empty( hIni )
|
|
? "Not a valid .ini file!"
|
|
ELSE
|
|
FOR EACH cSection IN hIni:Keys
|
|
?
|
|
? "Section [" + cSection + "]"
|
|
aSect := hIni[ cSection ]
|
|
|
|
FOR EACH cKey IN aSect:Keys
|
|
? cKey + " = " + aSect[ cKey ]
|
|
NEXT
|
|
NEXT
|
|
ENDIF
|
|
|
|
?
|
|
? "Adding section 'Added', with key NEW = new"
|
|
hIni[ "Added" ] := { => }
|
|
hIni[ "Added" ][ "NEW" ] := "new"
|
|
|
|
? "Writing output to parseini_out.ini"
|
|
IF hb_iniWrite( "parseini_out.ini", hIni, "#Generated file; don't touch", "#End of file" )
|
|
? "File written"
|
|
ELSE
|
|
? "Can't write file"
|
|
ENDIF
|
|
?
|
|
? "Press any key to next text."
|
|
Inkey( 0 )
|
|
|
|
nRow := 3
|
|
@ nRow, 0 CLEAR
|
|
?
|
|
? "REPEATING TESTS WITHOUT AUTOMATIC MAIN SECTION"
|
|
?
|
|
|
|
hIni := hb_iniRead( cName,; /* default case */
|
|
,; /* default key indicators */
|
|
, .F. )
|
|
|
|
? "Content of " + cName
|
|
|
|
IF Empty( hIni )
|
|
? "Not a valid .ini file!"
|
|
ELSE
|
|
FOR EACH cSection IN hIni:Keys
|
|
/* Now (without automatic main), toplevel options may be in the root hash */
|
|
aSect := hIni[ cSection ]
|
|
|
|
IF HB_ISHASH( aSect )
|
|
/* It's a section */
|
|
?
|
|
? "Section [" + cSection + "]"
|
|
|
|
FOR EACH cKey IN aSect:Keys
|
|
? cKey + " = " + aSect[ cKey ]
|
|
NEXT
|
|
ELSE
|
|
/* It's a toplevel option */
|
|
? "TOPLEVEL option:", cSection + " = " + aSect
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
|
|
?
|
|
? "Adding section 'Added', with key NEW = new"
|
|
hIni[ "Added" ] := { => }
|
|
hIni[ "Added" ][ "NEW" ] := "new"
|
|
|
|
? "Writing output to parseini_out1.ini"
|
|
IF hb_IniWrite( "parseini_out1.ini", hIni,;
|
|
"#Generated file without main auto section; don't touch", "#End of file",;
|
|
.F. )
|
|
? "File written"
|
|
ELSE
|
|
? "Can't write file"
|
|
ENDIF
|
|
?
|
|
? "Press any key to next text."
|
|
Inkey( 0 )
|
|
|
|
nRow := 3
|
|
@ nRow, 0 CLEAR
|
|
?
|
|
? "WRITING INI TO A STRING"
|
|
?
|
|
|
|
cIni := hb_IniWriteStr( hIni )
|
|
|
|
? "Content of hIni : "
|
|
?
|
|
? cIni
|
|
?
|
|
? "Press any key to next text."
|
|
Inkey( 0 )
|
|
|
|
nRow := 3
|
|
@ nRow, 0 CLEAR
|
|
?
|
|
? "READING INI FILE FROM A STRING"
|
|
?
|
|
|
|
hIni := hb_IniReadStr( cIni,; /*default case*/
|
|
,; /*Default key indicators */
|
|
, .F. )
|
|
|
|
? "Content: "
|
|
|
|
IF Empty( hIni )
|
|
? "Not a valid .ini file!"
|
|
ELSE
|
|
FOR EACH cSection IN hIni:Keys
|
|
/* Now (without automatic main), toplevel options may be in the root hash */
|
|
aSect := hIni[ cSection ]
|
|
|
|
IF HB_ISHASH( aSect )
|
|
/* It's a section */
|
|
?
|
|
? "Section [" + cSection + "]"
|
|
|
|
FOR EACH cKey IN aSect:Keys
|
|
? cKey + " = " + aSect[ cKey ]
|
|
NEXT
|
|
ELSE
|
|
/* It's a toplevel option */
|
|
? "TOPLEVEL option:", cSection + " = " + aSect
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
|
|
?
|
|
? "Press any key to next text."
|
|
Inkey( 0 )
|
|
|
|
nRow := 3
|
|
@ nRow, 0 CLEAR
|
|
?
|
|
? "WRITING INI FILE TO A STRING "
|
|
?
|
|
|
|
cIni := hb_IniWriteStr( hb_IniRead( cName ) )
|
|
|
|
? "Content of " + cName
|
|
?
|
|
? cIni
|
|
?
|
|
? "Press any key to next text."
|
|
Inkey( 0 )
|
|
|
|
RETURN
|