SCFG - Simple configuration files
A module that can be used for reading and writing simple configuration files. The file format is encapsulated. It is however currently scheme write/read format. Later, maybe it will use XML.
Currently this module doesn't work multi-user, i.e. concurrent use of configuration
files will most likely result in problems. If you're going to use scfg configuration
files concurrently, you'll have to provide your own locking.
Synopsis
>(require (planet "scfg.scm" ("oesterholt" "ho-utils.plt" 1 0)))
>(define cfg (sfg-new "config.scfg"))
>(scfg-set! a '(a configuration parameter) "a-value")
>(scfg-set! a '(another config par) (list 'a 'list 'of 'values))
>(scfg-set! a 'par1 12)
>(define I 1)
>(scfg-set! a (list 'par 'value I) (* I (post++ I)))
>(scfg-set! a (list 'par 'value I) (* I (post++ I)))
>(scfg-set! a (list 'par 'value I) (* I (post++ I)))
>(scfg-get a (list 'par 'value 2))
4
>(scfg-get a (list 'par 'value 8))
undef
>(scfg-get a (list 'par 'value 8) "HI!")
"HI!"
> (scfg-map (lambda (key val) (display (format "~a=~a~%" key val)) val) a)
(par value 3)=9
(par value 2)=4
(par value 1)=1
(par1)=12
(another config par)=(a list of values)
(a configuration parameter)=a-value
(%scfg version)=$Id: scfg.scm,v 1.2 2006/05/27 17:38:02 hoesterholt Exp $
(%scfg filename)=config.scfg
("config.scfg" "$Id: scfg.scm,v 1.2 2006/05/27 17:38:02 hoesterholt Exp $" "a-value" (a list of values) 12 1 4 9)
> (scfg-rm! a (list 'par 'value 2))
#<procedure:proc>
> (scfg-get a (list 'par 'value 2))
undef
> (scfg-rm! a (list 'par 'value 8))
#<procedure:proc>
> (scfg-save a)
#<procedure:proc>
> (scfg-filename a)
"config.scfg"
> (scfg-save a "new.scfg")
#<procedure:proc>
> (scfg-filename a)
"new.scfg"
> (scfg-save a "d:/")
open-output-file: "d:/" exists as a directory
> (scfg-filename a)
"new.scfg"
API
Standard use
(scfg-new . <file>) : scfg-handle
Creates or reads file into memory for use as scfg structure.
Returns an scfg handle. If no file is provided, only
a new scfg-handle is created, but no contents are read from
file.
(scfg-save <scfg-handle> . <file>) : <scfg-handle>
Writes the current contents of scfg handle to the filename given with
the scfg-new function or the given file parameter. Returns the
given scfg-handle.
(scfg-set! <scfg-handle> <key> <value>) : <scfg-handle>
Sets key to value. key can be a symbol or number or a list of symbols and
numbers.
(scfg-get <scfg-handle> <key> . <default-value>) : <value>
Returns the value associated with key, or, if key doesn't exist
withing scfg-handle, the default-value, if given, or 'undef, if
no default value has been given.
(scfg-rm! <scfg-handle> <key>): <scfg-handle>
Removes key from the scfg-handle. If key doesn't exist, it
doesn't complain. Returns the given scfg-handle.
(scfg-filename <scfg-handle>) : string
Returns the current associated filename with the scfg-handle. The current
associated filename is the last one saved or the one provided with scfg-new.
(scfg-cond-set!-get <scfg-handle> <key> <default> . <value>) : <value>
Sets key in scfg-handle, if value has been given. Returns the current
value associated with key, or default, if key does not exist within
scfg-handle.
Concurrent use
(scfg-multi-get <scfg-handle> <key> . <default>) : <value>##
Should provide concurrent access to the scfg configuration file. Is
currently a call to scfg-get.
(scfg-multi-set! <scfg-handle> <key> <value>) : <scfg-handle>##
Should provide concurrent access to the scfg configuration file. Is
currently a call to scfg-set! followed by a call to scfg-save.
Info
(c) 2005 Hans Oesterholt-Dijkema. Distributed undef LGPL. Contact: send email to hans in domain elemental-programming.org. Homepage: http://www.elemental-programming.org.