Remove (almost) all references to Geesh.
gash/environment.scm: Remove file. geesh/*: Move these files into the 'gash' folder and replace all instances of the word 'geesh'. scripts/geesh.in: Remove file. HACKING, INSTALL, Makefile.am, configure.ac, guix.scm, tests/bootstrap/bash-without-bash.scm, tests/spec/Makefile.am, tests/spec/check-spec, tests/spec/oil.scm, tests/unit/*, tools/coverage.in: Replace all instances of the word 'geesh'. Co-authored-by: Jan Nieuwenhuizen <janneke@gnu.org>
This commit is contained in:
parent
f387269c0b
commit
1bd92e2893
6
HACKING
6
HACKING
|
@ -15,9 +15,3 @@ or
|
||||||
|
|
||||||
bash -e test/42-sh-export.sh
|
bash -e test/42-sh-export.sh
|
||||||
./pre-inst-env gash -e test/42-sh-export.sh
|
./pre-inst-env gash -e test/42-sh-export.sh
|
||||||
|
|
||||||
To use Geesh, assuming you have built it in ../geesh, do something like
|
|
||||||
|
|
||||||
GUILE_LOAD_PATH=../geesh:$GUILE_LOAD_PATH
|
|
||||||
GUILE_LOAD_COMPILED_PATH=../geesh:$GUILE_LOAD_COMPILED_PATH
|
|
||||||
./pre-inst-env gash --geesh -dd -p -c 'cat < README > bla'
|
|
||||||
|
|
1
INSTALL
1
INSTALL
|
@ -10,7 +10,6 @@ Building and Installing Gash
|
||||||
guix environment -l guix.scm
|
guix environment -l guix.scm
|
||||||
|
|
||||||
*** Other GNU/Linux
|
*** Other GNU/Linux
|
||||||
- [[https://gitlab.com/samplet/geesh][geesh]], 0.1-rc is known to work.
|
|
||||||
- GNU Guile, version 2.2.3 or is known to work.
|
- GNU Guile, version 2.2.3 or is known to work.
|
||||||
- GNU make, version 4.2 known to work.
|
- GNU make, version 4.2 known to work.
|
||||||
- SH, /bin/sh, GNU Bash 4.3 is known to work.
|
- SH, /bin/sh, GNU Bash 4.3 is known to work.
|
||||||
|
|
65
Makefile.am
65
Makefile.am
|
@ -53,14 +53,43 @@ dist-hook:
|
||||||
echo $(VERSION) > $(distdir)/.tarball-version
|
echo $(VERSION) > $(distdir)/.tarball-version
|
||||||
|
|
||||||
MODULES = \
|
MODULES = \
|
||||||
|
gash/built-ins/break.scm \
|
||||||
|
gash/built-ins/cd.scm \
|
||||||
|
gash/built-ins/colon.scm \
|
||||||
|
gash/built-ins/command.scm \
|
||||||
|
gash/built-ins/continue.scm \
|
||||||
|
gash/built-ins/dot.scm \
|
||||||
|
gash/built-ins/echo.scm \
|
||||||
|
gash/built-ins/eval.scm \
|
||||||
|
gash/built-ins/exec.scm \
|
||||||
|
gash/built-ins/exit.scm \
|
||||||
|
gash/built-ins/export.scm \
|
||||||
|
gash/built-ins/false.scm \
|
||||||
|
gash/built-ins/pwd.scm \
|
||||||
|
gash/built-ins/read.scm \
|
||||||
|
gash/built-ins/readonly.scm \
|
||||||
|
gash/built-ins/return.scm \
|
||||||
|
gash/built-ins/set.scm \
|
||||||
|
gash/built-ins/shift.scm \
|
||||||
|
gash/built-ins/trap.scm \
|
||||||
|
gash/built-ins/true.scm \
|
||||||
|
gash/built-ins/type.scm \
|
||||||
|
gash/built-ins/umask.scm \
|
||||||
|
gash/built-ins/unset.scm \
|
||||||
|
gash/built-ins/utils.scm \
|
||||||
|
gash/built-ins.scm \
|
||||||
gash/builtins.scm \
|
gash/builtins.scm \
|
||||||
gash/config.scm \
|
gash/config.scm \
|
||||||
gash/environment.scm \
|
gash/environment.scm \
|
||||||
|
gash/eval.scm \
|
||||||
gash/gash.scm \
|
gash/gash.scm \
|
||||||
gash/geesh.scm \
|
gash/geesh.scm \
|
||||||
gash/grammar.scm \
|
gash/grammar.scm \
|
||||||
gash/io.scm \
|
gash/io.scm \
|
||||||
gash/job.scm \
|
gash/job.scm \
|
||||||
|
gash/lexer.scm \
|
||||||
|
gash/parser.scm \
|
||||||
|
gash/pattern.scm \
|
||||||
gash/peg.scm \
|
gash/peg.scm \
|
||||||
gash/peg/cache.scm \
|
gash/peg/cache.scm \
|
||||||
gash/peg/codegen.scm \
|
gash/peg/codegen.scm \
|
||||||
|
@ -69,42 +98,12 @@ MODULES = \
|
||||||
gash/peg/using-parsers.scm \
|
gash/peg/using-parsers.scm \
|
||||||
gash/pipe.scm \
|
gash/pipe.scm \
|
||||||
gash/readline.scm \
|
gash/readline.scm \
|
||||||
|
gash/repl.scm \
|
||||||
gash/script.scm \
|
gash/script.scm \
|
||||||
gash/shell-utils.scm \
|
gash/shell-utils.scm \
|
||||||
|
gash/shell.scm \
|
||||||
gash/util.scm \
|
gash/util.scm \
|
||||||
geesh/built-ins/break.scm \
|
gash/word.scm
|
||||||
geesh/built-ins/cd.scm \
|
|
||||||
geesh/built-ins/colon.scm \
|
|
||||||
geesh/built-ins/command.scm \
|
|
||||||
geesh/built-ins/continue.scm \
|
|
||||||
geesh/built-ins/dot.scm \
|
|
||||||
geesh/built-ins/echo.scm \
|
|
||||||
geesh/built-ins/eval.scm \
|
|
||||||
geesh/built-ins/exec.scm \
|
|
||||||
geesh/built-ins/exit.scm \
|
|
||||||
geesh/built-ins/export.scm \
|
|
||||||
geesh/built-ins/false.scm \
|
|
||||||
geesh/built-ins/pwd.scm \
|
|
||||||
geesh/built-ins/read.scm \
|
|
||||||
geesh/built-ins/readonly.scm \
|
|
||||||
geesh/built-ins/return.scm \
|
|
||||||
geesh/built-ins/set.scm \
|
|
||||||
geesh/built-ins/shift.scm \
|
|
||||||
geesh/built-ins/trap.scm \
|
|
||||||
geesh/built-ins/true.scm \
|
|
||||||
geesh/built-ins/type.scm \
|
|
||||||
geesh/built-ins/umask.scm \
|
|
||||||
geesh/built-ins/unset.scm \
|
|
||||||
geesh/built-ins/utils.scm \
|
|
||||||
geesh/built-ins.scm \
|
|
||||||
geesh/environment.scm \
|
|
||||||
geesh/eval.scm \
|
|
||||||
geesh/lexer.scm \
|
|
||||||
geesh/parser.scm \
|
|
||||||
geesh/pattern.scm \
|
|
||||||
geesh/repl.scm \
|
|
||||||
geesh/shell.scm \
|
|
||||||
geesh/word.scm
|
|
||||||
|
|
||||||
bin_SCRIPTS = \
|
bin_SCRIPTS = \
|
||||||
scripts/gash
|
scripts/gash
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
AC_INIT([Geesh],
|
AC_INIT([Gash],
|
||||||
m4_esyscmd([build-aux/git-version-gen .tarball-version]))
|
m4_esyscmd([build-aux/git-version-gen .tarball-version]))
|
||||||
AC_CONFIG_SRCDIR([geesh])
|
AC_CONFIG_SRCDIR([gash])
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
AM_INIT_AUTOMAKE([color-tests silent-rules -Wall -Werror foreign])
|
AM_INIT_AUTOMAKE([color-tests silent-rules -Wall -Werror foreign])
|
||||||
AM_SILENT_RULES([yes])
|
AM_SILENT_RULES([yes])
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins)
|
(define-module (gash built-ins)
|
||||||
#:use-module (geesh built-ins echo)
|
#:use-module (gash built-ins echo)
|
||||||
#:export (search-built-ins
|
#:export (search-built-ins
|
||||||
search-special-built-ins))
|
search-special-built-ins))
|
||||||
|
|
||||||
|
@ -32,21 +32,21 @@
|
||||||
|
|
||||||
;; Special built-ins take precedence over any other command.
|
;; Special built-ins take precedence over any other command.
|
||||||
(define *special-built-ins*
|
(define *special-built-ins*
|
||||||
`(("." . ,(@@ (geesh built-ins dot) main))
|
`(("." . ,(@@ (gash built-ins dot) main))
|
||||||
(":" . ,(@@ (geesh built-ins colon) main))
|
(":" . ,(@@ (gash built-ins colon) main))
|
||||||
("break" . ,(@@ (geesh built-ins break) main))
|
("break" . ,(@@ (gash built-ins break) main))
|
||||||
("continue" . ,(@@ (geesh built-ins continue) main))
|
("continue" . ,(@@ (gash built-ins continue) main))
|
||||||
("eval" . ,(@@ (geesh built-ins eval) main))
|
("eval" . ,(@@ (gash built-ins eval) main))
|
||||||
("exec" . ,(@@ (geesh built-ins exec) main))
|
("exec" . ,(@@ (gash built-ins exec) main))
|
||||||
("exit" . ,(@@ (geesh built-ins exit) main))
|
("exit" . ,(@@ (gash built-ins exit) main))
|
||||||
("export" . ,(@@ (geesh built-ins export) main))
|
("export" . ,(@@ (gash built-ins export) main))
|
||||||
("readonly" . ,(@@ (geesh built-ins readonly) main))
|
("readonly" . ,(@@ (gash built-ins readonly) main))
|
||||||
("return" . ,(@@ (geesh built-ins return) main))
|
("return" . ,(@@ (gash built-ins return) main))
|
||||||
("set" . ,(@@ (geesh built-ins set) main))
|
("set" . ,(@@ (gash built-ins set) main))
|
||||||
("shift" . ,(@@ (geesh built-ins shift) main))
|
("shift" . ,(@@ (gash built-ins shift) main))
|
||||||
("times" . ,undefined)
|
("times" . ,undefined)
|
||||||
("trap" . ,(@@ (geesh built-ins trap) main))
|
("trap" . ,(@@ (gash built-ins trap) main))
|
||||||
("unset" . ,(@@ (geesh built-ins unset) main))))
|
("unset" . ,(@@ (gash built-ins unset) main))))
|
||||||
|
|
||||||
;; Regular built-ins take precendence over utilities in the search
|
;; Regular built-ins take precendence over utilities in the search
|
||||||
;; path, but not over functions.
|
;; path, but not over functions.
|
||||||
|
@ -54,9 +54,9 @@
|
||||||
`( ;; POSIX-specified built-ins.
|
`( ;; POSIX-specified built-ins.
|
||||||
("alias" . ,undefined)
|
("alias" . ,undefined)
|
||||||
("bg" . ,undefined)
|
("bg" . ,undefined)
|
||||||
("cd" . ,(@@ (geesh built-ins cd) main))
|
("cd" . ,(@@ (gash built-ins cd) main))
|
||||||
("command" . ,(@@ (geesh built-ins command) main))
|
("command" . ,(@@ (gash built-ins command) main))
|
||||||
("false" . ,(@@ (geesh built-ins false) main))
|
("false" . ,(@@ (gash built-ins false) main))
|
||||||
("fc" . ,undefined)
|
("fc" . ,undefined)
|
||||||
("fg" . ,undefined)
|
("fg" . ,undefined)
|
||||||
("getopts" . ,undefined)
|
("getopts" . ,undefined)
|
||||||
|
@ -64,11 +64,11 @@
|
||||||
("jobs" . ,undefined)
|
("jobs" . ,undefined)
|
||||||
("kill" . ,undefined)
|
("kill" . ,undefined)
|
||||||
("newgrp" . ,undefined)
|
("newgrp" . ,undefined)
|
||||||
("pwd" . ,(@@ (geesh built-ins pwd) main))
|
("pwd" . ,(@@ (gash built-ins pwd) main))
|
||||||
("read" . ,(@@ (geesh built-ins read) main))
|
("read" . ,(@@ (gash built-ins read) main))
|
||||||
("true" . ,(@@ (geesh built-ins true) main))
|
("true" . ,(@@ (gash built-ins true) main))
|
||||||
("type" . ,(@@ (geesh built-ins type) main))
|
("type" . ,(@@ (gash built-ins type) main))
|
||||||
("umask" . ,(@@ (geesh built-ins umask) main))
|
("umask" . ,(@@ (gash built-ins umask) main))
|
||||||
("unalias" . ,undefined)
|
("unalias" . ,undefined)
|
||||||
("wait" . ,undefined)
|
("wait" . ,undefined)
|
||||||
;; Other built-ins.
|
;; Other built-ins.
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins break)
|
(define-module (gash built-ins break)
|
||||||
#:use-module (geesh environment))
|
#:use-module (gash environment))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins cd)
|
(define-module (gash built-ins cd)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
;;;
|
;;;
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define pwd (@@ (geesh built-ins pwd) main))
|
(define pwd (@@ (gash built-ins pwd) main))
|
||||||
|
|
||||||
(define (directory? path)
|
(define (directory? path)
|
||||||
"Check if @var{path} refers to a directory."
|
"Check if @var{path} refers to a directory."
|
|
@ -1,22 +1,22 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins colon))
|
(define-module (gash built-ins colon))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
|
@ -17,10 +17,10 @@
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins command)
|
(define-module (gash built-ins command)
|
||||||
#:use-module (ice-9 getopt-long)
|
#:use-module (ice-9 getopt-long)
|
||||||
#:use-module (gash config)
|
#:use-module (gash built-ins utils)
|
||||||
#:use-module (geesh built-ins utils))
|
#:use-module (gash config))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
||||||
|
@ -80,4 +80,4 @@ Options:
|
||||||
(else (let* ((command (car files))
|
(else (let* ((command (car files))
|
||||||
(built-in? command)
|
(built-in? command)
|
||||||
(args-string (string-join args)))
|
(args-string (string-join args)))
|
||||||
((@@ (geesh built-ins eval) main) args-string))))))))
|
((@@ (gash built-ins eval) main) args-string))))))))
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins continue)
|
(define-module (gash built-ins continue)
|
||||||
#:use-module (geesh environment))
|
#:use-module (gash environment))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
|
@ -1,25 +1,25 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins dot)
|
(define-module (gash built-ins dot)
|
||||||
#:use-module (geesh built-ins utils)
|
#:use-module (gash built-ins utils)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (geesh parser)
|
#:use-module (gash parser)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
|
@ -1,22 +1,22 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins echo)
|
(define-module (gash built-ins echo)
|
||||||
#:export (echo))
|
#:export (echo))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
|
@ -1,25 +1,25 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins eval)
|
(define-module (gash built-ins eval)
|
||||||
#:use-module (geesh built-ins utils)
|
#:use-module (gash built-ins utils)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (geesh parser)
|
#:use-module (gash parser)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins exec)
|
(define-module (gash built-ins exec)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (srfi srfi-1))
|
#:use-module (srfi srfi-1))
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins exit)
|
(define-module (gash built-ins exit)
|
||||||
#:use-module (geesh environment))
|
#:use-module (gash environment))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
|
@ -1,24 +1,24 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins export)
|
(define-module (gash built-ins export)
|
||||||
#:use-module (geesh built-ins utils)
|
#:use-module (gash built-ins utils)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
|
@ -1,22 +1,22 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins false))
|
(define-module (gash built-ins false))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins pwd)
|
(define-module (gash built-ins pwd)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins read)
|
(define-module (gash built-ins read)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 rdelim))
|
#:use-module (ice-9 rdelim))
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins readonly)
|
(define-module (gash built-ins readonly)
|
||||||
#:use-module (geesh built-ins utils)
|
#:use-module (gash built-ins utils)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins return)
|
(define-module (gash built-ins return)
|
||||||
#:use-module (geesh environment))
|
#:use-module (gash environment))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins set)
|
(define-module (gash built-ins set)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins shift)
|
(define-module (gash built-ins shift)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (srfi srfi-1))
|
#:use-module (srfi srfi-1))
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins trap)
|
(define-module (gash built-ins trap)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
;;;
|
;;;
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(define sh:eval (@@ (geesh built-ins eval) main))
|
(define sh:eval (@@ (gash built-ins eval) main))
|
||||||
|
|
||||||
(define (action->handler action)
|
(define (action->handler action)
|
||||||
(let ((n (string->number action)))
|
(let ((n (string->number action)))
|
|
@ -1,22 +1,22 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins true))
|
(define-module (gash built-ins true))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
|
@ -17,10 +17,10 @@
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins type)
|
(define-module (gash built-ins type)
|
||||||
#:use-module (ice-9 getopt-long)
|
#:use-module (ice-9 getopt-long)
|
||||||
#:use-module (gash config)
|
#:use-module (gash built-ins utils)
|
||||||
#:use-module (geesh built-ins utils))
|
#:use-module (gash config))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
|
@ -1,22 +1,22 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins umask)
|
(define-module (gash built-ins umask)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins unset)
|
(define-module (gash built-ins unset)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 match))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
|
@ -1,22 +1,22 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018, 2019 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018, 2019 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh built-ins utils)
|
(define-module (gash built-ins utils)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:export (get-evaluator
|
#:export (get-evaluator
|
||||||
built-in?
|
built-in?
|
||||||
|
@ -32,16 +32,16 @@
|
||||||
;; built-ins. This is a bit of trickery to avoid a module dependency
|
;; built-ins. This is a bit of trickery to avoid a module dependency
|
||||||
;; loop.
|
;; loop.
|
||||||
(define (get-evaluator)
|
(define (get-evaluator)
|
||||||
(module-ref (resolve-interface '(geesh eval)) 'eval-sh))
|
(module-ref (resolve-interface '(gash eval)) 'eval-sh))
|
||||||
|
|
||||||
;; Similar to 'get-evaluator', we avoid a dependency loop by looking
|
;; Similar to 'get-evaluator', we avoid a dependency loop by looking
|
||||||
;; up functions dynamically.
|
;; up functions dynamically.
|
||||||
(define (built-in? name)
|
(define (built-in? name)
|
||||||
(let ((search-special-built-ins
|
(let ((search-special-built-ins
|
||||||
(module-ref (resolve-interface '(geesh built-ins))
|
(module-ref (resolve-interface '(gash built-ins))
|
||||||
'search-special-built-ins))
|
'search-special-built-ins))
|
||||||
(search-built-ins
|
(search-built-ins
|
||||||
(module-ref (resolve-interface '(geesh built-ins))
|
(module-ref (resolve-interface '(gash built-ins))
|
||||||
'search-built-ins)))
|
'search-built-ins)))
|
||||||
(or (search-special-built-ins name)
|
(or (search-special-built-ins name)
|
||||||
(search-built-ins name))))
|
(search-built-ins name))))
|
|
@ -1,107 +1,407 @@
|
||||||
;;; Gash --- Guile As SHell
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright © 2018 R.E.W. van Beusekom <rutger.van.beusekom@gmail.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Gash.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Gash is free software; you can redistribute it and/or modify it
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Gash is distributed in the hope that it will be useful, but WITHOUT ANY
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (gash environment)
|
(define-module (gash environment)
|
||||||
|
#:use-module (ice-9 hash-table)
|
||||||
|
#:use-module (ice-9 match)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
||||||
|
#:export (get-status
|
||||||
|
set-status!
|
||||||
|
get-root-pid
|
||||||
|
getvar
|
||||||
|
setvar!
|
||||||
|
unsetvar!
|
||||||
|
exported?
|
||||||
|
set-exported!
|
||||||
|
read-only?
|
||||||
|
set-read-only!
|
||||||
|
with-variables
|
||||||
|
get-environ
|
||||||
|
with-environ
|
||||||
|
getfun
|
||||||
|
defun!
|
||||||
|
unsetfun!
|
||||||
|
with-arguments
|
||||||
|
getopt
|
||||||
|
setopt!
|
||||||
|
*option-names*
|
||||||
|
*option-letters*
|
||||||
|
call-with-continue
|
||||||
|
sh:continue
|
||||||
|
call-with-break
|
||||||
|
sh:break
|
||||||
|
call-with-return
|
||||||
|
sh:return
|
||||||
|
set-atexit!
|
||||||
|
sh:exit
|
||||||
|
*fd-count*
|
||||||
|
fd->current-port))
|
||||||
|
|
||||||
#:use-module (ice-9 match)
|
;;; Commentary:
|
||||||
#:use-module (gash io)
|
;;;
|
||||||
|
;;; This module contains functions to inspect and manipulate the
|
||||||
|
;;; environment of the Shell language.
|
||||||
|
;;;
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
#:export (
|
|
||||||
%command-line
|
;;; Status and PID.
|
||||||
%functions
|
|
||||||
%global-variables
|
|
||||||
assignment
|
|
||||||
function
|
|
||||||
set-shell-opt!
|
|
||||||
shell-opt?
|
|
||||||
variable
|
|
||||||
variable-and
|
|
||||||
variable-or
|
|
||||||
))
|
|
||||||
|
|
||||||
(define %command-line (make-parameter (command-line)))
|
(define *status* 0)
|
||||||
|
|
||||||
;; FIXME: export/env vs set
|
(define (get-status)
|
||||||
(define %global-variables
|
"Return the current status."
|
||||||
(map identity ;; FIXME: make mutable
|
*status*)
|
||||||
`(,(cons "SHELL" (car (command-line)))
|
|
||||||
,(cons "SHELLOPTS" "")
|
|
||||||
,(cons "PIPESTATUS" "([0]=\"0\"")
|
|
||||||
,(cons "?" "0")
|
|
||||||
,@(map (lambda (key-value)
|
|
||||||
(let* ((key-value (string-split key-value #\=))
|
|
||||||
(key (car key-value))
|
|
||||||
(value (cadr key-value)))
|
|
||||||
(cons key value)))
|
|
||||||
(environ)))))
|
|
||||||
|
|
||||||
(define %functions '())
|
(define (set-status! n)
|
||||||
|
"Set the current status."
|
||||||
|
(set! *status* n))
|
||||||
|
|
||||||
(define* (assignment name #:optional value)
|
(define *root-pid* (getpid))
|
||||||
(let ((value (match value
|
|
||||||
((? string?) value)
|
|
||||||
(((? string?) ...) (apply string-append value))
|
|
||||||
(#f ""))))
|
|
||||||
(set! %global-variables
|
|
||||||
(assoc-set! %global-variables name value))
|
|
||||||
#t))
|
|
||||||
|
|
||||||
(define* (variable name #:optional (default ""))
|
(define (get-root-pid)
|
||||||
(cond ((string->number name)
|
*root-pid*)
|
||||||
=>
|
|
||||||
(lambda (n)
|
|
||||||
(if (< n (length (%command-line))) (list-ref (%command-line) n)
|
|
||||||
"")))
|
|
||||||
((equal? name "@")
|
|
||||||
(if (pair? (cdr (%command-line))) (cdr (%command-line))
|
|
||||||
""))
|
|
||||||
((equal? name "#")
|
|
||||||
(number->string (length (cdr (%command-line)))))
|
|
||||||
(else
|
|
||||||
(or (assoc-ref %global-variables name)
|
|
||||||
(if (shell-opt? "nounset") (begin
|
|
||||||
;; TODO: throw/error
|
|
||||||
(format (current-error-port) "gash: ~a: unbound variable\n" name)
|
|
||||||
#f)
|
|
||||||
default)))))
|
|
||||||
|
|
||||||
(define (variable-or name . default)
|
|
||||||
(variable name (apply string-append default)))
|
;;; Variables.
|
||||||
|
|
||||||
(define (variable-and name . default)
|
(define (environ->alist env)
|
||||||
(let ((value (variable name #f)))
|
"Convert @var{environ} (a value of the type returned by
|
||||||
(if value (apply string-append default) "")))
|
@code{environ}) to an alist."
|
||||||
|
(define (string-split-1 str char_pred)
|
||||||
|
(and=> (string-index str char_pred)
|
||||||
|
(lambda (index)
|
||||||
|
`(,(substring str 0 index) . ,(substring str (1+ index))))))
|
||||||
|
(filter-map (cut string-split-1 <> #\=) env))
|
||||||
|
|
||||||
(define (set-shell-opt! name set?)
|
(define (initial-pwd env)
|
||||||
(let* ((shell-opts (variable "SHELLOPTS"))
|
(let* ((pwd (assoc-ref env "PWD"))
|
||||||
(options (if (string-null? shell-opts) '()
|
(pwd-p (false-if-exception (canonicalize-path pwd))))
|
||||||
(string-split shell-opts #\:)))
|
(if (and pwd
|
||||||
(new-options (if set? (delete-duplicates (sort (cons name options) string<))
|
(string-prefix? "/" pwd)
|
||||||
(filter (negate (cut equal? <> name)) options)))
|
pwd-p
|
||||||
(new-shell-opts (string-join new-options ":")))
|
(string=? pwd-p (getcwd))
|
||||||
(assignment "SHELLOPTS" new-shell-opts)))
|
(not (any (lambda (component)
|
||||||
|
(member component '("." "..")))
|
||||||
|
(string-split pwd #\/))))
|
||||||
|
pwd
|
||||||
|
(getcwd))))
|
||||||
|
|
||||||
(define (shell-opt? name)
|
(define (initial-variables)
|
||||||
(member name (string-split (assoc-ref %global-variables "SHELLOPTS") #\:)))
|
(let ((env (environ->alist (environ))))
|
||||||
|
(alist->hash-table
|
||||||
|
(map (match-lambda
|
||||||
|
((name . value) `(,name . ,(vector value #t #f))))
|
||||||
|
(append `(("PWD" . ,(initial-pwd env)))
|
||||||
|
env)))))
|
||||||
|
|
||||||
(define (function name body)
|
(define *variables* (initial-variables))
|
||||||
(set! %functions
|
|
||||||
(assoc-set! %functions name body)))
|
(define (exported? name)
|
||||||
|
"Check if the variable @var{name} has been exported."
|
||||||
|
(match (hash-ref *variables* name)
|
||||||
|
(#(_ exported? _) exported?)
|
||||||
|
(_ #f)))
|
||||||
|
|
||||||
|
(define* (set-exported! name #:optional value)
|
||||||
|
"Export the variable @var{name}. If the optional parameter
|
||||||
|
@var{value} is provided, update the variable's value as well."
|
||||||
|
(match (hash-ref *variables* name)
|
||||||
|
((? vector? vec)
|
||||||
|
(vector-set! vec 1 #t)
|
||||||
|
(when value
|
||||||
|
(vector-set! vec 0 value)))
|
||||||
|
(v (hash-set! *variables* name (vector (or value v) #t #f)))))
|
||||||
|
|
||||||
|
(define (read-only? name)
|
||||||
|
"Check if the variable @var{name} has been marked read-only."
|
||||||
|
(match (hash-ref *variables* name)
|
||||||
|
(#(_ _ read-only?) read-only?)
|
||||||
|
(_ #f)))
|
||||||
|
|
||||||
|
(define* (set-read-only! name #:optional value)
|
||||||
|
"Mark the variable @var{name} as read-only. If the optional
|
||||||
|
parameter @var{value} is provided, update the variable's value as
|
||||||
|
well."
|
||||||
|
(match (hash-ref *variables* name)
|
||||||
|
((? vector? vec)
|
||||||
|
(vector-set! vec 2 #t)
|
||||||
|
(when value
|
||||||
|
(vector-set! vec 0 value)))
|
||||||
|
(v (hash-set! *variables* name (vector (or value v) #f #t)))))
|
||||||
|
|
||||||
|
(define* (getvar name #:optional dflt)
|
||||||
|
"Return the value of the variable @var{name}. If it does not exist
|
||||||
|
and @var{dflt} is provided, return @var{dflt}. Otherwise, return
|
||||||
|
@code{#f}."
|
||||||
|
(match (hash-ref *variables* name dflt)
|
||||||
|
(#(value _ _) (or value dflt))
|
||||||
|
(value value)))
|
||||||
|
|
||||||
|
(define (setvar! name value)
|
||||||
|
"Set the variable @var{name} to @var{value}. If @var{value} is
|
||||||
|
@code{#f}, the variable will be removed from the set of current
|
||||||
|
variables. If @var{name} has been marked read-only, an exception will
|
||||||
|
be thrown."
|
||||||
|
(match (hash-ref *variables* name)
|
||||||
|
((? vector? vec)
|
||||||
|
(when (vector-ref vec 2)
|
||||||
|
(scm-error
|
||||||
|
'shell-error "setvar!"
|
||||||
|
"Attempted to assign the read-only only variable \"~A\"."
|
||||||
|
`(,name)
|
||||||
|
'(variable-assignment-error)))
|
||||||
|
(if value
|
||||||
|
(vector-set! vec 0 value)
|
||||||
|
(hash-remove! *variables* name)))
|
||||||
|
(_ (if value
|
||||||
|
(hash-set! *variables* name value)
|
||||||
|
(hash-remove! *variables* name)))))
|
||||||
|
|
||||||
|
(define (unsetvar! name)
|
||||||
|
"Remove the variable @var{name} from the set of current variables."
|
||||||
|
(setvar! name #f))
|
||||||
|
|
||||||
|
(define (with-variables variables thunk)
|
||||||
|
"Call @var{thunk} in a dynamic extent in which the set of current
|
||||||
|
variables contains only @var{variables}. The previous set of current
|
||||||
|
variables is unaffected by any changes made from within the dynamic
|
||||||
|
extent of @var{thunk}."
|
||||||
|
(let ((outside-variables #f)
|
||||||
|
(inside-variables (alist->hash-table variables)))
|
||||||
|
(dynamic-wind
|
||||||
|
(lambda ()
|
||||||
|
(set! outside-variables *variables*)
|
||||||
|
(set! *variables* inside-variables))
|
||||||
|
thunk
|
||||||
|
(lambda ()
|
||||||
|
(set! inside-variables *variables*)
|
||||||
|
(set! outside-variables *variables*)))))
|
||||||
|
|
||||||
|
(define* (get-environ #:optional (bindings '()))
|
||||||
|
"Return a value that represents the set of current variables is
|
||||||
|
suitable for passing to @code{environ}. If @var{bindings} is set,
|
||||||
|
consider them as part of the set of current variables."
|
||||||
|
(let ((exported (hash-fold (lambda (name v acc)
|
||||||
|
(match v
|
||||||
|
(#(value #t _)
|
||||||
|
(cons `(,name . ,value) acc))
|
||||||
|
(_ acc)))
|
||||||
|
'()
|
||||||
|
*variables*)))
|
||||||
|
(map (match-lambda
|
||||||
|
((name . value) (string-append name "=" value)))
|
||||||
|
(delete-duplicates!
|
||||||
|
(append bindings exported)
|
||||||
|
(lambda (x y)
|
||||||
|
(string=? (car x) (car y)))))))
|
||||||
|
|
||||||
|
(define (with-environ env thunk)
|
||||||
|
"Call @var{thunk} in a dynamic extent in which the environment (the
|
||||||
|
regular @code{getenv}/@code{setenv} one -- not the Gash one) has been
|
||||||
|
set to @var{env} (a value suitable for passing to @code{environ}."
|
||||||
|
(let ((outside-env #f)
|
||||||
|
(inside-env env))
|
||||||
|
(dynamic-wind
|
||||||
|
(lambda ()
|
||||||
|
(set! outside-env (environ))
|
||||||
|
(environ inside-env))
|
||||||
|
thunk
|
||||||
|
(lambda ()
|
||||||
|
(set! inside-env (environ))
|
||||||
|
(environ outside-env)))))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Functions.
|
||||||
|
|
||||||
|
(define *functions* (make-hash-table))
|
||||||
|
|
||||||
|
(define (getfun name)
|
||||||
|
"Return the function @var{name}. If it does not exist, return
|
||||||
|
@code{#f}."
|
||||||
|
(hash-ref *functions* name))
|
||||||
|
|
||||||
|
(define (defun! name proc)
|
||||||
|
"Define the function @var{name} to be @var{proc} (a procedure that
|
||||||
|
takes a variable number of arguments)."
|
||||||
|
(hash-set! *functions* name proc))
|
||||||
|
|
||||||
|
(define (unsetfun! name)
|
||||||
|
"Remove the function @var{name} from the set of current functions."
|
||||||
|
(hash-remove! *functions* name))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Arguments.
|
||||||
|
|
||||||
|
(define (with-arguments args thunk)
|
||||||
|
"Call @var{thunk} in a dynamic extent in which the current arguments
|
||||||
|
list (as obtained by calling @code{program-arguments}) is set to
|
||||||
|
@var{args}. The previous arguments list is unaffected by any changes
|
||||||
|
made from within the dynamic extent of @var{thunk}."
|
||||||
|
(let ((outside-args #f)
|
||||||
|
(inside-args args))
|
||||||
|
(dynamic-wind
|
||||||
|
(lambda ()
|
||||||
|
(set! outside-args (program-arguments))
|
||||||
|
(set-program-arguments inside-args))
|
||||||
|
thunk
|
||||||
|
(lambda ()
|
||||||
|
(set! inside-args (program-arguments))
|
||||||
|
(set-program-arguments outside-args)))))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Options.
|
||||||
|
|
||||||
|
(define *options*
|
||||||
|
(map (cut cons <> #f)
|
||||||
|
'(allexport
|
||||||
|
errexit
|
||||||
|
ignoreeof
|
||||||
|
monitor
|
||||||
|
noclobber
|
||||||
|
noglob
|
||||||
|
noexec
|
||||||
|
nolog
|
||||||
|
notify
|
||||||
|
nounset
|
||||||
|
verbose
|
||||||
|
vi
|
||||||
|
xtrace)))
|
||||||
|
|
||||||
|
(define (getopt name)
|
||||||
|
"Get the value of the option named @var{name}."
|
||||||
|
(match (assq name *options*)
|
||||||
|
((_ . value) value)))
|
||||||
|
|
||||||
|
(define (setopt! name value)
|
||||||
|
"Set the value of the option named @var{name} to @var{value}."
|
||||||
|
(match (assq name *options*)
|
||||||
|
((? pair? p) (set-cdr! p value))))
|
||||||
|
|
||||||
|
(define *option-names*
|
||||||
|
(map car *options*))
|
||||||
|
|
||||||
|
(define *option-letters*
|
||||||
|
'((#\a . allexport)
|
||||||
|
(#\e . errexit)
|
||||||
|
(#\m . monitor)
|
||||||
|
(#\C . noclobber)
|
||||||
|
(#\f . noglob)
|
||||||
|
(#\n . noexec)
|
||||||
|
(#\b . notify)
|
||||||
|
(#\u . nounset)
|
||||||
|
(#\v . verbose)
|
||||||
|
(#\x . xtrace)))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Prompts
|
||||||
|
|
||||||
|
(define *continue-tag* (make-prompt-tag))
|
||||||
|
|
||||||
|
(define (call-with-continue thunk)
|
||||||
|
"Call @var{thunk} in such a way that a call to @code{continue} will
|
||||||
|
exit the dynamic extent of @var{thunk}."
|
||||||
|
(call-with-prompt *continue-tag*
|
||||||
|
thunk
|
||||||
|
(lambda (cont n)
|
||||||
|
(when (> n 0)
|
||||||
|
(false-if-exception
|
||||||
|
(abort-to-prompt *continue-tag* (1- n)))))))
|
||||||
|
|
||||||
|
(define* (sh:continue #:optional (n 0))
|
||||||
|
"Exit to the closest invocation of @code{call-with-continue}. If
|
||||||
|
@var{n} is set, exit to the @math{n + 1}th closest invocation."
|
||||||
|
(abort-to-prompt *continue-tag* n))
|
||||||
|
|
||||||
|
(define *break-tag* (make-prompt-tag))
|
||||||
|
|
||||||
|
(define (call-with-break thunk)
|
||||||
|
"Call @var{thunk} in such a way that a call to @code{break} will
|
||||||
|
exit the dynamic extent of @var{thunk}."
|
||||||
|
(call-with-prompt *break-tag*
|
||||||
|
thunk
|
||||||
|
(lambda (cont n)
|
||||||
|
(when (> n 0)
|
||||||
|
(false-if-exception
|
||||||
|
(abort-to-prompt *break-tag* (1- n)))))))
|
||||||
|
|
||||||
|
(define* (sh:break #:optional (n 0))
|
||||||
|
"Exit to the closest invocation of @code{call-with-break}. If
|
||||||
|
@var{n} is set, exit to the @math{n + 1}th closest invocation."
|
||||||
|
(abort-to-prompt *break-tag* n))
|
||||||
|
|
||||||
|
(define *return-tag* (make-prompt-tag))
|
||||||
|
|
||||||
|
(define (call-with-return thunk)
|
||||||
|
"Call @var{thunk} in such a way that a call to @code{return} will
|
||||||
|
exit the dynamic extent of @var{thunk}."
|
||||||
|
(call-with-prompt *return-tag*
|
||||||
|
thunk
|
||||||
|
(lambda (cont status)
|
||||||
|
(set-status! status))))
|
||||||
|
|
||||||
|
(define* (sh:return #:optional (status (get-status)))
|
||||||
|
"Exit to the closest invocation of @code{call-with-return} setting
|
||||||
|
status to @var{status}. If @var{status} is not set, keep the current
|
||||||
|
status."
|
||||||
|
(abort-to-prompt *return-tag* status))
|
||||||
|
|
||||||
|
(define *atexit* #f)
|
||||||
|
(define *exiting?* #f)
|
||||||
|
|
||||||
|
(define (set-atexit! handler)
|
||||||
|
(set! *atexit* handler))
|
||||||
|
|
||||||
|
(define* (sh:exit #:optional status)
|
||||||
|
(if (and (not *exiting?*) (thunk? *atexit*))
|
||||||
|
(begin
|
||||||
|
(set! *exiting?* #t)
|
||||||
|
(*atexit*)
|
||||||
|
(exit (or status (get-status))))
|
||||||
|
(exit (or status (get-status)))))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Files.
|
||||||
|
|
||||||
|
(define *fd-count* 10)
|
||||||
|
|
||||||
|
(define current-3-port (make-parameter #f))
|
||||||
|
(define current-4-port (make-parameter #f))
|
||||||
|
(define current-5-port (make-parameter #f))
|
||||||
|
(define current-6-port (make-parameter #f))
|
||||||
|
(define current-7-port (make-parameter #f))
|
||||||
|
(define current-8-port (make-parameter #f))
|
||||||
|
(define current-9-port (make-parameter #f))
|
||||||
|
|
||||||
|
(define fd->current-port
|
||||||
|
(let ((cps (vector current-input-port
|
||||||
|
current-output-port
|
||||||
|
current-error-port
|
||||||
|
current-3-port
|
||||||
|
current-4-port
|
||||||
|
current-5-port
|
||||||
|
current-6-port
|
||||||
|
current-7-port
|
||||||
|
current-8-port
|
||||||
|
current-9-port)))
|
||||||
|
(lambda (fd)
|
||||||
|
"Return the current port (e.g. @code{current-input-port})
|
||||||
|
corresponding to the the Shell file descriptor @var{fd}. The value of
|
||||||
|
@var{fd} must be a nonnegative integer less than @code{*fd-count*}."
|
||||||
|
(vector-ref cps fd))))
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh eval)
|
(define-module (gash eval)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (geesh shell)
|
#:use-module (gash shell)
|
||||||
#:use-module (geesh word)
|
#:use-module (gash word)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
|
@ -21,10 +21,10 @@
|
||||||
#:use-module (gash script)
|
#:use-module (gash script)
|
||||||
#:use-module (gash util)
|
#:use-module (gash util)
|
||||||
|
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (geesh eval)
|
#:use-module (gash eval)
|
||||||
#:use-module (geesh parser)
|
#:use-module (gash parser)
|
||||||
#:use-module (geesh repl)
|
#:use-module (gash repl)
|
||||||
|
|
||||||
#:export (main
|
#:export (main
|
||||||
%debug-level
|
%debug-level
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
))
|
))
|
||||||
|
|
||||||
(catch #t
|
(catch #t
|
||||||
(lambda _ (use-modules (geesh parser)))
|
(lambda _ (use-modules (gash parser)))
|
||||||
(lambda (key . args)
|
(lambda (key . args)
|
||||||
#t))
|
#t))
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2017, 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2017, 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh lexer)
|
(define-module (gash lexer)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 rdelim)
|
#:use-module (ice-9 rdelim)
|
||||||
#:use-module (ice-9 receive)
|
#:use-module (ice-9 receive)
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh parser)
|
(define-module (gash parser)
|
||||||
#:use-module (geesh lexer)
|
#:use-module (gash lexer)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 textual-ports)
|
#:use-module (ice-9 textual-ports)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
|
@ -1,4 +1,4 @@
|
||||||
(define-module (geesh pattern)
|
(define-module (gash pattern)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 receive)
|
#:use-module (ice-9 receive)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
|
@ -1,25 +1,25 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2017, 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2017, 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh repl)
|
(define-module (gash repl)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (geesh eval)
|
#:use-module (gash eval)
|
||||||
#:use-module (geesh parser)
|
#:use-module (gash parser)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 rdelim)
|
#:use-module (ice-9 rdelim)
|
||||||
#:export (run-repl))
|
#:export (run-repl))
|
|
@ -1,7 +1,7 @@
|
||||||
(define-module (geesh shell)
|
(define-module (gash shell)
|
||||||
#:use-module (geesh built-ins)
|
#:use-module (gash built-ins)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (geesh pattern)
|
#:use-module (gash pattern)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 textual-ports)
|
#:use-module (ice-9 textual-ports)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
|
@ -1,24 +1,24 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (geesh word)
|
(define-module (gash word)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (geesh pattern)
|
#:use-module (gash pattern)
|
||||||
#:use-module (ice-9 ftw)
|
#:use-module (ice-9 ftw)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
|
@ -1,407 +0,0 @@
|
||||||
;;; The Geesh Shell Interpreter
|
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
|
||||||
;;;
|
|
||||||
;;; This file is part of Geesh.
|
|
||||||
;;;
|
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
|
||||||
;;; (at your option) any later version.
|
|
||||||
;;;
|
|
||||||
;;; Geesh 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 General Public License for more details.
|
|
||||||
;;;
|
|
||||||
;;; You should have received a copy of the GNU General Public License
|
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
(define-module (geesh environment)
|
|
||||||
#:use-module (ice-9 hash-table)
|
|
||||||
#:use-module (ice-9 match)
|
|
||||||
#:use-module (srfi srfi-1)
|
|
||||||
#:use-module (srfi srfi-26)
|
|
||||||
#:export (get-status
|
|
||||||
set-status!
|
|
||||||
get-root-pid
|
|
||||||
getvar
|
|
||||||
setvar!
|
|
||||||
unsetvar!
|
|
||||||
exported?
|
|
||||||
set-exported!
|
|
||||||
read-only?
|
|
||||||
set-read-only!
|
|
||||||
with-variables
|
|
||||||
get-environ
|
|
||||||
with-environ
|
|
||||||
getfun
|
|
||||||
defun!
|
|
||||||
unsetfun!
|
|
||||||
with-arguments
|
|
||||||
getopt
|
|
||||||
setopt!
|
|
||||||
*option-names*
|
|
||||||
*option-letters*
|
|
||||||
call-with-continue
|
|
||||||
sh:continue
|
|
||||||
call-with-break
|
|
||||||
sh:break
|
|
||||||
call-with-return
|
|
||||||
sh:return
|
|
||||||
set-atexit!
|
|
||||||
sh:exit
|
|
||||||
*fd-count*
|
|
||||||
fd->current-port))
|
|
||||||
|
|
||||||
;;; Commentary:
|
|
||||||
;;;
|
|
||||||
;;; This module contains functions to inspect and manipulate the
|
|
||||||
;;; environment of the Shell language.
|
|
||||||
;;;
|
|
||||||
;;; Code:
|
|
||||||
|
|
||||||
|
|
||||||
;;; Status and PID.
|
|
||||||
|
|
||||||
(define *status* 0)
|
|
||||||
|
|
||||||
(define (get-status)
|
|
||||||
"Return the current status."
|
|
||||||
*status*)
|
|
||||||
|
|
||||||
(define (set-status! n)
|
|
||||||
"Set the current status."
|
|
||||||
(set! *status* n))
|
|
||||||
|
|
||||||
(define *root-pid* (getpid))
|
|
||||||
|
|
||||||
(define (get-root-pid)
|
|
||||||
*root-pid*)
|
|
||||||
|
|
||||||
|
|
||||||
;;; Variables.
|
|
||||||
|
|
||||||
(define (environ->alist env)
|
|
||||||
"Convert @var{environ} (a value of the type returned by
|
|
||||||
@code{environ}) to an alist."
|
|
||||||
(define (string-split-1 str char_pred)
|
|
||||||
(and=> (string-index str char_pred)
|
|
||||||
(lambda (index)
|
|
||||||
`(,(substring str 0 index) . ,(substring str (1+ index))))))
|
|
||||||
(filter-map (cut string-split-1 <> #\=) env))
|
|
||||||
|
|
||||||
(define (initial-pwd env)
|
|
||||||
(let* ((pwd (assoc-ref env "PWD"))
|
|
||||||
(pwd-p (false-if-exception (canonicalize-path pwd))))
|
|
||||||
(if (and pwd
|
|
||||||
(string-prefix? "/" pwd)
|
|
||||||
pwd-p
|
|
||||||
(string=? pwd-p (getcwd))
|
|
||||||
(not (any (lambda (component)
|
|
||||||
(member component '("." "..")))
|
|
||||||
(string-split pwd #\/))))
|
|
||||||
pwd
|
|
||||||
(getcwd))))
|
|
||||||
|
|
||||||
(define (initial-variables)
|
|
||||||
(let ((env (environ->alist (environ))))
|
|
||||||
(alist->hash-table
|
|
||||||
(map (match-lambda
|
|
||||||
((name . value) `(,name . ,(vector value #t #f))))
|
|
||||||
(append `(("PWD" . ,(initial-pwd env)))
|
|
||||||
env)))))
|
|
||||||
|
|
||||||
(define *variables* (initial-variables))
|
|
||||||
|
|
||||||
(define (exported? name)
|
|
||||||
"Check if the variable @var{name} has been exported."
|
|
||||||
(match (hash-ref *variables* name)
|
|
||||||
(#(_ exported? _) exported?)
|
|
||||||
(_ #f)))
|
|
||||||
|
|
||||||
(define* (set-exported! name #:optional value)
|
|
||||||
"Export the variable @var{name}. If the optional parameter
|
|
||||||
@var{value} is provided, update the variable's value as well."
|
|
||||||
(match (hash-ref *variables* name)
|
|
||||||
((? vector? vec)
|
|
||||||
(vector-set! vec 1 #t)
|
|
||||||
(when value
|
|
||||||
(vector-set! vec 0 value)))
|
|
||||||
(v (hash-set! *variables* name (vector (or value v) #t #f)))))
|
|
||||||
|
|
||||||
(define (read-only? name)
|
|
||||||
"Check if the variable @var{name} has been marked read-only."
|
|
||||||
(match (hash-ref *variables* name)
|
|
||||||
(#(_ _ read-only?) read-only?)
|
|
||||||
(_ #f)))
|
|
||||||
|
|
||||||
(define* (set-read-only! name #:optional value)
|
|
||||||
"Mark the variable @var{name} as read-only. If the optional
|
|
||||||
parameter @var{value} is provided, update the variable's value as
|
|
||||||
well."
|
|
||||||
(match (hash-ref *variables* name)
|
|
||||||
((? vector? vec)
|
|
||||||
(vector-set! vec 2 #t)
|
|
||||||
(when value
|
|
||||||
(vector-set! vec 0 value)))
|
|
||||||
(v (hash-set! *variables* name (vector (or value v) #f #t)))))
|
|
||||||
|
|
||||||
(define* (getvar name #:optional dflt)
|
|
||||||
"Return the value of the variable @var{name}. If it does not exist
|
|
||||||
and @var{dflt} is provided, return @var{dflt}. Otherwise, return
|
|
||||||
@code{#f}."
|
|
||||||
(match (hash-ref *variables* name dflt)
|
|
||||||
(#(value _ _) (or value dflt))
|
|
||||||
(value value)))
|
|
||||||
|
|
||||||
(define (setvar! name value)
|
|
||||||
"Set the variable @var{name} to @var{value}. If @var{value} is
|
|
||||||
@code{#f}, the variable will be removed from the set of current
|
|
||||||
variables. If @var{name} has been marked read-only, an exception will
|
|
||||||
be thrown."
|
|
||||||
(match (hash-ref *variables* name)
|
|
||||||
((? vector? vec)
|
|
||||||
(when (vector-ref vec 2)
|
|
||||||
(scm-error
|
|
||||||
'shell-error "setvar!"
|
|
||||||
"Attempted to assign the read-only only variable \"~A\"."
|
|
||||||
`(,name)
|
|
||||||
'(variable-assignment-error)))
|
|
||||||
(if value
|
|
||||||
(vector-set! vec 0 value)
|
|
||||||
(hash-remove! *variables* name)))
|
|
||||||
(_ (if value
|
|
||||||
(hash-set! *variables* name value)
|
|
||||||
(hash-remove! *variables* name)))))
|
|
||||||
|
|
||||||
(define (unsetvar! name)
|
|
||||||
"Remove the variable @var{name} from the set of current variables."
|
|
||||||
(setvar! name #f))
|
|
||||||
|
|
||||||
(define (with-variables variables thunk)
|
|
||||||
"Call @var{thunk} in a dynamic extent in which the set of current
|
|
||||||
variables contains only @var{variables}. The previous set of current
|
|
||||||
variables is unaffected by any changes made from within the dynamic
|
|
||||||
extent of @var{thunk}."
|
|
||||||
(let ((outside-variables #f)
|
|
||||||
(inside-variables (alist->hash-table variables)))
|
|
||||||
(dynamic-wind
|
|
||||||
(lambda ()
|
|
||||||
(set! outside-variables *variables*)
|
|
||||||
(set! *variables* inside-variables))
|
|
||||||
thunk
|
|
||||||
(lambda ()
|
|
||||||
(set! inside-variables *variables*)
|
|
||||||
(set! outside-variables *variables*)))))
|
|
||||||
|
|
||||||
(define* (get-environ #:optional (bindings '()))
|
|
||||||
"Return a value that represents the set of current variables is
|
|
||||||
suitable for passing to @code{environ}. If @var{bindings} is set,
|
|
||||||
consider them as part of the set of current variables."
|
|
||||||
(let ((exported (hash-fold (lambda (name v acc)
|
|
||||||
(match v
|
|
||||||
(#(value #t _)
|
|
||||||
(cons `(,name . ,value) acc))
|
|
||||||
(_ acc)))
|
|
||||||
'()
|
|
||||||
*variables*)))
|
|
||||||
(map (match-lambda
|
|
||||||
((name . value) (string-append name "=" value)))
|
|
||||||
(delete-duplicates!
|
|
||||||
(append bindings exported)
|
|
||||||
(lambda (x y)
|
|
||||||
(string=? (car x) (car y)))))))
|
|
||||||
|
|
||||||
(define (with-environ env thunk)
|
|
||||||
"Call @var{thunk} in a dynamic extent in which the environment (the
|
|
||||||
regular @code{getenv}/@code{setenv} one -- not the Geesh one) has been
|
|
||||||
set to @var{env} (a value suitable for passing to @code{environ}."
|
|
||||||
(let ((outside-env #f)
|
|
||||||
(inside-env env))
|
|
||||||
(dynamic-wind
|
|
||||||
(lambda ()
|
|
||||||
(set! outside-env (environ))
|
|
||||||
(environ inside-env))
|
|
||||||
thunk
|
|
||||||
(lambda ()
|
|
||||||
(set! inside-env (environ))
|
|
||||||
(environ outside-env)))))
|
|
||||||
|
|
||||||
|
|
||||||
;;; Functions.
|
|
||||||
|
|
||||||
(define *functions* (make-hash-table))
|
|
||||||
|
|
||||||
(define (getfun name)
|
|
||||||
"Return the function @var{name}. If it does not exist, return
|
|
||||||
@code{#f}."
|
|
||||||
(hash-ref *functions* name))
|
|
||||||
|
|
||||||
(define (defun! name proc)
|
|
||||||
"Define the function @var{name} to be @var{proc} (a procedure that
|
|
||||||
takes a variable number of arguments)."
|
|
||||||
(hash-set! *functions* name proc))
|
|
||||||
|
|
||||||
(define (unsetfun! name)
|
|
||||||
"Remove the function @var{name} from the set of current functions."
|
|
||||||
(hash-remove! *functions* name))
|
|
||||||
|
|
||||||
|
|
||||||
;;; Arguments.
|
|
||||||
|
|
||||||
(define (with-arguments args thunk)
|
|
||||||
"Call @var{thunk} in a dynamic extent in which the current arguments
|
|
||||||
list (as obtained by calling @code{program-arguments}) is set to
|
|
||||||
@var{args}. The previous arguments list is unaffected by any changes
|
|
||||||
made from within the dynamic extent of @var{thunk}."
|
|
||||||
(let ((outside-args #f)
|
|
||||||
(inside-args args))
|
|
||||||
(dynamic-wind
|
|
||||||
(lambda ()
|
|
||||||
(set! outside-args (program-arguments))
|
|
||||||
(set-program-arguments inside-args))
|
|
||||||
thunk
|
|
||||||
(lambda ()
|
|
||||||
(set! inside-args (program-arguments))
|
|
||||||
(set-program-arguments outside-args)))))
|
|
||||||
|
|
||||||
|
|
||||||
;;; Options.
|
|
||||||
|
|
||||||
(define *options*
|
|
||||||
(map (cut cons <> #f)
|
|
||||||
'(allexport
|
|
||||||
errexit
|
|
||||||
ignoreeof
|
|
||||||
monitor
|
|
||||||
noclobber
|
|
||||||
noglob
|
|
||||||
noexec
|
|
||||||
nolog
|
|
||||||
notify
|
|
||||||
nounset
|
|
||||||
verbose
|
|
||||||
vi
|
|
||||||
xtrace)))
|
|
||||||
|
|
||||||
(define (getopt name)
|
|
||||||
"Get the value of the option named @var{name}."
|
|
||||||
(match (assq name *options*)
|
|
||||||
((_ . value) value)))
|
|
||||||
|
|
||||||
(define (setopt! name value)
|
|
||||||
"Set the value of the option named @var{name} to @var{value}."
|
|
||||||
(match (assq name *options*)
|
|
||||||
((? pair? p) (set-cdr! p value))))
|
|
||||||
|
|
||||||
(define *option-names*
|
|
||||||
(map car *options*))
|
|
||||||
|
|
||||||
(define *option-letters*
|
|
||||||
'((#\a . allexport)
|
|
||||||
(#\e . errexit)
|
|
||||||
(#\m . monitor)
|
|
||||||
(#\C . noclobber)
|
|
||||||
(#\f . noglob)
|
|
||||||
(#\n . noexec)
|
|
||||||
(#\b . notify)
|
|
||||||
(#\u . nounset)
|
|
||||||
(#\v . verbose)
|
|
||||||
(#\x . xtrace)))
|
|
||||||
|
|
||||||
|
|
||||||
;;; Prompts
|
|
||||||
|
|
||||||
(define *continue-tag* (make-prompt-tag))
|
|
||||||
|
|
||||||
(define (call-with-continue thunk)
|
|
||||||
"Call @var{thunk} in such a way that a call to @code{continue} will
|
|
||||||
exit the dynamic extent of @var{thunk}."
|
|
||||||
(call-with-prompt *continue-tag*
|
|
||||||
thunk
|
|
||||||
(lambda (cont n)
|
|
||||||
(when (> n 0)
|
|
||||||
(false-if-exception
|
|
||||||
(abort-to-prompt *continue-tag* (1- n)))))))
|
|
||||||
|
|
||||||
(define* (sh:continue #:optional (n 0))
|
|
||||||
"Exit to the closest invocation of @code{call-with-continue}. If
|
|
||||||
@var{n} is set, exit to the @math{n + 1}th closest invocation."
|
|
||||||
(abort-to-prompt *continue-tag* n))
|
|
||||||
|
|
||||||
(define *break-tag* (make-prompt-tag))
|
|
||||||
|
|
||||||
(define (call-with-break thunk)
|
|
||||||
"Call @var{thunk} in such a way that a call to @code{break} will
|
|
||||||
exit the dynamic extent of @var{thunk}."
|
|
||||||
(call-with-prompt *break-tag*
|
|
||||||
thunk
|
|
||||||
(lambda (cont n)
|
|
||||||
(when (> n 0)
|
|
||||||
(false-if-exception
|
|
||||||
(abort-to-prompt *break-tag* (1- n)))))))
|
|
||||||
|
|
||||||
(define* (sh:break #:optional (n 0))
|
|
||||||
"Exit to the closest invocation of @code{call-with-break}. If
|
|
||||||
@var{n} is set, exit to the @math{n + 1}th closest invocation."
|
|
||||||
(abort-to-prompt *break-tag* n))
|
|
||||||
|
|
||||||
(define *return-tag* (make-prompt-tag))
|
|
||||||
|
|
||||||
(define (call-with-return thunk)
|
|
||||||
"Call @var{thunk} in such a way that a call to @code{return} will
|
|
||||||
exit the dynamic extent of @var{thunk}."
|
|
||||||
(call-with-prompt *return-tag*
|
|
||||||
thunk
|
|
||||||
(lambda (cont status)
|
|
||||||
(set-status! status))))
|
|
||||||
|
|
||||||
(define* (sh:return #:optional (status (get-status)))
|
|
||||||
"Exit to the closest invocation of @code{call-with-return} setting
|
|
||||||
status to @var{status}. If @var{status} is not set, keep the current
|
|
||||||
status."
|
|
||||||
(abort-to-prompt *return-tag* status))
|
|
||||||
|
|
||||||
(define *atexit* #f)
|
|
||||||
(define *exiting?* #f)
|
|
||||||
|
|
||||||
(define (set-atexit! handler)
|
|
||||||
(set! *atexit* handler))
|
|
||||||
|
|
||||||
(define* (sh:exit #:optional status)
|
|
||||||
(if (and (not *exiting?*) (thunk? *atexit*))
|
|
||||||
(begin
|
|
||||||
(set! *exiting?* #t)
|
|
||||||
(*atexit*)
|
|
||||||
(exit (or status (get-status))))
|
|
||||||
(exit (or status (get-status)))))
|
|
||||||
|
|
||||||
|
|
||||||
;;; Files.
|
|
||||||
|
|
||||||
(define *fd-count* 10)
|
|
||||||
|
|
||||||
(define current-3-port (make-parameter #f))
|
|
||||||
(define current-4-port (make-parameter #f))
|
|
||||||
(define current-5-port (make-parameter #f))
|
|
||||||
(define current-6-port (make-parameter #f))
|
|
||||||
(define current-7-port (make-parameter #f))
|
|
||||||
(define current-8-port (make-parameter #f))
|
|
||||||
(define current-9-port (make-parameter #f))
|
|
||||||
|
|
||||||
(define fd->current-port
|
|
||||||
(let ((cps (vector current-input-port
|
|
||||||
current-output-port
|
|
||||||
current-error-port
|
|
||||||
current-3-port
|
|
||||||
current-4-port
|
|
||||||
current-5-port
|
|
||||||
current-6-port
|
|
||||||
current-7-port
|
|
||||||
current-8-port
|
|
||||||
current-9-port)))
|
|
||||||
(lambda (fd)
|
|
||||||
"Return the current port (e.g. @code{current-input-port})
|
|
||||||
corresponding to the the Shell file descriptor @var{fd}. The value of
|
|
||||||
@var{fd} must be a nonnegative integer less than @code{*fd-count*}."
|
|
||||||
(vector-ref cps fd))))
|
|
6
guix.scm
6
guix.scm
|
@ -35,7 +35,7 @@
|
||||||
(member relative paths)))))
|
(member relative paths)))))
|
||||||
|
|
||||||
(package
|
(package
|
||||||
(name "geesh")
|
(name "gash")
|
||||||
(version *version*)
|
(version *version*)
|
||||||
(source (local-file *srcdir* #:recursive? #t #:select? (make-select)))
|
(source (local-file *srcdir* #:recursive? #t #:select? (make-select)))
|
||||||
(build-system gnu-build-system)
|
(build-system gnu-build-system)
|
||||||
|
@ -52,8 +52,8 @@
|
||||||
(add-before 'configure 'bootstrap
|
(add-before 'configure 'bootstrap
|
||||||
(lambda _
|
(lambda _
|
||||||
(zero? (system* "sh" "bootstrap")))))))
|
(zero? (system* "sh" "bootstrap")))))))
|
||||||
(home-page "https://gitlab.com/samplet/geesh")
|
(home-page "https://gitlab.com/samplet/gash")
|
||||||
(synopsis "POSIX-compatible shell written in Guile Scheme")
|
(synopsis "POSIX-compatible shell written in Guile Scheme")
|
||||||
(description "Geesh is a POSIX-compatible shell written in Guile
|
(description "Gash is a POSIX-compatible shell written in Guile
|
||||||
Scheme. It is designed to be capable of bootstrapping Bash.")
|
Scheme. It is designed to be capable of bootstrapping Bash.")
|
||||||
(license license:gpl3+))
|
(license license:gpl3+))
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
#!@GUILE@ --no-auto-compile
|
|
||||||
-*- scheme -*-
|
|
||||||
!#
|
|
||||||
|
|
||||||
;;; The Geesh Shell Interpreter
|
|
||||||
;;; Copyright 2017 Timothy Sample <samplet@ngyro.com>
|
|
||||||
;;;
|
|
||||||
;;; This file is part of Geesh.
|
|
||||||
;;;
|
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
|
||||||
;;; (at your option) any later version.
|
|
||||||
;;;
|
|
||||||
;;; Geesh 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 General Public License for more details.
|
|
||||||
;;;
|
|
||||||
;;; You should have received a copy of the GNU General Public License
|
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
(add-to-load-path "@MODDIR@")
|
|
||||||
(set! %load-compiled-path (cons "@GODIR@" %load-compiled-path))
|
|
||||||
|
|
||||||
(use-modules (geesh repl)
|
|
||||||
(ice-9 getopt-long))
|
|
||||||
|
|
||||||
(define options-spec
|
|
||||||
'((command (single-char #\c) (value #t))
|
|
||||||
(stdin (single-char #\s))))
|
|
||||||
|
|
||||||
(let* ((options (getopt-long (program-arguments) options-spec
|
|
||||||
#:stop-at-first-non-option #t))
|
|
||||||
(command (option-ref options 'command #f))
|
|
||||||
(stdin (option-ref options 'stdin #f))
|
|
||||||
(args (option-ref options '() '())))
|
|
||||||
(cond
|
|
||||||
((and command stdin)
|
|
||||||
(format (current-error-port)
|
|
||||||
"~a: Invalid options.~%"
|
|
||||||
(car (program-arguments)))
|
|
||||||
(exit EXIT_FAILURE))
|
|
||||||
(command
|
|
||||||
(if (null? args)
|
|
||||||
(set-program-arguments (list (car (program-arguments))))
|
|
||||||
(set-program-arguments args))
|
|
||||||
(call-with-input-string command
|
|
||||||
(lambda (port)
|
|
||||||
(exit (run-repl port)))))
|
|
||||||
(stdin
|
|
||||||
(set-program-arguments (cons (car (program-arguments)) args))
|
|
||||||
(exit (run-repl)))
|
|
||||||
(else
|
|
||||||
(cond
|
|
||||||
((null? args)
|
|
||||||
(set-program-arguments (list (car (program-arguments))))
|
|
||||||
(exit (run-repl)))
|
|
||||||
(else
|
|
||||||
(set-program-arguments args)
|
|
||||||
(call-with-input-file (car args)
|
|
||||||
(lambda (port)
|
|
||||||
(exit (run-repl port)))))))))
|
|
|
@ -5,22 +5,22 @@
|
||||||
(guix utils)
|
(guix utils)
|
||||||
(ice-9 match))
|
(ice-9 match))
|
||||||
|
|
||||||
(define geesh
|
(define gash
|
||||||
(load (string-append (current-source-directory) "/../../guix.scm")))
|
(load (string-append (current-source-directory) "/../../guix.scm")))
|
||||||
|
|
||||||
(define geesh-with-links
|
(define gash-with-links
|
||||||
(package
|
(package
|
||||||
(inherit geesh)
|
(inherit gash)
|
||||||
(arguments
|
(arguments
|
||||||
(substitute-keyword-arguments (package-arguments geesh)
|
(substitute-keyword-arguments (package-arguments gash)
|
||||||
((#:phases phases '%standard-phases)
|
((#:phases phases '%standard-phases)
|
||||||
`(modify-phases ,phases
|
`(modify-phases ,phases
|
||||||
(add-after 'install 'link-bash
|
(add-after 'install 'link-bash
|
||||||
(lambda* (#:key outputs #:allow-other-keys)
|
(lambda* (#:key outputs #:allow-other-keys)
|
||||||
(let ((out (assoc-ref outputs "out")))
|
(let ((out (assoc-ref outputs "out")))
|
||||||
(symlink (string-append out "/bin/geesh")
|
(symlink (string-append out "/bin/gash")
|
||||||
(string-append out "/bin/sh"))
|
(string-append out "/bin/sh"))
|
||||||
(symlink (string-append out "/bin/geesh")
|
(symlink (string-append out "/bin/gash")
|
||||||
(string-append out "/bin/bash")))))))))))
|
(string-append out "/bin/bash")))))))))))
|
||||||
|
|
||||||
(define bash-without-bash
|
(define bash-without-bash
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
(bag
|
(bag
|
||||||
(inherit bash-bag)
|
(inherit bash-bag)
|
||||||
(build-inputs
|
(build-inputs
|
||||||
`(("bash" ,geesh-with-links)
|
`(("bash" ,gash-with-links)
|
||||||
,@(filter (match-lambda
|
,@(filter (match-lambda
|
||||||
((name . _)
|
((name . _)
|
||||||
(not (member name '("bash")))))
|
(not (member name '("bash")))))
|
||||||
|
|
|
@ -7,12 +7,12 @@ oil: oil-link
|
||||||
cp -R -H oil-link "$@"
|
cp -R -H oil-link "$@"
|
||||||
chmod -R u+w "$@"
|
chmod -R u+w "$@"
|
||||||
|
|
||||||
oil/bin/geesh: oil
|
oil/bin/gash: oil
|
||||||
echo "#!/bin/sh" > "$@"
|
echo "#!/bin/sh" > "$@"
|
||||||
echo "$(abs_top_builddir)/pre-inst-env geesh "'"$$@"' >> "$@"
|
echo "$(abs_top_builddir)/pre-inst-env gash "'"$$@"' >> "$@"
|
||||||
chmod a+x "$@"
|
chmod a+x "$@"
|
||||||
|
|
||||||
check: oil/bin/geesh ;
|
check: oil/bin/gash ;
|
||||||
|
|
||||||
TEST_EXTENSIONS = .sh
|
TEST_EXTENSIONS = .sh
|
||||||
SH_LOG_COMPILER = ./check-spec
|
SH_LOG_COMPILER = ./check-spec
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
cd oil
|
cd oil
|
||||||
export OSH_LIST=bin/geesh
|
export OSH_LIST=bin/gash
|
||||||
|
|
||||||
test_name=$(basename "$1")
|
test_name=$(basename "$1")
|
||||||
test_name=${test_name%.sh}
|
test_name=${test_name%.sh}
|
||||||
|
|
|
@ -109,7 +109,7 @@
|
||||||
("errexit and time { }")
|
("errexit and time { }")
|
||||||
;; Follow Dash on this one.
|
;; Follow Dash on this one.
|
||||||
("errexit with (( ))"
|
("errexit with (( ))"
|
||||||
("N-I dash" "N-I dash/geesh"))
|
("N-I dash" "N-I dash/gash"))
|
||||||
;; These next two are due to a difference
|
;; These next two are due to a difference
|
||||||
;; between the Oil shell and every other shell.
|
;; between the Oil shell and every other shell.
|
||||||
;; Oil thinks that setting the errexit option in
|
;; Oil thinks that setting the errexit option in
|
||||||
|
@ -125,10 +125,10 @@
|
||||||
("Tilde expansion within for loop")
|
("Tilde expansion within for loop")
|
||||||
;; This is beyond POSIX.
|
;; This is beyond POSIX.
|
||||||
("Brace Expansion within Array"
|
("Brace Expansion within Array"
|
||||||
("N-I dash" "N-I dash/geesh"))
|
("N-I dash" "N-I dash/gash"))
|
||||||
;; We match Bash here.
|
;; We match Bash here.
|
||||||
("for loop with invalid identifier"
|
("for loop with invalid identifier"
|
||||||
("OK bash" "OK bash/geesh"))
|
("OK bash" "OK bash/gash"))
|
||||||
;; For these next two, we do not have arithmetic
|
;; For these next two, we do not have arithmetic
|
||||||
;; substitution, but we can use 'expr' instead.
|
;; substitution, but we can use 'expr' instead.
|
||||||
("while in pipe"
|
("while in pipe"
|
||||||
|
@ -138,9 +138,9 @@
|
||||||
("spec/quote.test.sh"
|
("spec/quote.test.sh"
|
||||||
(;; We match KornShell on these two tests.
|
(;; We match KornShell on these two tests.
|
||||||
("Unterminated single quote"
|
("Unterminated single quote"
|
||||||
("OK mksh" "OK mksh/geesh"))
|
("OK mksh" "OK mksh/gash"))
|
||||||
("Unterminated double quote"
|
("Unterminated double quote"
|
||||||
("OK mksh" "OK mksh/geesh"))
|
("OK mksh" "OK mksh/gash"))
|
||||||
;; The rest of these are well beyond POSIX.
|
;; The rest of these are well beyond POSIX.
|
||||||
("$''")
|
("$''")
|
||||||
("$'' with quotes")
|
("$'' with quotes")
|
||||||
|
@ -165,26 +165,26 @@
|
||||||
("spec/var-sub.test.sh"
|
("spec/var-sub.test.sh"
|
||||||
(;; We match Bash here.
|
(;; We match Bash here.
|
||||||
("Bad var sub"
|
("Bad var sub"
|
||||||
("OK bash" "OK bash/geesh"))
|
("OK bash" "OK bash/gash"))
|
||||||
;; This test expects 'ls' to be at '/bin/ls',
|
;; This test expects 'ls' to be at '/bin/ls',
|
||||||
;; which isn't the case on GuixSD.
|
;; which isn't the case on GuixSD.
|
||||||
("Braced block inside ${}"
|
("Braced block inside ${}"
|
||||||
("which ls" "guile -c '(display \"/bin/ls\")'"))
|
("which ls" "guile -c '(display \"/bin/ls\")'"))
|
||||||
;; We match KornShell here.
|
;; We match KornShell here.
|
||||||
("Here doc with bad \"$@\" delimiter"
|
("Here doc with bad \"$@\" delimiter"
|
||||||
("OK mksh" "OK mksh/geesh"))))
|
("OK mksh" "OK mksh/gash"))))
|
||||||
("spec/redirect.test.sh"
|
("spec/redirect.test.sh"
|
||||||
(;; We match Bash and Dash here, just not Oil.
|
(;; We match Bash and Dash here, just not Oil.
|
||||||
("Redirect in assignment is invalid"
|
("Redirect in assignment is invalid"
|
||||||
("OK bash" "OK bash/geesh"))
|
("OK bash" "OK bash/gash"))
|
||||||
;; Again, we match Dash here (though not Bash).
|
;; Again, we match Dash here (though not Bash).
|
||||||
("Redirect in assignment"
|
("Redirect in assignment"
|
||||||
("OK dash" "OK dash/geesh"))
|
("OK dash" "OK dash/gash"))
|
||||||
;; This test requires arithmetic substitutions.
|
;; This test requires arithmetic substitutions.
|
||||||
("Redirect in function body is evaluated multiple times")
|
("Redirect in function body is evaluated multiple times")
|
||||||
;; We match KornShell here.
|
;; We match KornShell here.
|
||||||
("Prefix redirect for loop -- not allowed"
|
("Prefix redirect for loop -- not allowed"
|
||||||
("OK mksh" "OK mksh/geesh"))
|
("OK mksh" "OK mksh/gash"))
|
||||||
;; We do not support named file descriptors
|
;; We do not support named file descriptors
|
||||||
;; (they are not in POSIX).
|
;; (they are not in POSIX).
|
||||||
("Named file descriptor")
|
("Named file descriptor")
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2017 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2017 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (tests unit automake)
|
(define-module (tests unit automake)
|
||||||
#:use-module (srfi srfi-64))
|
#:use-module (srfi srfi-64))
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2017, 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2017, 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (test-lexer)
|
(define-module (test-lexer)
|
||||||
#:use-module (geesh lexer)
|
#:use-module (gash lexer)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (srfi srfi-64)
|
#:use-module (srfi srfi-64)
|
||||||
#:use-module (system base lalr)
|
#:use-module (system base lalr)
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (test-parser)
|
(define-module (test-parser)
|
||||||
#:use-module (geesh parser)
|
#:use-module (gash parser)
|
||||||
#:use-module (srfi srfi-64)
|
#:use-module (srfi srfi-64)
|
||||||
#:use-module (tests unit automake))
|
#:use-module (tests unit automake))
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (test-pattern)
|
(define-module (test-pattern)
|
||||||
#:use-module (geesh pattern)
|
#:use-module (gash pattern)
|
||||||
#:use-module (srfi srfi-64)
|
#:use-module (srfi srfi-64)
|
||||||
#:use-module (tests unit automake))
|
#:use-module (tests unit automake))
|
||||||
|
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (test-shell)
|
(define-module (test-shell)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (geesh shell)
|
#:use-module (gash shell)
|
||||||
#:use-module (ice-9 ftw)
|
#:use-module (ice-9 ftw)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 textual-ports)
|
#:use-module (ice-9 textual-ports)
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2018 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(define-module (test-word)
|
(define-module (test-word)
|
||||||
#:use-module (geesh environment)
|
#:use-module (gash environment)
|
||||||
#:use-module (geesh word)
|
#:use-module (gash word)
|
||||||
#:use-module (srfi srfi-64)
|
#:use-module (srfi srfi-64)
|
||||||
#:use-module (tests unit automake))
|
#:use-module (tests unit automake))
|
||||||
|
|
||||||
|
|
|
@ -2,23 +2,23 @@
|
||||||
-*- scheme -*-
|
-*- scheme -*-
|
||||||
!#
|
!#
|
||||||
|
|
||||||
;;; The Geesh Shell Interpreter
|
;;; Gash -- Guile As SHell
|
||||||
;;; Copyright 2017 Timothy Sample <samplet@ngyro.com>
|
;;; Copyright 2017 Timothy Sample <samplet@ngyro.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of Geesh.
|
;;; This file is part of Gash.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is free software: you can redistribute it and/or modify
|
;;; Gash is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU General Public License as published by
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
;;; the Free Software Foundation, either version 3 of the License, or
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
;;; (at your option) any later version.
|
;;; (at your option) any later version.
|
||||||
;;;
|
;;;
|
||||||
;;; Geesh is distributed in the hope that it will be useful,
|
;;; Gash is distributed in the hope that it will be useful,
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
;;; GNU General Public License for more details.
|
;;; GNU General Public License for more details.
|
||||||
;;;
|
;;;
|
||||||
;;; You should have received a copy of the GNU General Public License
|
;;; You should have received a copy of the GNU General Public License
|
||||||
;;; along with Geesh. If not, see <http://www.gnu.org/licenses/>.
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(use-modules (ice-9 popen)
|
(use-modules (ice-9 popen)
|
||||||
(ice-9 receive)
|
(ice-9 receive)
|
||||||
|
|
Loading…
Reference in New Issue