random stuff added by ovenpasta on Thu Mar 5 14:26:14 2015
(use utils) (use traversal) (define boot3 (read-all "boot3.txt")) (define lines (map string-split (string-split boot3 "\n"))) ;(string-chop boot3 (* 14 49)) (call-with-output-file "boot3-lines.txt" (lambda (out) (for-each (lambda (l) (write l out) (newline out)) lines))) (define boot3-code (reverse (let loop ((i 0) (l lines) (bsl '()) (size 0)) (if (null? l) bsl (let* ((rem (remainder i 14)) (size (if (= rem 0) (+ (string->number (list-ref (car l) 5) 16) 0) size)) (ok (case rem ((1) (append (reverse (sublist (car l) 6 (+ 6 (min size 6)))) bsl)) (( 2 3 4 5 6 7 8 9 10) (append (reverse (sublist (car l) 5 (+ 5 (min size 7)))) bsl)) (else bsl)))) (loop (+ 1 i) (cdr l) ok (max 0 (- size (if (= rem 1) 6 7))))))))) (define (output name list) (call-with-output-file name (lambda (out) (for-each-indexed (lambda (x n) (if (not (= n 0)) (if (= (remainder n 16) 0) (newline out) (display " " out))) (display x out)) list)))) (output "boot3-code.txt" boot3-code) (define boot3-keys (reverse (let loop ((i 0) (l lines) (bsl '()) (size 0)) (if (null? l) bsl (let* ((rem (remainder i 14)) (size (if (= rem 11) 16 size)) (ok (case rem ((11) (append (reverse (sublist (car l) 7 (+ 7 5))) bsl)) ((12 13) (append (reverse (sublist (car l) 5 (+ 5 (min size 7)))) bsl)) (else bsl)))) (loop (+ 1 i) (cdr l) ok (max 0 (- size (if (= rem 11) 5 7))))))))) (output "boot3-keys.txt" boot3-keys)