#!/usr/bin/env gosh (use text.edn) (use file.util) (use scheme.mapping.hash) (use gauche.parseopt) (define (show-help progname) (display (format "~a: tracktrain's onboard config-and-state manager. Usage: ~a [options] key [value] This is a very simple key-value store. Give both to set, give just the key to look something up Options: -s --statefile: state file -h --help: display this help " progname)) (exit 0)) (define (main args) (let-args (cdr args) ((statefile "s|state=s") (help "h|help" => (cut show-help (car args))) . restargs) (define file (if (equal? statefile #f) "./obu-state.edn" statefile)) (if (= (length restargs) 2) (set file (list-ref restargs 0) (list-ref restargs 1)) (display (get file (list-ref restargs 0)))) (exit 0))) (define (set file key value) (define data (if (file-exists? file) (call-with-input-file file parse-edn) (edn-map))) (define data2 (hashmap-set data (string->symbol key) value)) (call-with-output-file file (cut construct-edn data2 <>))) (define (get file key) (if (file-exists? file) (hashmap-ref (call-with-input-file file parse-edn) (string->symbol key)) #f))