Contents

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.