#!r6rs (library (rsc3 u8 read) (export read-u16 read-i16 read-u32 read-i32 read-u64 read-i64 read-f32 read-f64 read-pstr read-cstr read-bstr) (import (rnrs) (rnrs bytevectors) (rsc3 u8 decode)) (define (read-bstr n) (get-bytevector-n (current-input-port) n) ) (define (read-i16) (decode-i16 (read-bstr 2))) (define (read-u16) (decode-u16 (read-bstr 2))) (define (read-i32) (decode-i32 (read-bstr 4))) (define (read-u32) (decode-u32 (read-bstr 4))) (define (read-i64) (decode-i64 (read-bstr 8))) (define (read-u64) (decode-u64 (read-bstr 8))) (define (read-f32) (decode-f32 (read-bstr 4))) (define (read-f64) (decode-f64 (read-bstr 8))) (define (read-pstr) (let* ((p (current-input-port)) (n (lookahead-u8 p)) (v (read-bstr (+ n 1)))) (decode-pstr v))) (define (read-cstr) (let loop ((l (list)) (b (get-u8 (current-input-port)))) (if (= b 0) (decode-cstr (u8-list->bytevector (reverse l))) (loop (cons b l) (get-u8 (current-input-port)))))) )