TweetFollow Us on Twitter

Jan 94 Tips
Volume Number:10
Issue Number:1
Column Tag:Tips & Tidbits

Tips & Tidbits

By Neil Ticktin, Editor-in-Chief

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

Tip Of The Month

The 6-byte Code Resource Stub Trick

Many Macintosh programmers who have debugged a CDEF, LDEF, MDEF, or WDEF know “the 6-byte code resource stub trick.” Its been covered in MacTech Magazine, and the wisdom is often passed along online.

To briefly summarize, instead of burying all the code inside a separate code resource where it can't see the structure of the main program (global variables and functions), the programmer creates a 6-byte code stub. In that stub is one MC68000 jump-absolute instruction (as hex in a resource: 4EF9 0000 0000). The programmer replaces the jump destination address (the trailing 32 bits of 0) at runtime with a function address, then informs the relevant Toolbox manager that it should use the resource to define a control, list, or window. (Using this trick with a menu is similar.) Since code is modified, it's always safest to flush the CPU's instruction cache to avoid confusing (read: crashing) it. Refer to the Apple DSC Technical Note "Cache As Cache Can" for the long story.

Now, instead of reading and understanding the tech note and including relevant compensations in your code, you can use a different code resource stub. This stub still includes the function address, but it uses MC68000 instructions to retrieve the address as data, avoiding the code modification problem. In hex: 2F3A 0004 4E75 0000 0000. The 32 bits of zero are again the address you replace with a function address. A disassembly might read:

/* 1 */
MOVE.L  *+$0006,-(A7); push the DC.L onto the stack for RTS
RTS; jump to the definition function
DC.L  0 ; placeholder for addr of defn function

Since the DC.L never actually runs as code, there's no risk of confusing the cache in the CPU. You can use the following C structure declaration to access the address:

/* 2 */
typedef struct
{
 short  push [2], rts;
 void *addr;
}
tCodeStub, *tCodeStubP, **tCodeStubH;

- Pete Gontier

Berkeley, CA

This column is your opportunity to spread the word about little bits of information that you find out about. These tidbits can be programming related or they can be user tips that are particularly useful to programmers.

MacTech Magazine will pay $25 for every tip used, and $50 for the Tip of the Month. Or you can take your award in orders or subscriptions.

To submit a tip, send in a letter to the magazine. E-mail is our preferred method, but feel free to send something via the US Mail. See page two for all addresses. If you do send snail mail, enclose a printed copy and a disk copy of the letter so that it does not have to be retyped.

Precomputing Static value in constants

The compiler is not always smart enough to precompute static values in your code. Static values are values that stay constant throughout the program and cannot be changed. By use of constants you can help to compile precomputed values. This saves time and space in your program.

For example, the compiler will generate code to compute the value of the next expression at runtime. The code will be larger and slower.

  someValue := 5 * 4 + anotherValue + 90;

But, if you use a constant to compute the static value in the above expression, the compiler will precompute the value and place it in your compiled object code. The code will be smaller and faster as a result. Change the above expression like this:

CONST
  kPrecomputedStaticValue = 5 * 4 + 90;

BEGIN
someValue := kPrecomputedStaticValue + 
       anotherValue;
(* Other code *)

- Marek Hajek

Incline Village, Nevada

Toggle Invisibles Part 2

I read Lee Rimar’s tip "Toggle Invisibles in MPW" in November, 1993 Tips & Tidbits column. I found Mr. Rimar's script useful, and I've modified it to avoid making assumptions about the auto-indent and lock-scroll options. The trick is to use "=~" to match a regular expression against the three-character result of Format, and extract the second character into the ®1 variable (see "help patterns" in MPW). (If you're running out of sensible Command-key combinations, you can use SetKey instead, in MPW 3.3, to set up a function key, keypad key, control key, or whatever.)

AddMenu Edit "Toggle Invisibles/¥" 
  '(evaluate "`Format "{active}" -x a`" =~ /?(?)®1?/ ) > Dev:Null ; 
  if {®1}=="i" ; 
    Format "{Active}" -a I ; 
  else ; 
    Format "{Active}" -a i ; 
  end'

- Dave Lyons

Apple Computer, Inc.

International system Tip

Attention all single-byte developers!! Your software is ugly on double-byte machines! (see screen shot) Why? Because any resource that contains an odd number of text characters has an extra character added to the end (the second byte). Here in Japan, quality is very important and having funky looking characters on every menu and dialog box certainly doesn't convey quality. So what to do?

1. Startup your Mac with a double-byte system disk (check any CD-ROMS you have from Apple for a Japanese "Disk Tools" image.) Don't worry if you can't read Japanese because the menu items and short-cut keys are the same.

2. Launch ResEdit and open your application's resources (also notice ResEdit has the extra characters too! A little sloppy for Apple.)

3. Simply open each of you application's resources and find the foreign characters and backspace over them. Be sure to check everything!! Buttons, dialogs, text strings, etc. If it has text, it is possible there is problems.

4. When your finished, launch your application (while still in Japanese mode) and verify that it looks and runs correctly.

5. Restart your system and you're back to where you were! (Warning: depending upon the version you use, your desktop may be rebuilt on restart)

Even if you don't officially sell your software in Japan, most titles are available as gray market imports (even though the package says in big letters "For Sale in The USA Only".) So take a few minutes to improve your reputation for quality!

- Brett Bibby

Tokyo, Japan

 
AAPL
$566.15
Apple Inc.
-4.41
GOOG
$600.81
Google Inc.
-8.65
MSFT
$28.94
Microsoft Corpora
-0.18
MacNews Search:
Community Search:
view counter

view counter
view counter
view counter
view counter
view counter
view counter
view counter
view counter

Boomlings Review
Boomlings Review By Lisa Caplan on May 24th, 2012 Our Rating: :: FUN FREEBIEUniversal App - Designed for iPhone and iPad Boomlings is a traditional matching puzzle game, with some explosive twists   | Read more »
Dave vs Cave Review
Dave vs Cave Review By Jason Wadsworth on May 24th, 2012 Our Rating: :: WATCH FOR FALLING ROCKSUniversal App - Designed for iPhone and iPad Kid falls down hole, kid gets trapped in cave, kid fights evil rock monsters to escape.   Developer: Origame64 | Read more »
Python Pocket Power: Python Bytes 3 – Mo...
Python fans are certain to welcome the best bits from the penultimate season of the BBC sketch comedy in a new iPhone app: Python Bytes 3 – Monty Python Series 3. If you have a flair for the obvious, you’ll correctly assume this is third in a series of apps that feature the best skits from the cult-classic, Monty Python’s Flying Circus. | Read more »
Slingshot Racing Review
Slingshot Racing Review By Carter Dotson on May 24th, 2012 Our Rating: :: SWING ME AROUNDUniversal App - Designed for iPhone and iPad Slingshot Racing is a racing game where players must race around the courses by grappling and swinging around the slippery courses.   | Read more »
Go to the Cannes Film Festival with The...
For the movie industry the Cannes Film Festival is one of the most important events in which to preview films and watch the stars. The 65th annual festival is happening in France right now, but if you weren’t able to secure an invite or make the journey, hope is not lost. Film buffs and star gazers can keep tabs on the festival with The Hoolywood... | Read more »
David Haye’s Knockout Review
David Haye’s Knockout Review By Jennifer Allen on May 24th, 2012 Our Rating: :: PUNCHING FUNUniversal App - Designed for iPhone and iPad A simple yet satisfying cartoon-style boxing game.   | Read more »
WhosHere Updates, Adds Video Chat for Fr...
A mobile social discovery app, WhosHere, updated yesterday, adding free video chat to the universal iOS build. The app allows users connect with an new emphasis on keeping random hook-ups safe(ish). The developers say “the biggest problem in meeting people online today [is] knowing that the person you are speaking to is exactly who they say they... | Read more »
Are You Smarter Than A 5th Grader? &...
Are You Smarter Than A 5th Grader? & Friends Free Review By Jennifer Allen on May 24th, 2012 Our Rating: :: LACKINGUniversal App - Designed for iPhone and iPad An underwhelming use of a great franchise.   | Read more »
Fruit Ninja Gets New Update With Powerup...
Fruit Ninja is about to get its biggest update yet to celebrate its second anniversary on Thursday, May 24th. The key new element in the game appears to be that players will now be able to earn an in-game currency, called starfruit, that can be used to buy new powerups from new characters Gutsu and Truffles, introduced in the new trailer produced... | Read more »
Fotor – CameraBag Review
Fotor – CameraBag Review By Jennifer Allen on May 23rd, 2012 Our Rating: :: PLENTIFULiPhone App - Designed for the iPhone, compatible with the iPad A photography app that wants to be able to do everything that could ever be asked of it.   | Read more »
All contents are Copyright 1984-2010 by Xplain Corporation. All rights reserved. Theme designed by Icreon.