myoji-accent/start.lisp

48 lines
2.0 KiB
Common Lisp

(ql:quickload '(:myoji-accent))
(defparameter *interface* "localhost")
(defparameter *port* 8080)
(defparameter *debug* nil)
(defparameter *db-path* (merge-pathnames
(uiop:pathname-directory-pathname *load-truename*)
"myoji.sqlite"))
(defparameter *help* nil)
(defun parse-arguments (&optional (args (uiop:command-line-arguments)))
(mapl (lambda (arg)
(macrolet ((require-arg (var)
`(assert (second ,var) () "~s requires and argument"
(car ,var))))
(when (member (car arg) '("-h" "--help") :test 'equal)
(setq *help* t))
(when (member (car arg) '("-i" "--interface") :test 'equal)
(require-arg arg)
(setq *interface* (second arg)))
(when (member (car arg) '("-p" "--port") :test 'equal)
(require-arg arg)
(setq *port* (parse-integer (second arg))))
(when (member (car arg) '("-b" "--db") :test 'equal)
(require-arg arg)
(setq *db-path* (parse-integer (second arg))))
(when (member (car arg) '("-d" "--debug") :test 'equal)
(setq *debug* t))))
args))
(defun print-help ()
(format t "usage: sbcl --load ~a~%" *load-pathname*)
(format t " -h|--help print this message, then exit~%")
(format t " -d|--debug enable debug output~%")
(format t " -b|--db path to the database (takes an argument)~%")
(format t " -p|--port the port to use (takes an argument)~%")
(format t " -i|--interface the address to bind to (takes an argument)~%")
(uiop:quit))
(parse-arguments)
(if *help*
(print-help)
(progn
(format t "Loading database from ~s~%" *db-path*)
(myoji-accent/accent:initialize-connection *db-path*)
(format t "Starting server on ~s:~s~%" *interface* *port*)
(reblocks/server:start :interface *interface* :port *port* :debug *debug*)))