TweetFollow Us on Twitter

Apr 93 Tips, Tidbits
Volume Number:9
Issue Number:4
Column Tag:Tips & Tidbits

Related Info: Script Manager

Tips & Tidbits

By Neil Ticktin, Editor-in-Chief

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.

Tip of the month

Here is a simple routine that returns a Boolean indicating whether the monitor is currently set at black & white or color.

/* 1 */

Boolean IsColorOn( void )
{
 GDHandle hGDevice;
 long   theMode;
 
 hGDevice = GetMainDevice();
 theMode = (**hGDevice).gdMode;
 theMode &= 0x0000000F;
 
 if( theMode != 0 ) return( true );
 else return( false );
}

I figured out how to write this piece of code after struggling with the concept for many months. It’s not a very complex routine, but I searched through every source I had available and never found anything that explained how to do it. I hope this will help others having the same problem.

- Marc White, Corinth, Mississippi

Script Manager Pitfall

If you plan to work with non-Roman script (such as Kanji, Arabic, Hebrew, etc ), there is a subtle - but important - point that Inside Macintosh will not tell you.

Script Manager functions can return wrong answers if the appropriate font is not set in the current GrafPort.

For example, there is a Script Manager function called CharByte which tells you if a given character is part of a two-byte script (or not). After reading the description of CharByte in Inside Macintosh, you will conclude it will know the right answer simply by looking at a piece of text. Wrong!

Unless the current font is a Kanji font, CharByte has no way of knowing that a given character is part of a double-byte Kanji character or whether it is a single-byte Roman character.

The reason is all 256 byte values are “valid” for all Roman fonts. If the current font is, say, Geneva, CharByte will think that 1/2 of a Kanji byte is really a single Roman character.

This is neither clear in Inside Macintosh Vol 5 nor the World Script section in Vol 6, but it is a fairly major point!

- Gar, DataPak Software

Apple’s Lame Disk Cache

After seeing significant I/O performance problems with large disk caches (set via the Memory control panel) I decided to run some benchmarks. I wrote a little application that would write a 400K file to a hard disk in 8K sector aligned chunks with various disk cache sizes and return to me the number of ticks that it took. Here are the results:

400K write

disk cache size 8K at a time

32K 50 ticks

64K 50 ticks

96K 51 ticks

128K 50 ticks

192K 50 ticks

256K 50 ticks

384K 691 ticks

512K 681 ticks

1024K 681 ticks

7680K 678 ticks

It appears that the Apple’s disk cache scheme hits a wall at 384K (in this test, anyway). I linked DTS with these results and got an interesting reply. It turns out that their disk cache scheme is optimized for very small reads and writes - like an application reading one byte at a time from a file without doing it's own buffering. I guess this was a problem back when most people used floppies and small hard drives. But modern apps usually do their own file buffering anyway (read a big piece into a buffer and then take it out of the buffer one byte at a time), so the Apple disk cache scheme becomes more of a hinderance than a help.

Not all reads and writes are cached by the Apple scheme. The formula it uses to decide if any given read or write should be cached is:

/* 2 */

numCacheBlocks = user-defined cache size DIV 512;
maxCachedReadWrite = (numCacheBlocks - 1) * 16;

So, with a cache size of 256K you get:

numCacheBlocks = 512
maxCachedReadWrite = 8176

That means that any read/write larger than 8176 bytes or larger will not be cached. So in my test app, nothing was being cached until the cache was 384K or larger, at which time my 8K writes were being cached (and I got a 13x performance slow-down).

There is hope, though. Page 2-95 of the new Inside Macintosh File Manager documents the "no cache" bit of ioPosMode. You can set bit 5 of ioPosMode to prevent your reads and writes from being cached. I strongly recommend you do this except in those few cases where you know you're going to need the data again right away or where you're not doing your own intelligent sector-aligned buffering. When I set this bit in my test app, my times for writing 400K with very large caches were the same as those for writing 400K with very small caches.

That's great for your code but what about other code that you can't control and that doesn't take advantage of bit 5 of ioPosMode? The only real defense is to reduce your disk cache to the minimum (32K) at which time only very small reads and writes will be cached (1008 bytes or less). But in my own tests with compiling large projects under MPW and Think C I have found that a disk cache size of 128K gives the fastest build times. You should do your own timings based on what type of I/O operations you do most.

- Mike Scanlin

MacTech Regular Contributor

Useless Trivia or a tip?

This is perhaps more fit for “Useless Trivia” than is is for “Tips and Tidbits,” but no matter, here it is:

Nearly every piece of C code that I ever see (even in MacTech Magazine) uses parentheses around all return statements. People always seem to write:

int theirfunc()
{
  .
  .
  return (1);
}

Even the examples in K&R itself use parentheses around the return statments. But look at the actual syntax reference in K&R: “if,” “while,” “for,” and “switch” all require parens, but “return” does not. For years, using many compilers, on many machines, I've been writing:

int myfunc()
{
  .
  .
  return 1;
}

It may look odd, but try it - it does work!

- Ken Gladstone

MacTech Technical Editor

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Monterey Cache Cleaner 17.0.4 - Clear ca...
Monterey Cache Cleaner is an award-winning general-purpose tool for macOS X. MCC makes system maintenance simple with an easy point-and-click interface to many macOS X functions. Novice and expert... Read more
Transmit 5.8.5 - Excellent FTP/SFTP clie...
Transmit is an excellent FTP (file transfer protocol), SFTP, S3 (Amazon.com file hosting) and iDisk/WebDAV client that allows you to upload, download, and delete files over the internet. With the... Read more
Xcode 13.4 - Integrated development envi...
Xcode includes everything developers need to create great applications for Mac, iPhone, iPad, and Apple Watch. Xcode provides developers a unified workflow for user interface design, coding, testing... Read more
Paragon Firewall 2.0 - Powerful firewall...
The Paragon Firewall - Network Monitor application gives you the full control over your Mac, protects the privacy of your computer, prevents unwanted network connections. Network Monitor discloses... Read more
Geekbench 5.4.5 - Measure processor and...
Geekbench provides a comprehensive set of benchmarks engineered to quickly and accurately measure processor and memory performance. Designed to make benchmarks easy to run and easy to understand,... Read more
The Unarchiver 4.3.5 - Replacement for t...
The Unarchiver is a much more capable replacement for "Archive Utility.app", the built-in archive unpacker program in OS X. The Unarchiver is designed to handle many more formats than Archive Utility... Read more
WhatsApp 2.2216.8 - Desktop client for W...
WhatsApp is the desktop client for WhatsApp Messenger, a cross-platform mobile messaging app which allows you to exchange messages without having to pay for SMS. WhatsApp Messenger is available for... Read more
ffWorks 3.0.5 - Convert multimedia files...
ffWorks, focused on simplicity, brings a fresh approach to the use of FFmpeg, allowing you to create ultra-high-quality movies without the need to write a single line of code on the command-line.... Read more
Bartender 4.1.49 - Organize your menu-ba...
Bartender lets you organize your menu-bar apps by hiding them, rearranging them, or moving them to Bartender's Bar. You can display the full menu bar, set options to have menu-bar items show in the... Read more
Steam v020 (1642451672) - Multiplayer an...
Steam is a digital distribution, digital rights management, multiplayer and communications platform developed by Valve Corporation. It is used to distribute a large number of games and related media... Read more

Latest Forum Discussions

See All

Major ‘Pokemon Home’ 2.0.0 Update Out No...
A major update for Pokemon Home (Free) for iOS, Android, and Nintendo Switch has just gone live in the form of Pokemon Home 2.0.0. The Pokemon Company recently revealed that this update was coming soon, and it has finally gone live bringing some... | Read more »
SwitchArcade Round-Up: Reviews Featuring...
Hello gentle readers, and welcome to the SwitchArcade Round-Up for May 17th, 2022. In today’s article, we have a little news to check out before we head into two full-sized reviews. Mini Motorways just hit the Switch last week after successful runs... | Read more »
The 10 Best Open World Games on Nintendo...
Open world games have been flying high since Grand Theft Auto III popularized the concept more than twenty years ago, and they show no signs of slowing down with the likes of Elden Ring continuing to chew up the sales charts. While the Nintendo... | Read more »
Roguelike First-Person Looter Shooter ‘G...
One of the most anticipated releases for many has been the mobile port of roguelike first-person looter shooter Gunfire Reborn from Duoyi Games, but it has been kind of a rocky road to get there. Originally launching on PC last fall, a mobile... | Read more »
‘Apex Legends Mobile’ Is Out Now on iOS...
After following the Apex Legends Mobile announcements over the years, it has finally launched on iOS and Android worldwide. Apex Legends Mobile has had early tests, a soft launch, and more leading up to today’s release. While pre-registrations... | Read more »
‘Pokemon Unite’ UNITE Club Membership No...
Pokemon Unite (Free) on iOS, Android, and Nintendo Switch has just launched an optional paid subscription in the form of the UNITE Club membership. This is priced at $9.99 a month and it includes various benefits like gems, trial holowear each week... | Read more »
Hand-Drawn ‘Monkey Island’-Inspired Poin...
Point-and-click adventure games are a perfect fit for mobile devices, and there have been dozens of fantastic adventures released on mobile over the years. Now Short Sleeve Studio is looking to add another to that list with their upcoming title... | Read more »
SwitchArcade Round-Up: Reviews Featuring...
Hello gentle readers, and welcome to the SwitchArcade Round-Up for May 16th, 2022. In today’s article, we’ve got reviews of a few recent releases. Dungeons of Dreadrock, Eiyuden Chronicle: Rising, and Prinny Presents NIS Classics Volume 2 are in the... | Read more »
Best iPhone Game Updates: ‘Fighting Fant...
Hello everyone, and welcome to the week! It’s time once again for our look back at the noteworthy updates of the last seven days. A very spicy assortment of updates have arrived, with plenty of faces we don’t see very often in these hallowed halls.... | Read more »
A Steam Deck Verified Podcast – The Touc...
In this week’s podcast Eli is jumping for joy after spending the past week with his shiny new Steam Deck. We talk about the things we love about the hardware, the games that play well on it, and plenty more. Is this slowly morphing into a Steam Deck... | Read more »

Price Scanner via MacPrices.net

New today at Apple: Clearance 2020 10.9″ iPad...
Apple has Certified Refurbished 2020 10.9″ iPad Airs now available in their online store in a variety of configurations. Models start at $469 and range up to $190 off Apple’s original MSRP. Each iPad... Read more
Prices continue to drop on Apple Refurbished...
Other World Computing has dropped prices again on Apple refurbished, factory-sealed, just-discontinued 27″ 5K iMacs with models now on sale for up to $814 off Apple’s MSRP, starting at only $985.... Read more
Apple has clearance 27″ 5K iMacs available st...
Apple has clearance, Certified Refurbished, 2020 27″ 5K iMacs available starting at $1299 and ranging up to $560 off original MSRP. Apple’s one-year warranty is standard, shipping is free, and each... Read more
Use your Apple Education discount to take $10...
Need a new 13″ Apple MacBook? Whether you’re a student, teacher, or staff member, you can use your .edu email address when ordering at Apple Education to take $100 off the price of a new MacBook. All... Read more
In stock today and on sale: Silver 13″ M1 Mac...
Amazon has Apple’s Silver 13″ MacBook Pros with M1 Apple Silicon processors in stock today and on sale for $150-$250 off MSRP for a limited time. Shipping is free. These prices are the lowest the... Read more
Mac Studio with M1 Max CPU in stock and on sa...
Apple reseller Simply Mac has the new Mac Studio with M1 Max CPU (10-Core CPU) in stock and on sale for $1899.99 including free shipping. Their price is $100 off Apple’s MSRP, and it’s the lowest... Read more
In stock: Open-box 16″ M1 Pro MacBook Pros fo...
Having trouble finding a 16″ M1 Pro MacBook Pro to buy? QuickShip Electronics has open-box return 16″ M1 Pro MacBook Pros in stock and on sale for $350-$450 off MSRP on their eBay store right now,... Read more
Apple Watch SE models are on sale today for u...
Amazon has Apple Watch SE GPS models on sale today for $50 off MSRP including free shipping. Their prices are the lowest currently available for SE Watches: – 40mm Apple Watch SE: $229, save $50 –... Read more
Switch to Red Pocket Mobile and get an Apple...
Switch to Red Pocket Mobile and get an Apple iPhone SE for $100 off MSRP, plus get free 6 months of Unlimited nationwide service with the purchase of any iPhone. Red Pocket Mobile is a nationwide... Read more
8.3″ WiFi iPad minis are in stock today and o...
Amazon is offering sale prices on Apple’s 8.3″ WiFi iPad minis ranging up to $100 off MSRP, depending on configuration. Prices start at $409. Most models are in stock today with free shipping. Amazon... Read more

Jobs Board

Cashier - *Apple* Blossom Mall - JCPenney (...
Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Mall Read more
Sephora Beauty Advisor - *Apple* Blossom Ma...
Sephora Beauty Advisor - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Omnichannel Associate - *Apple* Blossom Mal...
Omnichannel Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Operations Associate - *Apple* Blossom Mall...
Operations Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Systems & Applications Specialist I - *A...
Systems & Applications Specialist I - Apple / Mac Desktop Support Focus **Texas Medical Center-Houston, Texas** Information Technology UTHealth Administration Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.