1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
; Copyright (c) 1993-2008 by Richard Kelsey. See file COPYING.
(define (byte-vector-endianess)
(if (eq? byte-vector-word-ref high-byte-vector-word-ref)
'high
'low))
(define (set-byte-vector-endianess! high-or-low)
(case high-or-low
((high)
(set! byte-vector-word-ref high-byte-vector-word-ref)
(set! byte-vector-half-word-ref high-byte-vector-half-word-ref)
(set! byte-vector-word-set! high-byte-vector-word-set!)
(set! byte-vector-half-word-set! high-byte-vector-half-word-set!))
((low)
(set! byte-vector-word-ref low-byte-vector-word-ref)
(set! byte-vector-half-word-ref low-byte-vector-half-word-ref)
(set! byte-vector-word-set! low-byte-vector-word-set!)
(set! byte-vector-half-word-set! low-byte-vector-half-word-set!))
(else
(error "endianess specifier is neither HIGH nor LOW" high-or-low))))
(define (high-byte-vector-word-ref vector index)
(+ (byte-vector-ref vector (+ index 3))
(arithmetic-shift
(+ (byte-vector-ref vector (+ index 2))
(arithmetic-shift
(+ (byte-vector-ref vector (+ index 1))
(arithmetic-shift
(byte-vector-ref vector index)
8))
8))
8)))
(define (high-byte-vector-word-set! vector index value)
(byte-vector-set! vector index (arithmetic-shift value -24))
(byte-vector-set! vector (+ index 1) (arithmetic-shift value -16))
(byte-vector-set! vector (+ index 2) (arithmetic-shift value -8))
(byte-vector-set! vector (+ index 3) value))
(define (high-byte-vector-half-word-ref vector index)
(+ (byte-vector-ref vector (+ index 1))
(arithmetic-shift
(byte-vector-ref vector index)
8)))
(define (high-byte-vector-half-word-set! vector index value)
(byte-vector-set! vector index (arithmetic-shift value -8))
(byte-vector-set! vector (+ index 1) value))
(define (low-byte-vector-word-ref vector index)
(+ (byte-vector-ref vector index)
(arithmetic-shift
(+ (byte-vector-ref vector (+ index 1))
(arithmetic-shift
(+ (byte-vector-ref vector (+ index 2))
(arithmetic-shift
(byte-vector-ref vector (+ index 3))
8))
8))
8)))
(define (low-byte-vector-word-set! vector index value)
(byte-vector-set! vector index value)
(byte-vector-set! vector (+ index 1) (arithmetic-shift value -8))
(byte-vector-set! vector (+ index 2) (arithmetic-shift value -16))
(byte-vector-set! vector (+ index 3) (arithmetic-shift value -24)))
(define (low-byte-vector-half-word-ref vector index)
(+ (byte-vector-ref vector index)
(arithmetic-shift
(byte-vector-ref vector (+ index 1))
8)))
(define (low-byte-vector-half-word-set! vector index value)
(byte-vector-set! vector index value)
(byte-vector-set! vector (+ index 1) (arithmetic-shift value -8)))
; Start high-endian
(define byte-vector-word-ref high-byte-vector-word-ref)
(define byte-vector-half-word-ref high-byte-vector-half-word-ref)
(define byte-vector-word-set! high-byte-vector-word-set!)
(define byte-vector-half-word-set! high-byte-vector-half-word-set!)
|