A shell for those that prefer Macintosh Programmer's Workshop.
mpw
Go to file
Kelvin Sherlock ce1a36eba5 add regular expression support for evaluate, if, etc.
eg:

evaluate abc =~ /(abc)®4/ # sets the '@4' environment variable.
evaluate abc !~ /[aA]bc/

MPW regular expressions are converted to c++11 std::regex regular expressions and evaluated.
Sadly, the // regular expression syntax interferes with unix-paths (if the / count is odd).  quoting or ∂-escaping the /s is therefore necessary.

file globbing is not yet implemented.
2022-11-22 17:22:49 -05:00
.github/workflows Update cmake-macos.yml 2022-09-25 13:19:26 -04:00
cxx open(O_CREATE) needs 3rd parameter. 2020-12-01 23:31:28 -05:00
etc load UserStartup file. 2016-08-17 13:14:16 -04:00
.gitignore initial version 2016-01-27 10:43:34 -05:00
.travis.yml Update .travis.yml 2017-11-26 14:40:30 -05:00
builtins.cpp add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
builtins.h builtin_help 2016-10-08 09:54:06 -04:00
CMakeLists.txt add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
command.cpp add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
command.h Squashed commit of the following: 2016-08-30 12:25:43 -04:00
config.h.in generate config.h via CMake. 2016-08-09 15:29:10 -04:00
environment.cpp script support. scripts run with an independent copy of the environment and aliases. local variables are not imported. 2022-11-02 21:42:25 -04:00
environment.h script support. scripts run with an independent copy of the environment and aliases. local variables are not imported. 2022-11-02 21:42:25 -04:00
error.h add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
fdset.h implement pipe. 2016-07-26 16:07:44 -04:00
lemon_base.h include generated lemon++ parser code so lemon++ isn't needed. 2020-12-01 23:00:41 -05:00
macroman.cpp shut up warning 2016-08-09 14:40:00 -04:00
macroman.h macroman / utf 8 conversions. 2016-07-23 15:21:13 -04:00
macroman.x macroman / utf 8 conversions. 2016-07-23 15:21:13 -04:00
make-version.rb nl @ end. 2016-09-24 12:49:10 -04:00
mpw_parser.cpp Squashed commit of the following: 2016-08-30 12:25:43 -04:00
mpw_parser.h gcc/case sensitive fixes. 2016-08-17 13:14:38 -04:00
mpw-regex.cpp add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
mpw-regex.h add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
mpw-shell-expand.rl add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
mpw-shell-parser.cpp add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
mpw-shell-quote.rl clean up must_quote a little bit, 2016-07-23 12:58:01 -04:00
mpw-shell-token.rl add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
mpw-shell.cpp look for ~/mpw, /usr/share/mpw, /usr/local/mpw 2016-10-08 09:55:31 -04:00
mpw-shell.h add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
mpw-shell.text initial version 2016-01-27 10:43:34 -05:00
pathnames.rl std::move warning. 2020-12-01 23:01:00 -05:00
phase1.cpp add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
phase1.h update the parser/lexer to make it more reusable. For example, subshells are now handled. 2016-08-16 16:47:20 -04:00
phase1.rl clean up whitespace coalesce a bit 2016-02-10 23:53:41 -05:00
phase2.h update the parser/lexer to make it more reusable. For example, subshells are now handled. 2016-08-16 16:47:20 -04:00
phase2.rl add regular expression support for evaluate, if, etc. 2022-11-22 17:22:49 -05:00
phase3_parser.h update the parser/lexer to make it more reusable. For example, subshells are now handled. 2016-08-16 16:47:20 -04:00
phase3.cpp include generated lemon++ parser code so lemon++ isn't needed. 2020-12-01 23:00:41 -05:00
phase3.h include generated lemon++ parser code so lemon++ isn't needed. 2020-12-01 23:00:41 -05:00
phase3.lemon Squashed commit of the following: 2016-08-30 12:25:43 -04:00
phase3.out include generated lemon++ parser code so lemon++ isn't needed. 2020-12-01 23:00:41 -05:00
README.md Add build instructions to Readme. 2022-10-16 14:39:56 +02:00
value.h initial version 2016-01-27 10:43:34 -05:00
value.rl initial version 2016-01-27 10:43:34 -05:00
version.h Bump Version: 0.4 2016-09-24 12:51:24 -04:00

MPW Shell

MPW Shell is a re-implementation of the Macintosh Programmer's Workshop shell. The primary reason is to support MPW Make (which generated shell script). It may also be useful for other things.

Supported features

  • If ... [Else If] ... [Else] ... End
  • Begin ... End
  • Loop ... End
  • For name In [word...] ... End
  • Break [If], Continue [If], Exit [If]
  • ( ... )
  • ||
  • &&
  • Redirection
  • | "pipes" (via a temporary file. Presumably, that's what MPW did as well.)
  • Subshells (..., ...)

Not (yet) supported

  • aliases
  • regular expressions
  • text-editing commands (search forward/backward, et cetera)

Builtin Commands

  • AboutBox
  • Alias
  • Catenate
  • Directory
  • Echo
  • Evaluate
  • Execute
  • Exists
  • Export
  • Parameters
  • Quit
  • Quote
  • Set
  • Shift
  • Unalias
  • Unexport
  • Unset
  • Version
  • Which

Setup

  1. Install MPW. The mpw binary should be somewhere in your $PATH. It also checks /usr/local/bin/mpw and $HOME/mpw/bin/mpw. You can use mpw-shell without it but only with builtin commands.
  2. Copy the Startup script to $HOME/mpw/. This script is executed when mpw-shell (or mpw-make) starts up (imagine that) and should be used to set environment variables.

Command Line Flags

-D name=value  Define environment variable
-v             Be verbose (equivalent to -Decho=1)
-f             Ignore the Startup script
-c string      Execute string
-h             Display help

Build

Standard CMake build sequence:

mkdir build
cd build
cmake ..
make

After that, do the standard CMake install sequence in the same folder:

cmake --install

to install mpw-shell and mpw-make in /usr/bin/local.