scsh-0.6/scsh/scsh-package.scm

456 lines
11 KiB
Scheme

;;; The packages that scsh uses/defines.
;;; Copyright (c) 1994 by Olin Shivers.
;;; Note: field-reader package (fr.scm) and here docs use READ-LINE.
;;; It is defined in rdelim.scm.
;;; You link up a scsh package by defining a package named OS-DEPENDENT
;;; that satisfies the interfaces for packages
;;; buffered-io-flags
;;; posix-fdflags
;;; posix-errno
;;; posix-signals
;;; Anything else it provides should be specified in an interface called
;;; os-extras-interface. See the scsh structure below.
;;; Then the scsh structure can be instantiated.
;;;
;;; The architecture directories, like next/ and irix/ and so forth,
;;; provide packages that can serve as the os-dependent package. E.g.,
;;; the next-defs package, defined in next/packages.
;;;
;;; This whole mechanism would be better solved with a functor.
;;; -Olin
;;; The LET-OPT package for optional argument parsing & defaulting
;;; is found in the let-opt.scm file.
(define-structure error-package (export error warn)
(open signals)
; (optimize auto-integrate)
)
(define-structure scsh-utilities scsh-utilities-interface
(open bitwise error-package loopholes let-opt scheme)
(files utilities)
; (optimize auto-integrate)
)
;;; This guy goes into the FOR-SYNTAX part of scsh's syntax exports.
(define-structure scsh-syntax-helpers
(export transcribe-extended-process-form)
(open receiving ; receive
error-package
names ; generated? by JMG
scsh-utilities ; check-arg
scheme
)
(files syntax-helpers)
; (optimize auto-integrate)
)
;;; The bufpol/{block, line, none} values
(define-structure buffered-io-flags buffered-io-flags-interface
(open defenum-package scheme)
(files (machine bufpol))
; (optimize auto-integrate)
)
(define-structure char-set-package char-set-interface
(open error-package
ascii
define-record-types ; JAR's record macro.
scsh-utilities ; For DEPRECATED-PROC
scheme)
(files char-set)
; (optimize auto-integrate)
)
(define-structures ((tty-flags tty-flags-interface)
(scsh-internal-tty-flags scsh-internal-tty-flags-interface))
(open scheme ascii bitwise)
(files (machine tty-consts))
; (optimize auto-integrate)
)
(define-structure scsh-version scsh-version-interface
(open scheme)
(files scsh-version))
(define-structure partial-s48-ports
(export current-input-port current-output-port
newline
current-error-port
$current-input-port
$current-output-port
$current-error-port
$current-noise-port)
(open ports i/o))
;;; The scsh-level-0 package is for implementation convenience.
;;; The scsh startup and top-level modules need access to scsh
;;; procedures, but they export procedures that are themselves
;;; part of scsh. So scsh-level-0 is the core scsh stuff, which is
;;; imported by these two modules. These modules all collectively
;;; export the whole scsh enchilada.
(define-structures
((scsh-level-0
(compound-interface posix-fdflags-interface
posix-errno-interface
posix-signals-interface
sockets-network-interface ; Standard Network Interface
os-extras-interface ; Extra stuff from OS.
scsh-delimited-readers-interface
scsh-errors-interface
scsh-io-interface
scsh-file-interface
scsh-process-interface
scsh-process-state-interface
scsh-user/group-db-interface
scsh-command-line-interface
scsh-signals-interface
scsh-environment-interface
scsh-home-interface
scsh-string-interface
scsh-file-names-interface
scsh-misc-interface
scsh-high-level-process-interface
scsh-time-interface ; new in 0.2
scsh-sockets-interface ; new in 0.3
tty-interface ; new in 0.4
scsh-version-interface
char-set-interface
signal-handler-interface
;; This stuff would probably be better off kept
;; in separate modules, but we'll toss it in for now.
(interface-of ascii) ; char<->ascii
string-ports-interface
))
(scsh-level-0-internals (export set-command-line-args!
init-scsh-hindbrain
init-scsh-vars))
; (scsh-regexp-package scsh-regexp-interface)
)
(for-syntax (open scsh-syntax-helpers scheme))
(access events)
(open enumerated
external-calls ;JMG new FFI
structure-refs
cig-aux
receiving
defrec-package
define-foreign-syntax
formats
os-dependent ; OS dependent stuff
buffered-io-flags ; stdio dependent
ascii
records
extended-ports
partial-s48-ports
ports
build
bigbit
bitwise
signals
conditions
scsh-utilities
handle
fluids
weak
; scsh-regexp-package
; scsh-regexp-internals
char-set-package
scsh-version
tty-flags
scsh-internal-tty-flags ; Not exported
let-opt ; optional-arg parsing & defaulting
architecture ; Was this by JMG ??
re-level-0
rx-syntax
string-lib
loopholes ; For my bogus CALL-TERMINALLY implementation.
scheme
low-interrupt ; for sighandler and procobj
i/o ; all these seem to be for scsh-0.6 JMG
i/o-internal
channels channel-i/o
low-channels
byte-vectors
threads locks placeholders
primitives
escapes
command-levels
features
general-tables
simple-syntax)
(for-syntax (open scsh-syntax-helpers scheme))
(access interrupts
command-processor
escapes
i/o ; S48's force-output
exceptions ; signal-exception
formats
threads-internal
records ; I don't think this is necessary. !!!
scheme) ; For accessing the normal I/O operators.
(files syntax
syscalls
select
fname
stringcoll
scsh-condition
rw
newports
fdports
procobj ; New in release 0.4.
(machine waitcodes) ; OS dependent code.
filesys
fileinfo
glob
; filemtch
time ; New in release 0.2.
(machine time_dep)
network ; New in release 0.3.
endian ; New in release 0.4.
flock ; New in release 0.4.
tty ; New in release 0.4.
pty ; New in release 0.4.
sighandlers ; New in release 0.5.
scsh
; re
rdelim
)
; (optimize auto-integrate)
)
(define-structure defrec-package (export (define-record :syntax))
(open records scheme)
(for-syntax (open scheme error-package receiving))
(files defrec)
; (optimize auto-integrate)
)
(define-structure defenum-package (export (define-enum-constant :syntax)
(define-enum-constants :syntax))
(open scheme)
(files enumconst)
; (optimize auto-integrate)
)
;;; This code opens so many modules of gruesome, low-level S48 internals
;;; that these two modules are segregated into separate packages, each
;;; exporting just two definitions.
(define-structure scsh-startup-package (export dump-scsh-program
dump-scsh
make-scsh-starter
scsh-stand-alone-resumer)
(open scsh-level-0-internals ; init-scsh-* set-command-line-args!
scsh-level-0 ; error-output-port command-line-arguments
scsh-top-package ; parse-switches-and-execute
handle ; with-handler
command-levels ; user-context
write-images ; write-image
build-internals ; simple-condition-handler
low-level ; flush-the-symbol-table!
command-processor ; command-output
package-commands-internal
filenames ; translate
usual-resumer ; usual-resumer
fluids-internal ; JMG: get-dynamic-env
scsh-utilities
interrupts
low-interrupt
events
primitives
scheme)
(files startup))
(define-structure scsh-top-package (export parse-switches-and-execute
repl )
(open command-processor
command-levels ; with-new-session
char-set-package
ensures-loaded
environments
error-package
evaluation
extended-ports
interfaces
events
low-interrupt
fluids-internal ; JMG: get-dynamic-env
handle ; JMG: with-handler
; package-commands
interrupts
i/o
package-commands-internal
package-mutation
packages
receiving
scsh-version
scsh-level-0 ; with-current-input-port error-output-port
; with-current-output-port exit
scsh-level-0-internals ; set-command-line-args! init-scsh-vars
threads
scheme)
(files top meta-arg))
(define-structure field-reader-package scsh-field-reader-interface
(open receiving ; receive
char-set-package
scsh-utilities ; nth
error-package ; error
scsh-level-0 ; delimited readers
; scsh-regexp-package
re-exports
string-lib ; join-strings
let-opt ; optional-arg parsing & defaulting
scheme
)
(files fr))
(define-structures
((awk-expander-package (export expand-awk expand-awk/obsolete))
(awk-support-package (export next-range next-:range
next-range: next-:range:)))
(open receiving ; receive
scsh-utilities
error-package ; error
; scsh-regexp-package
; re-exports
sre-syntax-tools
scheme
)
(files awk)
; (optimize auto-integrate)
)
(define-structure awk-package awk-interface
(open awk-support-package ; These packages provide all the stuff
re-exports ; that appears in the code produced by
receiving ; an awk expansion.
scheme)
(for-syntax (open awk-expander-package scheme))
(begin (define-syntax awk expand-awk)
(define-syntax awk/posix-string expand-awk/obsolete)))
;;; Exports an AWK macro that is just AWK/POSIX-STRING.
(define-structure obsolete-awk-package (export (awk :syntax))
(open awk-package)
(begin (define-syntax awk
(syntax-rules () ((awk body ...) (awk/posix-string body ....))))))
(define-structure scsh
(compound-interface (interface-of scsh-level-0)
(interface-of scsh-startup-package)
; scsh-regexp-interface
re-exports-interface
re-old-funs-interface
scsh-field-reader-interface ; new in 0.3
; scsh-dbm-interface
(export repl)
awk-interface
)
(open structure-refs
scsh-level-0
scsh-level-0-internals
re-exports
re-old-funs
; scsh-regexp-package
scsh-startup-package
; dbm
awk-package
field-reader-package
dot-locking
scheme)
(access scsh-top-package)
(begin (define repl (structure-ref scsh-top-package repl)))
; (optimize auto-integrate)
)
(define-structure scsh-here-string-hax (export)
(open reading
receiving
scsh ; Just need the delimited readers.
features ; make-immutable!
scheme)
(files here))
(define-structure events event-interface
(open scsh-level-0
defrec-package
locks
placeholders
architecture
scheme
low-interrupt)
(files event))
(define-structure simple-syntax (export define-simple-syntax)
(open scheme)
(begin (define-syntax define-simple-syntax
(syntax-rules ()
((define-simple-syntax (name . pattern) result)
(define-syntax name (syntax-rules () ((name . pattern) result))))))))
(define-structure low-interrupt low-interrupt-interface
(open enumerated
locks
error-package
i/o ;current-error-port
interrupts ; signal handler code
scheme
threads-internal
threads)
(files low-interrupt))
;(define-structure test-package (export test-proc)
; (open scsh-regexp-package scheme)
; (begin (define (test-proc p)
; (regexp-substitute p
; (string-match "(foo)(.*)(bar)" "Hello foo Olin bar quux")
; 'post 3 1 2 'pre))))
(define-structure scsh-threads
(export fork/thread
fork/process
wait/thread
wait/process)
(open structure-refs
scheme)
(access scsh-level-0
threads
threads-internal)
(files threads))
(define-structure dot-locking locks-interface
(open scsh
scheme
handle
threads) ; sleep
(files dot-locking))