mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 04:40:29 +02:00
* libguile/Makefile.am (lib_LTLIBRARIES): Instead of just "libguile.la", make "libguile-@EFFECTIVE_VERSION@.la". This allows multiple versions of Guile to be installed at once. See http://www106.pair.com/rhp/parallel.html for a rationale. (libguile_@GUILE_EFFECTIVE_VERSION@_la_CFLAGS): (libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES): (EXTRA_libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES): (libguile_@GUILE_EFFECTIVE_VERSION@_la_DEPENDENCIES): (libguile_@GUILE_EFFECTIVE_VERSION@_la_LIBADD): (libguile_@GUILE_EFFECTIVE_VERSION@_la_LDFLAGS): Fixup automake vars to include the effective version. (guile_LDADD): Fix up the spelling of libguile. * libguile/bytevectors.c (scm_bootstrap_bytevectors): * libguile/foreign.c (scm_register_foreign): * libguile/i18n.c (scm_bootstrap_i18n): * libguile/instructions.c (scm_bootstrap_instructions): * libguile/objcodes.c (scm_bootstrap_objcodes): * libguile/programs.c (scm_bootstrap_programs): * libguile/vm.c (scm_bootstrap_vm): Register extensions using e.g. "libguile-2.0" as the libname -- i.e., including the effective version in the libname. * module/ice-9/i18n.scm: * module/rnrs/bytevector.scm: * module/rnrs/io/ports.scm: * module/system/foreign.scm: * module/system/vm/instruction.scm: * module/system/vm/objcode.scm: * module/system/vm/program.scm: * module/system/vm/vm.scm: When doing a load-extension for something in Guile, use the effective version also. * meta/guile-2.0-uninstalled.pc.in (Libs): * meta/guile-2.0.pc.in (Libs): Use -lguile-@EFFECTIVE_VERSION@. This change should mean that code built against Guile should not be affected by the libguile rename. * guile-readline/Makefile.am (libguilereadline_v_@LIBGUILEREADLINE_MAJOR@_la_LIBADD): * srfi/Makefile.am (libguile_srfi_srfi_1_v_@LIBGUILE_SRFI_SRFI_1_MAJOR@_la_LIBADD): (libguile_srfi_srfi_4_v_@LIBGUILE_SRFI_SRFI_4_MAJOR@_la_LIBADD): (libguile_srfi_srfi_13_14_v_@LIBGUILE_SRFI_SRFI_13_14_MAJOR@_la_LIBADD): (libguile_srfi_srfi_60_v_@LIBGUILE_SRFI_SRFI_60_MAJOR@_la_LIBADD): * test-suite/standalone/Makefile.am (test_num2integral_LDADD): (test_round_LDADD): (libtest_asmobs_la_LIBADD): (libtest_ffi_la_LIBADD): (test_list_LDADD): (test_unwind_LDADD): (test_conversion_LDADD): (test_loose_ends_LDADD): (test_scm_c_read_LDADD): (test_scm_take_locale_symbol_LDADD): (test_scm_take_u8vector_LDADD): (libtest_extensions_la_LIBADD): (test_with_guile_module_LDADD): (test_scm_with_guile_LDADD): Fix up the spelling of libguile.la.
108 lines
3.4 KiB
Scheme
108 lines
3.4 KiB
Scheme
;;;; ports.scm --- R6RS port API -*- coding: utf-8 -*-
|
||
|
||
;;;; Copyright (C) 2009, 2010 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 3 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:
|
||
;;;
|
||
;;; The I/O port API of the R6RS is provided by this module. In many areas
|
||
;;; it complements or refines Guile's own historical port API. For instance,
|
||
;;; it allows for binary I/O with bytevectors.
|
||
;;;
|
||
;;; Code:
|
||
|
||
(define-module (rnrs io ports)
|
||
:re-export (eof-object? port? input-port? output-port?)
|
||
:export (eof-object
|
||
|
||
;; input & output ports
|
||
port-transcoder binary-port? transcoded-port
|
||
port-position set-port-position!
|
||
port-has-port-position? port-has-set-port-position!?
|
||
call-with-port
|
||
|
||
;; input ports
|
||
open-bytevector-input-port
|
||
make-custom-binary-input-port
|
||
|
||
;; binary input
|
||
get-u8 lookahead-u8
|
||
get-bytevector-n get-bytevector-n!
|
||
get-bytevector-some get-bytevector-all
|
||
|
||
;; output ports
|
||
open-bytevector-output-port
|
||
make-custom-binary-output-port
|
||
|
||
;; binary output
|
||
put-u8 put-bytevector))
|
||
|
||
(load-extension (string-append "libguile-" (effective-version))
|
||
"scm_init_r6rs_ports")
|
||
|
||
|
||
|
||
;;;
|
||
;;; Input and output ports.
|
||
;;;
|
||
|
||
(define (port-transcoder port)
|
||
(error "port transcoders are not supported" port))
|
||
|
||
(define (binary-port? port)
|
||
;; So far, we don't support transcoders other than the binary transcoder.
|
||
#t)
|
||
|
||
(define (transcoded-port port)
|
||
(error "port transcoders are not supported" port))
|
||
|
||
(define (port-position port)
|
||
"Return the offset (an integer) indicating where the next octet will be
|
||
read from/written to in @var{port}."
|
||
|
||
;; FIXME: We should raise an `&assertion' error when not supported.
|
||
(seek port 0 SEEK_CUR))
|
||
|
||
(define (set-port-position! port offset)
|
||
"Set the position where the next octet will be read from/written to
|
||
@var{port}."
|
||
|
||
;; FIXME: We should raise an `&assertion' error when not supported.
|
||
(seek port offset SEEK_SET))
|
||
|
||
(define (port-has-port-position? port)
|
||
"Return @code{#t} is @var{port} supports @code{port-position}."
|
||
(and (false-if-exception (port-position port)) #t))
|
||
|
||
(define (port-has-set-port-position!? port)
|
||
"Return @code{#t} is @var{port} supports @code{set-port-position!}."
|
||
(and (false-if-exception (set-port-position! port (port-position port)))
|
||
#t))
|
||
|
||
(define (call-with-port port proc)
|
||
"Call @var{proc}, passing it @var{port} and closing @var{port} upon exit of
|
||
@var{proc}. Return the return values of @var{proc}."
|
||
(dynamic-wind
|
||
(lambda ()
|
||
#t)
|
||
(lambda ()
|
||
(proc port))
|
||
(lambda ()
|
||
(close-port port))))
|
||
|
||
;;; ports.scm ends here
|