Welcome to the CHICKEN Scheme pasting service

token-utils added by andyjpb on Thu Aug 16 23:07:57 2012

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; u8vector<->number procedures shamlessly stolen from the 9p egg.
;; These vectors are in reverse network byte ordering because the 9p protocol
;; expects them that way.  (ie, little endian)
(define (u8vector->number v)
  (let loop ((i (u8vector-length v))
	     (num 0))
    (if (zero? i)
	num
        (loop (sub1 i)
	      (+ (arithmetic-shift num 8)
		 (u8vector-ref v (sub1 i)))))))

(define (number->u8vector size number)
  (let ((v (make-u8vector size 0)))
    (let loop ((i size)
	       (num number))
      (if (zero? i)
	  (if (zero? num)
	      v
	      ;; Internal error
	      (error (sprintf "Number too large: ~A can't be split into an u8vector of ~A entries" number size)))
	  (begin
	    (u8vector-set! v (- size i) (inexact->exact (modulo num 256))) ; XXX
	    (loop (sub1 i) (quotient num 256)))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define (u8vectors->base64 . vecs)
  (if (= 1 (length vecs))
    (base64-encode (blob->string (u8vector->blob/shared (car vecs))))
    (u8vectors->base64 (list->u8vector (flatten (map u8vector->list vecs))))))

(define (base64->u8vectors str . subu8ranges)
  (let ((vec (blob->u8vector (string->blob (base64-decode str)))))
    (if (> (length subu8ranges) 0)
      (apply values (map (lambda (x) (subu8vector vec (car x) (cadr x))) subu8ranges))
      vec)))



(define (decode-cookie cookie)
  (base64->u8vectors cookie '(0 4) '(4 12) '(12 24)))

(define encode-cookie u8vectors->base64)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
Which egg implements a Scheme to JavaScript compiler?
Visually impaired? Let me spell it for you (wav file) download WAV