compile-r7rs/snow/retropikzel/pffi/larceny-util.scm

89 lines
2.0 KiB
Scheme

;; Copied from Larceny source
;; Copyright 1998 Lars T Hansen.
;; Copied code begins
(define %set32u)
; %peek* and %poke*: convenient access to values in memory.
(define (%peek8 addr)
(let ((x (make-bytevector 1)))
(peek-bytes addr x 1)
(let ((v (bytevector-ref x 0)))
(if (> v 127)
(- (- 256 v))
v))))
(define (%peek16 addr)
(let ((x (make-bytevector 2)))
(peek-bytes addr x 2)
(%get16 x 0)))
(define (%peek32 addr)
(let ((x (make-bytevector 4)))
(peek-bytes addr x 4)
(%get32 x 0)))
(define (%peek8u addr)
(let ((x (make-bytevector 1)))
(peek-bytes addr x 1)
(bytevector-ref x 0)))
(define (%peek16u addr)
(let ((x (make-bytevector 2)))
(peek-bytes addr x 2)
(%get16u x 0)))
(define (%peek32u addr)
(let ((x (make-bytevector 4)))
(peek-bytes addr x 4)
(%get32u x 0)))
(define (%poke8 addr val)
(let ((x (make-bytevector 1)))
(if (< val 0)
(bytevector-set! x 0 (+ 256 val))
(bytevector-set! x 0 val))
(poke-bytes addr x 1)))
(define (%poke16 addr val)
(let ((x (make-bytevector 2)))
(%set16 x 0 val)
(poke-bytes addr x 2)))
(define (%poke32 addr val)
(let ((x (make-bytevector 4)))
(%set32 x 0 val)
(poke-bytes addr x 4)))
(define (%poke8u addr val)
(let ((x (make-bytevector 1)))
(bytevector-set! x 0 val)
(poke-bytes addr x 1)))
(define (%poke16u addr val)
(let ((x (make-bytevector 2)))
(%set16u x 0 val)
(poke-bytes addr x 2)))
(define (%poke32u addr val)
(let ((x (make-bytevector 4)))
(%set32u x 0 val)
(poke-bytes addr x 4)))
(define %peek-int %peek32)
(define %peek-long %peek32)
(define %peek-uint %peek32u)
(define %peek-ulong %peek32u)
(define %peek-short %peek16)
(define %peek-ushort %peek16u)
(define %peek-pointer %peek32u)
(define %poke-int %poke32)
(define %poke-long %poke32)
(define %poke-uint %poke32u)
(define %poke-ulong %poke32u)
(define %poke-short %poke16)
(define %poke-ushort %poke16u)
(define %poke-pointer %poke32u)