TweetFollow Us on Twitter

Aug 97 - Tips

Volume Number: 13 (1997)
Issue Number: 8
Column Tag: Tips & Tidbits

Tips & Tidbits

by Steve Sisak

Protect Against Dereferencing nil

Dereferencing nil is probably the most common cause of crashes, bus errors, type 11 errors and suchlike. It's very easy to write code like this:

char *myPtr = GetNewCharPtr(256); // allocate a 255-byte string
// put something into your char *.
strcpy(myPtr, "This is a string");
// oops! What happens of the call to GetNewCharPtr() returned
// nil? Your program dies at strcpy! Or--worse--dies 50 lines later!

Most of these errors can be avoided by checking pointers before using them. The following handy routine is something you can us at the beginning of every function to make sure that the pointer parameters passed to the routine are non-nil:

/*-------------------------------------------------------------------------

This handy routine allows you to check several pointer params for nil with one call. The first parameter to this routine must be the number of params you want to check. The remaining params are the params to check, as many as you like.

---------------------------------------------------------------------------*/
void CheckNilParams(long numParams,...)
{
  va_list argList;
  void *next;
  long i;
    
  // walk through each param, up to numParams
  va_start(argList, numParams);
  for (i = 1; i <= numParams; i++)
  {
    // get the next param
    next = va_arg(argList, void *);
    // assert if the param is nul. If you are using c++, you could
    // throw an exception here, or do whatever you like. The value of i
    // in this loop will tell you which param was nil
    assert(next != nil);
  }
  // we're done with our param list
  va_end(argList);
}

Here's how you can use it:

// This function has several pointer params passed to it
void PointerFunc(  char *cptr1, void *anotherPtr, 
                WindowPtr *wptr, int notAPtr)
{
    // check each param to make sure its not nil. If any of the above
    // params are nil, the program will assert
    CheckNilParams(3, cptr1, anotherPtr, wptr);
    // now you can safely dereference the pointer params!
}

Since this adds a fair amount of overhead to your code, you'll usually want to use it only in the debug version of your program. It will save you a lot of time in MacsBug!

Vinay Prabhakar
Gray Owl Software


Automatically Generating an Owner Resource

When I was working on my application, I wanted to generate different owner resources depending on some build definitions. I wanted to do this using the rez compiler included with CodeWarrior. You could also do this within ResEdit or Resorcerer, but I like automatic generation far better. Especially if you need to do builds quite often.

Normally your owner resource is of resource type 'the signature', but there is no special definition in one of the .r files located in the interfaces folder. OK, you can use the 'data' type, but then you need to do some serious ascii->hexadecimal conversion.

What I did was the following: create a new type of resource which only contains a pascal string. Of course the type must be the same as your signature (also known as the creator) code.

For example, when your application uses '????' as its signature (don't forget to register your signature along with the filetypes you use by visiting Apple's website at http://gemma.apple.com/dev/cftype), you can use the following in your own .r file:

type '????'
{
  pstring;
};

resource '????' (0, "Owner Resource")
{
#ifdef BUILD_DEMO
  "Application Demo © 1997 The Software Publishers, Inc"
#else
  "Application © 1997 The Software Publishers, Inc"
#endif
};

Note that it is customary to use resource id 0 for your owner resource. Of course you can also define other resource types if you need them for your own data structures you story in the resource fork. You can see some useful examples in the SysTypes.r and Types.r files. It sure beats entering some hexadecimal codes in your text editor!

If you still want to use ResEdit or another editor, you can also consider writing your own resource templates. See chapter 7 in the book "ResEdit Reference, For ResEdit version 2.1" with ISBN 0-201-57767-4 for writing your own resource templates.

Frank Manshande
frankm@and.nl

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

The beginner's guide to Warbits
Warbits is a turn-based strategy that's clearly inspired by Nintendo's Advance Wars series. Since turn-based strategy games can be kind of tricky to dive into, see below for a few tips to help you in the beginning. Positioning is crucial [Read... | Read more »
How to upgrade your character in Spellsp...
So you’ve mastered the basics of Spellspire. By which I mean you’ve realised it’s all about spelling things in a spire. What next? Well you’re going to need to figure out how to toughen up your character. It’s all well and good being able to spell... | Read more »
5 slither.io mash-ups we'd love to...
If there's one thing that slither.io has proved, it's that the addictive gameplay of Agar.io can be transplanted onto basically anything and it will still be good fun. It wouldn't be surprising if we saw other developers jumping on the bandwagon,... | Read more »
How to navigate the terrain in Sky Charm...
Sky Charms is a whimsical match-'em up adventure that uses creative level design to really ramp up the difficulty. [Read more] | Read more »
Victorious Knight (Games)
Victorious Knight 1.3 Device: iOS Universal Category: Games Price: $1.99, Version: 1.3 (iTunes) Description: New challenges awaits you! Experience fresh RPG experience with a unique combat mechanic, packed with high quality 3D... | Read more »
Agent Gumball - Roguelike Spy Game (Gam...
Agent Gumball - Roguelike Spy Game 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Someone’s been spying on Gumball. What the what?! Two can play at that game! GO UNDERCOVERSneak past enemy... | Read more »
Runaway Toad (Games)
Runaway Toad 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: It ain’t easy bein’ green! Tap, hold, and swipe to help Toad hop to safety in this gorgeous new action game from the creators of... | Read more »
PsyCard (Games)
PsyCard 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: From the makers och Card City Nights, Progress To 100 and Ittle Dew PSYCARD is a minesweeper-like game set in a cozy cyberpunk... | Read more »
Sago Mini Robot Party (Education)
Sago Mini Robot Party 1.0 Device: iOS Universal Category: Education Price: $2.99, Version: 1.0 (iTunes) Description: -- Children's Technology Review Editor's Choice -- | Read more »
How to get a high score in every level o...
Sky Charms is an adorable match three puzzler that provides a decent challenge thanks to its creative level design. It regularly presents something new, forcing you to think on your feet. [Read more] | Read more »

Price Scanner via MacPrices.net

Apple restocks Certified Refurbished Mac mini...
Apple has restocked 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 Mac mini: $419 $... Read more
15-inch 2.2GHz Retina MacBook Pro on sale for...
Amazon.com has the 15″ 2.2GHz Retina MacBook Pro on sale for $1699.99 including free shipping. Their price is $300 off MSRP, and it’s the lowest price available for this model from any reseller (and... Read more
Apple Beats Microsoft at Own Game; Amazon Pri...
First quarter seasonality combined with an overall disinterested customer base led to an annual decline of 14.7% in worldwide tablet shipments during the first quarter of 2016 (1Q16). Worldwide... Read more
Tablets Had Worst Quarter Since 2012, says St...
The global tablet market began 2016 just as 2015 left off, down. Tablet shipments fell 10% to 46.5 million units during the Q1 2016, according to the new “Preliminary Global Tablet Shipments and... Read more
Clearance 13-inch MacBook Airs, Apple refurbi...
Apple recently dropped prices on certified refurbished 2015 13″ MacBook Airs with 4GB of RAM with models now available starting at $759. An Apple one-year warranty is included with each MacBook, and... Read more
Clearance 12-inch Retina MacBooks, Apple refu...
Apple has dropped prices on Certified Refurbished 2015 12″ Retina MacBooks with models now available starting at $929. Apple will include a standard one-year warranty with each MacBook, and shipping... Read more
Aleratec Releases Mac Software Upgrade for 1...
California based Aleratec Inc., designer, developer and manufacturer of Portable Device Management (PDM) charge/sync products for mobile devices and professional-grade duplicators for hard disk... Read more
Sale! Amazon offers 27-inch iMac, 13-inch 2.9...
Amazon has the 27″ 3.2GHz 5K iMac and the 13″ 3.9GHz Retina MacBook Pro on sale for $300 off MSRP, each including free shipping, for a limited time: - 27″ 3.2GHz/1TB HD 5K iMac (model MK462LL/A): $... Read more
Apple refurbished 13-inch Retina MacBook Pros...
Apple has Certified Refurbished 13″ Retina MacBook Pros available for up to $270 off the cost of new models. An Apple one-year warranty is included with each model, and shipping is free: - 13″ 2.7GHz... Read more
13-inch 2.7GHz/128GB Retina MacBook Pro on sa...
Take $200 off MSRP on the price of a new 13″ 2.7GHz/128GB Retina MacBook Pro (model MF839LL/A) at Amazon. Shipping is free: - 13″ 2.7GHz/128GB Retina MacBook Pro: $1099.99 $200 off MSRP Act now if... Read more

Jobs Board

Restaurant Manager (Neighborhood Captain) - A...
…in every aspect of daily operation. WHY YOU'LL LIKE IT: You'll be the Big Apple . You'll solve problems. You'll get to show your ability to handle the stress and Read more
Automotive Sales Consultant - Apple Ford Linc...
…you. The best candidates are smart, technologically savvy and are customer focused. Apple Ford Lincoln Apple Valley is different, because: $30,000 annual salary Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Solutions Consultant - Apple (United...
# Apple Solutions Consultant Job Number: 48260200 Phoenix, Arizona, United States Posted: Apr. 22, 2016 Weekly Hours: 40.00 **Job Summary** As an Apple Solutions Read more
Restaurant Manager (Neighborhood Captain) - A...
…in every aspect of daily operation. WHY YOU'LL LIKE IT: You'll be the Big Apple . You'll solve problems. You'll get to show your ability to handle the stress and Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.