TweetFollow Us on Twitter

May 96 Tips
Volume Number:12
Issue Number:5
Column Tag:Tips & Tidbits

Tips & Tidbits

By Steve Sisak

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

Invoking Handlers in Scripts, by Name

This is completely undocumented, as far as I know, but it may help. Suppose you have a script application containing a function:

on DoSomething(param1,param2)
 return param1+param2
end DoSomething

From C, you just have to send the script application an Apple event like this one:

CLASS: ascr

type: psbr

direct object: "----" "LIST"

(the list of AEDescs of parameters to pass to the script function)

additional parameter: "snam" "TEXT"

containing the name of the function to call (in our example: “DoSomething”)

et voilà.

This method allows to write “clean” scripts, using more memorable handler names, not using the «CLASStype» syntax.

Pierre-Loic Raynaud

[This event is called “Subroutine Call” and is described in more detail in Chapter 10 of the Apple Event Registry, “The AppleScript Suite”. On the Developer Mailing Reference Library CD, the pdf file is named “AppleScript Suite”, and the information is on pdf page 5 (paper page 7). - jk]

Swapping Bytes in a High Level Language,
the Saga Continues!

You have probably been swamped with everyone’s comments regarding the “Anti-Tip of the Month” that appeared in MacTech Magazine 11.10 (October 1995).

Greg Poole had the right idea when he submitted his tip about byte-swapping. You can tweak code until your fingers fall off, but often the best way to make something faster is by finding a better way of doing the same thing.

I have attached two files to this message: ByteSwap.c & ByteSwap.h. In a nutshell, we do our swapping as follows:

ByteSwap.h
#define SwapShort(myUnsignedShort)  \
 ((myUnsignedShort)>>8)|((myUnsignedShort)<<8)

In use:

{
    unsigned short someValue = 0x3210;
    someValue = SwapShort(someValue);
}

We quite simply move the hi-byte right, and the lo-byte left, then OR them back together.


ByteSwap.c
#include "byteswap.h"

unsigned long TransposeLong(unsigned long value)
{
  unsigned long   returnValue;
  ((unsigned char *) &returnValue)[3] = 
 ((unsigned char *) &value)[0];
  ((unsigned char *) &returnValue)[2] = 
 ((unsigned char *) &value)[1];
  ((unsigned char *) &returnValue)[1] = 
 ((unsigned char *) &value)[2];
  ((unsigned char *) &returnValue)[0] = 
 ((unsigned char *) &value)[3];
  return returnValue;
}

David Most

The Technical Editor Responds

There are quite a few methods available for byte swapping, but which algorithm is the best depends a great deal on the compiler and processor you are using. For instance, the PowerPC (and many other processors) have instructions specifically for this purpose. Unfortunately, since the C and C++ languages have not kept up with current processors (C is basically processor-independent PDP-11 assembly language), it is our job to trick the compiler into generating the correct code.

Some compilers provide directives for this purpose. For instance, if you are using CodeWarrior on a PowerPC you can just say:

inline long SwapLong(long val)
{
    return __XXXXX(val);  //  <<<need intrinsic for load byte-swapped>>>
}

You may notice that I’m using C++ inline functions here instead of C #defines. To quote the “Apple Unofficial C++ Style Guide” (develop 2, p. 209): “One of the most powerful features of the C++ language is the C preprocessor. Don’t use it.” Inline functions are not only more readable than preprocessor macros, but, because they limit side effects, allow the compiler more latitude in optimizing your code.

Barring that, we need to find something that we can say in C that can get bytes swapped without generating egregiously bad code. David’s solution is probably a good one for shorts because it is a pure mathematical expression, allowing the compiler to optimize it in any way it chooses. For longs, his solution is one of the safest, if you know nothing about the compiler and/or processor you’re building for. (I would, however, convert both to inline functions.)

However, if you do know something about your processor, you can do better. In the case of the PPC, you really want to get your compiler to emit a load byte-swapped instruction. On a 680x0, you have a little latitude. One trick that comes to mind is that the 680x0 has predecrement and postincrement addressing modes. This means that:

foo = *p++ and foo = *--p

are fast and (1 instruction)

foo = *++p and foo = *p--

are slow (3 instructions). Therefore we can swap a long on a 680x0 with:

inline long SwapLong(long val)
{
    Byte* p = ((Byte*) val)[4];  // 680x0’s are big-endian

 long val = *--p;
 val  = (val << 8) | *--p;
 val  = (val << 8) | *--p;
  return (val << 8) | *--p;
}

The PowerPC has only post-increment instructions, so this will generate lousy code. (If someone would like to time a bunch of approaches, I’d be glad to publish the results.)

I must say that the bottom line is: this is all a bunch of work that would be completely unnecessary if the C language had kept up with reality. Here’s my proposal to the ANSI committee:

Make littleendian and bigendian storage classifiers like const and volatile. Then I could just type:

typedef struct Foo
{
    littleendian long    bar;
    bigendian short      baz;
} Foo;

void blah(Foo* foo)
{
    long  bar = foo->bar;
    short baz = foo->baz;

    ...
}

...and let the compiler deal with it while I spend my time writing code which does real work.

- sgs

Fix For Tip Of The Month, January 1996

I’m sending this short note just to point out that, although Greg Poole is right in writing that a file or directory can be moved by the CatMove function only if both the source and destination are on the same volume, he seems to forget that every Macintosh volume, not just the System volume, has a Trash folder.

Thus, if we pass to the FindFolder function the volume reference number of the file to be deleted instead of the constant kOnSystemDisk, we will be able to find the directory ID of the local Trash.

Line #44 of “FSpTrashFile.c” source file should be changed from:

theErr = FindFolder( kOnSystemDisk, kTrashFolderType, 
  kDontCreateFolder, &vRefNum, &dirID );

to:

theErr = FindFolder( (*theFile).vRefNum, kTrashFolderType, 
  kDontCreateFolder, &vRefNum, &dirID );

Live Long and Prosper!

Luigi Belverato

 
AAPL
$519.01
Apple Inc.
+1.05
MSFT
$40.40
Microsoft Corpora
+0.65
GOOG
$556.54
Google Inc.
+20.10

MacTech Search:
Community Search:

Software Updates via MacUpdate

PDFpenPro 6.2 - Advanced PDF toolkit for...
PDFpenPro allows users to edit PDF's easily. Add text, images and signatures. Fill out PDF forms. Merge or split PDF documents. Reorder and delete pages. Even correct text and edit graphics! Create... Read more
PDFpen 6.2 - Edit and annotate PDFs with...
PDFpen allows users to easily edit PDF's. Add text, images and signatures. Fill out PDF forms. Merge or split PDF documents. Reorder and delete pages. Even correct text and edit graphics! Features... Read more
Monolingual 1.5.9 - Remove unwanted OS X...
Monolingual is a program for removing unnecesary language resources from OS X, in order to reclaim several hundred megabytes of disk space. It requires a 64-bit capable Intel-based Mac and at least... Read more
Maya 2015 - Professional 3D modeling and...
Maya is an award-winning software and powerful, integrated 3D modeling, animation, visual effects, and rendering solution. Because Maya is based on an open architecture, all your work can be scripted... Read more
Starcraft II: Wings of Liberty 1.1.1.180...
Download the patch by launching the Starcraft II game and downloading it through the Battle.net connection within the app. Starcraft II: Wings of Liberty is a strategy game played in real-time. You... Read more
Sibelius 7.5.0 - Music notation solution...
Sibelius is the world's best-selling music notation software for Mac. It is as intuitive to use as a pen, yet so powerful that it does most things in less than the blink of an eye. The demo includes... Read more
Typinator 5.9 - Speedy and reliable text...
Typinator turbo-charges your typing productivity. Type a little. Typinator does the rest. We've all faced projects that require repetitive typing tasks. With Typinator, you can store commonly used... Read more
MYStuff Pro 2.0.16 - Create inventories...
MYStuff Pro is the most flexible way to create detail-rich inventories for your home or small business. Add items to MYStuff by dragging and dropping existing information, uploading new images, or... Read more
TurboTax 2013.r17.002 - Manage your 2013...
TurboTax guides you through your tax return step by step, does all the calculations, and checks your return for errors and overlooked deductions. It lets you file your return electronically to get... Read more
TrailRunner 3.8.769 - Route planning for...
Note: While the software is classified as freeware, it is actually donationware. Please consider making a donation to help support development. TrailRunner is the perfect companion for runners,... Read more

Latest Forum Discussions

See All

Hitman GO (Games)
Hitman GO 1.2 Device: iOS Universal Category: Games Price: $4.99, Version: 1.2 (iTunes) Description: Get your daily fix of Agent 47 with this elegant, strategy-based Hitman game! | Read more »
The Seventh Sign: Hodappy Bird Released...
The Seventh Sign: Hodappy Bird Released on the App Store Posted by Jeff Scott on April 16th, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Rogue Heroes (Games)
Rogue Heroes 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Rogue Heroes is awesome fast-paced 2D action-platforming roguelike game with RPG elements. - explore the depth of procedurally... | Read more »
Fourcast Review
Fourcast Review By Jennifer Allen on April 16th, 2014 Our Rating: :: VIDEO POTENTIALiPhone App - Designed for the iPhone, compatible with the iPad Fourcast is a great idea for combining video clips, but it does lack a number of... | Read more »
Hearthstone: Heroes of Warcraft is Avail...
Hearthstone: Heroes of Warcraft is Available on the U.S. App Store Right Now – Gogogogo! Posted by Rob Rich on April 16th, 2014 [ permalink ] | Read more »
Grammar Pop HD Review
Grammar Pop HD Review By Jennifer Allen on April 16th, 2014 Our Rating: :: FUN LEARNINGiPad Only App - Designed for the iPad Learning the different parts of speech isn’t always fun, but Grammar Pop HD makes it much more... | Read more »
Groundskeeper2 Review
Groundskeeper2 Review By Nadia Oxford on April 16th, 2014 Our Rating: :: SLICE THOSE ALIEN SLIMEUniversal App - Designed for iPhone and iPad Putting aside some minor control issues, Groundskeeper2 is a fun and furious action/... | Read more »
Pinnacle Studio for iPhone (Photography...
Pinnacle Studio for iPhone 5.0 Device: iOS iPhone Category: Photography Price: $9.99, Version: 5.0 (iTunes) Description: | Read more »
Season 3 of Zombies, Run! Starts Right N...
Season 3 of Zombies, Run! | Read more »
Snupps Review
Snupps Review By Jennifer Allen on April 16th, 2014 Our Rating: :: USEFUL LISTINGUniversal App - Designed for iPhone and iPad Got a huge collection that you need to organize, or just want to share with others? Snupps has it covered... | Read more »

Price Scanner via MacPrices.net

Microsoft Blinks – Drops Microsoft Office 365...
Microsoft has dropped the annual subscription fee for Microsoft Office 365 Personal – which is needed in order to create and edit documents in Microsoft Office for iPad. However, Apple’s iOS and OS X... Read more
New AVG Vault Apps for iOS and Android Help K...
AVG Technologies N.V. an online security company for 177 million active users, has announced the launch of its latest mobile application, AVG Vault. The free app introduces an innovative user... Read more
Free Local Carrot iPhone App Helps Find Fresh...
I love fresh vegetables. I’m not a vegan, although I was for several years in the 1980s, but fresh vegetables and other whole foods are still my dietary mainstays as a matter of taste rather than... Read more
Apple refurbished iPad Airs available startin...
Apple is now offering Certified Refurbished iPad Airs for up to $140 off MSRP. Apple’s one-year warranty is included with each model, and shipping is free. The following Airs are available today: -... Read more
21-inch 2.7GHz iMac on sale for $1179, save $...
B&H Photo has the 21″ 2.7GHz iMac on sale for $1179 including free shipping plus NY sales tax only. Their price is $120 off MSRP. Add an iMac to your shopping cart, and B&H will offer an... Read more
Download our app, iTracx, for iOS and Android
MacPrices is proud to offer readers a free iOS app (iPhones, iPads, & iPod touch) and Android app (Google Play and Amazon App Store) called iTracx, which allows you to glance at today’s lowest... Read more
Education discounts shave up to $300 off the...
Purchase a new Mac 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, and all... Read more
Save $50 on Mac mini Server
B&H Photo has the 2012 Mac mini Server on sale for $949 including free shipping plus NY sales tax only. Their price is $50 off MSRP. Read more
PhatWare’s “Ultimate Writing App For iOS” Ren...
PhatWare Corp. has announced it has renamed its new WritePro word processing app for iPhone and iPad: WritePad Pro. The decision to change the app’s name to leverages the strong brand awareness and... Read more
Full Resolution Photo Editor Tint Mint 1.0 Re...
California based independent developer, Jeffrey Sun, creator of the iOS app Modern Editor, has released Tint Mint, a new photography app for editing enthusiasts. The app costs a dollar, and it packs... Read more

Jobs Board

*Apple* Retail - Manager - Holyoke - Apple I...
Job Summary Keeping an Apple Store thriving requires a diverse set of leadership skills, and as a Manager, you’re a master of them all. In the store’s fast-paced, Read more
*Apple* Retail - Manager - Apple (United Sta...
Job SummaryKeeping an Apple Store thriving requires a diverse set of leadership skills, and as a Manager, you're a master of them all. In the store's fast-paced, dynamic 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
*Apple* Retail - Market Leader - Cincinnati...
…challenges of developing individuals, building teams, and affecting growth across Apple Stores. You demonstrate successful leadership ability - focusing on excellence Read more
*Apple* Retail - Manager - SoHo - Apple (Uni...
Job SummaryKeeping an Apple Store thriving requires a diverse set of leadership skills, and as a Manager, you're a master of them all. In the store's fast-paced, dynamic Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.