diff options
Diffstat (limited to 'guile/net/ricketyspace/taocp/utils/mix.scm')
-rw-r--r-- | guile/net/ricketyspace/taocp/utils/mix.scm | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/guile/net/ricketyspace/taocp/utils/mix.scm b/guile/net/ricketyspace/taocp/utils/mix.scm new file mode 100644 index 0000000..c92a61b --- /dev/null +++ b/guile/net/ricketyspace/taocp/utils/mix.scm @@ -0,0 +1,25 @@ +;;;; copyright 2016 rsiddharth <s@ricketyspace.net> +;;;; under gnu general public license version 3 or higher. + +(define-module (net ricketyspace taocp utils mix) + #:use-module (srfi srfi-13) + #:use-module (srfi srfi-1) + #:export (word-to-decimal + nth-byte)) + +;;;; Functions that facilitate hacking in MIX + +;;; All functions in this module assume that a byte is 6 bits. + +(define (word-to-decimal word) + "Converts WORD to a decimal number. + +WORD must be a string in this format: + + ±:00:00:00:00:00" + (let ((bytes (string-split word #\:))) + (fold (lambda (byte-number d) + (+ (* (expt (expt 2 6) (- 4 byte-number)) + (string->number (list-ref bytes byte-number))) + d)) + 0 (iota 5)))) |