TweetFollow Us on Twitter

Jul 97 - Macintosh Q and A

Volume Number: 13 (1997)
Issue Number: 7
Column Tag: develop

Jul 97 - Macintosh Q & A

by Apple Developer Support Center

Q: FindSymbol returns a paramErr if I pass it a symbol name with a length greater than 64 characters, yet the documentation and interfaces specify that I pass the address of a Str255. What gives?

A: This is a known bug, and has been fixed as of System 7.5.5. You should either make sure the System version is 7.5.5 or later, or keep your symbol name lengths to 64 or fewer characters.


Q: Any time I try to load a shared library that has a nonzero implementation version number with GetSharedLibrary, CFM returns a fragTooNew error. Why?

A: This is a bug in CFM that was fixed in System 7.5.5. If you need a nonzero implementation version number, you'll have to be sure to run only on System 7.5.5 or later. Otherwise, make your library's implementation version number 0.


Q: I've been reading the documentation on the Resource Manager and I can't seem to find an unequivocal statement about whether resource IDs should be unique within a single resource type in a given resource file. Some documentation seems to suggest it's OK to have duplicate resource IDs as long as my program doesn't expect to be able to find resources by ID later. What's the real story?

A: You're right; during a recent extensive survey of our documentation (Inside Macintosh old and new editions, Technotes, and so on), we found that some of the discussions of resource IDs were less than perfectly clear on this topic.

The real story is that resource IDs should be unique within a single resource type within a given resource file. When you're adding resources to a resource file, you might want to use UniqueID or Unique1ID to help you find unique resource IDs.

However, some resource files do contain multiple resources with the same type and ID. This can be due to bugs in the program that created the file or to the aforementioned ambiguity in the documentation. When reading resource files your program didn't create, make sure you can gracefully handle such files.

Regardless of what you may read in other documentation, the Resource Manager in some versions of the Mac OS may behave unpredictably when reading files that have multiple resources with the same type and ID.

One easy way to detect whether a given file contains multiple resources with the same type and ID is to open the file with Resorcerer or ResEdit. These programs will warn you if they detect this condition.


Q: What's the logic behind the Create/Update preview behavior in the SFPGetFilePreview dialog? If I create previews for QuickTime movies I sometimes get preview movies and sometimes get preview pictures. With QuickTime movies that already have previews I sometimes get an Update button and sometimes get a dimmed Create button. What determines the behavior?

A: PICT files (or files that QuickTime can import as PICT via the new graphic import components) don't have durations, so they can only have a preview PICT in the Standard File Preview dialog. Movies can have both a poster PICT and a movie preview.

When a movie or PICT file is selected in the dialog, the preview component will first see if a preview already exists in the file, stored in a 'pnot' resource. The 'pnot' resource also identifies whether the preview is a PICT, a movie, or whatever. The preview component then compares a timestamp in the 'pnot' resource to the modification date of the selected file to see if the preview is current. If the 'pnot' date is older than the last modified date of the file, the dialog will show the Update button (and will create the new preview with the 'pmak' components if the user selects this option).

If no 'pnot' resource is found in the selected file, and a 'pmak' component exists that can create a preview for the selected file type (QuickTime 2.5 supplies PICT, MOOV, and QTIF 'pmak' components), the Create button will be active in the dialog.

Note that sound files preview in a slightly different way. The 'pnot' components create an automatic 10-second preview (if there's that much sound) for supported sound file types without needing a 'pnot' resource in the file.

You can read more about preview components in Inside Macintosh:QuickTime Components.


Q: I've saved files to disk in both foreground and background printing modes with LaserWriter 8.4.1, and the file size is always the same. I'd expect the size of the background image to be smaller as a result of compression and two-pass optimizations. Why don't I get different-size PostScript files?

A: LaserWriter 8.4 (and all other 8.x versions) always saves to disk in two passes, hence the foreground and background files you see are the same size. If we didn't do this, we would generate non-DSC compliant PostScript jobs when saving to disk in the foreground. If you really want to check the PostScript code being sent to the printer, you should turn on the papToDisk bit in the driver's 'PRFS' resource. This creates papToDisk files that capture the data going to and coming from the printer.


Q: I'm trying to find a way for my application to determine whether it's using a PostScript printer. For performance reasons, I'd like to send custom PostScript code instead of a PICT to the printer if I can. Is there an API to find out whether the currently selected printer is a PostScript printer?

A: There's no good way of doing this. For Apple's LaserWriter drivers, you can, if you must, look at the wDev field in the print record of the currently selected printer. Here's a quote that's hidden in Technote QD 10, "Picture Comments - The Real Deal":

The high byte of the prStl.wDev field of the print record identifies a printer driver species; a value of $03 tells you that the printer driver belongs to the PostScript LaserWriter driver ancestry...

However, although the Apple LaserWriter driver has a wDev of 3, other printer drivers for PostScript devices may not, so this is not a complete solution for detecting PostScript printers. Further, it's not recommended that you use the wDev field to distinguish between printer drivers at all; see the Print Hints column in this issue of develop for more on this.


Q: I'm using the code from page 4-16 of Inside Macintosh: Processes to animate the cursor at VBL time, but it crashed (with the stack crawl indicating SetCursor as the culprit). What's up?

A: When hardware cursor support was added to the Mac OS (System 7.5.2 for PCI Power Macs), SetCursor started requiring A5 to refer to a valid QuickDraw globals world. Despite the fact that the code you refer to accesses no global variables, your application still needs to make sure A5 is set up for SetCursor's benefit.

An explanation of setting up A5 in a VBL task can be found on page 4-13 of Inside Macintosh: Processes.


Q: We're writing an application that requires us to connect to a remote machine via TCP/IP and talk to a background application running on that machine. However, we cannot connect to that machine when it's in sleep mode. Is there a way to keep the network services alive when a machine is in sleep mode? I've seen how you can keep the serial port alive, but not the network services.

A: When a Macintosh (usually a PowerBook) goes into the "sleep" state, it's incapable of responding to network requests; the connections actually shut down. There are some Macintosh computers, however, that will attempt to go into an energy-efficient mode know as "doze."

The sleep state is easy to prevent and is pretty well documented in the Power Manager chapter of Inside Macintosh: Devices under "The Sleep Queue" and "Sleep Procedures," and there's more information in Technote 1046, "Inside Macintosh: Devices - Power Manager Addenda," and Technote 1086, "Power Management & The Energy Saver API."

If you want to prevent the system from sleeping or dozing, you should do the following:

  1. Allocate a SleepQRec (preferably in the system heap).
  2. Set it up to call into your sleep handler.
  3. Return a nonzero value from your sleep handler when it's called. (When the Macintosh attempts to sleep or doze, your sleep handler is called with a sleepRequest or dozeRequest selector.)

In the doze state, Open Transport networking is still enabled and TCP connections that are set up should still function. But it might take several packets received within a short period (try 10 per second) to wake the machine from its doze state. You might also consider pinging the machine first to get it out of the doze state. Either way, if the machine is dozing it will take some time for the networking to reactivate, especially if virtual memory is enabled and the disk drive must spin up.


Q: I'm writing a fax client-server system and I've encountered a problem after I put the server to sleep: on waking, the server software doesn't seem to reregister on the network (using RegisterMyName). On the client side, when receiving a sleep demand I wait until network activity has ceased, then return control to the system; the client wakes and reconnects to the server with no problems. What action should I take to correct the reregistering problem?

A: In general, you might want to disable sleep on your server by informing the Power Manager with AutoSleepControl(false). Otherwise, the clients might never know that your server is sleeping, and they'll be unable to connect. But if you do want to support sleep, a server should install a sleep procedure through the Power Manager using SleepQInstall.

The exact details of how your server should handle sleep requests and sleep demands are provided in Table 6-1 on page 6-10 of Inside Macintosh: Devices. Ultimately, you close and deregister your server from the network. Later, when you get the sleepWakeUp call, you should reopen and reregister.


Q: I installed a sleep procedure, but the Power Manager will issue a sleep demand if the user selects Sleep from the Special menu. The AutoSleepControl(false) call will stop sleep requests but will it also stop sleep demands?

A: Your application cannot refuse a sleep demand, as documented in Inside Macintosh: Devices on page 6-11:

When your sleep procedure receives a sleep demand, however, your procedure has no way to determine whether it originated as a conditional sleep demand or an unconditional sleep demand. Your device driver or application must prepare for the sleep state and return control promptly to the Power Manager when it receives a sleep demand.

For AutoSleepControl, see Inside Macintosh: Devices, page 6-44:

When enableSleep is set to false, the computer will not go into the sleep mode unless it is forced to either by some user action - for example, by the user's selecting Sleep from the Special menu of the Finder - or in a low battery situation.


Q: How do I specify and control Open Transport serial port I/O handshaking? The options are a bit confusing.

A: By using the SRL_OPT_HANDSHAKE option provided by the Open Transport native interfaces, you can customize serial port handshaking in a variety of ways. For instance, you can request that input handshaking be controlled by the CTS line or by the XON/OFF sequence. The default value of this option is no handshaking.

The handshaking behavior is specified by a 4-byte unsigned integer value that's passed in with the SRL_OPT_HANDSHAKE option. The high word (16 bits) of the integer is a bitmap with one or more of the following bits set:

kOTSerialXOnOffInputHandshake       = 1
kOTSerialXOnOffOutputHandshake      = 2
kOTSerialCTSInputHandshake          = 4
kOTSerialDTROutputHandshake         = 8

The second lowest byte is the XON character value, and the lowest byte is the XOFF character value. If these values are 0, and XON/XOFF handshaking was requested, the default values of Control-S for XOFF and Control-Q for XON will be used.

An inline function (or a macro, for C users) is defined in OpenTptSerial.h for creating this 4-byte value:

OTSerialHandshakeData(UInt16 type, UInt8 onChar, UInt8 offChar)

Suppose, for instance, that you wanted to enable XON/XOFF input handshaking, but you wanted to specify that the XON character be Control-T instead of Control-Q. You would create an option structure as follows:

TOption 		opt;
opt.len = kOTFourByteOptionSize;
opt.level = XTI_GENERIC;
opt.name = SERIAL_OPT_HANDSHAKE;
opt.value =
OTSerialHandshakeData(kOTSerialXOnOffInputHandshake, 
	('T' & ~0x40),		// normally kOTSerialDefaultOnChar
	kOTSerialDefaultOffChar);

You can also control the XOFF state of the serial input port, by using the I_SetSerialXOFFState Ioctl command. A value of 0 will unconditionally clear the XOFF state, while a value of 1 will unconditionally set it:

// Set XOFF state.
OTIoctl(theSerialEndpoint, I_SetSerialXOffState, 1);

The I_SetSerialXOn Ioctl command causes the serial port to send an XON character. A value of 0 will cause it to be sent only if we're in the XOFF state, while a value of 1 will unconditionally send the character:

// Unconditionally send an XON character.
OTIoctl(theSerialEndpoint, I_SetSerialXOn, 1);

Conversely, the I_SetSerialXOFF Ioctl command causes the serial port to send an XOFF character. A value of 0 will cause it to be sent only if we're in the XON state, while a value of 1 will unconditionally send the character:

// Unconditionally send an XOFF character.
OTIoctl(theSerialEndpoint, I_SetSerialXOff, 1);

Q: A friend told me you can make really great water rockets from plastic pop bottles. Is this true?

A: Boy , howdy, is it ever! To give you an idea of how great they are, read the article "Soda Bottle Water Rockets" in Physics Teacher magazine, March 1995. Some interesting results from the article: If you launch a plain 2-liter bottle, filled with 0.7 liters of water (about 1/3 full turns out to be optimal) and pumped to 85 pounds per square inch, all the water is expelled in 0.07 seconds. At that point ("burnout") the bottle is only about 2 meters off the ground but is traveling at an incredible 76 meters per second (171 miles per hour)! That's an average acceleration of over 100 g's!

Of course, a naked bottle is aerodynamically hopeless, and tumbles fluffily after burnout. But if you add fins and some nose weight to make a stable rocket out of it, truly impressive altitudes are possible. A velocity-sensitive parachute deployment device has recently been concocted, bottle connection technology is advancing rapidly, and reliable multistage rockets are an active topic of investigation. Launching techniques range from the ultra-simple "cram a cork in it and pump 'til it blows" method to sophisticated, expensive launchers with all the bells and whistles.

For more information, see these Web sites: http://members.aol.com/aquarocket/, http://www.H2ORocket.com/, and http://www.flash.net/~berggren/rocket/.


Q: If my Web server is running along happily under Open Transport (1.1 or 1.1.1), and the listener is bound to address 0.0.0.0, what happens when someone uses the control panel and changes the IP number? Right now it appears to just make the listener go deaf. I don't appear to receive connections on the new IP number, and if I use the control panel a second time to switch back to the original IP number, I don't get connections for that IP number either. Is there some event that gets sent to the listener that I'm not looking for that tells me when this happens?

A: When a port changes its IP number, it's actually closing and reopening. When Open Transport closes a port, any endpoint that's plumbed to it is also closed, hence you'll get no further events on that endpoint.

The first thing you need to do is check for the provider events such as kOTProviderWillClose and kOTProviderIsClosed.

You should also use the OTRegisterAsClient call and register a notifier for client events, such as kOTPortDisabled, kOTPortEnabled, kOTPortOffline, kOTPortOnline, kOTClosePortRequest, kOTYieldPortRequest, and kOTNewPortRegistered.

When the interface changes, you need to close up your endpoints and rebind them.


These answers are supplied by the technical gurus in Apple's Developer Support Center. For more answers, see the Macintosh Technical Q&As on the World Wide Web at http://dev.info.apple.com/techqa/Main.html.

 
AAPL
$116.47
Apple Inc.
+0.16
MSFT
$47.98
Microsoft Corpora
-0.72
GOOG
$537.50
Google Inc.
+2.67

MacTech Search:
Community Search:

Software Updates via MacUpdate

Cobook 3.0.7 - Intelligent address book....
Cobook Contacts is an intuitive, engaging address book. Solve the problem of contact management with Cobook Contacts and its simple interface and powerful syncing and integration possibilities.... Read more
StatsBar 1.9 - Monitor system processes...
StatsBar gives you a comprehensive and detailed analysis of the following areas of your Mac: CPU usage Memory usage Disk usage Network and bandwidth usage Battery power and health (MacBooks only)... Read more
Cyberduck 4.6 - 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
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
Evernote 6.0.1 - Create searchable notes...
Evernote allows you to easily capture information in any environment using whatever device or platform you find most convenient, and makes this information accessible and searchable at anytime, from... Read more
calibre 2.11 - Complete e-library manage...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital... Read more
Herald 5.0.1 - Notification plugin for M...
Note: Versions 2.1.3 (for OS X 10.7), 3.0.6 (for OS X 10.8), and 4.0.8 (for OS X 10.9) are no longer supported by the developer. Herald is a notification plugin for Mail.app, Apple's Mac OS X email... Read more
Firetask 3.7 - Innovative task managemen...
Firetask uniquely combines the advantages of classical priority-and-due-date-based task management with GTD. Stay focused and on top of your commitments - Firetask's "Today" view shows all relevant... Read more
TechTool Pro 7.0.6 - Hard drive and syst...
TechTool Pro is now 7, and this is the most advanced version of the acclaimed Macintosh troubleshooting utility created in its 20-year history. Micromat has redeveloped TechTool Pro 7 to be fully 64... Read more
PhotoDesk 3.0.1 - Instagram client for p...
PhotoDesk lets you view, like, comment, and download Instagram pictures/videos! (NO Uploads! / Image Posting! Instagram forbids that! AND you *need* an *existing* Instagram account). But you can do... Read more

Latest Forum Discussions

See All

Ubisoft Gives Everyone Two New Ways to E...
Ubisoft Gives Everyone Two New Ways to Earn In-Game Stuff for Far Cry 4 Posted by Jessica Fisher on November 21st, 2014 [ permalink ] | Read more »
Golfinity – Tips, Tricks, Strategies, an...
Dig this: Would you like to know what we thought of being an infinite golfer? Check out our Golfinity review! Golfinity offers unlimited ways to test your skills at golf. Here are a few ways to make sure your score doesn’t get too high and your... | Read more »
Dark Hearts, The Sequel to Haunting Meli...
Dark Hearts, The Sequel to Haunting Melissa, is Available Now Posted by Jessica Fisher on November 21st, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Meowza! Toyze Brings Talking Tom to Life...
Meowza! | Read more »
Square Enix Announces New Tactical RPG f...
Square Enix Announces New Tactical RPG for Mobile, Heavenstrike Rivals. Posted by Jessica Fisher on November 21st, 2014 [ permalink ] With their epic stories and gorgeous graphics, | Read more »
Quest for Revenge (Games)
Quest for Revenge 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: The great Kingdom of the west has fallen. The gods ignore the prayers of the desperate. A dark warlord has extinguished... | Read more »
Threadz is a New Writing Adventure for Y...
Threadz is a New Writing Adventure for You and Your Friends Posted by Jessica Fisher on November 21st, 2014 [ permalink ] In the tradition of round-robin storytelling, | Read more »
SteelSeries Stratus XL Hardware Review
Made by: SteelSeries Price: $59.99 Hardware/iOS Integration Rating: 4 out of 5 stars Usability Rating: 4.5 out of 5 stars Reuse Value Rating: 4.25 out of 5 stars Build Quality Rating: 4.5 out of 5 stars Overall Rating: 4.31 out of 5 stars | Read more »
ACDSee (Photography)
ACDSee 1.0.0 Device: iOS iPhone Category: Photography Price: $1.99, Version: 1.0.0 (iTunes) Description: Capture, perfect, and share your photos with ACDSee. The ACDSee iPhone app combines an innovative camera, a powerful photo... | Read more »
ProTube for YouTube (Entertainment)
ProTube for YouTube 2.0.2 Device: iOS Universal Category: Entertainment Price: $1.99, Version: 2.0.2 (iTunes) Description: ProTube is the ultimate, fully featured YouTube app. With it's highly polished design, ProTube offers ad-free... | Read more »

Price Scanner via MacPrices.net

Save up to $400 with Apple refurbished 2014 1...
The Apple Store has restocked Apple Certified Refurbished 2014 15″ Retina MacBook Pros for up to $400 off the cost of new models. An Apple one-year warranty is included with each model, and shipping... Read more
New 13-inch 1.4GHz MacBook Air on sale for $8...
 Adorama has the 2014 13″ 1.4GHz/128GB MacBook Air on sale for $899.99 including free shipping plus NY & NJ tax only. Their price is $100 off MSRP. B&H Photo has the 13″ 1.4GHz/128GB MacBook... Read more
Apple Expected to Reverse Nine-Month Tablet S...
Apple and Samsung combined accounted for 62 percent of the nearly 36 million branded tablets shipped in 3Q 2014, according to early vendor shipment share estimates from market intelligence firm ABI... Read more
Stratos: 30 Percent of US Smartphone Owners t...
Stratos, Inc., creator of the Bluetooth Connected Card Platform, has announced results from its 2014 Holiday Mobile Payments Survey. The consumer survey found that nearly one out of three (30 percent... Read more
2014 1.4GHz Mac mini on sale for $449, save $...
 B&H Photo has lowered their price on the new 1.4GHz Mac mini to $449.99 including free shipping plus NY tax only. Their price is $50 off MSRP, and it’s the lowest price available for this new... Read more
Check Apple prices on any device with the iTr...
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
64GB iPod touch on sale for $249, save $50
Best Buy has the 64GB iPod touch on sale for $249 on their online store for a limited time. Their price is $50 off MSRP. Choose free shipping or free local store pickup (if available). Sale price for... Read more
15″ 2.2GHz Retina MacBook Pro on sale for $17...
 B&H Photo has the 2014 15″ 2.2GHz Retina MacBook Pro on sale for $1799.99 for a limited time. Shipping is free, and B&H charges NY sales tax only. B&H will also include free copies of... Read more
New Logitech AnyAngle Case/Stand Brings Flexi...
Logitec has announced the newest addition to its suite of tablet products — the Logitech AnyAngle. A protective case with an any-angle stand for iPad Air 2 and all iPad mini models, AnyAngle is the... Read more
Notebook PC Shipments Rise Year-Over-Year as...
According to preliminary results from the upcoming DisplaySearch Quarterly Mobile PC Shipment and Forecast Report, the global notebook PC market grew 10 percent year-over-year in Q3’14 to 49.4... Read more

Jobs Board

*Apple* Solutions Consultant (ASC)- Retail S...
**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
Project Manager, *Apple* Financial Services...
**Job Summary** Apple Financial Services (AFS) offers consumers, businesses and educational institutions ways to finance Apple purchases. We work with national and Read more
*Apple* Store Leader Program - College Gradu...
Job Description: Job Summary As an Apple Store Leader Program agent, you can continue your education as you major in the art of leadership at the Apple Store. You'll Read more
*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
Senior Event Manager, *Apple* Retail Market...
…This senior level position is responsible for leading and imagining the Apple Retail Team's global event strategy. Delivering an overarching brand story; in-store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.