summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-04-16 21:34:19 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-04-16 21:34:19 -0700
commite0fa761ad7a76f760fb358f5d5855bdd55eef13c (patch)
tree5d4c615ed10e235b4776a56f6f55d71bbeeb67dd
parent83aea1f74dd3de219de053d9162f8b217b0530ca (diff)
downloadtxr-e0fa761ad7a76f760fb358f5d5855bdd55eef13c.tar.gz
txr-e0fa761ad7a76f760fb358f5d5855bdd55eef13c.tar.bz2
txr-e0fa761ad7a76f760fb358f5d5855bdd55eef13c.zip
Add exec and pipe functions.
* configure: Check for pipe. * sysif.c (exec_wrap, pipe_wrap): New static functions. (sysif_init): Register exec and pipe intrinsics. * txr.1: Documented exec and pipe. * tl.vim, txr.vim: Regenerated.
-rw-r--r--ChangeLog13
-rwxr-xr-xconfigure19
-rw-r--r--sysif.c36
-rw-r--r--tl.vim282
-rw-r--r--txr.143
-rw-r--r--txr.vim282
6 files changed, 393 insertions, 282 deletions
diff --git a/ChangeLog b/ChangeLog
index dbce9883..3d814a6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
2015-04-16 Kaz Kylheku <kaz@kylheku.com>
+ Add exec and pipe functions.
+
+ * configure: Check for pipe.
+
+ * sysif.c (exec_wrap, pipe_wrap): New static functions.
+ (sysif_init): Register exec and pipe intrinsics.
+
+ * txr.1: Documented exec and pipe.
+
+ * tl.vim, txr.vim: Regenerated.
+
+2015-04-16 Kaz Kylheku <kaz@kylheku.com>
+
Adding chmod.
* configure: Detect chmod.
diff --git a/configure b/configure
index 992f014b..ef86a423 100755
--- a/configure
+++ b/configure
@@ -1889,6 +1889,25 @@ else
printf "no\n"
fi
+printf "Checking for pipe ... "
+cat > conftest.c <<!
+#include <unistd.h>
+
+int main(void)
+{
+ int p[2];
+ int r = pipe(p);
+ return 0;
+}
+!
+if conftest ; then
+ printf "yes\n"
+ printf "#define HAVE_PIPE 1\n" >> $config_h
+else
+ printf "no\n"
+fi
+
+
printf "Checking for _wspawnlp ... "
cat > conftest.c <<!
diff --git a/sysif.c b/sysif.c
index 64a453b0..4cbe6f16 100644
--- a/sysif.c
+++ b/sysif.c
@@ -477,6 +477,26 @@ static val dup_wrap(val old, val new)
return num(dup2(c_num(old), c_num(new)));
}
+static val exec_wrap(val file, val args_opt)
+{
+ val args = default_bool_arg(args_opt);
+ int nargs = c_num(length(args)) + 1;
+ char **argv = coerce(char **, chk_malloc((nargs + 1) * sizeof *argv));
+ val iter;
+ int i;
+
+ for (i = 0, iter = cons(file, args); iter; i++, iter = cdr(iter)) {
+ val arg = car(iter);
+ argv[i] = utf8_dup_to(c_str(arg));
+ }
+ argv[i] = 0;
+
+ if (execvp(argv[0], argv) < 0)
+ uw_throwf(file_error_s, lit("execvp ~a: ~a/~s"),
+ file, num(errno), string_utf8(strerror(errno)), nao);
+ uw_throwf(file_error_s, lit("execvp ~a returned"), file, nao);
+}
+
#endif
#if HAVE_SYS_STAT
@@ -523,6 +543,18 @@ val statf(val path)
#endif
}
+#if HAVE_PIPE
+
+static val pipe_wrap(void)
+{
+ int fd[2];
+ if (pipe(fd) < 0)
+ uw_throwf(file_error_s, lit("pipe failed: ~a/~s"),
+ num(errno), string_utf8(strerror(errno)), nao);
+ return cons(num(fd[0]), num(fd[1]));
+}
+
+#endif
void sysif_init(void)
{
@@ -657,6 +689,7 @@ void sysif_init(void)
#if HAVE_FORK_STUFF
reg_fun(intern(lit("fork"), user_package), func_n0(fork_wrap));
reg_fun(intern(lit("wait"), user_package), func_n2o(wait_wrap, 0));
+ reg_fun(intern(lit("exec"), user_package), func_n2o(exec_wrap, 1));
reg_fun(intern(lit("w-ifexited"), user_package), func_n1(wifexited));
reg_fun(intern(lit("w-exitstatus"), user_package), func_n1(wexitstatus));
reg_fun(intern(lit("w-ifsignaled"), user_package), func_n1(wifsignaled));
@@ -680,4 +713,7 @@ void sysif_init(void)
#endif
reg_fun(intern(lit("dupfd"), user_package), func_n2o(dup_wrap, 1));
#endif
+#if HAVE_PIPE
+ reg_fun(intern(lit("pipe"), user_package), func_n0(pipe_wrap));
+#endif
}
diff --git a/tl.vim b/tl.vim
index a6076262..48ef4cd8 100644
--- a/tl.vim
+++ b/tl.vim
@@ -59,147 +59,147 @@ syn keyword txl_keyword contained dup dupfd dwim each
syn keyword txl_keyword contained each* empty ensure-dir env
syn keyword txl_keyword contained env-fbind env-hash env-vbind eq
syn keyword txl_keyword contained eql equal errno error
-syn keyword txl_keyword contained eval evenp exit exp
-syn keyword txl_keyword contained expt exptmod false fbind
-syn keyword txl_keyword contained fboundp fifth fileno filter-equal
-syn keyword txl_keyword contained filter-string-tree finalize find find-if
-syn keyword txl_keyword contained find-max find-min find-package first
-syn keyword txl_keyword contained fixnump flatten flatten* flet
-syn keyword txl_keyword contained flip flo-int flo-str floatp
-syn keyword txl_keyword contained floor flush-stream for for*
-syn keyword txl_keyword contained force fork format fourth
-syn keyword txl_keyword contained fun func-get-env func-get-form func-set-env
-syn keyword txl_keyword contained functionp gcd gen generate
-syn keyword txl_keyword contained gensym gequal get-byte get-char
-syn keyword txl_keyword contained get-error get-error-str get-hash-userdata get-line
-syn keyword txl_keyword contained get-lines get-list-from-stream get-sig-handler get-string
-syn keyword txl_keyword contained get-string-from-stream gethash getitimer getpid
-syn keyword txl_keyword contained getppid giterate glob glob-altdirfunc
-syn keyword txl_keyword contained glob-brace glob-err glob-mark glob-nocheck
-syn keyword txl_keyword contained glob-noescape glob-nomagic glob-nosort glob-onlydir
-syn keyword txl_keyword contained glob-period glob-tilde glob-tilde-check greater
-syn keyword txl_keyword contained group-by gun hash hash-alist
-syn keyword txl_keyword contained hash-construct hash-count hash-diff hash-eql
-syn keyword txl_keyword contained hash-equal hash-isec hash-keys hash-pairs
-syn keyword txl_keyword contained hash-uni hash-update hash-update-1 hash-values
-syn keyword txl_keyword contained hashp html-decode html-encode iapply
-syn keyword txl_keyword contained identity ido if iff
-syn keyword txl_keyword contained iffi iflet ignerr in
-syn keyword txl_keyword contained inc inhash int-flo int-str
-syn keyword txl_keyword contained integerp intern interp-fun-p interpose
-syn keyword txl_keyword contained ip ipf isqrt itimer-prov
-syn keyword txl_keyword contained itimer-real itimer-virtual juxt keep-if
-syn keyword txl_keyword contained keep-if* keywordp kill labels
-syn keyword txl_keyword contained lambda last lazy-str lazy-str-force
-syn keyword txl_keyword contained lazy-str-force-upto lazy-str-get-trailing-list lazy-stream-cons lazy-stringp
-syn keyword txl_keyword contained lbind lcm lcons-fun lconsp
-syn keyword txl_keyword contained ldiff length length-list length-str
-syn keyword txl_keyword contained length-str-< length-str-<= length-str-> length-str->=
-syn keyword txl_keyword contained length-vec lequal less let
-syn keyword txl_keyword contained let* lexical-fun-p lexical-lisp1-binding lexical-var-p
-syn keyword txl_keyword contained link lisp-parse list list*
-syn keyword txl_keyword contained list-str list-vector listp log
-syn keyword txl_keyword contained log-alert log-auth log-authpriv log-cons
-syn keyword txl_keyword contained log-crit log-daemon log-debug log-emerg
-syn keyword txl_keyword contained log-err log-info log-ndelay log-notice
-syn keyword txl_keyword contained log-nowait log-odelay log-perror log-pid
-syn keyword txl_keyword contained log-user log-warning log10 log2
-syn keyword txl_keyword contained logand logior lognot logtest
-syn keyword txl_keyword contained logtrunc logxor macro-form-p macro-time
-syn keyword txl_keyword contained macroexpand macroexpand-1 macrolet major
-syn keyword txl_keyword contained make-catenated-stream make-env make-hash make-lazy-cons
-syn keyword txl_keyword contained make-like make-package make-random-state make-similar-hash
-syn keyword txl_keyword contained make-string-byte-input-stream make-string-input-stream make-string-output-stream make-strlist-output-stream
-syn keyword txl_keyword contained make-sym make-time make-time-utc make-trie
-syn keyword txl_keyword contained makedev mapcar mapcar* mapdo
-syn keyword txl_keyword contained mapf maphash mappend mappend*
-syn keyword txl_keyword contained mask match-fun match-regex match-regex-right
-syn keyword txl_keyword contained match-regst match-regst-right match-str match-str-tree
-syn keyword txl_keyword contained max member member-if memq
-syn keyword txl_keyword contained memql memqual merge min
-syn keyword txl_keyword contained minor minusp mkdir mknod
-syn keyword txl_keyword contained mkstring mod multi multi-sort
-syn keyword txl_keyword contained n-choose-k n-perm-k nconc nilf
-syn keyword txl_keyword contained none not notf nreverse
-syn keyword txl_keyword contained null nullify num-chr num-str
-syn keyword txl_keyword contained numberp oand oddp op
-syn keyword txl_keyword contained open-command open-directory open-file open-fileno
-syn keyword txl_keyword contained open-files open-files* open-pipe open-process
-syn keyword txl_keyword contained open-tail openlog opip or
-syn keyword txl_keyword contained orf packagep pad partition
-syn keyword txl_keyword contained partition* partition-by perm plusp
-syn keyword txl_keyword contained pop pos pos-if pos-max
-syn keyword txl_keyword contained pos-min posq posql posqual
-syn keyword txl_keyword contained pppred ppred pprinl pprint
-syn keyword txl_keyword contained pprof pred prinl print
-syn keyword txl_keyword contained prof prog1 progn prop
-syn keyword txl_keyword contained proper-listp push pushhash put-byte
-syn keyword txl_keyword contained put-char put-line put-lines put-string
-syn keyword txl_keyword contained put-strings pwd qquote quasi
-syn keyword txl_keyword contained quasilist quote rand random
-syn keyword txl_keyword contained random-fixnum random-state-p range range*
-syn keyword txl_keyword contained range-regex rcomb read readlink
-syn keyword txl_keyword contained real-time-stream-p reduce-left reduce-right ref
-syn keyword txl_keyword contained refset regex-compile regex-parse regexp
-syn keyword txl_keyword contained regsub rehome-sym remhash remove-if
-syn keyword txl_keyword contained remove-if* remove-path remq remq*
-syn keyword txl_keyword contained remql remql* remqual remqual*
-syn keyword txl_keyword contained rename-path repeat replace replace-list
-syn keyword txl_keyword contained replace-str replace-vec rest ret
-syn keyword txl_keyword contained retf return return-from reverse
-syn keyword txl_keyword contained rlcp rperm rplaca rplacd
-syn keyword txl_keyword contained run s-ifblk s-ifchr s-ifdir
-syn keyword txl_keyword contained s-ififo s-iflnk s-ifmt s-ifreg
-syn keyword txl_keyword contained s-ifsock s-irgrp s-iroth s-irusr
-syn keyword txl_keyword contained s-irwxg s-irwxo s-irwxu s-isgid
-syn keyword txl_keyword contained s-isuid s-isvtx s-iwgrp s-iwoth
-syn keyword txl_keyword contained s-iwusr s-ixgrp s-ixoth s-ixusr
-syn keyword txl_keyword contained search search-regex search-regst search-str
-syn keyword txl_keyword contained search-str-tree second seek-stream select
-syn keyword txl_keyword contained seqp set set-diff set-hash-userdata
-syn keyword txl_keyword contained set-sig-handler sethash setitimer setlogmask
-syn keyword txl_keyword contained sh sig-abrt sig-alrm sig-bus
-syn keyword txl_keyword contained sig-check sig-chld sig-cont sig-fpe
-syn keyword txl_keyword contained sig-hup sig-ill sig-int sig-io
-syn keyword txl_keyword contained sig-iot sig-kill sig-lost sig-pipe
-syn keyword txl_keyword contained sig-poll sig-prof sig-pwr sig-quit
-syn keyword txl_keyword contained sig-segv sig-stkflt sig-stop sig-sys
-syn keyword txl_keyword contained sig-term sig-trap sig-tstp sig-ttin
-syn keyword txl_keyword contained sig-ttou sig-urg sig-usr1 sig-usr2
-syn keyword txl_keyword contained sig-vtalrm sig-winch sig-xcpu sig-xfsz
-syn keyword txl_keyword contained sign-extend sin sixth size-vec
-syn keyword txl_keyword contained some sort sort-group source-loc
-syn keyword txl_keyword contained source-loc-str span-str splice split-str
-syn keyword txl_keyword contained split-str-set sqrt sssucc ssucc
-syn keyword txl_keyword contained stat stdlib str< str<=
-syn keyword txl_keyword contained str= str> str>= stream-get-prop
-syn keyword txl_keyword contained stream-set-prop streamp string-extend string-lt
-syn keyword txl_keyword contained stringp sub sub-list sub-str
-syn keyword txl_keyword contained sub-vec succ symacrolet symbol-function
-syn keyword txl_keyword contained symbol-name symbol-package symbol-value symbolp
-syn keyword txl_keyword contained symlink sys-qquote sys-splice sys-unquote
-syn keyword txl_keyword contained syslog tan tb tc
-syn keyword txl_keyword contained tf third throw throwf
-syn keyword txl_keyword contained time time-fields-local time-fields-utc time-string-local
-syn keyword txl_keyword contained time-string-utc time-usec tofloat toint
-syn keyword txl_keyword contained tok-str tok-where tostring tostringp
-syn keyword txl_keyword contained tprint transpose tree-bind tree-case
-syn keyword txl_keyword contained tree-find trie-add trie-compress trie-lookup-begin
-syn keyword txl_keyword contained trie-lookup-feed-char trie-value-at trim-str true
-syn keyword txl_keyword contained trunc trunc-rem tuples txr-case
-syn keyword txl_keyword contained txr-if txr-when typeof unget-byte
-syn keyword txl_keyword contained unget-char uniq unique unless
-syn keyword txl_keyword contained unquote until until* upcase-str
-syn keyword txl_keyword contained update url-decode url-encode usleep
-syn keyword txl_keyword contained uw-protect vec vec-push vec-set-length
-syn keyword txl_keyword contained vecref vector vector-list vectorp
-syn keyword txl_keyword contained w-continued w-coredump w-exitstatus w-ifcontinued
-syn keyword txl_keyword contained w-ifexited w-ifsignaled w-ifstopped w-nohang
-syn keyword txl_keyword contained w-stopsig w-termsig w-untraced wait
-syn keyword txl_keyword contained weave when whenlet where
-syn keyword txl_keyword contained while while* whilet width
-syn keyword txl_keyword contained with-saved-vars wrap wrap* zap
-syn keyword txl_keyword contained zerop zip
+syn keyword txl_keyword contained eval evenp exec exit
+syn keyword txl_keyword contained exp expt exptmod false
+syn keyword txl_keyword contained fbind fboundp fifth fileno
+syn keyword txl_keyword contained filter-equal filter-string-tree finalize find
+syn keyword txl_keyword contained find-if find-max find-min find-package
+syn keyword txl_keyword contained first fixnump flatten flatten*
+syn keyword txl_keyword contained flet flip flo-int flo-str
+syn keyword txl_keyword contained floatp floor flush-stream for
+syn keyword txl_keyword contained for* force fork format
+syn keyword txl_keyword contained fourth fun func-get-env func-get-form
+syn keyword txl_keyword contained func-set-env functionp gcd gen
+syn keyword txl_keyword contained generate gensym gequal get-byte
+syn keyword txl_keyword contained get-char get-error get-error-str get-hash-userdata
+syn keyword txl_keyword contained get-line get-lines get-list-from-stream get-sig-handler
+syn keyword txl_keyword contained get-string get-string-from-stream gethash getitimer
+syn keyword txl_keyword contained getpid getppid giterate glob
+syn keyword txl_keyword contained glob-altdirfunc glob-brace glob-err glob-mark
+syn keyword txl_keyword contained glob-nocheck glob-noescape glob-nomagic glob-nosort
+syn keyword txl_keyword contained glob-onlydir glob-period glob-tilde glob-tilde-check
+syn keyword txl_keyword contained greater group-by gun hash
+syn keyword txl_keyword contained hash-alist hash-construct hash-count hash-diff
+syn keyword txl_keyword contained hash-eql hash-equal hash-isec hash-keys
+syn keyword txl_keyword contained hash-pairs hash-uni hash-update hash-update-1
+syn keyword txl_keyword contained hash-values hashp html-decode html-encode
+syn keyword txl_keyword contained iapply identity ido if
+syn keyword txl_keyword contained iff iffi iflet ignerr
+syn keyword txl_keyword contained in inc inhash int-flo
+syn keyword txl_keyword contained int-str integerp intern interp-fun-p
+syn keyword txl_keyword contained interpose ip ipf isqrt
+syn keyword txl_keyword contained itimer-prov itimer-real itimer-virtual juxt
+syn keyword txl_keyword contained keep-if keep-if* keywordp kill
+syn keyword txl_keyword contained labels lambda last lazy-str
+syn keyword txl_keyword contained lazy-str-force lazy-str-force-upto lazy-str-get-trailing-list lazy-stream-cons
+syn keyword txl_keyword contained lazy-stringp lbind lcm lcons-fun
+syn keyword txl_keyword contained lconsp ldiff length length-list
+syn keyword txl_keyword contained length-str length-str-< length-str-<= length-str->
+syn keyword txl_keyword contained length-str->= length-vec lequal less
+syn keyword txl_keyword contained let let* lexical-fun-p lexical-lisp1-binding
+syn keyword txl_keyword contained lexical-var-p link lisp-parse list
+syn keyword txl_keyword contained list* list-str list-vector listp
+syn keyword txl_keyword contained log log-alert log-auth log-authpriv
+syn keyword txl_keyword contained log-cons log-crit log-daemon log-debug
+syn keyword txl_keyword contained log-emerg log-err log-info log-ndelay
+syn keyword txl_keyword contained log-notice log-nowait log-odelay log-perror
+syn keyword txl_keyword contained log-pid log-user log-warning log10
+syn keyword txl_keyword contained log2 logand logior lognot
+syn keyword txl_keyword contained logtest logtrunc logxor macro-form-p
+syn keyword txl_keyword contained macro-time macroexpand macroexpand-1 macrolet
+syn keyword txl_keyword contained major make-catenated-stream make-env make-hash
+syn keyword txl_keyword contained make-lazy-cons make-like make-package make-random-state
+syn keyword txl_keyword contained make-similar-hash make-string-byte-input-stream make-string-input-stream make-string-output-stream
+syn keyword txl_keyword contained make-strlist-output-stream make-sym make-time make-time-utc
+syn keyword txl_keyword contained make-trie makedev mapcar mapcar*
+syn keyword txl_keyword contained mapdo mapf maphash mappend
+syn keyword txl_keyword contained mappend* mask match-fun match-regex
+syn keyword txl_keyword contained match-regex-right match-regst match-regst-right match-str
+syn keyword txl_keyword contained match-str-tree max member member-if
+syn keyword txl_keyword contained memq memql memqual merge
+syn keyword txl_keyword contained min minor minusp mkdir
+syn keyword txl_keyword contained mknod mkstring mod multi
+syn keyword txl_keyword contained multi-sort n-choose-k n-perm-k nconc
+syn keyword txl_keyword contained nilf none not notf
+syn keyword txl_keyword contained nreverse null nullify num-chr
+syn keyword txl_keyword contained num-str numberp oand oddp
+syn keyword txl_keyword contained op open-command open-directory open-file
+syn keyword txl_keyword contained open-fileno open-files open-files* open-pipe
+syn keyword txl_keyword contained open-process open-tail openlog opip
+syn keyword txl_keyword contained or orf packagep pad
+syn keyword txl_keyword contained partition partition* partition-by perm
+syn keyword txl_keyword contained pipe plusp pop pos
+syn keyword txl_keyword contained pos-if pos-max pos-min posq
+syn keyword txl_keyword contained posql posqual pppred ppred
+syn keyword txl_keyword contained pprinl pprint pprof pred
+syn keyword txl_keyword contained prinl print prof prog1
+syn keyword txl_keyword contained progn prop proper-listp push
+syn keyword txl_keyword contained pushhash put-byte put-char put-line
+syn keyword txl_keyword contained put-lines put-string put-strings pwd
+syn keyword txl_keyword contained qquote quasi quasilist quote
+syn keyword txl_keyword contained rand random random-fixnum random-state-p
+syn keyword txl_keyword contained range range* range-regex rcomb
+syn keyword txl_keyword contained read readlink real-time-stream-p reduce-left
+syn keyword txl_keyword contained reduce-right ref refset regex-compile
+syn keyword txl_keyword contained regex-parse regexp regsub rehome-sym
+syn keyword txl_keyword contained remhash remove-if remove-if* remove-path
+syn keyword txl_keyword contained remq remq* remql remql*
+syn keyword txl_keyword contained remqual remqual* rename-path repeat
+syn keyword txl_keyword contained replace replace-list replace-str replace-vec
+syn keyword txl_keyword contained rest ret retf return
+syn keyword txl_keyword contained return-from reverse rlcp rperm
+syn keyword txl_keyword contained rplaca rplacd run s-ifblk
+syn keyword txl_keyword contained s-ifchr s-ifdir s-ififo s-iflnk
+syn keyword txl_keyword contained s-ifmt s-ifreg s-ifsock s-irgrp
+syn keyword txl_keyword contained s-iroth s-irusr s-irwxg s-irwxo
+syn keyword txl_keyword contained s-irwxu s-isgid s-isuid s-isvtx
+syn keyword txl_keyword contained s-iwgrp s-iwoth s-iwusr s-ixgrp
+syn keyword txl_keyword contained s-ixoth s-ixusr search search-regex
+syn keyword txl_keyword contained search-regst search-str search-str-tree second
+syn keyword txl_keyword contained seek-stream select seqp set
+syn keyword txl_keyword contained set-diff set-hash-userdata set-sig-handler sethash
+syn keyword txl_keyword contained setitimer setlogmask sh sig-abrt
+syn keyword txl_keyword contained sig-alrm sig-bus sig-check sig-chld
+syn keyword txl_keyword contained sig-cont sig-fpe sig-hup sig-ill
+syn keyword txl_keyword contained sig-int sig-io sig-iot sig-kill
+syn keyword txl_keyword contained sig-lost sig-pipe sig-poll sig-prof
+syn keyword txl_keyword contained sig-pwr sig-quit sig-segv sig-stkflt
+syn keyword txl_keyword contained sig-stop sig-sys sig-term sig-trap
+syn keyword txl_keyword contained sig-tstp sig-ttin sig-ttou sig-urg
+syn keyword txl_keyword contained sig-usr1 sig-usr2 sig-vtalrm sig-winch
+syn keyword txl_keyword contained sig-xcpu sig-xfsz sign-extend sin
+syn keyword txl_keyword contained sixth size-vec some sort
+syn keyword txl_keyword contained sort-group source-loc source-loc-str span-str
+syn keyword txl_keyword contained splice split-str split-str-set sqrt
+syn keyword txl_keyword contained sssucc ssucc stat stdlib
+syn keyword txl_keyword contained str< str<= str= str>
+syn keyword txl_keyword contained str>= stream-get-prop stream-set-prop streamp
+syn keyword txl_keyword contained string-extend string-lt stringp sub
+syn keyword txl_keyword contained sub-list sub-str sub-vec succ
+syn keyword txl_keyword contained symacrolet symbol-function symbol-name symbol-package
+syn keyword txl_keyword contained symbol-value symbolp symlink sys-qquote
+syn keyword txl_keyword contained sys-splice sys-unquote syslog tan
+syn keyword txl_keyword contained tb tc tf third
+syn keyword txl_keyword contained throw throwf time time-fields-local
+syn keyword txl_keyword contained time-fields-utc time-string-local time-string-utc time-usec
+syn keyword txl_keyword contained tofloat toint tok-str tok-where
+syn keyword txl_keyword contained tostring tostringp tprint transpose
+syn keyword txl_keyword contained tree-bind tree-case tree-find trie-add
+syn keyword txl_keyword contained trie-compress trie-lookup-begin trie-lookup-feed-char trie-value-at
+syn keyword txl_keyword contained trim-str true trunc trunc-rem
+syn keyword txl_keyword contained tuples txr-case txr-if txr-when
+syn keyword txl_keyword contained typeof unget-byte unget-char uniq
+syn keyword txl_keyword contained unique unless unquote until
+syn keyword txl_keyword contained until* upcase-str update url-decode
+syn keyword txl_keyword contained url-encode usleep uw-protect vec
+syn keyword txl_keyword contained vec-push vec-set-length vecref vector
+syn keyword txl_keyword contained vector-list vectorp w-continued w-coredump
+syn keyword txl_keyword contained w-exitstatus w-ifcontinued w-ifexited w-ifsignaled
+syn keyword txl_keyword contained w-ifstopped w-nohang w-stopsig w-termsig
+syn keyword txl_keyword contained w-untraced wait weave when
+syn keyword txl_keyword contained whenlet where while while*
+syn keyword txl_keyword contained whilet width with-saved-vars wrap
+syn keyword txl_keyword contained wrap* zap zerop zip
syn match txr_metanum "@[0-9]\+"
syn match txr_nested_error "[^\t `]\+" contained
diff --git a/txr.1 b/txr.1
index 0319b491..2672da68 100644
--- a/txr.1
+++ b/txr.1
@@ -24911,6 +24911,31 @@ or
.codn nil ,
rather than zero or nonzero. The others return integer values.
+.coNP Function @ exec
+.synb
+.mets (exec < file <> [ args ])
+.syne
+.desc
+The exec function replaces the process image with the executable specified
+by string argument
+.metn file .
+The executable is found by searching the system path.
+
+The
+.meta file
+argument becomes the first argument of the executable, argument zero.
+
+If
+.meta args
+is specified, it is a list of strings. These are passed as the additional
+arguments of the executable.
+
+If
+.code exec
+fails, an exception of type
+.code file-error
+is thrown.
+
.coNP Functions @ getpid and @ getppid
.synb
(getpid)
@@ -24989,6 +25014,24 @@ or
.codn dup2 ,
when called with one or two arguments, respectively.
+.coNP Function @ pipe
+.synb
+ (pipe)
+.syne
+.desc
+The
+.code pipe
+function, if successful, returns a pair of integer file descriptors
+as a cons cell pair. The descriptor in the
+.code car
+field of the pair is the read end of the pipe.
+The
+.code cdr
+holds the write end.
+
+If the function fails, it throws an exception of type
+.codn file-error .
+
.SS* Unix Itimers
Itimers ("interval timers") can be used in combination with signal handling to
execute asynchronous actions. Itimers deliver delayed, one-time signals,
diff --git a/txr.vim b/txr.vim
index 46c4080c..7546b67b 100644
--- a/txr.vim
+++ b/txr.vim
@@ -59,147 +59,147 @@ syn keyword txl_keyword contained dup dupfd dwim each
syn keyword txl_keyword contained each* empty ensure-dir env
syn keyword txl_keyword contained env-fbind env-hash env-vbind eq
syn keyword txl_keyword contained eql equal errno error
-syn keyword txl_keyword contained eval evenp exit exp
-syn keyword txl_keyword contained expt exptmod false fbind
-syn keyword txl_keyword contained fboundp fifth fileno filter-equal
-syn keyword txl_keyword contained filter-string-tree finalize find find-if
-syn keyword txl_keyword contained find-max find-min find-package first
-syn keyword txl_keyword contained fixnump flatten flatten* flet
-syn keyword txl_keyword contained flip flo-int flo-str floatp
-syn keyword txl_keyword contained floor flush-stream for for*
-syn keyword txl_keyword contained force fork format fourth
-syn keyword txl_keyword contained fun func-get-env func-get-form func-set-env
-syn keyword txl_keyword contained functionp gcd gen generate
-syn keyword txl_keyword contained gensym gequal get-byte get-char
-syn keyword txl_keyword contained get-error get-error-str get-hash-userdata get-line
-syn keyword txl_keyword contained get-lines get-list-from-stream get-sig-handler get-string
-syn keyword txl_keyword contained get-string-from-stream gethash getitimer getpid
-syn keyword txl_keyword contained getppid giterate glob glob-altdirfunc
-syn keyword txl_keyword contained glob-brace glob-err glob-mark glob-nocheck
-syn keyword txl_keyword contained glob-noescape glob-nomagic glob-nosort glob-onlydir
-syn keyword txl_keyword contained glob-period glob-tilde glob-tilde-check greater
-syn keyword txl_keyword contained group-by gun hash hash-alist
-syn keyword txl_keyword contained hash-construct hash-count hash-diff hash-eql
-syn keyword txl_keyword contained hash-equal hash-isec hash-keys hash-pairs
-syn keyword txl_keyword contained hash-uni hash-update hash-update-1 hash-values
-syn keyword txl_keyword contained hashp html-decode html-encode iapply
-syn keyword txl_keyword contained identity ido if iff
-syn keyword txl_keyword contained iffi iflet ignerr in
-syn keyword txl_keyword contained inc inhash int-flo int-str
-syn keyword txl_keyword contained integerp intern interp-fun-p interpose
-syn keyword txl_keyword contained ip ipf isqrt itimer-prov
-syn keyword txl_keyword contained itimer-real itimer-virtual juxt keep-if
-syn keyword txl_keyword contained keep-if* keywordp kill labels
-syn keyword txl_keyword contained lambda last lazy-str lazy-str-force
-syn keyword txl_keyword contained lazy-str-force-upto lazy-str-get-trailing-list lazy-stream-cons lazy-stringp
-syn keyword txl_keyword contained lbind lcm lcons-fun lconsp
-syn keyword txl_keyword contained ldiff length length-list length-str
-syn keyword txl_keyword contained length-str-< length-str-<= length-str-> length-str->=
-syn keyword txl_keyword contained length-vec lequal less let
-syn keyword txl_keyword contained let* lexical-fun-p lexical-lisp1-binding lexical-var-p
-syn keyword txl_keyword contained link lisp-parse list list*
-syn keyword txl_keyword contained list-str list-vector listp log
-syn keyword txl_keyword contained log-alert log-auth log-authpriv log-cons
-syn keyword txl_keyword contained log-crit log-daemon log-debug log-emerg
-syn keyword txl_keyword contained log-err log-info log-ndelay log-notice
-syn keyword txl_keyword contained log-nowait log-odelay log-perror log-pid
-syn keyword txl_keyword contained log-user log-warning log10 log2
-syn keyword txl_keyword contained logand logior lognot logtest
-syn keyword txl_keyword contained logtrunc logxor macro-form-p macro-time
-syn keyword txl_keyword contained macroexpand macroexpand-1 macrolet major
-syn keyword txl_keyword contained make-catenated-stream make-env make-hash make-lazy-cons
-syn keyword txl_keyword contained make-like make-package make-random-state make-similar-hash
-syn keyword txl_keyword contained make-string-byte-input-stream make-string-input-stream make-string-output-stream make-strlist-output-stream
-syn keyword txl_keyword contained make-sym make-time make-time-utc make-trie
-syn keyword txl_keyword contained makedev mapcar mapcar* mapdo
-syn keyword txl_keyword contained mapf maphash mappend mappend*
-syn keyword txl_keyword contained mask match-fun match-regex match-regex-right
-syn keyword txl_keyword contained match-regst match-regst-right match-str match-str-tree
-syn keyword txl_keyword contained max member member-if memq
-syn keyword txl_keyword contained memql memqual merge min
-syn keyword txl_keyword contained minor minusp mkdir mknod
-syn keyword txl_keyword contained mkstring mod multi multi-sort
-syn keyword txl_keyword contained n-choose-k n-perm-k nconc nilf
-syn keyword txl_keyword contained none not notf nreverse
-syn keyword txl_keyword contained null nullify num-chr num-str
-syn keyword txl_keyword contained numberp oand oddp op
-syn keyword txl_keyword contained open-command open-directory open-file open-fileno
-syn keyword txl_keyword contained open-files open-files* open-pipe open-process
-syn keyword txl_keyword contained open-tail openlog opip or
-syn keyword txl_keyword contained orf packagep pad partition
-syn keyword txl_keyword contained partition* partition-by perm plusp
-syn keyword txl_keyword contained pop pos pos-if pos-max
-syn keyword txl_keyword contained pos-min posq posql posqual
-syn keyword txl_keyword contained pppred ppred pprinl pprint
-syn keyword txl_keyword contained pprof pred prinl print
-syn keyword txl_keyword contained prof prog1 progn prop
-syn keyword txl_keyword contained proper-listp push pushhash put-byte
-syn keyword txl_keyword contained put-char put-line put-lines put-string
-syn keyword txl_keyword contained put-strings pwd qquote quasi
-syn keyword txl_keyword contained quasilist quote rand random
-syn keyword txl_keyword contained random-fixnum random-state-p range range*
-syn keyword txl_keyword contained range-regex rcomb read readlink
-syn keyword txl_keyword contained real-time-stream-p reduce-left reduce-right ref
-syn keyword txl_keyword contained refset regex-compile regex-parse regexp
-syn keyword txl_keyword contained regsub rehome-sym remhash remove-if
-syn keyword txl_keyword contained remove-if* remove-path remq remq*
-syn keyword txl_keyword contained remql remql* remqual remqual*
-syn keyword txl_keyword contained rename-path repeat replace replace-list
-syn keyword txl_keyword contained replace-str replace-vec rest ret
-syn keyword txl_keyword contained retf return return-from reverse
-syn keyword txl_keyword contained rlcp rperm rplaca rplacd
-syn keyword txl_keyword contained run s-ifblk s-ifchr s-ifdir
-syn keyword txl_keyword contained s-ififo s-iflnk s-ifmt s-ifreg
-syn keyword txl_keyword contained s-ifsock s-irgrp s-iroth s-irusr
-syn keyword txl_keyword contained s-irwxg s-irwxo s-irwxu s-isgid
-syn keyword txl_keyword contained s-isuid s-isvtx s-iwgrp s-iwoth
-syn keyword txl_keyword contained s-iwusr s-ixgrp s-ixoth s-ixusr
-syn keyword txl_keyword contained search search-regex search-regst search-str
-syn keyword txl_keyword contained search-str-tree second seek-stream select
-syn keyword txl_keyword contained seqp set set-diff set-hash-userdata
-syn keyword txl_keyword contained set-sig-handler sethash setitimer setlogmask
-syn keyword txl_keyword contained sh sig-abrt sig-alrm sig-bus
-syn keyword txl_keyword contained sig-check sig-chld sig-cont sig-fpe
-syn keyword txl_keyword contained sig-hup sig-ill sig-int sig-io
-syn keyword txl_keyword contained sig-iot sig-kill sig-lost sig-pipe
-syn keyword txl_keyword contained sig-poll sig-prof sig-pwr sig-quit
-syn keyword txl_keyword contained sig-segv sig-stkflt sig-stop sig-sys
-syn keyword txl_keyword contained sig-term sig-trap sig-tstp sig-ttin
-syn keyword txl_keyword contained sig-ttou sig-urg sig-usr1 sig-usr2
-syn keyword txl_keyword contained sig-vtalrm sig-winch sig-xcpu sig-xfsz
-syn keyword txl_keyword contained sign-extend sin sixth size-vec
-syn keyword txl_keyword contained some sort sort-group source-loc
-syn keyword txl_keyword contained source-loc-str span-str splice split-str
-syn keyword txl_keyword contained split-str-set sqrt sssucc ssucc
-syn keyword txl_keyword contained stat stdlib str< str<=
-syn keyword txl_keyword contained str= str> str>= stream-get-prop
-syn keyword txl_keyword contained stream-set-prop streamp string-extend string-lt
-syn keyword txl_keyword contained stringp sub sub-list sub-str
-syn keyword txl_keyword contained sub-vec succ symacrolet symbol-function
-syn keyword txl_keyword contained symbol-name symbol-package symbol-value symbolp
-syn keyword txl_keyword contained symlink sys-qquote sys-splice sys-unquote
-syn keyword txl_keyword contained syslog tan tb tc
-syn keyword txl_keyword contained tf third throw throwf
-syn keyword txl_keyword contained time time-fields-local time-fields-utc time-string-local
-syn keyword txl_keyword contained time-string-utc time-usec tofloat toint
-syn keyword txl_keyword contained tok-str tok-where tostring tostringp
-syn keyword txl_keyword contained tprint transpose tree-bind tree-case
-syn keyword txl_keyword contained tree-find trie-add trie-compress trie-lookup-begin
-syn keyword txl_keyword contained trie-lookup-feed-char trie-value-at trim-str true
-syn keyword txl_keyword contained trunc trunc-rem tuples txr-case
-syn keyword txl_keyword contained txr-if txr-when typeof unget-byte
-syn keyword txl_keyword contained unget-char uniq unique unless
-syn keyword txl_keyword contained unquote until until* upcase-str
-syn keyword txl_keyword contained update url-decode url-encode usleep
-syn keyword txl_keyword contained uw-protect vec vec-push vec-set-length
-syn keyword txl_keyword contained vecref vector vector-list vectorp
-syn keyword txl_keyword contained w-continued w-coredump w-exitstatus w-ifcontinued
-syn keyword txl_keyword contained w-ifexited w-ifsignaled w-ifstopped w-nohang
-syn keyword txl_keyword contained w-stopsig w-termsig w-untraced wait
-syn keyword txl_keyword contained weave when whenlet where
-syn keyword txl_keyword contained while while* whilet width
-syn keyword txl_keyword contained with-saved-vars wrap wrap* zap
-syn keyword txl_keyword contained zerop zip
+syn keyword txl_keyword contained eval evenp exec exit
+syn keyword txl_keyword contained exp expt exptmod false
+syn keyword txl_keyword contained fbind fboundp fifth fileno
+syn keyword txl_keyword contained filter-equal filter-string-tree finalize find
+syn keyword txl_keyword contained find-if find-max find-min find-package
+syn keyword txl_keyword contained first fixnump flatten flatten*
+syn keyword txl_keyword contained flet flip flo-int flo-str
+syn keyword txl_keyword contained floatp floor flush-stream for
+syn keyword txl_keyword contained for* force fork format
+syn keyword txl_keyword contained fourth fun func-get-env func-get-form
+syn keyword txl_keyword contained func-set-env functionp gcd gen
+syn keyword txl_keyword contained generate gensym gequal get-byte
+syn keyword txl_keyword contained get-char get-error get-error-str get-hash-userdata
+syn keyword txl_keyword contained get-line get-lines get-list-from-stream get-sig-handler
+syn keyword txl_keyword contained get-string get-string-from-stream gethash getitimer
+syn keyword txl_keyword contained getpid getppid giterate glob
+syn keyword txl_keyword contained glob-altdirfunc glob-brace glob-err glob-mark
+syn keyword txl_keyword contained glob-nocheck glob-noescape glob-nomagic glob-nosort
+syn keyword txl_keyword contained glob-onlydir glob-period glob-tilde glob-tilde-check
+syn keyword txl_keyword contained greater group-by gun hash
+syn keyword txl_keyword contained hash-alist hash-construct hash-count hash-diff
+syn keyword txl_keyword contained hash-eql hash-equal hash-isec hash-keys
+syn keyword txl_keyword contained hash-pairs hash-uni hash-update hash-update-1
+syn keyword txl_keyword contained hash-values hashp html-decode html-encode
+syn keyword txl_keyword contained iapply identity ido if
+syn keyword txl_keyword contained iff iffi iflet ignerr
+syn keyword txl_keyword contained in inc inhash int-flo
+syn keyword txl_keyword contained int-str integerp intern interp-fun-p
+syn keyword txl_keyword contained interpose ip ipf isqrt
+syn keyword txl_keyword contained itimer-prov itimer-real itimer-virtual juxt
+syn keyword txl_keyword contained keep-if keep-if* keywordp kill
+syn keyword txl_keyword contained labels lambda last lazy-str
+syn keyword txl_keyword contained lazy-str-force lazy-str-force-upto lazy-str-get-trailing-list lazy-stream-cons
+syn keyword txl_keyword contained lazy-stringp lbind lcm lcons-fun
+syn keyword txl_keyword contained lconsp ldiff length length-list
+syn keyword txl_keyword contained length-str length-str-< length-str-<= length-str->
+syn keyword txl_keyword contained length-str->= length-vec lequal less
+syn keyword txl_keyword contained let let* lexical-fun-p lexical-lisp1-binding
+syn keyword txl_keyword contained lexical-var-p link lisp-parse list
+syn keyword txl_keyword contained list* list-str list-vector listp
+syn keyword txl_keyword contained log log-alert log-auth log-authpriv
+syn keyword txl_keyword contained log-cons log-crit log-daemon log-debug
+syn keyword txl_keyword contained log-emerg log-err log-info log-ndelay
+syn keyword txl_keyword contained log-notice log-nowait log-odelay log-perror
+syn keyword txl_keyword contained log-pid log-user log-warning log10
+syn keyword txl_keyword contained log2 logand logior lognot
+syn keyword txl_keyword contained logtest logtrunc logxor macro-form-p
+syn keyword txl_keyword contained macro-time macroexpand macroexpand-1 macrolet
+syn keyword txl_keyword contained major make-catenated-stream make-env make-hash
+syn keyword txl_keyword contained make-lazy-cons make-like make-package make-random-state
+syn keyword txl_keyword contained make-similar-hash make-string-byte-input-stream make-string-input-stream make-string-output-stream
+syn keyword txl_keyword contained make-strlist-output-stream make-sym make-time make-time-utc
+syn keyword txl_keyword contained make-trie makedev mapcar mapcar*
+syn keyword txl_keyword contained mapdo mapf maphash mappend
+syn keyword txl_keyword contained mappend* mask match-fun match-regex
+syn keyword txl_keyword contained match-regex-right match-regst match-regst-right match-str
+syn keyword txl_keyword contained match-str-tree max member member-if
+syn keyword txl_keyword contained memq memql memqual merge
+syn keyword txl_keyword contained min minor minusp mkdir
+syn keyword txl_keyword contained mknod mkstring mod multi
+syn keyword txl_keyword contained multi-sort n-choose-k n-perm-k nconc
+syn keyword txl_keyword contained nilf none not notf
+syn keyword txl_keyword contained nreverse null nullify num-chr
+syn keyword txl_keyword contained num-str numberp oand oddp
+syn keyword txl_keyword contained op open-command open-directory open-file
+syn keyword txl_keyword contained open-fileno open-files open-files* open-pipe
+syn keyword txl_keyword contained open-process open-tail openlog opip
+syn keyword txl_keyword contained or orf packagep pad
+syn keyword txl_keyword contained partition partition* partition-by perm
+syn keyword txl_keyword contained pipe plusp pop pos
+syn keyword txl_keyword contained pos-if pos-max pos-min posq
+syn keyword txl_keyword contained posql posqual pppred ppred
+syn keyword txl_keyword contained pprinl pprint pprof pred
+syn keyword txl_keyword contained prinl print prof prog1
+syn keyword txl_keyword contained progn prop proper-listp push
+syn keyword txl_keyword contained pushhash put-byte put-char put-line
+syn keyword txl_keyword contained put-lines put-string put-strings pwd
+syn keyword txl_keyword contained qquote quasi quasilist quote
+syn keyword txl_keyword contained rand random random-fixnum random-state-p
+syn keyword txl_keyword contained range range* range-regex rcomb
+syn keyword txl_keyword contained read readlink real-time-stream-p reduce-left
+syn keyword txl_keyword contained reduce-right ref refset regex-compile
+syn keyword txl_keyword contained regex-parse regexp regsub rehome-sym
+syn keyword txl_keyword contained remhash remove-if remove-if* remove-path
+syn keyword txl_keyword contained remq remq* remql remql*
+syn keyword txl_keyword contained remqual remqual* rename-path repeat
+syn keyword txl_keyword contained replace replace-list replace-str replace-vec
+syn keyword txl_keyword contained rest ret retf return
+syn keyword txl_keyword contained return-from reverse rlcp rperm
+syn keyword txl_keyword contained rplaca rplacd run s-ifblk
+syn keyword txl_keyword contained s-ifchr s-ifdir s-ififo s-iflnk
+syn keyword txl_keyword contained s-ifmt s-ifreg s-ifsock s-irgrp
+syn keyword txl_keyword contained s-iroth s-irusr s-irwxg s-irwxo
+syn keyword txl_keyword contained s-irwxu s-isgid s-isuid s-isvtx
+syn keyword txl_keyword contained s-iwgrp s-iwoth s-iwusr s-ixgrp
+syn keyword txl_keyword contained s-ixoth s-ixusr search search-regex
+syn keyword txl_keyword contained search-regst search-str search-str-tree second
+syn keyword txl_keyword contained seek-stream select seqp set
+syn keyword txl_keyword contained set-diff set-hash-userdata set-sig-handler sethash
+syn keyword txl_keyword contained setitimer setlogmask sh sig-abrt
+syn keyword txl_keyword contained sig-alrm sig-bus sig-check sig-chld
+syn keyword txl_keyword contained sig-cont sig-fpe sig-hup sig-ill
+syn keyword txl_keyword contained sig-int sig-io sig-iot sig-kill
+syn keyword txl_keyword contained sig-lost sig-pipe sig-poll sig-prof
+syn keyword txl_keyword contained sig-pwr sig-quit sig-segv sig-stkflt
+syn keyword txl_keyword contained sig-stop sig-sys sig-term sig-trap
+syn keyword txl_keyword contained sig-tstp sig-ttin sig-ttou sig-urg
+syn keyword txl_keyword contained sig-usr1 sig-usr2 sig-vtalrm sig-winch
+syn keyword txl_keyword contained sig-xcpu sig-xfsz sign-extend sin
+syn keyword txl_keyword contained sixth size-vec some sort
+syn keyword txl_keyword contained sort-group source-loc source-loc-str span-str
+syn keyword txl_keyword contained splice split-str split-str-set sqrt
+syn keyword txl_keyword contained sssucc ssucc stat stdlib
+syn keyword txl_keyword contained str< str<= str= str>
+syn keyword txl_keyword contained str>= stream-get-prop stream-set-prop streamp
+syn keyword txl_keyword contained string-extend string-lt stringp sub
+syn keyword txl_keyword contained sub-list sub-str sub-vec succ
+syn keyword txl_keyword contained symacrolet symbol-function symbol-name symbol-package
+syn keyword txl_keyword contained symbol-value symbolp symlink sys-qquote
+syn keyword txl_keyword contained sys-splice sys-unquote syslog tan
+syn keyword txl_keyword contained tb tc tf third
+syn keyword txl_keyword contained throw throwf time time-fields-local
+syn keyword txl_keyword contained time-fields-utc time-string-local time-string-utc time-usec
+syn keyword txl_keyword contained tofloat toint tok-str tok-where
+syn keyword txl_keyword contained tostring tostringp tprint transpose
+syn keyword txl_keyword contained tree-bind tree-case tree-find trie-add
+syn keyword txl_keyword contained trie-compress trie-lookup-begin trie-lookup-feed-char trie-value-at
+syn keyword txl_keyword contained trim-str true trunc trunc-rem
+syn keyword txl_keyword contained tuples txr-case txr-if txr-when
+syn keyword txl_keyword contained typeof unget-byte unget-char uniq
+syn keyword txl_keyword contained unique unless unquote until
+syn keyword txl_keyword contained until* upcase-str update url-decode
+syn keyword txl_keyword contained url-encode usleep uw-protect vec
+syn keyword txl_keyword contained vec-push vec-set-length vecref vector
+syn keyword txl_keyword contained vector-list vectorp w-continued w-coredump
+syn keyword txl_keyword contained w-exitstatus w-ifcontinued w-ifexited w-ifsignaled
+syn keyword txl_keyword contained w-ifstopped w-nohang w-stopsig w-termsig
+syn keyword txl_keyword contained w-untraced wait weave when
+syn keyword txl_keyword contained whenlet where while while*
+syn keyword txl_keyword contained whilet width with-saved-vars wrap
+syn keyword txl_keyword contained wrap* zap zerop zip
syn keyword txr_keyword contained accept all and assert
syn keyword txr_keyword contained bind block cases cat