TweetFollow Us on Twitter

Updating Navigation

Volume Number: 16 (2000)
Issue Number: 6
Column Tag: Navigation Services

Updating Navigation Services Sample Code

by Thurman Gillespy III, M.D.

On the Road to Carbon Compliance

Introduction

A recent project gave me an excuse to delve seriously into the Navigation Services (NavServices) SDK for the first time. The SDK includes three example projects (Sampler, StExample, and SimpleText) that illustrate the NavServices API. During routine debugging of my code, however, I discovered multiple "write-to-nil" bugs that had originated in the example projects. This article describes the steps you need to fix those errors and to update the projects to work with CodeWarrior Pro 5 and Universal Headers 3.3. For a pointer to the NavServices SDK, see the References section at the end of this article.

Sampler

Sampler is a small C program that demonstrates to use the NavServices API in a document-based application. It uses NavServices functions to elicit files from the user, save files, and prompt the user to save or discard changes to a document. It also shows how to use NavServices functions to let the user choose a folder, volume, or file-system object. Sampler is a very good place to start learning how to use NavServices. So let's make Sampler usable!

Update Access Paths

In the Access Paths panel of the Sampler.PPC Settings dialog box, remove the 'Shared Libraries' and 'Cincludes' paths from the User Paths list. They are not needed. Then change the System Paths to:

{Compiler}:MacOS Support:
{Compiler}:MSL:

Save the changes to this panel by clicking the Save button.

Implied Int No Longer Allowed

In Templates.c, there is an implied return value of type int to the main function that is no longer legal in C++. Change:

main()

to:

int main(void)

Runtime Library Changes

Change the MWCRuntime.lib library (which is no longer present) to MSL RuntimePPC.Lib.

Add a Header File

Universal Headers 3.3 include the new header file ControlDefinitions.h, which contains some constants previously defined in the file Controls.h. So add the following lines to the file Common.h:

#ifndef __CONTROLDEFINITIONS__
#include <ControlDefinitions.h>
#endif

NavCBRec Field Change

Somewhere between "then and now", the fields in the NavCBRec structure changed. In file.c and menu.c, there are a total of 10 NavCBRecPtr variables to update. Change:

callBackParms->eventData.event

to:

callBackParms->eventData.eventDataParms.event

Duplicate cfrg Resource

A 'cfrg' resource is defined in TemplatePPC.r. This definition is no longer needed because the CodeWarrior IDE now generates the correct resource. I simply commented out the definition in TemplatePPC.r.

/*
resource 'cfrg' (0) {
	{
	kPowerPC,
	kFullLib,
	kNoVersionNum,kNoVersionNum,
	0,0,
	kIsApp,kOnDiskFlat,kZeroOffset,kWholeFork,
	"Template"
	}
};
*/

AEGetDescData Write-to-nil Errors

AEGetDescData (defined in Common.c) is a utility function that extracts a DescType of type typeCode from the AEDesc. In Sampler, it is used to extract an FSSpec from the AEDesc. Listing 1 shows the original function.

Listing 1: Getting data from an AEDesc structure (before)

AEGetDescData

OSErr AEGetDescData(const AEDesc *desc, DescType *typeCode,
				void *dataBuffer, ByteCount maximumSize,
				ByteCount *actualSize)
{
	*typeCode = desc->descriptorType;
	Handle h = (Handle)desc->dataHandle;
	ByteCount dataSize = GetHandleSize(h);
	if (dataSize > maximumSize)
		*actualSize = maximumSize;
	else
		*actualSize = dataSize;
	BlockMoveData(*h, dataBuffer, *actualSize);
	return noErr;
}

The function is acceptable, except for a complete lack of any error checking (a common practice in developer example code). However, AEGetDescData is called 10 times with two NULL pointers (menus.c).

if ((theErr = AEGetDescData ( &resultDesc, NULL,
		&finalFSSpec, sizeof ( FSSpec ), NULL )) == noErr)...

This code fragment results in two writes to nil (typeCode and actualSize) and one read from nil (BlockMoveData). Bad form, indeed. For a fix, I simply check for the NULL parameters; I also added a few other error checks for good measure, as shown in Listing 2.

Listing 1: Getting data from an AEDesc structure (after)

AEGetDescData
OSErr AEGetDescData(const AEDesc *desc, DescType *typeCode,
				void *dataBuffer, ByteCount maximumSize,
				ByteCount *actualSize)
{
	Handle		h = NULL;
	ByteCount	dataSize = 0,
						bytesToCopy = 0;
	OSErr			err = -1;
	
	// check for invalid NULL handles or pointers
	if (desc == NULL || desc->dataHandle == NULL ||
			dataBuffer == NULL)
		return nilHandleErr;
	
	// get the size of the object, check for errors
	h = (Handle)desc->dataHandle;
	dataSize = GetHandleSize(h);
	err = MemError();
	if (err != noErr)
		return err;
	
	// determine how many bytes to copy
	if (dataSize > maximumSize)
		bytesToCopy = maximumSize;
	else
		bytesToCopy = dataSize;

	// copy object from the handle to the buffer
	BlockMoveData(*h, dataBuffer, bytesToCopy);

	// return type code and number of bytes copied,
	// if pointers are not NULL
	if (typeCode != NULL)
		*typeCode = desc->descriptorType;
	if (actualSize != NULL)
		*actualSize = bytesToCopy;
	
	return noErr;
}

AEGetNthDesc Write-to-nil Errors

In Sampler, AEGetNthDesc writes to nil 11 times (files.c, menus.c) because the fourth parameter, a pointer to an AEKeyword structure, is set to NULL.

AEGetNthDesc(&(theReply.selection), index, typeFSS, NULL,
						&resultDesc)

To correct this error, simply add an appropriate AEKeyword parameter.

AEKeyword  aekw; // not used
AEGetNthDesc(&(theReply.selection), index, typeFSS, &aekw,
						&resultDesc)

Sampler CFM68k

For the Sampler.68kCFM project, make the same changes to the access paths, then update the obsolete libraries to the correct versions.

MathLibCFM68k(4i/8d).Lib			==>		MathLibCFM68k (4i_8d).Lib
MSL C.CFM68kFar(4i/8d).Lib		==>		MSL C.CFM68kFa(4i_8d).Lib
MWCFM68kRuntime.Lib					==>		MSL MWCFM68kRuntime.Lib

StExample

The StExample project is a C++ example of using NavServices that is less complete than Sampler. The StExample project is also easier to update.

  • Update the User Paths as you did for Sampler.
  • Update the Navigation library to NavigationLib.
  • In HelloWorld.cp, the last parameter to StNavGetFile must be changed from long to (void *). Change:
StNavGetFile gf1( &err, &specs, &numspecs, &rdopen,
							&navreply, false, true, &rdevt, nil,
							nil, tlh, 0xaabbccdd);

to

UInt32	usrDat = 0xaabbccdd;
StNavGetFile  gf1( &err, &specs, &numspecs, &rdopen,
								&navreply, false, true, &rdevt, nil,
								nil, tlh, (void *)&usrDat );
  • There are two write-to-nil errors, both in StNavServices.cp. Change the NULL fourth parameter in the call to AEGetNthDesc to a valid AEKeyword pointer.

SimpleText

The SimpleText project uses the obsolete QuickDrawGX, and a dated MacIncludes.h header. I decided it wasn't worth the effort to update the project.

Checking the Result

To see the write-to-nil errors, drop into Macsbug and invoke the EBBE (Even Better Bus Error) dcmd.

EBBE on
EBBE is ON (using the value $68F168F1 with a task rate of
	#17 milliseconds)

Then run the unaltered Sampler application as delivered in the SDK. You should see one or more write-to-nil errors in every call to NavServices. Both QC and Spotlight (Onyx Technology) will also catch the errors.

The EBBE dcmd has detected that location $0000
	has been overwritten

After making the corrections described here, run this test again on the compiled example applications and on any of your code based on the SDK sample code. The write-to-nil errors should be eliminated.

References

Navigation Services SDK
<http://developer.apple.com/sdk/index.html>
Onyx Technology
<http://www.onyx-tech.com/>


Thurman Gillespy III is a radiologist at the Veterans Administration Puget Sound Health Care System in Seattle, Washington. He can be reached at tg3@u.washington.edu

 
AAPL
$104.94
Apple Inc.
+1.95
MSFT
$45.41
Microsoft Corpora
+1.03
GOOG
$546.88
Google Inc.
+14.17

MacTech Search:
Community Search:

Software Updates via MacUpdate

Art Text 2.4.8 - Create high quality hea...
Art Text is an OS X application for creating high quality textual graphics, headings, logos, icons, Web site elements, and buttons. Thanks to multi-layer support, creating complex graphics is no... Read more
Live Interior 3D Pro 2.9.6 - Powerful an...
Live Interior 3D Pro is a powerful yet very intuitive interior designing application. View Video Tutorials It has every feature of Live Interior 3D Standard, plus some exclusive ones: Create multi... Read more
The Hit List 1.1.7 - Advanced reminder a...
The Hit List manages the daily chaos of your modern life. It's easy to learn - it's as easy as making lists. And it's powerful enough to let you plan, then forget, then act when the time is right.... Read more
jAlbum Pro 12.2.4 - Organize your digita...
jAlbum Pro has all the features you love in jAlbum, but comes with a commercial license. With jAlbum, you can create gorgeous custom photo galleries for the Web without writing a line of code!... Read more
jAlbum 12.2.4 - Create custom photo gall...
With jAlbum, you can create gorgeous custom photo galleries for the Web without writing a line of code! Beginner-friendly, with pro results Simply drag and drop photos into groups, choose a design... Read more
ExpanDrive 4.1.7 - Access remote files o...
ExpanDrive builds cloud storage in every application, acts just like a USB drive plugged into your Mac. With ExpanDrive, you can securely access any remote file server directly from the Finder or... Read more
OmniOutliner Pro 4.1.3 - Pro version of...
OmniOutliner Pro is a flexible program for creating, collecting, and organizing information. Give your creativity a kick start by using an application that's actually designed to help you think. It'... Read more
Evernote 5.6.2 - Create searchable notes...
Evernote allows you to easily capture information in any environment using whatever device or platform you find most convenient, and makes this information accessible and searchable at anytime, from... Read more
OmniOutliner 4.1.3 - Organize your ideas...
OmniOutliner is a flexible program for creating, collecting, and organizing information. Give your creativity a kick start by using an application that's actually designed to help you think. It's... Read more
BBEdit 11.0 - Powerful text and HTML edi...
BBEdit is the leading professional HTML and text editor for the Mac. Specifically crafted in response to the needs of Web authors and software developers, this award-winning product provides a... Read more

Latest Forum Discussions

See All

Puzzle to the Center of the Earth Review
Puzzle to the Center of the Earth Review By Campbell Bird on October 23rd, 2014 Our Rating: :: SPELUNKING PUZZLESUniversal App - Designed for iPhone and iPad Do some puzzles to make some platforms in this smart and fun free-to-play... | Read more »
Sleep Attack TD Review
Sleep Attack TD Review By Jennifer Allen on October 23rd, 2014 Our Rating: :: A TRUE TWISTUniversal App - Designed for iPhone and iPad Sleep Attack TD is a tower defense game with a difference – you can rotate the layout – and it’s... | Read more »
Earn Your Master Camper Badge in Camp Po...
Earn Your Master Camper Badge in Camp Pokemon Posted by Jessica Fisher on October 23rd, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Garruk Gets His Revenge in a New Magic 2...
Garruk Gets His Revenge in a New Magic 2015 Expansion, Coming This November Posted by Jessica Fisher on October 23rd, 2014 [ permalink ] | Read more »
Sentinels of the Multiverse Review
Sentinels of the Multiverse Review By Rob Thomas on October 23rd, 2014 Our Rating: :: SENTINELS ASSEMBLEiPad Only App - Designed for the iPad Greater Than Games’ tabletop classic, Sentinels of the Multiverse swoops in to save the... | Read more »
Build Your Own Fantasy Football Dynasty...
Build Your Own Fantasy Football Dynasty with Draft Day Posted by Jessica Fisher on October 23rd, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Cars: Fast as Lightning – Tips, Tricks,...
Hey there, Stickers: Want to know all about how impressed we were with Radiator Springs? Check out our Cars: Fast as Lightning review! Cars: Fast as Lightning is a cute and fun app that combines racing and town-building with the charisma and... | Read more »
Jam Messenger Review
Jam Messenger Review By Jennifer Allen on October 23rd, 2014 Our Rating: :: SIMPLE MESSAGINGiPhone App - Designed for the iPhone, compatible with the iPad Want a very quick way to send push-based messages? Jam Messenger is basic... | Read more »
Felllice (Games)
Felllice 1.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0 (iTunes) Description: EXCLUSIVE PRICE DROP! 50% OFF FOR A LIMITED TIME! EAT EAT EAT AND GROW ! | Read more »
The Arrow Game: by Grazie Media (Games)
The Arrow Game: by Grazie Media 1.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0 (iTunes) Description: Guide a flying arrow through skyscrapers and city streets to hit a distant target. Experience an endless... | Read more »

Price Scanner via MacPrices.net

Save up to $125 on Retina MacBook Pros
B&H Photo has the new 2014 13″ and 15″ Retina MacBook Pros on sale for up to $125 off MSRP. Shipping is free, and B&H charges NY sales tax only. They’ll also include free copies of Parallels... Read more
Apple refurbished Time Capsules available sta...
The Apple Store has certified refurbished Time Capsules available for up to $60 off MSRP. Apple’s one-year warranty is included with each Time Capsule, and shipping is free: - 2TB Time Capsule: $255... Read more
Textilus New Word, Notes and PDF Processor fo...
Textilus is new word-crunching, notes, and PDF processor designed exclusively for the iPad. I haven’t had time to thoroughly check it out yet, but it looks great and early reviews are positive.... Read more
WD My Passport Pro Bus-Powered Thunderbolt RA...
WD’s My Passport Pro RAID solution is powered by an integrated Thunderbolt cable for true portability and speeds as high as 233 MB/s. HighlightsOverviewSpecifications Transfer, Back Up And Edit In... Read more
Save with Best Buy’s College Student Deals
Take an additional $50 off all MacBooks and iMacs at Best Buy Online with their College Students Deals Savings, valid through November 1st. Anyone with a valid .EDU email address can take advantage... Read more
iPad Air 2 & iPad mini 3 Best Tablets Yet...
The new iPads turned out to be pretty much everything I’d been hoping for and more than I’d expected.”More” particularly in terms of a drinking-from-a-firehose choice of models and configurations,... Read more
Drafts 4 Reinvents iOS Productivity App
N Richland Hills, Texas based Agile Tortoise has announced the release of Drafts 4 for iPhone and iPad. Drafts is a quick capture note taking app with flexible output actions. Drafts 4 scales from... Read more
AT&T accepting preorders for new iPads fo...
AT&T Wireless is accepting preorders for the new iPad Air 2 and iPad mini 3, cellular models, for $100 off MSRP with a 2-year service agreement: - 16GB iPad Air 2 WiFi + Cellular: $529.99 - 64GB... Read more
Apple offering refurbished Mac Pros for up to...
The Apple Store is offering Apple Certified Refurbished 2013 Mac Pros for up to $600 off the cost of new models. An Apple one-year warranty is included with each Mac Pro, and shipping is free. The... Read more
Select MacBook Airs $100 off MSRP, free shipp...
B&H Photo has 2014 a couple of MacBook Airs on sale for $100 off MSRP. Shipping is free, and B&H charges NY sales tax only. They also include free copies of Parallels Desktop and LoJack for... Read more

Jobs Board

Senior Event Manager, *Apple* Retail Market...
…This senior level position is responsible for leading and imagining the Apple Retail Team's global event strategy. Delivering an overarching brand story; in-store, Read more
*Apple* Solutions Consultant (ASC) - Apple (...
**Job Summary** The ASC is an Apple employee who serves as an Apple brand ambassador and influencer in a Reseller's store. The ASC's role is to grow Apple Read more
Project Manager / Business Analyst, WW *Appl...
…a senior project manager / business analyst to work within our Worldwide Apple Fulfillment Operations and the Business Process Re-engineering team. This role will work Read more
*Apple* Retail - Multiple Positions (US) - A...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Position Opening at *Apple* - Apple (United...
…customers purchase our products, you're the one who helps them get more out of their new Apple technology. Your day in the Apple Store is filled with a range of Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.