summaryrefslogtreecommitdiff
path: root/main.lisp
blob: ae2bb9a6606c1f5cd27e3358692372aa7467f148 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
(load "helper.lisp")
(load "splits.lisp")

(defvar current-split '())
(defvar done-splits '())
(defvar last-time-space-pressed 0)
(defvar pb 0)

(defun read-in-splits (filename)
  (cond
	((y-or-n-p "Read file")
	  (read-file-of-splits filename)
	  (setf
	   *splits*
	   (set-column-in-run-from-other-run
		2
		(make-run-of-best-segments *all-splits* 0)
		*splits*))
	  (setf
	   *splits*
	   (set-column-in-run-from-other-run
		3
		(get-best-run *all-splits* (car *all-splits*) (cadr (car *splits*)))
		*splits*))))
  (setf pb (sum-splits *splits* 3))
  (setf current-split (car *splits*))
  (setf *splits* (cdr *splits*))
)

(defun main (filename)
  (read-in-splits filename)
  (setf last-time-space-pressed (get-internal-real-time))
  (charms:with-curses ()
    (charms:disable-echoing)
    (charms:enable-raw-input :interpret-control-characters t)
    (charms:enable-non-blocking-mode charms:*standard-window*)
	(loop :named driver-loop
		  :for c := (charms:get-char charms:*standard-window*
									 :ignore-error t)
		  :do (progn
				(charms:clear-window charms:*standard-window*)
				(if (null current-split) (return-from driver-loop))
				(charms:write-string-at-point charms:*standard-window* (make-output (push-on-list current-split done-splits) 0 pb) 0 0)
				(charms:refresh-window charms:*standard-window*)
				(setf current-split (update-split current-split last-time-space-pressed))
				(case c
				  ((nil) nil)
				  ((#\Space)
				   (progn
					 (setf last-time-space-pressed (get-internal-real-time))
					 (setf done-splits (push-on-list current-split done-splits))
					 (setf current-split (car *splits*))
					 (setf *splits* (cdr *splits*))))
				  ((#\q) (return-from driver-loop)))
				(sleep 0.01)
				)))
  (setf *all-splits* (cons done-splits *all-splits*))
  (cond ((y-or-n-p "Save?") (with-open-file (output filename :direction :output :if-exists :supersede) (print *all-splits* output))))
  (format nil (format-time (sum-splits done-splits 1))))