TweetFollow Us on Twitter

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 UserStartup•RunMenu 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 UserStartup•RunMenu file is automatically sorted, rewritten, and executed every time you add an item to Run menu. You don’t 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 UserStartup•RunMenu 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
# UserStartup•RunMenu 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.
# UserStartup•RunMenu 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
# UserStartup•RunMenu 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}"UserStartup•RunMenu ; 
    Echo DeleteMenu Run   Dev:Null >> "{PrefsFolder}"UserStartup•RunMenu 
; 
    AddMenu Run | Sort -u -quote >> "{PrefsFolder}"UserStartup•RunMenu 
; 
    Echo Set Exit 1 >> "{PrefsFolder}"UserStartup•RunMenu ; 
    Execute "{PrefsFolder}"UserStartup•RunMenu ; 
    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}"UserStartup•RunMenu ; 
    Echo DeleteMenu Run   Dev:Null >> "{PrefsFolder}"UserStartup•RunMenu 
; 
    AddMenu Run | Sort -u -quote >> "{PrefsFolder}"UserStartup•RunMenu 
; 
    Echo Set Exit 1 >> "{PrefsFolder}"UserStartup•RunMenu ; 
    Execute "{PrefsFolder}"UserStartup•RunMenu ; 
    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 UserStartup•RunMenu file.  This will be placed in either 
the
# MPW folder, or MPW's PrefsFolder if using MPW 3.3 or newer.
 
# The UserStartup•RunMenu 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}"UserStartup•RunMenu
Echo DeleteMenu Run   Dev:Null >> "{PrefsFolder}"UserStartup•RunMenu
AddMenu Run >> "{PrefsFolder}"UserStartup•RunMenu
Echo Set Exit 1 >> "{PrefsFolder}"UserStartup•RunMenu
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 don’t 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.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All


Price Scanner via MacPrices.net

Early Black Friday Deal: Apple’s newly upgrad...
Amazon has Apple 13″ MacBook Airs with M2 CPUs and 16GB of RAM on early Black Friday sale for $200 off MSRP, only $799. Their prices are the lowest currently available for these newly upgraded 13″ M2... Read more
13-inch 8GB M2 MacBook Airs for $749, $250 of...
Best Buy has Apple 13″ MacBook Airs with M2 CPUs and 8GB of RAM in stock and on sale on their online store for $250 off MSRP. Prices start at $749. Their prices are the lowest currently available for... Read more
Amazon is offering an early Black Friday $100...
Amazon is offering early Black Friday discounts on Apple’s new 2024 WiFi iPad minis ranging up to $100 off MSRP, each with free shipping. These are the lowest prices available for new minis anywhere... Read more
Price Drop! Clearance 14-inch M3 MacBook Pros...
Best Buy is offering a $500 discount on clearance 14″ M3 MacBook Pros on their online store this week with prices available starting at only $1099. Prices valid for online orders only, in-store... Read more
Apple AirPods Pro with USB-C on early Black F...
A couple of Apple retailers are offering $70 (28%) discounts on Apple’s AirPods Pro with USB-C (and hearing aid capabilities) this weekend. These are early AirPods Black Friday discounts if you’re... Read more
Price drop! 13-inch M3 MacBook Airs now avail...
With yesterday’s across-the-board MacBook Air upgrade to 16GB of RAM standard, Apple has dropped prices on clearance 13″ 8GB M3 MacBook Airs, Certified Refurbished, to a new low starting at only $829... Read more
Price drop! Apple 15-inch M3 MacBook Airs now...
With yesterday’s release of 15-inch M3 MacBook Airs with 16GB of RAM standard, Apple has dropped prices on clearance Certified Refurbished 15″ 8GB M3 MacBook Airs to a new low starting at only $999.... Read more
Apple has clearance 15-inch M2 MacBook Airs a...
Apple has clearance, Certified Refurbished, 15″ M2 MacBook Airs now available starting at $929 and ranging up to $410 off original MSRP. These are the cheapest 15″ MacBook Airs for sale today at... Read more
Apple drops prices on 13-inch M2 MacBook Airs...
Apple has dropped prices on 13″ M2 MacBook Airs to a new low of only $749 in their Certified Refurbished store. These are the cheapest M2-powered MacBooks for sale at Apple. Apple’s one-year warranty... Read more
Clearance 13-inch M1 MacBook Airs available a...
Apple has clearance 13″ M1 MacBook Airs, Certified Refurbished, now available for $679 for 8-Core CPU/7-Core GPU/256GB models. Apple’s one-year warranty is included, shipping is free, and each... Read more

Jobs Board

Seasonal Cashier - *Apple* Blossom Mall - J...
Seasonal Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Seasonal Fine Jewelry Commission Associate -...
…Fine Jewelry Commission Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) Read more
Seasonal Operations Associate - *Apple* Blo...
Seasonal Operations Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Read more
Hair Stylist - *Apple* Blossom Mall - JCPen...
Hair Stylist - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Read more
Cashier - *Apple* Blossom Mall - JCPenney (...
Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Mall Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.