(define (time-parse x) (if (nil? x) (throw nil) (regex "([0-9][0-9])%3A([0-9][0-9])" x 0) (list (int $1 0 10) (int $2 0 10)) (throw nil) )) (define (int-parse x) (if (nil? x) (throw nil) (regex "^([0-9]+)$" x 0) (int $1 0 10) (throw nil))) (define (mode-parse x) (if (member x '("closed" "timed" "opened")) (sym x) (throw nil))) (setf UPDATE "** UPDATE ERROR **") (catch (let ((data "")(b "") (c '()) (v nil)) (while (read 0 b 1000) (extend data b)) (setf v (map (fn (x) (parse x "=")) (parse data "&"))) (for (i 1 7) (push (list i (mode-parse (lookup (string "mode" i) v)) (time-parse (lookup (string "start" i) v)) (time-parse (lookup (string "limit" i) v)) (time-parse (lookup (string "end" i) v)) ) c -1)) (write-file CONTROLFILE (append (format "; Updated at %s\n(" (date)) (join (map string c) "\n " true) ")\n")) (setf UPDATE "* controls updated *") )) "controls-update.lsp"