scsh-0.5/misc/slib-init.scm

152 lines
4.7 KiB
Scheme

;;;; Initialisation for SLIB for Scheme-48 -*-scheme-*-
;;; Copyright (C) 1992, 1993 Aubrey Jaffer.
;Permission to copy this software, to redistribute it, and to use it
;for any purpose is granted, subject to the following restrictions and
;understandings.
;1. Any copy made of this software must include this copyright notice
;in full.
;2. I have made no warrantee or representation that the operation of
;this software will be error-free, and I am under no obligation to
;provide any services, by way of maintenance, update, or otherwise.
;3. In conjunction with products arising from the use of this
;material, there shall be no use of my name in any advertising,
;promotional, or sales literature without prior written consent in
;each case.
; For Scheme 48 version 0.30 and after.
;
; JAR's remarks:
;
; FORMAT does (INTEGER->CHAR 9) and (INTEGER->CHAR 12), which are
; unportable.
;
; RECORD-TYPE-NAME (in record.scm) calls PERROR, which is undefined.
;
; RANDOM:SIZE-FLOAT (in randinex.scm) assumes that inexact numbers
; have finite precision, which is not necessarily true.
;
; I couldn't find any documentation of interfaces. For example, if
; one claims that MACRO is provided, what does that mean? What
; definitions are supposed to become available? What do I need to do
; in order to provide an alternative implementation?
;;; (software-type) should be set to the generic operating system type.
;;; UNIX, VMS, MACOS, AMIGA and MSDOS are supported.
(define (software-type) 'UNIX)
;;; *FEATURES* should be set to a list of symbols describing features
;;; of this implementation. See Template.scm for the list of feature
;;; names.
(define *features*
'(
rev4-report ;conforms to
ieee-p1178 ;conforms to
rev4-optional-procedures
multiarg/and-
multiarg-apply
rationalize
delay ;has delay and force
with-file
char-ready? ;has
values ;proposed multiple values
eval ;slib:eval is single argument eval.
dynamic-wind ;proposed dynamic-wind
full-continuation ;can return multiple times
macro ;R4RS appendix's DEFINE-SYNTAX
))
;;; (OUTPUT-PORT-WIDTH <port>)
(define (output-port-width . arg) 79)
;;; (OUTPUT-PORT-HEIGHT <port>)
(define (output-port-height . arg) 24)
;;; (CURRENT-ERROR-PORT)
(define current-error-port
(access-scheme-48 'error-output-port))
;;; (TMPNAM) makes a temporary file name.
(define tmpnam
(let ((cntr 100))
(lambda () (set! cntr (+ 1 cntr))
(let ((tmp (string-append "slib_" (number->string cntr))))
(if (file-exists? tmp) (tmpnam) tmp)))))
;;; (FILE-EXISTS? <string>)
(define (file-exists? f) #f)
;;; (DELETE-FILE <string>)
(define (delete-file f) #f)
;;; FORCE-OUTPUT flushes any pending output on optional arg output port
;;; use this definition if your system doesn't have such a procedure.
(define (force-output . arg)
((access-scheme-48 'force-output)
(if (null? arg) (current-output-port) (car arg))))
;;; CHAR-CODE-LIMIT is one greater than the largest integer which can
;;; be returned by CHAR->INTEGER.
(define char-code-limit
(+ 1 (char->integer ((access-scheme-48 'ascii->char) 255))))
;;; MOST-POSITIVE-FIXNUM is used in modular.scm
(define most-positive-fixnum #x1FFFFFFF)
;;; If your implementation provides eval, SLIB:EVAL is single argument
;;; eval using the top-level (user) environment.
(define slib:eval
(let ((eval eval)
(interaction-environment interaction-environment))
(lambda (form)
(eval form (interaction-environment)))))
;;; If your implementation provides R4RS macros:
(define macro:eval slib:eval)
(define macro:load load)
;;; define an error procedure for the library
(define slib:error (access-scheme-48 'error))
;;; define these as appropriate for your system.
(define slib:tab ((access-scheme-48 'ascii->char) 9))
(define slib:form-feed ((access-scheme-48 'ascii->char) 12))
;;; Define these if your implementation's syntax can support them and if
;;; they are not already defined.
(define (1+ n) (+ n 1))
(define (-1+ n) (+ n -1))
;(define 1- -1+)
;;; (implementation-vicinity) should be defined to be the pathname of
;;; the directory where any auxiliary files to your Scheme
;;; implementation reside.
(define (implementation-vicinity)
(case (software-type)
((UNIX) "=scheme48/") ; Translated
; ((VMS) "scheme$src:")
; ((MSDOS) "C:\\scheme\\")
(else (slib:error "unrecognized software-type" software-type))))
;;; (library-vicinity) should be defined to be the pathname of the
;;; directory where files of Scheme library functions reside.
(define (library-vicinity) "/usr/local/lib/slib/")
(define scheme-file-suffix
(case (software-type)
((NOSVE) (lambda () "_scm"))
(else (lambda () ".scm"))))
(define in-vicinity string-append)
(load (in-vicinity (library-vicinity) "require" (scheme-file-suffix)))