;;; basic-conversions.scm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Really Fundamental Datatypes ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define card8->number uint8->number) (define card16->number uint16->number) (define card32->number uint32->number) (define int8->number sint8->number) (define int16->number sint16->number) (define int32->number sint32->number) (define number->card8 number->uint8) (define number->card16 number->uint16) (define number->card32 number->uint32) (define number->card8/fill! number->uint8/fill!) (define number->card16/fill! number->uint16/fill!) (define number->card32/fill! number->uint32/fill!) (define number->int8 number->sint8) (define number->int16 number->sint16) (define number->int32 number->sint32) (define number->int8/fill! number->sint8/fill!) (define number->int16/fill! number->sint16/fill!) (define number->int32/fill! number->sint32/fill!) (define string8->string identity) (define string->string8 identity) ;;; pad each character in a scheme string with a null ;;; so we end up with two bytes per character. (define string->string16 (lambda (str) (let* ((str-len (string-length str)) (new-str (make-string (* 2 str-len) null-char))) (do ((str-i 0 (+ str-i 1)) (new-i 1 (+ new-i 2))) ((>= str-i str-len) new-str) (string-set! new-str new-i (string-ref str str-i)) )))) ;;; Each character is two bytes. Remove the first from every character. (define string16->string (lambda (str) (let* ((len (string-length str)) (new-len (quotient len 2)) (new (make-string new-len))) (do ((str-i 1 (+ str-i 2)) (new-i 0 (+ new-i 1))) ((>= new-i new-len) new) (string-set! new new-i (string-ref str str-i)) ))))