scsh-0.6/scsh/scsh-interfaces.scm

1125 lines
23 KiB
Scheme

;;; The module interfaces for scsh.
;;; Copyright (c) 1994 by Olin Shivers and David Albertz.
;;; Copyright (c) 1994 by Brian D. Carlstrom
(define-interface posix-fdflags-interface
(export ((open/read
open/write
open/read+write
open/non-blocking
open/append
open/no-control-tty
open/create
open/truncate
open/exclusive
open/access-mask) :number)
((fcntl/dup-fdes
fcntl/get-fdes-flags
fcntl/set-fdes-flags
fcntl/get-status-flags
fcntl/set-status-flags
fcntl/get-record-lock
fcntl/set-record-lock
fcntl/set-record-lock-no-block) :number)
(fdflags/close-on-exec :number)
((lock/read
lock/write
lock/release) :number)))
(define-interface posix-errno-interface
(export ((errno/2big
errno/acces
errno/again
errno/badf
errno/busy
errno/child
errno/deadlk
errno/dom
errno/exist
errno/fault
errno/fbig
errno/intr
errno/inval
errno/io
errno/isdir
errno/mfile
errno/mlink
errno/nametoolong
errno/nfile
errno/nodev
errno/noent
errno/noexec
errno/nolck
errno/nomem
errno/nospc
errno/nosys
errno/notdir
errno/notempty
errno/notty
errno/nxio
errno/perm
errno/pipe
errno/range
errno/rofs
errno/spipe
errno/srch
errno/xdev) :number)))
(define-interface posix-signals-interface
(export ((signal/abrt
signal/alrm
signal/chld
signal/cont
signal/fpe
signal/hup
signal/ill
signal/int
signal/kill
signal/pipe
signal/quit
signal/segv
signal/stop
signal/term
signal/tstp
signal/ttin
signal/ttou
signal/usr1
signal/usr2) :number)))
(define-interface signals-internals-interface
(export signals-ignored-by-default)) ; (:list-of :number)
(define-interface scsh-errors-interface
(export errno-error
error
(with-errno-handler* (proc ((proc (:number :value) :values); handler
(proc () :values)) ; thunk
:values))
(with-errno-handler :syntax)))
(define buffered-io-flags-interface
(export ((bufpol/block
bufpol/line
bufpol/none) :number)))
(define-interface scsh-io-interface
(compound-interface buffered-io-flags-interface
(export close
close-after
current-error-port
error-output-port
dup
dup->inport
dup->outport
dup->fdes
open-file
fdes-flags
set-fdes-flags
fdes-status
set-fdes-status
init-fdports! ;added by JMG
port->channel ;overwrites channel-i/o
force-output
set-port-buffering
bufpol/block
bufpol/line
bufpol/none
seek
tell
seek/set
seek/delta
seek/end
; select
; select!
flush-all-ports
y-or-n?
*y-or-n-eof-count*
;; R4RS I/O procedures that scsh provides.
write
char-ready?
read-char
write-char
display
newline
input-port?
output-port?
call-with-input-file
call-with-output-file
with-input-from-file
with-output-to-file
open-input-file
open-output-file
format
lock-region?
lock-region:exclusive?
lock-region:whence
lock-region:start
lock-region:len
lock-region:pid ; Deprecated proc.
lock-region:proc
make-lock-region
lock-region
lock-region/no-block
get-lock-region
unlock-region
with-region-lock*
(with-region-lock :syntax)
fork-pty-session
open-pty
pty-name->tty-name
tty-name->pty-name
make-pty-generator
with-current-input-port*
(with-current-input-port :syntax)
with-current-output-port*
(with-current-output-port :syntax)
with-current-error-port*
(with-current-error-port :syntax)
with-error-output-port*
(with-error-output-port :syntax)
set-current-input-port!
set-current-output-port!
set-current-error-port!
set-error-output-port!
stdports->stdio
stdio->stdports
with-stdio-ports*
(with-stdio-ports :syntax)
call/fdes
release-port-handle
port-revealed
fdes->inport
fdes->outport
move->fdes
open-fdes
pipe
port->string
port->sexp-list
port->string-list
port->list
port-fold reduce-port
port->fdes
read-string
read-string!
read-string/partial
read-string!/partial
(write-string (proc (:string &opt :value :exact-integer :exact-integer) :unspecific))
write-string/partial)))
(define-interface scsh-file-interface
(export create-directory
create-fifo
create-hard-link
create-symlink
delete-directory
delete-file
delete-filesys-object
rename-file
set-file-mode
set-file-owner
set-file-group
set-file-times
truncate-file
read-symlink ; Not POSIX.
file-attributes ; Deprecated;
file-info ; preferred.
file-info:type
file-info:device
file-info:inode
file-info:mode
file-info:nlinks
file-info:uid
file-info:gid
file-info:size
file-info:atime
file-info:mtime
file-info:ctime
file-type
file-group
file-inode
file-last-access
file-last-mod
file-last-status-change
file-mode
file-nlinks
file-owner
file-size
file-symlink?
file-directory?
file-fifo?
file-regular?
file-socket?
file-special?
file-not-readable?
file-not-writable?
file-not-writeable? ; Deprecated
file-not-executable?
file-readable?
file-writeable?
file-writable? ; Deprecated
file-executable?
file-not-exists?
file-exists?
sync-file
sync-file-system
directory-files
glob
glob-quote
file-match
create-temp-file
temp-file-iterate
temp-file-channel
*temp-file-template*))
(define-interface scsh-process-interface
(export exec
exec-path
exec/env
exec-path/env
%exec
exec-path-search
exit
%exit
suspend
fork
%fork
proc?
proc:pid
pid->proc
autoreap-policy
with-autoreaping
reap-zombies
wait
wait-any
wait-process-group
status:exit-val
status:stop-sig
status:term-sig
wait/poll
wait/stopped-children
process-sleep
process-sleep-until
call-terminally
halts?))
(define-interface scsh-process-state-interface
(export umask
set-umask
with-umask*
(with-umask :syntax)
with-umask-aligned*
(with-umask-aligned :syntax)
process-chdir
process-cwd
chdir
cwd
with-cwd*
(with-cwd :syntax)
with-cwd-aligned*
(with-cwd-aligned :syntax)
pid
parent-pid
process-group
set-process-group
become-session-leader
user-login-name
user-uid
user-effective-uid
user-gid
user-effective-gid
user-supplementary-gids
set-uid
set-gid
set-effective-gid
system-name
process-times
cpu-ticks/sec))
(define-interface scsh-user/group-db-interface
(export user-info
user-info:name
user-info:uid
user-info:gid
user-info:home-dir
user-info:shell
->uid
->username
group-info
group-info:name
group-info:gid
group-info:members
->gid
->groupname))
(define-interface scsh-command-line-interface
(export command-line-arguments
command-line
arg
arg*
argv))
(define-interface scsh-signals-interface
(export signal-process
signal-process-group
;; JMG: this syscalls doesn't cooperate with the thread-system
;; pause-until-interrupt
itimer ;; now defined in low-interrupt as a artificial interrupt
))
(define-interface scsh-environment-interface
(export install-env
setenv
getenv
env->alist
alist->env
alist-delete
alist-update
alist-compress
with-env*
with-total-env*
(with-env :syntax)
(with-total-env :syntax)
add-before
add-after))
(define-interface scsh-home-interface
(export home-directory
exec-path-list))
;;; Kill me?
(define-interface scsh-regexp-interface
(export string-match
regexp-match?
match:start
match:end
match:substring
make-regexp
->regexp
regexp?
regexp-search
regexp-substitute
regexp-substitute/global
regexp-quote))
(define-interface scsh-string-interface
(export substitute-env-vars
;string-index string-index-right ; Now in string-lib
))
(define-interface scsh-file-names-interface
(export file-name-as-directory
file-name-directory?
file-name-non-directory?
directory-as-file-name
file-name-absolute?
file-name-directory
file-name-nondirectory
split-file-name
path-list->file-name
file-name-extension
file-name-sans-extension
replace-extension
parse-file-name
expand-file-name
simplify-file-name
resolve-tilde-file-name
resolve-file-name
absolute-file-name
home-dir
home-file))
(define-interface scsh-time-interface
(export make-date
date?
date:seconds
date:minute
date:hour
date:month-day
date:month
date:year
date:tz-name
date:tz-secs
date:summer?
date:week-day
date:year-day
set-date:seconds
set-date:minute
set-date:hour
set-date:month-day
set-date:month
set-date:year
set-date:tz-name
set-date:tz-secs
set-date:summer?
set-date:week-day
set-date:year-day
modify-date:seconds
modify-date:minute
modify-date:hour
modify-date:month-day
modify-date:month
modify-date:year
modify-date:tz-name
modify-date:tz-secs
modify-date:summer?
modify-date:week-day
modify-date:year-day
time+ticks
ticks/sec
time
date
date->string
format-date))
(define-interface scsh-misc-interface
(export (receive :syntax)
arithmetic-shift
bitwise-and
bitwise-ior
bitwise-not
bitwise-xor))
(define-interface scsh-high-level-process-interface
(export (run :syntax)
(exec-epf :syntax)
(& :syntax)
(|| :syntax)
; (:or: :syntax) ; Alternate R4RS syntax for ||.
(&& :syntax)
(run/collecting :syntax)
(run/port+proc :syntax)
(run/port :syntax)
(run/strings :syntax)
(run/file :syntax)
(run/string :syntax)
(run/sexp :syntax)
(run/sexps :syntax)
fork/pipe
%fork/pipe
fork/pipe+
%fork/pipe+
tail-pipe
tail-pipe+
run/collecting*
run/port+proc*
run/port*
run/file*
run/string*
run/sexp*
run/sexps*
run/strings*
char-filter
string-filter))
(define-interface scsh-version-interface
(export scsh-major-version
scsh-minor-version
scsh-version-string))
;;; This is probably bogus.
(define-interface string-ports-interface
(export make-string-input-port
call-with-string-output-port
make-string-output-port
string-output-port-output))
(define-interface scsh-utilities-interface
(export del delete filter first first? nth
fold fold-right
any every
mapv mapv! vector-every? copy-vector initialize-vector vector-append
vfold vfold-right
check-arg conjoin disjoin negate compose reverse! call/cc
deprecated-proc
deposit-bit-field
real->exact-integer
make-reinitializer
run-as-long-as))
(define-interface weak-tables-interface
(export make-weak-table weak-table-set! weak-table-ref weak-table-walk
strengthen-weak-table-ref weaken-weak-table-ref))
;;; semi-standard network magic numbers
;;; should be available on all platforms
;;; if not, tell us, and we'll move it
;;; to the os-dependent directory
;;; for now, all socket option magic numbers
;;; are considered machine dependent until
;;; there is a standard or a clear portable subset
(define-interface sockets-network-interface
(export shutdown/receives
shutdown/sends
shutdown/sends+receives
herror/host-not-found
herror/try-again
herror/no-recovery
herror/no-data
herror/no-address
address-family/unspecified
address-family/unix
address-family/internet
socket-type/stream
socket-type/datagram
socket-type/raw
;;socket-type/rdm
;;socket-type/seqpacket
protocol-family/unspecified
protocol-family/unix
protocol-family/internet
internet-address/any
internet-address/loopback
internet-address/broadcast
message/out-of-band
message/peek
message/dont-route
level/socket
options/boolean
options/value
options/linger
options/timeout))
;;; actual functions interface
(define-interface scsh-sockets-interface
(export socket-connect
bind-listen-accept-loop
socket?
socket:family
socket:inport
socket:outport
socket-address?
socket-address:family
internet-address->socket-address
socket-address->internet-address
unix-address->socket-address
socket-address->unix-address
create-socket
port->socket
close-socket
bind-socket
connect-socket
listen-socket
accept-connection
socket-remote-address
socket-local-address
shutdown-socket
create-socket-pair
receive-message
receive-message!
receive-message/partial
receive-message!/partial
send-message
send-message/partial
socket-option
set-socket-option
host-info
host-info?
host-info:name
host-info:aliases
host-info:addresses
network-info
network-info?
network-info:name
network-info:aliases
network-info:net
service-info
service-info?
service-info:name
service-info:aliases
service-info:port
service-info:protocol
protocol-info
protocol-info?
protocol-info:name
protocol-info:aliases
protocol-info:number
net-to-host-32
net-to-host-16
host-to-net-32
host-to-net-16
))
(define-interface scsh-field-reader-interface
(export join-strings
field-splitter infix-splitter suffix-splitter sloppy-suffix-splitter
record-reader
field-reader
nth)) ; Kinda handy.
(define-interface scsh-delimited-readers-interface
(export read-line
read-paragraph
read-delimited read-delimited!
%read-delimited!
skip-char-set))
(define-interface awk-interface
(export (awk :syntax)
(awk/posix-string :syntax)))
(define-interface scsh-dbm-interface
(export dbm-open
dbm-close
dbm-delete
dbm-fetch
dbm-insert
dbm-replace
dbm-firstkey
dbm-nextkey
dbm-record?
dbm-record:open?
btree/method
btree-info:flags
btree-info:cachesize
btree-info:maxkeypage
btree-info:minkeypage
btree-info:psize
btree-info:lorder
btree-info?
make-btree-info
hash/method
hash-info:bsize
hash-info:ffactor
hash-info:nelem
hash-info:cachesize
hash-info:lorder
hash-info?
make-hash-info
recno/method
recno-info:flags
recno-info:cachesize
recno-info:psize
recno-info:lorder
recno-info:reclen
recno-info:bval
recno-info:bfname
recno-info?
make-recno-info))
;;; Magic flags for SCSH-TTY-INTERFACE.
(define-interface tty-flags-interface
(export
;; Indices into the control char string
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Posix
ttychar/eof
ttychar/eol
ttychar/delete-char
ttychar/delete-line
ttychar/interrupt
ttychar/quit
ttychar/suspend
ttychar/start
ttychar/stop
ttychar/min
ttychar/time
;; SVR4 & 4.3+BSD
ttychar/delete-word
ttychar/reprint
ttychar/literal-next
ttychar/discard
ttychar/delayed-suspend
ttychar/eol2
;; 4.3+BSD
ttychar/status
disable-tty-char
;; Input flag bits
;;;;;;;;;;;;;;;;;;
;; Posix
ttyin/ignore-break
ttyin/interrupt-on-break
ttyin/ignore-bad-parity-chars
ttyin/mark-parity-errors
ttyin/check-parity
ttyin/7bits
ttyin/nl->cr
ttyin/ignore-cr
ttyin/cr->nl
ttyin/output-flow-ctl
ttyin/input-flow-ctl
;; SVR4 & 4.3+BSD
ttyin/xon-any
ttyin/beep-on-overflow
;; SVR4
ttyin/lowercase
;; Output flag bits
;;;;;;;;;;;;;;;;;;;
ttyout/enable ; opost: enable output processing
;; SVR4 & 4.3+BSD
ttyout/nl->crnl ; onlcr: map nl to cr-nl
;; 4.3+BSD
ttyout/discard-eot ; onoeot
ttyout/expand-tabs ; oxtabs (NOT xtabs)
;; SVR4
ttyout/cr->nl ; ocrnl
ttyout/fill-w/del ; ofdel
ttyout/delay-w/fill-char ; ofill
ttyout/uppercase ; olcuc
ttyout/nl-does-cr ; onlret
ttyout/no-col0-cr ; onocr
;; Newline delay
ttyout/nl-delay ; mask (nldly)
ttyout/nl-delay0
ttyout/nl-delay1 ; tty 37
;; Horizontal-tab delay
ttyout/tab-delay ; mask (tabdly)
ttyout/tab-delay0
ttyout/tab-delay1 ; tty 37
ttyout/tab-delay2
ttyout/tab-delayx ; Expand tabs (xtabs, tab3)
;; Carriage-return delay
ttyout/cr-delay ; mask (crdly)
ttyout/cr-delay0
ttyout/cr-delay1 ; tn 300
ttyout/cr-delay2 ; tty 37
ttyout/cr-delay3 ; concept 100
;; Vertical tab delay
ttyout/vtab-delay ; mask (vtdly)
ttyout/vtab-delay0
ttyout/vtab-delay1 ; tty 37
;; Backspace delay
ttyout/bs-delay ; mask (bsdly)
ttyout/bs-delay0
ttyout/bs-delay1
;; Form-feed delay
ttyout/ff-delay ; mask (ffdly)
ttyout/ff-delay0
ttyout/ff-delay1
ttyout/all-delay
;; Control flag bits
;;;;;;;;;;;;;;;;;;;;
;; Posix
ttyc/char-size ; csize: character size mask
ttyc/char-size5 ; 5 bits (cs5)
ttyc/char-size6 ; 6 bits (cs6)
ttyc/char-size7 ; 7 bits (cs7)
ttyc/char-size8 ; 8 bits (cs8)
ttyc/2-stop-bits ; cstopb: Send 2 stop bits.
ttyc/enable-read ; cread: Enable receiver.
ttyc/enable-parity ; parenb
ttyc/odd-parity ; parodd
ttyc/hup-on-close ; hupcl: Hang up on last close.
ttyc/no-modem-sync ; clocal: Ignore modem lines.
;; 4.3+BSD
ttyc/ignore-flags ; cignore: ignore control flags
ttyc/CTS-output-flow-ctl ; ccts_oflow: CTS flow control of output
ttyc/RTS-input-flow-ctl ; crts_iflow: RTS flow control of input
ttyc/carrier-flow-ctl ; mdmbuf
;; Local flag bits
;;;;;;;;;;;;;;;;;;
;; POSIX
ttyl/visual-delete ; echoe: Visually erase chars
ttyl/echo-delete-line ; echok: Echo nl after line kill
ttyl/echo ; echo: Enable echoing
ttyl/echo-nl ; echonl: Echo nl even if echo is off
ttyl/canonical ; icanon: Canonicalize input
ttyl/enable-signals ; isig: Enable ^c, ^z signalling
ttyl/extended ; iexten: Enable extensions
ttyl/ttou-signal ; tostop: SIGTTOU on background output
ttyl/no-flush-on-interrupt ; noflsh
;; SVR4 & 4.3+BSD
ttyl/visual-delete-line ; echoke: visually erase a line-kill
ttyl/hardcopy-delete ; echoprt: visual erase for hardcopy
ttyl/echo-ctl ; echoctl: echo control chars as "^X"
ttyl/flush-output ; flusho: output is being flushed
ttyl/reprint-unread-chars ; pendin: retype pending input
;; 4.3+BSD
ttyl/alt-delete-word ; altwerase
ttyl/no-kernel-status ; nokerninfo: no kernel status on ^T
;; SVR4
ttyl/case-map ; xcase: canonical upper/lower presentation
))
;;; Non-exported values required by the tty code.
(define-interface scsh-internal-tty-flags-interface
(export baud-rates
num-ttychars
;; tcflush() constants
%flush-tty/input ; TCIFLUSH
%flush-tty/output ; TCOFLUSH
%flush-tty/both ; TCIOFLUSH
;; tcflow() constants
%tcflow/start-out ; TCOON
%tcflow/stop-out ; TCOOFF
%tcflow/start-in ; TCION
%tcflow/stop-in ; TCIOFF
;; tcsetattr() constants
%set-tty-info/now ; TCSANOW Make change immediately.
%set-tty-info/drain ; TCSADRAIN Drain output, then change.
%set-tty-info/flush ; TCSAFLUSH Drain output, flush input.
))
;;; POSIX termios tty control.
(define-interface tty-interface
(compound-interface
tty-flags-interface
(export
;; The tty-info record
tty-info? type/tty-info
tty-info:control-chars set-tty-info:control-chars
tty-info:input-flags set-tty-info:input-flags
tty-info:output-flags set-tty-info:output-flags
tty-info:control-flags set-tty-info:control-flags
tty-info:local-flags set-tty-info:local-flags
tty-info:input-speed set-tty-info:input-speed
tty-info:output-speed set-tty-info:output-speed
tty-info:min set-tty-info:min
tty-info:time set-tty-info:time
modify-tty-info:control-chars
modify-tty-info:input-flags
modify-tty-info:output-flags
modify-tty-info:control-flags
modify-tty-info:local-flags
modify-tty-info:input-speed
modify-tty-info:output-speed
modify-tty-info:min
modify-tty-info:time
make-tty-info copy-tty-info
tty-info
set-tty-info/now
set-tty-info/drain
set-tty-info/flush
send-tty-break
drain-tty
flush-tty/input
flush-tty/output
flush-tty/both
start-tty-output
stop-tty-output
start-tty-input
stop-tty-input
encode-baud-rate
decode-baud-rate
open-control-tty
set-tty-process-group
tty-process-group
tty?
tty-file-name
control-tty-file-name
)))
(define-interface signal-handler-interface
(export signal->interrupt
interrupt-set
interrupt-handlers-vector ; JMG: replaces vm vector
with-scsh-sighandlers
(with-enabled-interrupts :syntax)
with-enabled-interrupts*
enabled-interrupts
set-enabled-interrupts
set-interrupt-handler
interrupt-handler
;; reexported from low-interrupt
interrupt/alrm interrupt/alarm
interrupt/int interrupt/keyboard
; interrupt/memory-shortage
interrupt/post-gc
interrupt/i/o-completion
interrupt/chld
interrupt/cont
interrupt/hup
interrupt/quit
interrupt/term
interrupt/tstp
interrupt/usr1
interrupt/usr2
interrupt/info
interrupt/io
interrupt/poll
interrupt/prof
interrupt/pwr
interrupt/urg
interrupt/vtalrm
interrupt/winch
interrupt/xcpu
interrupt/xfsz))
(define-interface sigevents-interface
(export most-recent-sigevent
sigevent?
next-sigevent
next-sigevent-set
next-sigevent/no-wait
next-sigevent-set/no-wait
sigevent-type
schedule-timer-interrupt!))
(define-interface low-interrupt-interface
(export number-of-interrupts
interrupt/alrm interrupt/alarm
interrupt/int interrupt/keyboard
interrupt/post-gc
interrupt/i/o-completion
interrupt/chld
interrupt/cont
interrupt/hup
interrupt/quit
interrupt/term
interrupt/tstp
interrupt/usr1
interrupt/usr2
interrupt/info
interrupt/io
interrupt/poll
interrupt/prof
interrupt/pwr
interrupt/urg
interrupt/vtalrm
interrupt/winch
interrupt/xcpu
interrupt/xfsz
interrupt-set
interrupt-in-set?
insert-interrupt
remove-interrupt
full-interrupt-set))
(define-interface dot-locking-interface
(export obtain-dot-lock release-dot-lock
break-dot-lock
(with-dot-lock :syntax)
with-dot-lock*))
(define-interface syslog-interface
(export (syslog-option :syntax)
syslog-option?
make-syslog-options
syslog-options?
(syslog-options :syntax)
(syslog-facility :syntax)
syslog-facility?
(syslog-level :syntax)
syslog-level?
make-syslog-mask
syslog-mask?
(syslog-mask :syntax)
syslog-mask-all
syslog-mask-upto
with-syslog-destination
set-syslog-destination!
syslog))
(define-interface syslog-channels-interface
(export open-syslog-channel
close-syslog-channel
set-syslog-channel!
with-syslog-channel))
(define-interface crypt-interface
(export crypt))