mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-14 23:50:19 +02:00
Import R6RS bytevectors and I/O ports from Guile-R6RS-Libs 0.2.
* README: Document dependency on GNU libunistring. * benchmark-suite/Makefile.am (SCM_BENCHMARKS): Add `benchmark/bytevectors.bm'. * configure.in: Make sure we have libunistring; update $LIBS. * libguile.h: Include "bytevectors.h" and "r6rs-ports.h". * libguile/Makefile.am (libguile_la_SOURCES): Add `bytevectors.c' and `r6rs-ports.c' (DOT_X_FILES): Add `bytevectors.x' and `r6rs-ports.x'. (DOT_DOC_FILES): Add `bytevectors.doc' and `r6rs-ports.doc'. (noinst_HEADERS): Add `ieee-754.h'. (modinclude_HEADERS): Add `bytevectors.h' and `r6rs-ports.h' * libguile/validate.h (SCM_VALIDATE_BYTEVECTOR): New macro. * module/Makefile.am (SOURCES): Add $(RNRS_SOURCES). (RNRS_SOURCES): New variable. * test-suite/Makefile.am (SCM_TESTS): Add `bytevectors.test' and `r6rs-ports.test'.
This commit is contained in:
parent
24d56127bb
commit
1ee2c72eaf
18 changed files with 4688 additions and 12 deletions
84
module/rnrs/bytevector.scm
Normal file
84
module/rnrs/bytevector.scm
Normal file
|
@ -0,0 +1,84 @@
|
|||
;;;; bytevector.scm --- R6RS bytevector API
|
||||
|
||||
;;;; Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
;;;;
|
||||
;;;; This library is free software; you can redistribute it and/or
|
||||
;;;; modify it under the terms of the GNU Lesser General Public
|
||||
;;;; License as published by the Free Software Foundation; either
|
||||
;;;; version 2.1 of the License, or (at your option) any later version.
|
||||
;;;;
|
||||
;;;; This library is distributed in the hope that it will be useful,
|
||||
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
;;;; Lesser General Public License for more details.
|
||||
;;;;
|
||||
;;;; You should have received a copy of the GNU Lesser General Public
|
||||
;;;; License along with this library; if not, write to the Free Software
|
||||
;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
;;; Author: Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
;;; Commentary:
|
||||
;;;
|
||||
;;; A "bytevector" is a raw bit string. This module provides procedures to
|
||||
;;; manipulate bytevectors and interpret their contents in a number of ways:
|
||||
;;; bytevector contents can be accessed as signed or unsigned integer of
|
||||
;;; various sizes and endianness, as IEEE-754 floating point numbers, or as
|
||||
;;; strings. It is a useful tool to decode binary data.
|
||||
;;;
|
||||
;;; Code:
|
||||
|
||||
(define-module (rnrs bytevector)
|
||||
:export-syntax (endianness)
|
||||
:export (native-endianness bytevector?
|
||||
make-bytevector bytevector-length bytevector=? bytevector-fill!
|
||||
bytevector-copy! bytevector-copy bytevector-u8-ref
|
||||
bytevector-s8-ref
|
||||
bytevector-u8-set! bytevector-s8-set! bytevector->u8-list
|
||||
u8-list->bytevector
|
||||
bytevector-uint-ref bytevector-uint-set!
|
||||
bytevector-sint-ref bytevector-sint-set!
|
||||
bytevector->sint-list bytevector->uint-list
|
||||
uint-list->bytevector sint-list->bytevector
|
||||
|
||||
bytevector-u16-ref bytevector-s16-ref
|
||||
bytevector-u16-set! bytevector-s16-set!
|
||||
bytevector-u16-native-ref bytevector-s16-native-ref
|
||||
bytevector-u16-native-set! bytevector-s16-native-set!
|
||||
|
||||
bytevector-u32-ref bytevector-s32-ref
|
||||
bytevector-u32-set! bytevector-s32-set!
|
||||
bytevector-u32-native-ref bytevector-s32-native-ref
|
||||
bytevector-u32-native-set! bytevector-s32-native-set!
|
||||
|
||||
bytevector-u64-ref bytevector-s64-ref
|
||||
bytevector-u64-set! bytevector-s64-set!
|
||||
bytevector-u64-native-ref bytevector-s64-native-ref
|
||||
bytevector-u64-native-set! bytevector-s64-native-set!
|
||||
|
||||
bytevector-ieee-single-ref
|
||||
bytevector-ieee-single-set!
|
||||
bytevector-ieee-single-native-ref
|
||||
bytevector-ieee-single-native-set!
|
||||
|
||||
bytevector-ieee-double-ref
|
||||
bytevector-ieee-double-set!
|
||||
bytevector-ieee-double-native-ref
|
||||
bytevector-ieee-double-native-set!
|
||||
|
||||
string->utf8 string->utf16 string->utf32
|
||||
utf8->string utf16->string utf32->string))
|
||||
|
||||
|
||||
(load-extension "libguile" "scm_init_bytevectors")
|
||||
|
||||
(define-macro (endianness sym)
|
||||
(if (memq sym '(big little))
|
||||
`(quote ,sym)
|
||||
(error "unsupported endianness" sym)))
|
||||
|
||||
;;; Local Variables:
|
||||
;;; coding: latin-1
|
||||
;;; End:
|
||||
|
||||
;;; bytevector.scm ends here
|
Loading…
Add table
Add a link
Reference in a new issue