TweetFollow Us on Twitter

May 93 - Testing Custom Resources for Errors

Testing Custom Resources for Errors

Steve Lavagnino & Laurie Seaton

The use of custom resources provides unique ways of handling information on the Macintosh. It also poses some interesting problems. One such problem is how to automate testing of custom resources for spelling errors, validity, and adherence to user interface guidelines.

Our product, SoftPolish, was originally developed to automate the testing of standard user interface resources. We included hundreds of tests on almost all the standard resources. However, we knew the importance of anticipating demands from our user community; especially from our target market, detail-oriented software professionals. They would discover both new resources to test and new tests to make on existing resources. To keep these users happy, we needed to enable SoftPolish to check any custom resource. Simultaneously we wanted to provide an easy way to update our product to test new resource types and to enhance existing tests. The following describes how we achieved those goals.

Customizing SoftPolish™ to Handle Custom Resource Types

SoftPolish Code Modules

SoftPolish can be customized through the use of external code modules, which supplement or replace built-in resource tests. As SoftPolish scans a target file, target resources are loaded into memory and examined. SoftPolish checks its own resource fork to see if an external code module exists for the target resource type.

If a match occurs, a parameter block is constructed and passed to the external code module. The parameter block includes the address in memory of the target resource, the resource tests which were specified in the user's Scan dialog (See Figure 1. SoftPolish Scan Dialog), and fields that allow an external code module to request services from SoftPolish such as spell-checking or error-reporting.

What to Test

The general programming style for code modules is to have them first check the parameter block to see which tests are currently requested. Not all tests may be chosen, or selected tests may not be relevant to the resource the module is checking. In Listing 1, the routine STR checks to see if the user has chosen UserInterface, Spelling, or listStrings options. After determining that one of these options has been chosen, STR extracts the string from the resource. (For a custom resource it may well be a more complicated routine that extracts strings or other information from within the resource.)

Communicating with SoftPolish

After the string is extracted in Listing 1, a series of assignments sets fields in the parameter block. The first assignment sets the pleasedo field to msgDoString. The pleasedo field is defined by using a set of predefined constants or parameters located in the header files of the example source code. These predefined constants all start with 'msg' and each constant correlates to an action in SoftPolish. Before a callback is made, the code module must set the pleasedo field to an 'msg' constant which specifies the desired action. Pleasedo is an important field in the parameter block because it tells SoftPolish what to do when a callback is made. Actions that SoftPolish can make via callbacks are: testing to determine if a referenced resource is of the proper size, testing to see if a string can be displayed within a specified rectangle, spell-checking strings, replacing strings, writing the changed strings to the resource, displaying the progress of checks to SoftPolish, and reporting error messages to the SoftPolish log file. In Listing 1, the predefined constant msgDoString tells SoftPolish it is receiving a string to test.

Depending on what the desired action is, additional data about the resource is usually required before the callback can be made. For instance, msgDoString in Listing 1 requires several other assignments: a pointer to the text you want checked is put in the field textPtr, the length of the text is put into textLen, and then options (such as checks for capitalization and quote checking) are set with booleans in fields arg.aDoString.bePicky and arg.aDoString.initialCaps. The last assignment to arg.aDoString.spellit utilizes one of the user options already in the parameter block to establish whether a callback string should be checked.

Now that all the parameter block fields are set, the code module makes a callback to the SoftPolish application by calling the procedure DoCallBack. DoCallBack takes the callbackaddress field in the parameter block as its argument. Even if a module is doing its own testing of resources, it uses callbacks to report errors to the standard SoftPolish log file.

Naming the Code Module

Once the routine for handling the resource is written, you need to give the code resource a name and type. Each code module must have a resource of type 'SPCM' (SoftPolish Code Module) or 'SPSM' (Softpolish Supplemental Module). The resource name of the code module indicates what type of resource the code module accepts. For example, an 'SPCM' resource named 'STR ' is, to SoftPolish, a code module that handles 'STR ' resources. If you add an 'SPCM' module for a type SoftPolish already tests, your code module will replace the internal SoftPolish handling of that resource type. Alternatively if you add an 'SPSM' code module, your code module supplements the checking done by SoftPolish or an 'SPCM' module for that resource type.

Where to get more information

For more details on other callback routines, check the FrameWorks source code disk or download our technical note on code modules from Applelink or America Online. The note contains examples of code modules in C, Pascal, and FORTRAN. It also provides header files with definitions of ModuleParms, 'msg' constants, and other records that need to be included in your code module.

Listing 1

STR(ModuleParms *MP) { 
Ptr         sptr; 
Str255      str;
/* Determine what to test */
if (MP->Req->doUserInterface || MP->Req->doSpelling 
        || MP->Req->listStrings) {    
    /* Extract the string out of the resource. */
    sptr = *(MP->thdl); 
    memcpy(str,sptr,256);               
    /* Set up the callback for SoftPolish to check the string */
    MP->pleasedo = msgDoString;
    MP->textPtr = &str+1;
    MP->textLen = str[0];
    MP->resItem = -4;
    MP->arg.aDoString.bePicky = true;  
    MP->arg.aDoString.initialCaps = false;       
    MP->arg.aDoString.spellit = MP->Req->doStrings;
    DoCallback(MP->callbackaddress);         
    /* Make changes to the string if necessary */
    if (MP->correctString[0]>0) {     
        SetHandleSize(MP->thdl,MP->correctString[0]+1);
        sptr = *(MP->thdl);      
        memcpy(sptr,MP->correctString,MP->correctString[0]+1);
        MP->pleasedo = msgWriteChangedResource;
        DoCallback(MP->callbackaddress);         
        } 
    }
/* If requested, check the size of the resource */ 
if (MP->Req->doValidity && MP->Req->doSizeCheck) {
    sptr = *(MP->thdl);  
    memcpy(str,sptr,256);               
    MP->pleasedo = msgCheckResourceSize;
    MP->arg.aCheckResourceSize.correctSize = str[0]+1;
    DoCallback(MP->callbackaddress);     
    } 
}
 

Community Search:
MacTech Search:

Software Updates via MacUpdate

A Better Finder Rename 10.00b1 - File, p...
A Better Finder Rename is the most complete renaming solution available on the market today. That's why, since 1996, tens of thousands of hobbyists, professionals and businesses depend on A Better... Read more
CrossOver 14.1.6 - Run Windows apps on y...
CrossOver can get your Windows productivity applications and PC games up and running on your Mac quickly and easily. CrossOver runs the Windows software that you need on Mac at home, in the office,... Read more
Printopia 2.1.14 - Share Mac printers wi...
Run Printopia on your Mac to share its printers to any capable iPhone, iPad or iPod Touch. Printopia will also add virtual printers, allowing you to save print-outs to your Mac and send to apps.... Read more
Google Drive 1.24 - File backup and shar...
Google Drive is a place where you can create, share, collaborate, and keep all of your stuff. Whether you're working with a friend on a joint research project, planning a wedding with your fiancé, or... Read more
Chromium 45.0.2454.85 - Fast and stable...
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. Version 45.0.2454.85: Note: Does not contain the "... Read more
OmniFocus 2.2.5 - GTD task manager with...
OmniFocus helps you manage your tasks the way that you want, freeing you to focus your attention on the things that matter to you most. Capturing tasks and ideas is always a keyboard shortcut away in... Read more
iFFmpeg 5.7.1 - Convert multimedia files...
iFFmpeg is a graphical front-end for FFmpeg, a command-line tool used to convert multimedia files between formats. The command line instructions can be very hard to master/understand, so iFFmpeg does... Read more
VOX 2.6 - Music player that supports man...
VOX is a beautiful music player that supports many filetypes. The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all... Read more
Box Sync 4.0.6567 - Online synchronizati...
Box Sync gives you a hard-drive in the Cloud for online storage. Note: You must first sign up to use Box. What if the files you need are on your laptop -- but you're on the road with your iPhone? No... Read more
Carbon Copy Cloner 4.1.4 - Easy-to-use b...
Carbon Copy Cloner backups are better than ordinary backups. Suppose the unthinkable happens while you're under deadline to finish a project: your Mac is unresponsive and all you hear is an ominous,... Read more

You Can Play Madfinger Games' Unkil...
Madfinger Games - probably best known for the Dead Trigger series - has officially launched their newest zombie shooter (that isn't called Dead Trigger), named Unkilled. [Read more] | Read more »
KORG iELECTRIBE for iPhone (Music)
KORG iELECTRIBE for iPhone 1.0.1 Device: iOS iPhone Category: Music Price: $9.99, Version: 1.0.1 (iTunes) Description: ** 50% OFF Special Launch Sale - For a Limited Time **The ELECTRIBE reborn in an even smaller form A full-fledged... | Read more »
I am Bread (Games)
I am Bread 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: ‘I am Bread’ is the latest quirky adventure from the creators of 'Surgeon Simulator', Bossa Studios. This isn't the best thing... | Read more »
Rock(s) Rider - HD Edition (Games)
Rock(s) Rider - HD Edition 1.0.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.0 (iTunes) Description: *** PLEASE NOTE: Compatible with iPhone 4s, iPad 2, iPad mini, iPod touch (5th generation) or newer *** Do you... | Read more »
Rebuild 3: Gangs of Deadsville (Games)
Rebuild 3: Gangs of Deadsville 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: It's been a few years since the zombpocalypse turned the world's cities into graveyards and sent the few... | Read more »
Power Ping Pong (Games)
Power Ping Pong 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Do you wield your bat with zen-like focus or do your balls of fury give you a killer spin? Table tennis goes mobile with a... | Read more »
Z.O.N.A Project X (Games)
Z.O.N.A Project X 1.00 Device: iOS Universal Category: Games Price: $1.99, Version: 1.00 (iTunes) Description: Z.O.N.A Project X - shooter in the post-apocalyptic world. | Read more »
Trick Shot (Games)
Trick Shot 1.0.6 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.6 (iTunes) Description: A game where all you have to do is throw a ball into a box, simple? Trick Shot is a minimalist physics puzzler with 90 levels... | Read more »
VoxelCity (Games)
VoxelCity 1.0.2 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.2 (iTunes) Description: Looking for a new city builder? Tired of social media anti-games with no strategy? Look no further! NO IAP EVER! VoxelCity is a... | Read more »
Goat Simulator MMO Simulator (Games)
Goat Simulator MMO Simulator 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: ** IMPORTANT - SUPPORTED DEVICESiPhone 4S, iPad 2, iPod Touch 5 or better.** Coffee Stain Studios brings next-gen... | Read more »

Price Scanner via MacPrices.net

Near-Office Input Functionality Virtually Any...
Today Logitech introduced the Logitech K380 Multi-Device Bluetooth Keyboard and the Logitech M535 Bluetooth Mouse, giving users the freedom to work on any device, most anywhere. According to... Read more
College Student Deals: Additional $100 off Ma...
Take an additional $100 off all MacBooks and iMacs at Best Buy Online with their College Students Deals Savings, valid through September 4, 2015. Anyone with a valid .EDU email address can take... Read more
Will You Buy An iPad Pro? – The ‘Book Mystiqu...
It looks like we may not have to wait much longer to see what finally materializes as a new, larger-panel iPad (Pro/Plus?) Usually reliable Apple product prognosticator KGI Securities analyst Ming-... Read more
eFileCabinet Announces SMB Document Managemen...
Electronic document management (EDM) eFileCabinet, Inc., a hosted solutions provider for small to medium businesses, has announced that its SecureDrawer and eFileCabinet Online services will be... Read more
WaterField Designs Unveils American-Made, All...
San Francisco’s WaterField Designs today unveiled their all-leather Cozmo 2.0 — an elegant attach laptop bag with carefully-designed features to suit any business environment. The Cozmo 2.0 is... Read more
Apple’s 2015 Back to School promotion: Free B...
Purchase a new Mac or iPad at The Apple Store for Education and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free,... Read more
128GB MacBook Airs on sale for $100 off MSRP,...
B&H Photo has 11″ & 13″ MacBook Airs with 128GB SSDs on sale for $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 11″ 1.6GHz/128GB MacBook Air: $799.99, $100 off MSRP... Read more
13-inch 2.5GHz MacBook Pro (refurbished) avai...
The Apple Store has Apple Certified Refurbished 13″ 2.5GHz MacBook Pros available for $829, or $270 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 13″ 2.... Read more
27-inch 3.2GHz iMac on sale for $1679, save $...
B&H Photo has the 27″ 3.2GHz iMac on sale for $1679.99 including free shipping plus NY sales tax only. Their price is $120 off MSRP. Read more
Apple and Cisco Partner to Deliver Fast-Lane...
Apple and Cisco have announced a partnership to create a “fast lane” for iOS business users by optimizing Cisco networks for iOS devices and apps. The alliance integrates iPhone with Cisco enterprise... Read more

Jobs Board

*Apple* Desktop Analyst - KDS Staffing (Unit...
…field and consistent professional recruiting achievement. Job Description: Title: Apple Desktop AnalystPosition Type: Full-time PermanentLocation: White Plains, NYHot Read more
Simply Mac *Apple* Specialist- Repair Techn...
Simply Mac is the greatest premier retailer of Apple products expertise in North America. We're looking for dedicated individuals to provide personalized service and Read more
Simply Mac *Apple* Specialist- Service Repa...
Simply Mac is the greatest premier retailer of Apple products expertise in North America. We're looking for dedicated individuals to provide personalized service and Read more
*Apple* Desktop Analyst - KDS Staffing (Unit...
…field and consistent professional recruiting achievement. Job Description: Title: Apple Desktop AnalystPosition Type: Full-time PermanentLocation: White Plains, NYHot Read more
Simply Mac- *Apple* Specialist- Store Manag...
Simply Mac is the largest premier retailer for Apple products and solutions. We're looking for dedicated individuals with a passion to simplify and enhance the Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.