marshall request variables added by andyjpb on Thu Sep 13 16:08:17 2012
(define (alist->name/value-pairs alist)
(map (lambda (entry)
(let* ((name (car entry))
(value (cdr entry))
(name-len (string-length name))
(value-len (string-length value))
(name-len-size (if (> name-len #x7f) 4 1))
(value-len-size (if (> value-len #x7f) 4 1))
(name-len-start 0)
(value-len-start name-len-size)
(name-start (+ value-len-start value-len-size))
(value-start (+ name-start name-len))
(blob-len (+ value-start value-len))
(blob (make-empty-record blob-len)))
(if (> name-len-size 1)
(u32encode blob name-len (+ 3 name-len-start) (+ 2 name-len-start) (+ 1 name-len-start) name-len-start)
(u8vector-set! blob name-len-start name-len))
(if (> value-len-size 1)
(u32encode blob value-len (+ 3 value-len-start) (+ 2 value-len-start) (+ 1 value-len-start) value-len-start)
(u8vector-set! blob value-len-start value-len))
(with-input-from-string name (lambda () (read-u8vector! name-len blob (current-input-port) name-start)))
(with-input-from-string value (lambda () (read-u8vector! value-len blob (current-input-port) value-start)))
blob))
alist))