summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrsiddharth <s@ricketyspace.net>2017-08-08 04:31:09 +0000
committerrsiddharth <s@ricketyspace.net>2017-08-08 04:31:09 +0000
commit2b6938788cb269ad19ecfecf6c58bcdb067e3988 (patch)
treeb4ea81882f7bc2198c9e9c67e9b9eb232e05ee2d
parent46fa54c1a19b30e1d0f8d4067183461ed0859176 (diff)
guile: Add (net ricketyspace taocp utils mix) module.
* guile/net/ricketyspace/taocp/utils/mix.scm: New file.
-rw-r--r--guile/net/ricketyspace/taocp/utils/mix.scm25
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))))