MPW Menus
Volume Number: | | 9
|
Issue Number: | | 10
|
Column Tag: | | MPW Workshop
|
Dynamically Customizable Menu in MPW
Launching applications from an MPW Script
By Lee D. Rimar, Absoft Corporation
Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.
When I first started programming on the Macintosh, the text editor I used had a Transfer menu for launching other applications. When I switched to MPW a few years ago, I missed this feature. This was before the advent of System 7 with its Apple Menu Items folder, so I had to create my own solution.
Because it is easy to add custom menus to MPW, I created a special Run menu. This menu initially had only 2 items: Add Application... and Add Document.... These let you add commonly used applications and documents to the Run menu.
Each of the Add... items also updates a UserStartupRunMenu file, which reloads the menu each time you launch MPW. Apart from its general usefulness, there is a technically interesting side to this script. To keep the Run menu in alphabetical order, the UserStartupRunMenu file is automatically sorted, rewritten, and executed every time you add an item to Run menu. You dont often see self-modifying gymnastics like this in a scripting language.
I usually use the Run menu to launch my word processor or communications software with a specific setting file, from inside of MPW. I could do the same thing from the System 7 Apple menu, but I find the Run menu easier to maintain. Also, I sometimes intentionally kill the Finder under System 7 to get extra memory for MPW and other programs. Without Finder running, custom items on the Apple Menu are unavailable.
To create your own Run menu and UserStartupRunMenu file, the MPW script below should be copied to your MPW folder as NewRunMenu, and executed just once.
# Script: NewRunMenu
# A dynamically customizable menu for sublaunching commonly used files.
# To install, type NewRunMenu in the Worksheet window and hit Enter.
# This adds a "Run" menu to the MPW menu bar. It also creates a file
called
# UserStartupRunMenu in the MPW folder (or the MPW PrefsFolder, if using
MPW
# 3.3 or newer), to re-create the menu each time you load MPW.
# UserStartupRunMenu is updated every time you add an item to the menu
# When you select Add Application, you can choose any application and
specify
# how it should appear on the menu. When you select Add Document, you
can
# select a document, an application to open it with, and how it should
# appear on the menu.
# The Run menu does not provide for DELETING an item. To do that, open
the
# UserStartupRunMenu file and delete the unwanted Addmenu lines.
# Important typographic notes:
# 1) The Add Application and Add Document menu item names start with
one space,
# so they sort alphabetically to the top of the menu.
# 2) The script for each AddMenu item is one long, continued command,
so
# most of the lines end with semi-colon ; and option-d characters.
# 3) Some of the prompt strings that appear in this script contain underscores.
# I did this so they would be visible on a printed page. However, in
my
# working copy of the script, the underscores are replaced with non-breaking
# spaces (typed in MPW as option-space). Strings containing non-breaking
# spaces don't have to be placed in quotes.
# 4) Any place you see ... in this script, it really is 3 periods, not
the
# option-colon ellipsis character.
# 5) Quote " apostrophe ' and grave accent ` are not interchangeable!
Set Exit 0
DeleteMenu Run Dev:Null
# "Add Application..." presents a Standard GetFile dialog, filtered for
# applications only. After you choose an application, it prompts you
for
# how the item should appear in the menu. The default is the full path
# and filename, which I usually edit to just the filename.
AddMenu Run ' Add Application...'
'Begin ;
Set Exit 0 ;
Set menuChanged 0 ;
Set theAppl "`getfilename -b Add -m Select_application... -t APPL`"
;
Exit If {theAppl} == "" ;
Set menuItem "`request -d {theAppl} How_should_the_menu_item_read...`"
;
Exit If {menuItem} == "" ; AddMenu Run "{menuItem}" "{theAppl}" ;
Set menuChanged 1 ;
Unset theAppl ;
Unset menuItem ;
If ({menuChanged}) ;
Set savedDir `Directory` ;
Directory "{MPW}" ;
Echo Set Exit 0 >"{PrefsFolder}"UserStartupRunMenu ;
Echo DeleteMenu Run Dev:Null >> "{PrefsFolder}"UserStartupRunMenu
;
AddMenu Run | Sort -u -quote >> "{PrefsFolder}"UserStartupRunMenu
;
Echo Set Exit 1 >> "{PrefsFolder}"UserStartupRunMenu ;
Execute "{PrefsFolder}"UserStartupRunMenu ;
Directory "{savedDir}" ;
Unset savedDir ;
End ;
Unset menuChanged ;
Set Exit 1 ;
End Dev:Null'
# Add Document... works a lot like Add Application..., except that you
are
# prompted to select TWO files. The first can be any document, the second
# must be an application which can open that document.
AddMenu Run ' Add Document...'
'Begin ;
Set Exit 0 ;
Set menuChanged 0 ;
Set theDoc "`getfilename -m Select_document_to_open...`" ;
Exit If {theDoc} == "" ;
Set theAppl "`getfilename -b With -m To_open_with... -t APPL`" ;
Exit If {theAppl} == "" ;
Set menuItem "`request -d {theDoc} How_should_the_menu_item_read...`"
;
Exit If {menuItem} == "" ;
AddMenu Run "{menuItem}" "{theAppl} {theDoc}" ;
Set menuChanged 1 ;
Export menuChanged ;
Unset theAppl ;
Unset menuItem ;
If ({menuChanged}) ;
Set savedDir `Directory` ;
Directory "{MPW}" ;
Echo Set Exit 0 >"{PrefsFolder}"UserStartupRunMenu ;
Echo DeleteMenu Run Dev:Null >> "{PrefsFolder}"UserStartupRunMenu
;
AddMenu Run | Sort -u -quote >> "{PrefsFolder}"UserStartupRunMenu
;
Echo Set Exit 1 >> "{PrefsFolder}"UserStartupRunMenu ;
Execute "{PrefsFolder}"UserStartupRunMenu ;
Directory "{savedDir}" ;
Unset savedDir ;
End ;
Unset menuChanged ;
Set Exit 1 ;
End Dev:Null'
# Add a separator line, which will appear between the default and user
# configured menu items.
AddMenu Run '-' ''
# Create the UserStartupRunMenu file. This will be placed in either
the
# MPW folder, or MPW's PrefsFolder if using MPW 3.3 or newer.
# The UserStartupRunMenu contains all of the commands needed to initialize
# the Run menu, without any formatting or script comments.
Set savedDir `Directory`
Directory "{MPW}"
Echo Set Exit 0 > "{PrefsFolder}"UserStartupRunMenu
Echo DeleteMenu Run Dev:Null >> "{PrefsFolder}"UserStartupRunMenu
AddMenu Run >> "{PrefsFolder}"UserStartupRunMenu
Echo Set Exit 1 >> "{PrefsFolder}"UserStartupRunMenu
Directory "{savedDir}"
Unset savedDir
# Announce completion
Alert -s Run Menu successfully installed.
# End of NewRunMenu script
A word of warning: If you plan to type this in from the magazine pages, you may be in for a rough time. The MPW scripting language is powerful, but it can be a typographic nightmare. A single character error can give bizarre results, and may be very hard to track down.
This is an excellent reason to buy MacTech magazine source code on disk, or to power up the modem and download this file. If you dont have an account any place where MacTech source code is available, you can also find this script on the Absoft Technical Support BBS, at 313-853-0000.