+;; run-mars: command-line utility for running redcode programs
+;;
+
(import (chicken io)
(chicken process-context)
matchable
(cdr progs-left)
(cdr colors-left))))))
-(define (run-mars-with-vis files iters core-size)
- (print "Iters: " iters ", core size: " core-size "\n")
+(define (mars-runner files iters core-size visualization)
+ (print "Iters: " iters ", core size: " core-size)
(let* ((progs (map
(lambda (fname)
(string->prog (with-input-from-file fname read-string)))
files))
- (colors '("red" "blue" "green" "magenta" "cyan"))
- (color-map (make-color-map progs colors))
- (vis (make-vis 640 480 core-size color-map))
- (core (make-core 8000 (make-instr 'DAT 'F 'immediate 0 'immediate 0)
- (lambda (i n)
- (vis 'update-owner i n))))
+ (empty-instr (make-instr 'DAT 'F 'immediate 0 'immediate 0))
+ (core (if visualization
+ (let* ((colors '("red" "blue" "green" "magenta" "cyan"))
+ (color-map (make-color-map progs colors))
+ (vis (make-vis 640 480 core-size color-map)))
+ (make-core 8000 empty-instr (lambda (i n)
+ (vis 'update-owner i n))))
+ (make-core 8000 empty-instr)))
(queues (run-mars core (install-progs core progs) iters)))
(for-each (lambda (q)
+ (print)
(print "Final queue for " (queue-owner q) ":")
- (dump-queue q core)
- (print))
+ (dump-queue q core))
queues)
- (print* "Press enter to finish...")
- (read-line)))
-
+ (when visualization
+ (print* "Press enter to finish...")
+ (read-line))))
(define (print-usage)
(print "Usage: run-mars [-h|--help]\n"
- " run-mars [-c|--core size] [-i|--iterations n] warrior1.red [warrior2.red [...]]"))
+ " run-mars [-c|--core size]\n"
+ " [-i|--iterations iters]\n"
+ " [-n|--no-visualization]\n"
+ " warrior1.red [warrior2.red [...]]"))
(define (main)
(let loop ((args (cdr (argv)))
(iters 10000)
- (core-size 8000))
+ (core-size 8000)
+ (visualization #t))
(match args
((or () ((or "-h" "--help")))
(print-usage))
(((or "-i" "--iterations") istr rest ...)
- (loop rest (string->number istr) core-size))
+ (loop rest (string->number istr) core-size visualization))
(((or "-c" "--core-size") cstr rest ...)
- (loop rest iters (string->number cstr)))
+ (loop rest iters (string->number cstr) visualization))
+ (((or "-n" "--no-visualization") rest ...)
+ (loop rest iters core-size #f))
((files ...)
- (run-mars-with-vis files iters core-size)))))
+ (mars-runner files iters core-size visualization)))))
(main)