A shell for those that prefer Macintosh Programmer's Workshop.
mpw
Go to file
Kelvin Sherlock 6f2b59c4d6 script support. scripts run with an independent copy of the environment and aliases. local variables are not imported.
Currently, it for a ".text" extension to check if it's a script; this is a placeholder.
2022-11-02 21:42:25 -04: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
CMakeLists.txt 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
builtins.cpp builtin_help 2016-10-08 09:54:06 -04:00
builtins.h builtin_help 2016-10-08 09:54:06 -04:00
command.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
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 Squashed commit of the following: 2016-08-30 12:25:43 -04: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-shell-expand.rl remove trailing newline from sub-shell strings. 2017-11-26 14:02:59 -05:00
mpw-shell-parser.cpp clean up errors a little bit. 2016-07-28 13:42:18 -04:00
mpw-shell-quote.rl clean up must_quote a little bit, 2016-07-23 12:58:01 -04:00
mpw-shell-token.rl fix + / - confusion. 2016-08-11 16:09:39 -04:00
mpw-shell.cpp look for ~/mpw, /usr/share/mpw, /usr/local/mpw 2016-10-08 09:55:31 -04:00
mpw-shell.h update the parser/lexer to make it more reusable. For example, subshells are now handled. 2016-08-16 16:47:20 -04:00
mpw-shell.text initial version 2016-01-27 10:43:34 -05: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
pathnames.rl std::move warning. 2020-12-01 23:01:00 -05:00
phase1.cpp update the parser/lexer to make it more reusable. For example, subshells are now handled. 2016-08-16 16:47:20 -04: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 Squashed commit of the following: 2016-08-30 12:25:43 -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
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
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

README.md

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.