speedrun-timer/time.lisp
2022-05-31 15:59:29 -07:00

19 lines
876 B
Common Lisp

;; Makes a-list with '((hours . HOURS) (minutes . MINUTES) (seconds . SECONDS) (cs . CENTISECONDS))
(defun make-time-alist (cs)
`((hours . ,(floor (/ cs (* 100 60 60))))
(minutes . ,(floor (mod (/ cs (* 100 60)) 60)))
(seconds . ,(floor (mod (/ cs 100) 60)))
(cs . ,(mod cs 100))))
;; Formats, disregarding min/hour if they shouldn't be shown, a time alist to "H:M:S.ms"
(defun format-time (time-alist)
(let
((hours (cdr (assoc 'hours time-alist)))
(minutes (cdr (assoc 'minutes time-alist)))
(seconds (cdr (assoc 'seconds time-alist)))
(centis (cdr (assoc 'cs time-alist))))
(concatenate 'string
(unless (zerop hours) (format nil "~2,'0d:" hours))
(unless (and (zerop minutes) (zerop hours)) (format nil "~2,'0d:" minutes))
(format nil "~2,'0d.~2,'0d" seconds centis))))