TweetFollow Us on Twitter

CDEF Messages
Volume Number:5
Issue Number:8
Column Tag:TechNotes

Related Info: Control Manager

New CDEF Messages

By James Plamondon, Berkeley, CA

System 7.0 will present all Macintosh programmers with new opportunities and new challenges. One of the challenges will be making your code 32-bit clean. This can be particularly difficult if your code uses parts of the Toolbox that are not 32-bit clean. Some of the routines in the Control Manager, for example, are at best only 31-bit clean -- that’s close, but not close enough for System 7.0. This article will answer the challenge by explaining both the problem with, and the solution to, the Control Manager’s unclean habits.

The specific problem that this article addresses lies in the calcCRgns CDEF message sent to all CDEFs. The message is sent to a control’s CDEF to calculate the control’s enclosing region, or the enclosing region of its indicator (if any). In Inside Macintosh [IM v1 p330], the calcCRgns CDEF message is explained as follows: “Param is a QuickDraw region handle . If the high-order bit of param is set, the region requested is that of the control’s indicator rather than the control as a whole. The definition function should clear the high byte (not just the high bit) of the region handle before attempting to update the region.”

You can see that it’s pretty hard to be 32-bit clean when you’re supposed to go around clearing bytes in handles. The handle could contain a perfectly valid 32-bit address; clearing the high byte would change the address to something entirely different -- and accessing or changing anything via that address would be a terrible mistake. Yet, it is required by the Control Manager, so what is a programmer to do?

First, one can at least improve the situation by not clearing the whole high byte, as directed. Instead, just interrogate the high bit to see what region needs to be calculated, and then clear it -- leaving the rest of the bits alone. This makes the code 31-bit clean; that’s not good enough for System 7.0, but it’ll do for the old systems.

For System 7.0, Apple has defined two new CDEF messages: calcCntlRgn (10) and calcThumbRgn (11). Instead of sending a calcCRgns message and having the CDEF figure out whether the system wants the control region or the indicator (thumb) region, the system will figure out which it wants, and send the CDEF the appropriate (new) message. The CDEF can then treat the region handle like a region handle, instead of like a secret message that has to be decoded.

To make sure the world is a happy place, and that backward compatibility is maintained, a CDEF should always implement both the calcCRgns message and the new CDEF messages. That way, whether the CDEF finds itself in use under either System 7.0 or a pre-7.0 system (which is pretty likely for the next year or two), it will respond in the manner the system expects.

There are a couple of related issues. First, a control’s variation code used to be stored in the high byte of the control record’s contrlDefProc field. To get the variation code, the programmer would mask it out of the high byte. This is unclean, since the contrlDefProc field may contain a valid 32-bit address. A new routine, GetCVariant(), was provided a couple of years ago (IM v5 p222) to return the control’s variation code. Be sure to use it.

Also, whenever writing custom CDEFs or/and other DEFs, remember that The Management Reserves the Right to Add New Messages at Any Time. Therefore, be sure that if your DEF receives a message it doesn’t recognize, it just returns what it was given without doing anything (and without blowing up).

Lastly, if you’re going to add any custom messages to your custom DEF, set the new message numbers to constants greater than 128. This gives Apple the freedom it needs to add new messages, without tromping on your custom messages.

That’s about all the discussion this issue will bear. See the revision to Tech Note #212 for the official version of this same information. Below, I have appended the old, unclean calcCRgns implementation, the new and improved 31-bit clean calcCRgns implementation, and a shell CDEF entry-point function that shows how all these messages should be handled. Note that the ‘param’ actual argument is a valid handle to an empty region, so the content of the region indicated by param needs to be changed, not the value of param itself. You couldn’t make any change to param stick anyway, since it’s not a ‘var’ parameter (i.e., the CDEF gets a copy of param’s value, not its address). Also, I’m assuming the existence of some routines, such as MyCalcThumbRgn() and MyCalcCtlRgn(), that are different for each different CDEF, and which are therefore not given here.

I’d like to thank Andrew Shebanow, Larry Tesler, Charlie Oppenheimer, and Steve Goldberg at Apple -- way to go, guys!

(*****************************************************
MyControl: Main entry point.  Call appropriate
 message-handling routine.
*****************************************************)

FUNCTION MyControl(varCode: INTEGER;
 theCntl: ControlHandle;
 message: INTEGER;
 param: LONGINT): LONGINT;

BEGIN
 MyControl := 0;  { default }

 CASE message OF
 drawCntl:
 doDrawCntl(theCntl, varCode, param);
 testCntl:
 MyControl := doTestCntl(theCntl, param);
 initCntl:
 doInitCntl(theCntl, varCode);
 dispCntl:
 doDispCntl(theCntl, varCode);
 autoTrack:
 doAutoTrack(theCntl, varCode, param);

 calcCRgns: { support for pre-7.0 }
 doCalcCRgnsNew(theCntl, param);
 calcCntlRgn:  { new in System 7.0 }
 MyCalcCtlRgn(theCntl, RgnHandle(param));
 calcThumbRgn:{ new in System 7.0 }
 MyCalcThumbRgn(theCntl, RgnHandle(param));

 OTHERWISE
 ; { ignore all other messages }
 END;  { case }
END;  { MyControl }

(*****************************************************
doCalcCRgnsOld: Calculate the region the
 control or its indicator occupies in its
 window.  Old method: Only 24-bit clean
 -- don’t use this method anymore; use 
 doCalcCRgnsNew(), below.
*****************************************************)

PROCEDURE doCalcCRgnsOld(theCntl: ControlHandle;
 param: LONGINT);

BEGIN
 if (param < 0) then  { high bit is sign bit }
 begin
 { clear high BYTE and set thumb rgn }
 param := BitAnd(param, $0FFFFFFF);
 MyCalcThumbRgn(theCntl, RgnHandle(param));
 end
 else
 begin
 { clear high BYTE and set control rgn }
 param := BitAnd(param, $0FFFFFFF);
 MyCalcCtlRgn(theCntl,
 RgnHandle(param));
 end;
END;  { doCalcCRgnsOld }

(*****************************************************
doCalcCRgnsNew: New method: Only 31-bit
 clean, but that’s the best we can do.
*****************************************************)
PROCEDURE doCalcCRgnsNew(theCntl: ControlHandle;
 param: LONGINT);
BEGIN
 if (param < 0) then  { high bit is sign bit }
 begin 
 { clear high BIT and set thumb rgn }
 param := BitAnd(param, $7FFFFFFF);
 MyCalcThumbRgn(theCntl, RgnHandle(param));
 end
 else
 begin
  { clear high BIT and set control’s rgn }
 param := BitAnd(param, $7FFFFFFF);
 MyCalcCtlRgn(theCntl, RgnHandle(param));
 end;
END;  { doCalcCRgnsNew }

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Boom 2 1.0.1 - System-wide pro audio app...
Boom 2 is a system-wide volume booster and equalizer app that is designed especially for OS X 10.10 Yosemite. It comes with a smart interface, self-calibrates itself according to your Mac, offers... Read more
Apple Security Update 2015-001 - For OS...
Apple Security Update 2015-001 is recommended for all users and improves the security of OS X. For detailed information about the security content of this update, please visit: http://support.apple.... Read more
Drive Genius 4.0.1 - Powerful system uti...
Drive Genius 4 gives you faster performance from your Mac while also protecting it. The award-winning and improved DrivePulse feature alerts you to hard drive issues before they become major problems... Read more
Yosemite Cache Cleaner 9.0.3 - Clear cac...
Yosemite Cache Cleaner is an award-winning general purpose tool for OS X. YCC makes system maintenance simple with an easy point-and-click interface to many OS X functions. Novice and expert users... Read more
xScope 4.1.1 - Onscreen graphic measurem...
xScope is powerful set of tools that are ideal for measuring, inspecting, and testing on-screen graphics and layouts. Its tools float above your desktop windows and can be accessed via a toolbar,... Read more
OS X Yosemite 10.10.2 - Apple's lat...
OS X Yosemite is Apple's newest operating system for Mac. An elegant design that feels entirely fresh, yet inherently familiar. The apps you use every day, enhanced with new features. And a... Read more
Apple iOS 8.1.3 - The latest version of...
The latest version of iOS can be downloaded through iTunes. Apple iOS 8 comes with big updates to apps you use every day, like Messages and Photos. A whole new way to share content with your family.... Read more
SpamSieve 2.9.19 - Robust spam filter fo...
SpamSieve is a robust spam filter for major email clients that uses powerful Bayesian spam filtering. SpamSieve understands what your spam looks like in order to block it all, but also learns what... Read more
RapidWeaver 6.0.5 - Create template-base...
RapidWeaver is a next-generation Web design application to help you easily create professional-looking Web sites in minutes. No knowledge of complex code is required, RapidWeaver will take care of... Read more
Duet 1.2.2 - Use your iPad as an externa...
Duet is the first app that allows you to use your iDevice as an extra display for your Mac using the Lightning or 30-pin cable. Note: This app requires a $14.99 iOS companion app. Version 1.2.2:... Read more

Storm & Skye – Magical Adventure Sto...
Storm & Skye – Magical Adventure Story For Kids Review By Amy Solomon on January 28th, 2015 Our Rating: iPhone App - Designed for the iPhone, compatible with the iPad The first book in the Storm & Skye series includes... | Read more »
New WOTA: U-Boat Compass ‘Wets’ Your App...
New WOTA: U-Boat Compass ‘Wets’ Your Appetite for WOTA: Wolves of the Atlantic. Posted by Jessica Fisher on January 27th, 2015 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Warship Solitaire Review
Warship Solitaire Review By Nadia Oxford on January 27th, 2015 Our Rating: :: A WAR OF NUMBERSUniversal App - Designed for iPhone and iPad Warship Solitaire might lack frills and looks, but it offers some thought provoking... | Read more »
Keep Track of Your Hectic Work Schedule...
Keep Track of Your Hectic Work Schedule With Shifts Posted by Jessica Fisher on January 27th, 2015 [ permalink ] iPhone App - Designed for the iPhone, compatible with the iPad | Read more »
All Star Quarterback Review
All Star Quarterback Review By Campbell Bird on January 27th, 2015 Our Rating: :: PLAY YOUR PARTUniversal App - Designed for iPhone and iPad Train your way to the Super Bowl in this free-to-play sports management game.   | Read more »
Sentinel 4: Dark Star Adds New Campaign...
Sentinel 4: Dark Star Adds New Campaign and More Posted by Ellis Spice on January 27th, 2015 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Wheel & Deal Review
Wheel & Deal Review By Tre Lawrence on January 27th, 2015 Our Rating: :: SIMPLE FUNUniversal App - Designed for iPhone and iPad A simple arcade shooter that has a retro feel.   | Read more »
Join the NAVY in a Big New Update for WW...
Join the NAVY in a Big New Update for WW2: Sandbox. Strategy & Tactics Posted by Jessica Fisher on January 27th, 2015 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Earthworm Alchemy Review
Earthworm Alchemy Review By Campbell Bird on January 27th, 2015 Our Rating: :: FEED THE WORMUniversal App - Designed for iPhone and iPad Feed this funny looking worm and dodge bombs in this charming, free-to-play arcade game.   | Read more »
Graphic Novel App netwars – The Butterfl...
Graphic Novel App netwars – The Butterfly Attack has Received Some New Episodes Posted by Jessica Fisher on January 27th, 2015 [ permalink ] | Read more »

Price Scanner via MacPrices.net

New Good Management Suite Simplifies Enterpri...
Good Technology has announced the availability of the Good Management Suite, a comprehensive cross-platform solution for organizations getting started with mobile business initiatives. Built on the... Read more
15-inch 2.0GHz Retina MacBook Pro (refurbishe...
The Apple Store has Apple Certified Refurbished previous-generation 15″ 2.0GHz Retina MacBook Pros available for $1489 including free shipping plus Apple’s standard one-year warranty. Their price is... Read more
15-inch 2.5GHz Retina MacBook Pro on sale for...
Amazon has the 15″ 2.5GHz Retina MacBook Pro on sale for $2319.99 including free shipping. Their price is $180 off MSRP, and it’s the lowest price available for this model from any reseller. Read more
iPad Turns Five – The ”Book Mystique
Five years ago this week, the late Steve Jobs took the stage at an Apple special press event to unveil the first Apple iPad — a slab-shaped, hand-holdable device that was to shake the personal... Read more
Sale! 15-inch Retina MacBook Pros for up to $...
B&H Photo has the new 2014 15″ Retina MacBook Pros on sale for $150 off MSRP for a limited time. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.2GHz Retina MacBook Pro: $1889.99... Read more
Apple refurbished Mac minis for up to $150 of...
The Apple Store has restocked Apple Certified Refurbished 2014 Mac minis, with models available starting at $419. Apple’s one-year warranty is included with each mini, and shipping is free: - 1.4GHz... Read more
Apple Releases New Tranche Of OS Updates For...
Apple has released incremental bugfix and security updates for its most recent Mac and iOS versions. OS X Yosemite 10.10.2 Update Apple says this update includes the following improvements: Resolves... Read more
Samsung To Be Main Supplier Of A9 Chips For i...
Korea’s Maeil Business Newspaper reports that Samsung has beat out its chipmaking rivals, Taiwan’s Qualcomm and TSMC, as supplier of chipsets for the next generations of both its own Galaxy S6 and... Read more
Save up to $340 on iMacs with Apple Certified...
The Apple Store has Apple Certified Refurbished iMacs available for up to $340 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free. These are the best prices on... Read more
AppleCare Protection Plans on sale for up to...
B&H Photo has 3-Year AppleCare Warranties on sale for up to $105 off MSRP including free shipping plus NY sales tax only: - Mac Laptops 15″ and Above: $244 $105 off MSRP - Mac Laptops 13″ and... Read more

Jobs Board

*Apple* Solutions Consultant - Retail Sales...
As an ambassador of the Apple brand, the ASC is accountable for driving sales performance by: Connecting with customers. Discovering customers' needs and values. Showing Read more
*Apple* Solutions Consultant - Retail Sales...
As an ambassador of the Apple brand, the ASC is accountable for driving sales performance by: Connecting with customers. Discovering customers' needs and values. Showing Read more
*Apple* Tree Children's Center is hirin...
Apple Tree Learning Center is Hiring Preschool Teachers! Phoenix Childrens Academy is a national leader in the early childhood education industry and we are currently Read more
*Apple* Solutions Consultant - Retail Sales...
**Job Summary** As an Apple Solutions Consultant (ASC) you are the link between our customers and our products. Your role is to drive the Apple business in a retail Read more
*Apple* Solutions Consultant - Retail Sales...
As an ambassador of the Apple brand, the ASC is accountable for driving sales performance by: Connecting with customers. Discovering customers' needs and values. Showing Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.