TweetFollow Us on Twitter

Aug 95 Tips
Volume Number:11
Issue Number:8
Column Tag:Tips & Tidbits

Tips & Tidbits

By Steve Sisak, Contributing Editor

Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.

TIP OF THE MONTH

While developing an init that installs a system wide patch I needed a simple way to enable or disable it (forcing it to call the original patch) from the controlling application.

I found that the Gestalt manager could come in useful. In fact the procedure that installs a new selector, used in this case to check for the existence of the init, requires you to specify a response function which gets executed whenever the new selector is called. Being the function itself is part of the init, it is able to change the value of a status variable and return its state: assuming that the variable is a boolean. With two gestalt calls (max) it is possible to change the patch status. Follow some code fragments:

// global constants
#define kPatchSelector    'Test'   // must be OSType
#define kPatchNotPresent  0
#define kPatchPresent1

// INIT FRAGMENT
// INIT globals
Boolean gUsePatch = 3Dfalse;
SelectorFunctionUPPgGestaltSelectorFunction;

// install new gestalt selector
OSErr InstallGestalt(void) 
{
 OSErr  error;

 long   oldA4;
 oldA4 =3D SetUpA4();

 gGestaltSelectorFunction = 
 3DNewSelectorFunctionProc(PatchGestalt);
 error = 3DNewGestalt(kPatchSelector, 
 gGestaltSelectorFunction);

 RestoreA4(oldA4);
 return error;
}

//gestalt response function
pascal OSErr PatchGestalt(OSType gestaltSelector,long* 
 gestaltResponse)
{
    // use the global data in _this file_
 long oldA4;
 oldA4 = 3D SetUpA4();

 if (gUsePatch) { 
 *gestaltResponse = 3DkPatchNotPresent;
 gUsePatch = 3Dfalse;
 }
 else {
 *gestaltResponse = 3DkPatchPresent;
 gUsePatch=3Dtrue;
 }

 // restore the a4 world
 RestoreA4(oldA4);
 
 return noErr;
}
// APPLICATION FRAGMENT
OSErr TogglePatch(Boolean engage)
{
 OSErr  error=3DnoErr;
 long   gestaltFeature=3D0;

    //this call switches the = patch status
 error = 3DGestalt(kPatchSelector,&gestaltFeature);

 if (engage) {
    // was = already engaged; turn it back on
 if ((error = 3D = 3DnoErr) &&     
 (gestaltFeature = 3D = 3DkPatchNotPresent))
 error = 3DGestalt(kPatchSelector,&gestaltFeature);
 }
 else {
    // was = already disabled; turn it back off
 if ((error=3D=3DnoErr) && 
 (gestaltFeature=3D=3DkPatchPresent))
 error=3DGestalt(kPatchSelector,&gestaltFeature);
 }

 return error;
}

- Luigi Belverato
Milano, Italy

HandleMenuChoice

This tip may be a little obvious, I caught it right away, but some people may not have noticed the problem yet. Some people may have coded around it to begin with, but I didn't.

System 7.5 was the first time I saw the "Apple Menu Options" control panel. It is an extremely useful tool, I love it and use it constantly. But, there may be a slight difference in the way your application needs to handle menu highliting now that this control panel exists.

Here is the assumption I had been making for a long time: When the user selects a menu item, MenuSelect (and MenuKey) leave the menu title hilited. The application performs the indicated action and then unhilites the menu title. When no menu item is selected by the user (MenuSelect or MenuKey return 0L), the menu titles are not left hilited after the call.

The Apple Menu Options control panel is an exception. A menu selection in a submenu of the apple menu will leave the apple menu hilited, but MenuSelect will return 0L.

In the event handling code I have calls like this:

HandleMenuChoice( MenuSelect( event->where ) );
HandleMenuChoice( MenuKey( event->message & charCodeMask ) );

HandleMenuChoice looked like this:

void  HandleMenuChoice( long menuChoice )
{
 short  menu;
 short  item;
 
 if ( menuChoice != 0L ) {
 menu = HiWord( menuChoice );
 item = LoWord( menuChoice );
 
 switch ( menu ) {
 case mApple:
 HandleAppleChoice( item );
 break;
 case mFile:
 HandleFileChoice( item );
 break;
    // Other menus go here.
 }
 HiliteMenu( 0 );
 }
}

With this code, if the user selected an item in a submenu of the apple menu, the system will switch to the Finder and open the selected item (thanks to Apple Menu Options). When you switch back to your application, the apple menu will still be hilited (even if you call DrawMenuBar on the switch).

The work around is simple, call HiliteMenu( 0 ) even if MenuSelect returns 0L.

HandleMenuChoice should look like this:

void  HandleMenuChoice( long menuChoice )
{
 short  menu;
 short  item;
 
 if ( menuChoice != 0L ) {
 menu = HiWord( menuChoice );
 item = LoWord( menuChoice );
 
 switch ( menu ) {
 case mApple:
 HandleAppleChoice( item );
 break;
 case mFile:
 HandleFileChoice( item );
 break;
 // Other menus
 }
 // HiliteMenu( 0 ) was here
 }
 HiliteMenu( 0 );  // moved it to here
}

Your code may not look anything like this, but the idea is to call HiliteMenu( 0 ) even if MenuSelect returns 0L.

- Don Bresee
Los Angeles, CA

The Lost Paper

True story: I was once typing in some text in a word processor, when the computer suddenly crashed on me. I didn’t save a copy on to the hard-disk yet. I had to restart the computer and type it all over again. “But wait, the paper is still in the machine” I thought to myself. You see, when you restart all of the computer’s memory doesn’t get cleared, it just stays to what it was until it gets replaced with other information (usually, much like the behavior of a hard-disk). I had one thing going for me, I had MacsBug installed. Here are the steps I took to recover the paper:

First, I logged all of the work I was doing in MacsBug to a file. I did this using the “log” command. All you need to give the command is the name of the new file to log to. I named it “MyPaper” Good, now all of my MacsBug session will be on the hard-disk, so I can open it up with a normal text editor when I’m done.

Next, I needed to find where in memory my paper was. I did this using the “f” command. The first two parameters for this command is the range in memory in which you want MacsBug to search through. I wanted to search through all of my memory, which is 8 megs, so I typed in: “f 0 (400 * 400 * 8) “any string””. Where 0 is the beginning of memory and 8 megs is the top of it. The last parameter is the search string, balanced between two single quotes. I wanted to pick a distinct string, otherwise I would have hit other parts of memory that had it too, making the process take longer. I knew the word aardvark was mentioned in my paper, so I typed in this for the find command:

f 0 (400 * 400 * 8) “aardvark”

MacsBug then started searching for me. It came up with a small memory dump of something with the word arrdvark in it, but the words after it were not mine. (Which meant that I found another part of memory instead of my paper.) I then hit return to tell MacsBug to keep on searching. It then came up with a dump from my paper:

Searching for “aardvark” from 00000000 to 007FFFFF
  00358200  6161 7264 7661 726B  8000 0000 0000 002C  aardvark answer,

Which was very good news indeed! This told me that the string “aardvark answer” could be found at address 00358200. (I got this address from the leftmost number given.)

Now that I knew where it was, the rest my task would be easy. I used MacsBug’s display memory ASCII command to show me what came after it, by typing in: “dma 00358200”. (You might not have this command, in which case you’ll have to use plain old dm, instead of dma.) I hit return until my paper was done being displayed.

Note: You can subract a number from the address to see what was before it. For instance, subracting #200 from an address will give you the address of the first byte of the 200 byte block before it.

I then typed in “log” again, which closed my log. I finally went out of MacsBug and opened the log file with SimpleText. Remember, the log had my whole session, not just the paper, so I had to delete the addresses and such from it, (which really isn’t that hard to do, if you know how to use your mouse and your delete key efficiently). The paper was saved.

Warning: In your search you might stumble upon MacsBug’s very own memory, with its own copy of your search string. To get out of this recursive loop, start the search over again with the base search address being outside of MacsBug’s memory.

- Macneil Shonle
Yarmouth Maine, MacneilS@aol.com

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

DaisyDisk 4.8 - $9.99
DaisyDisk allows you to visualize your disk usage and free up disk space by quickly finding and deleting big unused files. The program scans your disk and displays its content as a sector diagram... Read more
VMware Fusion 11.5.0 - Run Windows apps...
VMware Fusion and Fusion Pro - virtualization software for running Windows, Linux, and other systems on a Mac without rebooting. The latest version includes full support for Windows 10, macOS Mojave... Read more
Apple Configurator 2.10 - Configure and...
Apple Configurator makes it easy to deploy iPad, iPhone, iPod touch, and Apple TV devices in your school or business. Use Apple Configurator to quickly configure large numbers of devices connected to... Read more
Spotify 1.1.15.448. - Stream music, crea...
Spotify is a streaming music service that gives you on-demand access to millions of songs. Whether you like driving rock, silky R&B, or grandiose classical music, Spotify's massive catalogue puts... Read more
MenuMeters 1.9.8 - CPU, memory, disk, an...
MenuMeters is a set of CPU, memory, disk, and network monitoring tools for Mac OS X. Although there are numerous other programs which do the same thing, none had quite the feature set I was looking... Read more
Blocks 3.5.2 - RapidWeaver plug-in; divi...
Blocks is a plugin for RapidWeaver. It allows you to place blocks of text, graphics, and even raw HTML onto your page wherever you like. Drag blocks around, resize them, and even overlap content. All... Read more
Live Home 3D Pro 3.7 - $49.99
Live Home 3D Pro is powerful yet intuitive home design software that lets you build the house of your dreams right on your Mac, iPhone or iPad. It has every feature of Live Home 3D, plus some... Read more
Ableton Live 10.1.1 - Record music using...
Ableton Live lets you create and record music on your Mac. Use digital instruments, pre-recorded sounds, and sampled loops to arrange, produce, and perform your music like never before. Ableton Live... Read more
BetterTouchTool 3.202 - Customize multi-...
BetterTouchTool adds many new, fully customizable gestures to the Magic Mouse, Multi-Touch MacBook trackpad, and Magic Trackpad. These gestures are customizable: Magic Mouse: Pinch in / out (zoom)... Read more
Fission 2.4.6 - Streamlined audio editor...
Fission can crop and trim audio, paste in or join files, or just rapidly split one long file into many. It's streamlined for fast editing. Plus, it works without the quality loss caused by other... Read more

Latest Forum Discussions

See All

Marvel Strike Force is adding Agent Coul...
Marvel Strike Force, the popular squad-based RPG, is set to receive a bunch of new content over the next few weeks. [Read more] | Read more »
Lots of premium games are going free (so...
You may have seen over the past couple weeks a that a bunch of premium games have suddenly become free. This isn’t a mistake, nor is it some last hurrah before Apple Arcade hits, and it’s important to know that these games aren’t actually becoming... | Read more »
Yoozoo Games launches Saint Seiya Awaken...
If you’re into your anime, you’ve probably seen or heard of Saint Seiya. Based on a shonen manga by Masami Kurumada, the series was massively popular in the 1980s – especially in its native Japan. Since then, it’s grown into a franchise of all... | Read more »
Five Nights at Freddy's AR: Special...
Five Nights at Freddy's AR: Special Delivery is a terrifying new nightmare from developer Illumix. Last week, FNAF fans were sent into a frenzy by a short teaser for what we now know to be Special Delivery. Those in the comments were quick to... | Read more »
Rush Rally 3's new live events are...
Last week, Rush Rally 3 got updated with live events, and it’s one of the best things to happen to racing games on mobile. Prior to this update, the game already had multiplayer, but live events are more convenient in the sense that it’s somewhat... | Read more »
Why your free-to-play racer sucks
It’s been this way for a while now, but playing Hot Wheels Infinite Loop really highlights a big issue with free-to-play mobile racing games: They suck. It doesn’t matter if you’re trying going for realism, cart racing, or arcade nonsense, they’re... | Read more »
Steam Link Spotlight - The Banner Saga 3
Steam Link Spotlight is a new feature where we take a look at PC games that play exceptionally well using the Steam Link app. Our last entry talked about Terry Cavanaugh’s incredible Dicey Dungeons. Read about how it’s a great mobile experience... | Read more »
Combo Quest (Games)
Combo Quest 1.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0 (iTunes) Description: Combo Quest is an epic, time tap role-playing adventure. In this unique masterpiece, you are a knight on a heroic quest to retrieve... | Read more »
Hero Emblems (Games)
Hero Emblems 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: ** 25% OFF for a limited time to celebrate the release ** ** Note for iPhone 6 user: If it doesn't run fullscreen on your device... | Read more »
Puzzle Blitz (Games)
Puzzle Blitz 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Puzzle Blitz is a frantic puzzle solving race against the clock! Solve as many puzzles as you can, before time runs out! You have... | Read more »

Price Scanner via MacPrices.net

Get one of Apple’s new 2019 iPhone 11 models...
Boost Mobile is offering the new 2019 Apple iPhone 11, iPhone 11 Pro, and 11 Pro Max for $100 off MSRP. Their discount reduces the cost of an iPhone 11 to $599 for the 64GB models, $899 for the 64GB... Read more
13″ 1.4GHz Silver MacBook Pros on sale for $1...
B&H Photo has new 2019 13″ 1.4GHz 4-Core Touch Bar Silver MacBook Pros on sale for $100 off Apple’s MSRP. Overnight shipping is free to many addresses in the US. These are the same MacBook Pros... Read more
4-core and 6-core 2018 Mac minis available at...
Apple has Certified Refurbished 2018 Mac minis available on their online store for $120-$170 off the cost of new models. Each mini comes with a new outer case plus a standard Apple one-year warranty... Read more
$250 prepaid Visa card with any Apple iPhone,...
Xfinity Mobile will include a free $250 prepaid Visa card with the purchase of any new iPhone, new line activation, and transfer of phone number to Xfinity Mobile. Offer is valid through October 27,... Read more
Sprint is offering the 64GB Apple iPhone 11 P...
Sprint has the new 64GB iPhone 11 Pro available for $12.50 per month for new customers with an eligible trade-in in of iPhone 7 or newer. That’s down from their standard monthly lease of $41.67. The... Read more
Final week: Apple’s 2019 Back to School Promo...
Purchase a new Mac using Apple’s Education discount, and take up to $400 off MSRP. All teachers, students, and staff of any educational institution with a .edu email address qualify for the discount... Read more
Save $30 on Apple’s AirPods at these reseller...
Amazon is offering discounts on new 2019 Apple AirPods ranging up to $30 off MSRP as part of their Labor Day sale. Shipping is free: – AirPods with Charging Case: $144.95 $15 off MSRP – AirPods with... Read more
Preorder your Apple Watch Series 5 today at A...
Amazon has Apple Watch Series 5 GPS models available for preorder and on sale today for $15 off Apple’s MSRP. Shipping is free and starts on September 20th: – 40mm Apple Watch Series 5 GPS: $384.99 $... Read more
21″ iMacs on sale for $100 off Apple’s MSRP,...
B&H Photo has new 21″ Apple iMacs on sale for $100 off MSRP with models available starting at $999. These are the same iMacs offered by Apple in their retail and online stores. Overnight shipping... Read more
2018 4 and 6-Core Mac minis on sale today for...
Apple resellers are offering new 2018 4-Core and 6-Core Mac minis for $100-$150 off MSRP for a limited time. B&H Photo has the new 2018 4-Core and 6-Core Mac minis on sale for up to $150 off... Read more

Jobs Board

*Apple* Mobile Master - Best Buy (United Sta...
**732324BR** **Job Title:** Apple Mobile Master **Job Category:** Store Associates **Location Number:** 000013-Fargo-Store **Job Description:** **What does a Best Read more
*Apple* Mobility Pro - Best Buy (United Stat...
**723452BR** **Job Title:** Apple Mobility Pro **Job Category:** Store Associates **Location Number:** 001194-Greeley-Store **Job Description:** At Best Buy, our Read more
Best Buy *Apple* Computing Master - Best Bu...
**731319BR** **Job Title:** Best Buy Apple Computing Master **Job Category:** Store Associates **Location Number:** 000303-Arlington Heights-Store **Job Read more
Best Buy *Apple* Computing Master - Best Bu...
**733266BR** **Job Title:** Best Buy Apple Computing Master **Job Category:** Sales **Location Number:** 000144-Union City-Store **Job Description:** **What does a Read more
Geek Squad *Apple* Master Consultation Agen...
**732907BR** **Job Title:** Geek Squad Apple Master Consultation Agent **Job Category:** Services/Installation/Repair **Location Number:** 000360-Williston-Store Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.