revised to have dat files in local dir
[rrq/hourglass.git] / manager / controls-update.lsp
1 (define (time-parse x)
2   (if (nil? x) (throw nil)
3     (regex "([0-9][0-9])%3A([0-9][0-9])" x 0)
4     (list (int $1 0 10) (int $2 0 10))
5     (throw nil)
6     ))
7
8 (define (int-parse x)
9   (if (nil? x) (throw nil)
10     (regex "^([0-9]+)$" x 0) (int $1 0 10) (throw nil)))
11
12 (define (mode-parse x)
13   (if (member x '("closed" "timed" "opened")) (sym x) (throw nil)))
14
15 (setf UPDATE "** UPDATE ERROR **")
16 (catch
17     (let ((data "")(b "") (c '()) (v nil))
18       (while (read 0 b 1000) (extend data b))
19       (setf v (map (fn (x) (parse x "=")) (parse data "&")))
20       (push (list 'control "ipset-control.lsp") c -1)
21       (push (list 'gap (int-parse (lookup "gap" v))) c -1)
22       (push (list 'clip (int-parse (lookup "clip" v))) c -1)
23       (for (i 1 7)
24         (push (list i
25                     (mode-parse (lookup (string "mode" i) v))
26                     (time-parse (lookup (string "start" i) v))
27                     (time-parse (lookup (string "limit" i) v))
28                     (time-parse (lookup (string "end" i) v))
29                     ) c -1))
30       (write-file "control.dat"
31                   (append (format "; Updated at %s\n(" (date))
32                           (join (map string c) "\n " true)
33                           ")\n"))
34       (setf UPDATE "* controls updated *")
35       ))
36
37 "controls-update.lsp"