1 ;; run-mars: command-line utility for running redcode programs
5 (chicken process-context)
7 mars visualizer parser)
9 (define (make-color-map progs colors)
10 (let loop ((entries '())
13 (if (null? progs-left)
15 (let ((this-prog (car progs-left))
16 (this-col (car colors-left)))
17 (loop (cons (cons (prog-name this-prog) this-col) entries)
19 (cdr colors-left))))))
21 (define (mars-runner files iters core-size visualization)
22 (print "Iters: " iters ", core size: " core-size)
25 (string->prog (with-input-from-file fname read-string)))
27 (empty-instr (make-instr 'DAT 'F 'immediate 0 'immediate 0))
28 (core (if visualization
29 (let* ((colors '("red" "blue" "green" "magenta" "cyan"))
30 (color-map (make-color-map progs colors))
31 (vis (make-vis 640 480 core-size color-map)))
32 (make-core 8000 empty-instr (lambda (i n)
33 (vis 'update-owner i n))))
34 (make-core 8000 empty-instr)))
35 (queues (run-mars core (install-progs core progs) iters)))
38 (print "Final queue for " (queue-owner q) ":")
42 (print* "Press enter to finish...")
46 (print "Usage: run-mars [-h|--help]\n"
47 " run-mars [-c|--core size]\n"
48 " [-i|--iterations iters]\n"
49 " [-n|--no-visualization]\n"
50 " warrior1.red [warrior2.red [...]]"))
53 (let loop ((args (cdr (argv)))
58 ((or () ((or "-h" "--help")))
60 (((or "-i" "--iterations") istr rest ...)
61 (loop rest (string->number istr) core-size visualization))
62 (((or "-c" "--core-size") cstr rest ...)
63 (loop rest iters (string->number cstr) visualization))
64 (((or "-n" "--no-visualization") rest ...)
65 (loop rest iters core-size #f))
67 (mars-runner files iters core-size visualization)))))