TweetFollow Us on Twitter

Romper Room
Volume Number:4
Issue Number:3
Column Tag:News from the

Romper Room Refugee

By Mac Developer Tech Support

Ask Apple Technical Support

by Max ApplZone

Welcome to the Macintosh Developer Tech Support column. We at Mac DTS will use this column each month to answer your questions, report on the events at Apple, and pass along new Mac programming information. This is your chance to raise issues and questions just because you’re interested in programming the Mac; you don’t have to be a certified developer working on the next Mac database.

The Mac Developer Tech Support group at Apple is a part of Developer Services, the organization whose job it is to promote and support third part developers. Tech Support’s job includes writing TechNotes, creating sample code, generally helping to improve the quality of your code, and answering programming questions via electronic mail (either MCI Mail or our own AppleLink). This column is part of an effort to make our services more visible and available to the right people (you).

If you have a programming question or a topic that you’d like to see addressed in this column, send a note (letter, postcard, letterbomb) to MacTutor Magazine, at PO Box 400, Placentia, CA 92670, c/o Romper Room. We’ll do our best to publish and answer your question.

If you are developing (or thinking about developing) a full-blown Mac application (commercial or otherwise), then you should think about joining our Certified Developer Program. Certified developers get put on our mailing list and have access to MacDTS to help answer their questions on a personal level. To inquire about becoming a Mac Certified Developer, contact the Developer Programs group at Apple Computer at (408) 973-4897.

Since we don’t have your questions yet, this month’s column contains information that was presented at the January MacWorld Expo in San Francisco. The first is Chris Derossi’s presentation on MultiFinder compatibility, and the second is from the handout from Fred Huxham’s presentation on writing code to be compatible with Apple’s AU/X, both given at the MacTutor session at the San Francisco MacWorld Expo last January.

MultiFinder Programming Tips

by Chris Derossi

Be MultiFinder Aware

Generally, being compatible with MultiFinder is easy, and mainly involves following the guidelines outlined in Inside Macintosh and the TechNotes. Being MultiFinder aware is another issue. MultiFinder awareness is actually not that difficult, and requires just a few things: a SIZE resource that describes your application’s knowledge of MultiFinder (see below), code to handle Suspend/Resume events, and sharing time with other applications by using WaitNextEvent.

With Suspend/Resume events, your application can determine when it is running in the foreground or the background. In the background, your application should run as normal, but it shouldn’t expect any events other than update events, and it shouldn’t do anything that would pull the rug out from under the foreground application (like changing its cursor).

To do background processing, your application should divide its background tasks into small chunks. Each time that your application gets background time, it should do one piece of its task, and then relinquish the processor again by calling GetNextEvent or WaitNextEvent.

When your application is in the foreground and it is waiting for a user event, it should call WaitNextEvent. This gives processor time to the background applications.

Handle ALL Events

Under MultiFinder, your application cannot prevent itself from being switched out by masking Suspend/Resume events (App4Events). If you mask out Suspend events, you will still be switched out; you just won’t know that it happened.

Be prepared to handle Update events at all times. While suspended, your windows may need updating when other windows are moved. MultiFinder will pass Update events to your suspended application until the update is performed (or until MultiFinder has tried so many times that it decides you’re never going to handle the event).

Share The File System

Now that the Finder and other applications use the File System during the execution of your program, you have to pay particular attention to your use of files. The best tip is to always use the file’s refNum, and never rely on the file name or the pathname of the file after it has been opened. Other applications, or even the user with the Finder, may rename and move the file after you have opened it, but the refNum will stay valid.

If you need to get the name or directory of an open file, call GetFCBInfo (not available on 64K ROMs) each time that you need it.

Since files that are not open can be deleted or changed, if you need a file to remain undeleted and unmodified, keep it open. If you open a file, read from it, then close it, the next time that you try to access that file, it may have been deleted, renamed, moved, modified, or opened by someone else.

And above all, CHECK ERRORS! Because you’re sharing the File System, you may not have exclusive use of it. This means that, even though you have only a few files open, for example, you may get a tmfoErr (Too Many Files Open Error). Similarly, you could get a tmwdoErr (Too Many Working Directories Open Error). And even if you’ve closed all of your files on a volume, UnmountVol will now return an error if other files are open.

Use The Right A5

In general, register A5, which points to your QuickDraw world and to your application’s global variables, is only valid when your application’s main code is running. Auxiliary pieces of code that are separate from the application (like MDEFs, VBL tasks, Time Manager routines, completion routines, etc) are not guaranteed to have your application’s A5; they may be executed while A5 points to some other application’s globals.

When such code gets executed, you should first save register A5, and then load A5 with the one from your application. This will let you get to your application’s variables, routines, and QuickDraw world. When your code has completed, be sure to restore A5 to the value it had when your routine was called.

Use The Clipboard For Cut, Copy, and Paste

Since many applications may be running, your application should not use the scrap for private data storage. If your application changes the scrap on its own, not in response to a user’s Cut or Copy, the user may see the Clipboard change unexpectedly in other applications.

On the other hand, by fully supporting Cut, Copy, and Paste with the scrap, your users will be able to easily move data among applications.

Understand When and What Happens When Switching

When MultiFinder does a context switch from one application to another, it swaps out the following things:

• Low-Memory--System-Wide Globals

• 68000 Registers (Including A5 and A7 for globals and the stack)

• The Application’s Layer--All of the application’s windows

• Trap Patches that were made from within the application

• VBL Tasks in the application heap

• Drivers in the application heap

• Time Manager tasks in the application heap

There are three cases where MultiFinder will do a context switch. The first, and most obvious case occurs when the user clicks on a suspended layer, chooses a suspended application from the Apple menu, or clicks on the small icon in the right side of the menu bar. This causes a full context switch, bringing the resuming application’s layer to the front.

This full context switch won’t occur under two conditions: when the front window of the foreground application is a dBoxProc (standard modal dialog window), and when there are pending file system calls. (When the file system calls complete, the switch will happen.)

MultiFinder checks the front window’s proc ID to determine if it’s a modal dialog. So dBoxProc windows should only be used for modal dialogs. Using this window type for other purposes will block the switching mechanism. (If you like the look of the dBoxProc, you can use a plainDBox, and draw the additional thick line yourself.)

The second two context switches can happen ANY time that GetNextEvent, WaitNextEvent, or EventAvail is called, even from a modal dialog. Neither of these switches changes the ordering of the layers, or generates Suspend/Resume events. One switch is for giving time to background applications, and the other is for passing update events to suspended applications. MultiFinder will only give background time to those applications that have the CanBackground bit set in their SIZE resource. ALL applications get background update events as needed.

The SIZE Resource

Even if your application is not going to do background processing, it should have a SIZE resource. In addition to telling MultiFinder what MF features your application supports, the SIZE resource also specifies how much memory your application needs. If you don’t have a SIZE resource, MultiFinder gives it a default partition size of 384K, which may be way too much or way too little for your app.

The SIZE resource must have an ID of -1 and contain the following data:

Flags Integer (16 bits)

Preferred size LongInt

Minimum size LongInt

The flags word is a series of 5 boolean values and 11 unused bits. All unused bits MUST be set to zero for future compatibility. The bits are assigned as follows:

Bit 15 dontSaveScreen/saveScreen

This is included for Switcher compatibility only

Bit 14 ignoreSuspendResumeEvents/acceptSuspendResumeEvents

Set this bit if your application understands Suspend and Resume events.

Bit 13 enableOptionSwitch/disableOptionSwitch

This is included for Switcher compatibility only

Bit 12 cannotBackGround/canBackGround

Without setting canBackground, your application will not get nullEvents while it is suspended.

Bit 11 dontDoOwnActivate/doOwnActivate

If this bit is set, then your application accepts the responsibility for deactivating and activating its own windows when the application is suspended and resumed. This field may also be called notMultiFinderAware/MultiFinderAware. This bit should only be set if bit 14 is also set.

The preferred and minimum sizes are the number of bytes that your application needs. So if your application runs best with 512K of RAM, but will survive with only 128K of RAM, then the preferred and minimum sizes would be 524288 (512K) and 131072 (128K).

How to be A/UX Friendly

by Fred Huxham

In figure 1 we see how applications running under Apple’s version of Unix, called A/UX, can use the Macintosh toolbox to implement the Macintosh User Interface Guidelines. The Unix program makes a toolbox call, which is routed to a A/UX toolbox ROM interface routine, which in turn calls the trap in the Macintosh ROM. A subset of the Macintosh OS traps are also provided with an interface, so that OS traps get routed to standard A/UX libraries, to perform the expected Unix function, both for OS calls from the toolbox, and from the User’s application. The purpose of the Mac interface is to provide an environment that will run the following:

• Macintosh Binaries

• Unix Applications with toolbox enhancements

• Macintosh / A/UX Applications

Fig. 1 Apple's A/UX environment

Here are some things to keep in mind when designing for A/UX compatibility:

• Differences in execution environments

• Memory Manager

• File Manager

• Differences in C Compilers

• Differences in Language Conventions

Here are some more notes on the remaining slides.

Slide #5

• 32-bit Address Violations

Directly accessing the flag bits on relocatable blocks is a fate worse than death. The Macintosh OS only uses the low-order 24 bits of an address. The high-order 8 bits are used as flag bits (Lock, Purge, Resource). A/UX however, uses full 32-bit virtual addressing. If an application directly manipulates one of the upper 8 bits of an address under A/UX, it invalidates the address.

• CPU Privileged Instructions

The A/UX Toolbox is run by an A/UX process in User Mode. Because of this, applications cannot make privileged instructions. Some MacOS applications move to and from the status register. If the motivation is to access the condition code bits, it is possible to do this by using the MOVE CCR,<ea> instruction. Because this is only available on a 68020, you must check to see that is what you are running on. If you are accessing the SR to turn interrupts on or off, you’re out of luck, only the kernel can do that.

• Direct Hardware Access

Under A/UX only the kernel is allowed direct access to the hardware. This means applications cannot:

• Access the serial port by talking to the SCC’s registers.

• Access the disk drive by talking to the disk controller chip.

• Access any of the low-memory CPU exception vectors.

In addition, not all the low-memory globals are valid under A/UX. Most that are not related to hardware are supported.

• Initialization Routines

Make sure call InitDialogs and TEInit.

•Newline Character

In the Macintosh environment, lines are terminated with a return (0x0D). In the A/UX environment, lines are terminated with a linefeed (0x0A).

Slide # 6

• Heap Zones

There is no distinction between the system heap zone and the application heap zone. The routines SystemZone and ApplicZone return the same pointer.

• Master Pointers

Under the A/UX OS, master pointers are 8 bytes long, rather than the 4 bytes used by the Macintosh OS.

• Internal Data Structures

The internal data structures of the Memory Manager are different from those in the MacOS. The heap zone header record is the same, but not all fields are used. An application should not attempt to traverse the blocks in a heap zone.

• Memory Query Routines

A/UX supports virtual memory, but the Mac memory manager routines are designed for a system that has a known amount of physical memory. At the current time, memory query routines such as FreeMem return the amount of memory that would be available if your application had started with 1 MB of free memory.

Slide # 7

• Filename Conventions

Applications running under A/UX must follow the A/UX filename conventions:

• 14-character names.

• The character / instead of : to separate directories.

• A smaller range of legal characters.

• Case sensitive filenames.

• Resource and Data Files

In the MacOS, both resources and data appear in separate forks of the same file. In A/UX, resources appear in a separate file, with the filename extension “.res”.

• Volumes

Under A/UX, all Macintosh files exist on a single, emulated Mac volume.

• Search Paths

Unlike the MacOS, under A/UX a file must be in the specified directory or it will not be found. No alternative paths are searched.

•Global Variables

Only the following File Manager low-memory globals are supported:

BootDrive

VCBQHdr

DefVCBPtr

DrvQHdr

FSFCBLen

Slide # 8

• Multicharacter Constants

The two C compilers evaluate character constants in opposite order. For example, the A/UX C compiler converts ‘ABCD’ to 0x44434241, and the MPW C compiler converts it to 0x41424344. Multicharacter constants are used commonly to define resource types.

• Spurious Warnings

The A/UX compiler generates warnings when it sees zero-length arrays, which appear frequently in the include files.

• Pascal Function Types

MPW C has an extern pascal function type used for calling most of the ROM routines. To use these same functions, an A/UX C program must use assembly glue.

• Enumerated Types

In MPW C, enumerated types can be 8, 16, or 32 bits long, depending on the range of possible values. In A/UX C, enumerated types are 32 bits long (unless packed in structures using bitfields).

Slide # 9

• Pascal vs. C Strings

Many of the ROM routines follow Pascal conventions for storing strings, pushing parameters on the stack, and returning function results. the conventions differ from standard C conventions. The A/UX Toolbox includes conversion code that takes care of most of these incompatibilities as long as you use A/UX Toolbox routines for storing and retrieving data. However, strings in resource files and in A/UX Toolbox data structures are all stored as Pascal strings.

 
AAPL
$96.52
Apple Inc.
-0.67
MSFT
$44.60
Microsoft Corpora
-0.28
GOOG
$595.03
Google Inc.
-0.95

MacTech Search:
Community Search:

Software Updates via MacUpdate

Airfoil 4.8.7 - Send audio from any app...
Airfoil allows you to send any audio to AirPort Express units, Apple TVs, and even other Macs and PCs, all in sync! It's your audio - everywhere. With Airfoil you can take audio from any... Read more
Microsoft Remote Desktop 8.0.8 - Connect...
With Microsoft Remote Desktop, you can connect to a remote PC and your work resources from almost anywhere. Experience the power of Windows with RemoteFX in a Remote Desktop client designed to help... Read more
xACT 2.30 - Audio compression toolkit. (...
xACT stands for X Aaudio Compression Toolkit, an application that encodes and decodes FLAC, SHN, Monkey’s Audio, TTA, Wavpack, and Apple Lossless files. It also can encode these formats to MP3, AAC... Read more
Firefox 31.0 - Fast, safe Web browser. (...
Firefox for Mac offers a fast, safe Web browsing experience. Browse quickly, securely, and effortlessly. With its industry-leading features, Firefox is the choice of Web development professionals... Read more
Little Snitch 3.3.3 - Alerts you to outg...
Little Snitch gives you control over your private outgoing data. Track background activityAs soon as your computer connects to the Internet, applications often have permission to send any... Read more
Thunderbird 31.0 - Email client from Moz...
As of July 2012, Thunderbird has transitioned to a new governance model, with new features being developed by the broader free software and open source community, and security fixes and improvements... Read more
Together 3.2 - Store and organize all of...
Together helps you organize your Mac, giving you the ability to store, edit and preview your files in a single clean, uncluttered interface. Smart storage. With simple drag-and-drop functionality,... Read more
Cyberduck 4.5 - FTP and SFTP browser. (F...
Cyberduck is a robust FTP/FTP-TLS/SFTP browser for the Mac whose lack of visual clutter and cleverly intuitive features make it easy to use. Support for external editors and system technologies such... Read more
iExplorer 3.4 - View and transfer all th...
iExplorer is an iPhone browser for Mac lets you view the files on your iOS device. By using a drag and drop interface, you can quickly copy files and folders between your Mac and your iPhone or... Read more
Airmail 1.4 - Powerful, minimal email cl...
Airmail is a powerful, minimal mail client.It was designed to retain the same experience with a single or multiple accounts and provide a quick, modern and easy-to-use user experience. Airmail... Read more

Latest Forum Discussions

See All

Revolution 60 Review
Revolution 60 Review By Jordan Minor on July 24th, 2014 Our Rating: :: LASS EFFECTUniversal App - Designed for iPhone and iPad Revolution 60 is a bold, cinematic action game with ambition to spare.   | Read more »
Matter (Photography)
Matter 1.0.1 Device: iOS Universal Category: Photography Price: $1.99, Version: 1.0.1 (iTunes) Description: Add stunning 3D effects to your photos with real-time shadows and reflections. Export your creations as photos or video loops... | Read more »
Fanatic Earth Review
Fanatic Earth Review By Brittany Vincent on July 24th, 2014 Our Rating: :: BY-THE-NUMBERSUniversal App - Designed for iPhone and iPad Kemco’s stable of mobile RPGs grows, but in Fanatic Earth’s situation it’s a case of quantity... | Read more »
Together for iOS (Productivity)
Together for iOS 1.0 Device: iOS Universal Category: Productivity Price: $9.99, Version: 1.0 (iTunes) Description: Together is an app for keeping things in one place. Notes, documents, images, movies, sounds, web pages and bookmarks... | Read more »
The Phantom PI Mission Apparition (Game...
The Phantom PI Mission Apparition 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: ** Release sale! 50% off for a limited time! ** The Phantom PI Mission Apparition is a spooky, puzzly, rock’... | Read more »
The Great Prank War (Games)
The Great Prank War 1.0.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.0 (iTunes) Description: Help Mordecai, Rigby, Muscle Man and Skips take the park back from Gene and his goons with a plethora of prank-related... | Read more »
Teenage Mutant Ninja Turtles (Games)
Teenage Mutant Ninja Turtles 1.0.0 Device: iOS Universal Category: Games Price: $3.99, Version: 1.0.0 (iTunes) Description: Download the all new Teenage Mutant Ninja Turtles Official Movie Game! | Read more »
Dream Revenant (Games)
Dream Revenant 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: EXCLUSIVE LAUNCH PRICE ! Dream Revenant is at $1.99 for a limited time ! | Read more »
Traps n' Gemstones (Games)
Traps n' Gemstones 1.00 Device: iOS Universal Category: Games Price: $2.99, Version: 1.00 (iTunes) Description: LAUNCH SALE! 40% off, JULY ONLY! TRAPS N' GEMSTONES is an adventurous platform game, among gamers typically known as the... | Read more »
Soccer Physics (Games)
Soccer Physics 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: One-button soccer game! So dumb it's fun. "Soccer Physics is probably the funniest football game you'll play on iOS" —... | Read more »

Price Scanner via MacPrices.net

What Should Apple’s Next MacBook Priority Be;...
Stabley Times’ Phil Moore says that after expanding its iMac lineup with a new low end model, Apple’s next Mac hardware decision will be how it wants to approach expanding its MacBook lineup as well... Read more
ArtRage For iPhone Painting App Free During C...
ArtRage for iPhone is currently being offered for free (regularly $1.99) during Comic-Con San Diego #SDCC, July 24-27, in celebration of the upcoming ArtRage 4.5 and other 64-bit versions of the... Read more
With The Apple/IBM Alliance, Is The iPad Now...
Almost since the iPad was rolled out in 2010, and especially after Apple made a 128 GB storage configuration available in 2012, there’s been debate over whether the iPad is a serious tool for... Read more
MacBook Airs on sale starting at $799, free s...
B&H Photo has the new 2014 MacBook Airs on sale for up to $100 off MSRP for a limited time. Shipping is free, and B&H charges NY sales tax only. They also include free copies of Parallels... Read more
Apple 27″ Thunderbolt Display (refurbished) a...
The Apple Store has Apple Certified Refurbished 27″ Thunderbolt Displays available for $799 including free shipping. That’s $200 off the cost of new models. Read more
WaterField Designs Unveils Cycling Ride Pouch...
High end computer case and bag maker WaterField Designs of San Francisco now enters the cycling market with the introduction of the Cycling Ride Pouch – an upscale toolkit with a scratch-free iPhone... Read more
Kingston Digital Ships Large Capacity Near 1T...
Kingston Digital, Inc., the Flash memory affiliate of Kingston Technology Company, Inc.,has announced its latest addition to the SSDNow V300 series, the V310. The Kingston SSDNow V310 solid-state... Read more
Apple’s Fiscal Third Quarter Results; Record...
Apple has announced financial results for its fiscal 2014 third quarter ended June 28, 2014, racking up quarterly revenue of $37.4 billion and quarterly net profit of $7.7 billion, or $1.28 per... Read more
15-inch 2.0GHz MacBook Pro Retina on sale for...
B&H Photo has the 15″ 2.0GHz Retina MacBook Pro on sale for $1829 including free shipping plus NY sales tax only. Their price is $170 off MSRP. B&H will also include free copies of Parallels... Read more
Apple restocks refurbished Mac minis for up t...
The Apple Store has restocked Apple Certified Refurbished Mac minis for up to $150 off the cost of new models. Apple’s one-year warranty is included with each mini, and shipping is free: - 2.5GHz Mac... Read more

Jobs Board

Sr Software Lead Engineer, *Apple* Online S...
Sr Software Lead Engineer, Apple Online Store Publishing Systems Keywords: Company: Apple Job Code: E3PCAK8MgYYkw Location (City or ZIP): Santa Clara Status: Full Read more
Senior Interaction Designer, *Apple* Online...
**Job Summary** Apple is looking for a hands on Senior…will be a key player in designing for the Apple Online Store. The ideal designer will have a Read more
*Apple* Sales Chat Rep - Apple (United State...
…is looking for motivated, outgoing, and tech savvy individuals who want to offer Apple Customers an unparalleled customer experience over chat. At Apple , we believe Read more
Mac Expert - *Apple* Online Store Mexico -...
…MUST be fluent in English and Spanish to be considered for this position At Apple , we believe that hard work, a fun environment, creativity and innovation fuel the Read more
*Apple* Industrial Design CAD Sculptor - App...
**Job Summary** The Apple Industrial Design team is looking for a CAD sculptor/Digital 3D modeler to create high quality CAD models used in the industrial design process Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.