(context 'MAIN:SITE) (define (set-int K V) (set K (int V 0 10))) (define (set-ints K V) (map (curry set-int K) (clean empty? (parse V "\\s*,?\\s*" 0)))) (define (set-list K V) (map (curry set K) (clean empty? (parse V "\\s*,?\\s*" 0)))) (constant 'FILE "hourglass.conf" 'KEYS '( ("listener.ports" set-ints) ("listener.ip" set) ("listener.activity.dir" set) ("listener.tap" set) ("control.action" set) ("control.dat" set) ("control.net" set) ("control.extra.dat" set) ("control.usage.dat" set) ("control.usage.tmp" set) ("control.activity.gap" set-int) ("control.activity.clip" set) ("ipset.bin" set) ("ipset.table" set) ("wui.port" set-int) ("wui.passwd" set) ("libc" set) ("tundev" set) ) ) (define (setting LINE) (when (regex "^\\s([^;#][^=]*)=(.*)" LINE 0) (let ((KV (map trim (list $1 $2)))) (if (lookup (KV 0) KEYS) (apply $it (list (sym (KV 0)) (KV 1))))))) (map setting (parse (or (read-file FILE) "") "\n")) "siteconfig.lsp"