(context 'MAIN:SITE) (define (set-int K V) (set K (int V 0 10))) (define (set-ints K V) (set K (map int (clean empty? (parse V "(\\s+|\\s*,\\s*)" 0))))) (define (set-list K V) (set K (clean empty? (parse V "(\\s+|\\s*,\\s*)" 0)))) (constant 'FILE "hourglass.conf" 'KEYS '( ("listener.ports" set-ints) ("listener.net" set) ("listener.log.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) (let ((SET $it) (K (sym (KV 0))) (V (KV 1))) ;(write-line 2 (string (list K V))) (apply SET (list K V))))))) (map setting (parse (or (read-file FILE) "") "\n")) "siteconfig.lsp"