TweetFollow Us on Twitter

Mar 93 Tips, Tidbits
Volume Number:9
Issue Number:3
Column Tag:Tips & Tidbits

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 2 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

Writing code that will walk your array instead of using a standard loop to access the array elements will improve the speed of the code 40-400% depending on the compiler you use.

Standard array access:

FOR index := 1 TO kNumOfElements DO
    theArray[index] := someNumber;

Optimized access:
{--elementSize is the size of one array element. This is an example }
{  of an array of long integers, therefore SizeOf(LongInt)}
   elementSize := SizeOf(LongInt);
   elementPtr := LongIntPtr(arrayHandle^); {--Ptr to 1st array elmnt.}
   endArrayAddress := ORD4(elementPtr) + elementSize * kNumOfElements;
   WHILE ORD(elementPtr) < endArrayAddress DO
   BEGIN
   elementPtr^ := someNumber;  {--elementPtr^ accesses the array }
  {elements.  Increment the elementPtr }
  {to point to the next elt in the array.}
   elementPtr := LongIntPtr(ORD(elementPtr) + elementSize);
   END;

Essentially, you're forcing the compiler to generate more efficient code for your loop.

-- Marek Hajek, Reno, Nevada

Self Documenting Code

Do yourself a favor: write self-documented code. Have you ever looked over source code that makes no sense whatsoever? Worse yet, have you ever looked at your own code six months later and you can't make heads or tails of it?

Try self-documented code. This is where you name functions and variables so well that there is no mistake about what they do.

Consider a function you are writing that, say, strips off all the trailing space characters from a string. The WRONG names to give this function are "String1," "StrStrip," "FixString," to name a few. A far better name would be:

  remove_trailing_spaces_from_string

Yes, the name is long, but it pays off in a big way! If you came back a year later and looked at the code, well, what does this function do? Duh! Does it remove trailing spaces from a string, perhaps?!

The same rule applies to variable declarations. Instead of the ol' fashion "i," "k," etc., start naming your variables real English names that make sense. Example:

length_of_text instead if "i" or "len"

number_of_records instead of "r"

users_name instead of "UserStr" or "str"

You will find this system is worth far more than pages of (meaningless?) comments!

- Gar, DataPak Software

DrawPicture Bug

There is a crashing bug in DrawPicture that can happen when you draw pictures that contain very wide PixMaps. DTS has verified that this is a bug in QuickDraw (on machines with IIci ROMs or later running 7.0 or later. Currently, that means the IIci, IIfx, LC, IIsi, Classic II, PowerBook 140 and 170, and the Quadras all have this bug). Thanks to Forrest Tanaka for the following information.

The problem happens with pictures that contain direct PixMaps that have been compressed using run-length encoding. The bug is that DrawPicture allocates two times the rowBytes value of the direct PixMap on the stack without first checking to make sure that there’s enough space to grow the stack that big. For wide PixMaps, two times the rowBytes can be very big, and so the stack can easily overflow when you try to draw a picture that contains a wide PixMap.

A reasonable work-around for this bug is to increase the size of the area of memory that’s reserved for your stack, which is just above your application’s heap. By default, Color QuickDraw machines provide you with a 24K stack. The widest possible PixMap has 16K per row, so multiply that by two and you get 32K as a maximum amount of stack space DrawPicture needs to draw the direct PixMap. Add to this a lot of slop for all the other stuff that you’ll have on the stack when you call DrawPicture, and a 48K to 64K stack becomes reasonable, in my opinion at least.

Increasing the size of the area of memory for the stack is done by setting the address of the top of your heap farther down from where it is by default. The SetApplLimit routine lets you set this address, and the GetApplLimit routine gives you the current address of the top of your heap. To add space to the memory that’s set aside for your stack, you can use something like the following line of code:

SetApplLimit(Ptr(Ord4(GetApplLimit) - kAdditionalStackRequirements));

kAdditionalStackRequirements is the number of bytes of stack space you’d like above and over the default stack size. Make sure you call this before calling any other routine - before MaxApplZone, MoreMasters, and InitGraf.

If you want to find the existing size of area of memory for the stack, you can get the address of the bottom of the stack (the part that’s highest in memory) from the low-memory global called CurStackBase which is located at $0908. Subtract from this the return value of GetApplLimit, and you get the current size of the area of memory for your stack.

- Mike Scanlin, Mountain View, CA

Excerpt taken from DTS answer

The Easy way to store disks

I have looked far and wide for a way to store hundreds of diskettes. Most of the vendors want big dollars for custom disk holders. They look great in plastic or metal. Holding hundreds of disks though can get very expensive.

I have found that a three-drawer kit can be assembled easily. These kits are found in the hardware section of your local retailer. They are in the place where the furniture is sold for garages and children's rooms.

These drawers are made out of particle board and masonite. Each drawer is 4 1/2" high by 15" deep by 13" wide. I can put in 3 rows or 100 disks per row in these with plenty of room to thumb through the diskettes. That is 300 diskettes per drawer.

They can be assembled even by me or my kids in about 20 minutes. And instead of paying $100's to hold the disks, I have less than $25 into holding 900+ diskettes.

The disk holders are 15" High x 15" wide x 15" deep. They are manufactured by SturdiCraft, 2742 Homdale Rd., Klamath Falls, OR 97603 phone (503) 882-4406. They are available through Fred Meyer, Sears catalog sales, HomeBase and many local hardware stores. Or they are available direct from SturdiCraft for $34.30 including shipping and handling. Ask for Model S-350. Some assembly required.

- Bruce Kyle, Beaverton, Oregon

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

Tokkun Studio unveils alpha trailer for...
We are back on the MMORPG news train, and this time it comes from the sort of international developers Tokkun Studio. They are based in France and Japan, so it counts. Anyway, semantics aside, they have released an alpha trailer for the upcoming... | Read more »
Win a host of exclusive in-game Honor of...
To celebrate its latest Jujutsu Kaisen crossover event, Honor of Kings is offering a bounty of login and achievement rewards kicking off the holiday season early. [Read more] | Read more »
Miraibo GO comes out swinging hard as it...
Having just launched what feels like yesterday, Dreamcube Studio is wasting no time adding events to their open-world survival Miraibo GO. Abyssal Souls arrives relatively in time for the spooky season and brings with it horrifying new partners to... | Read more »
Ditch the heavy binders and high price t...
As fun as the real-world equivalent and the very old Game Boy version are, the Pokemon Trading Card games have historically been received poorly on mobile. It is a very strange and confusing trend, but one that The Pokemon Company is determined to... | Read more »
Peace amongst mobile gamers is now shatt...
Some of the crazy folk tales from gaming have undoubtedly come from the EVE universe. Stories of spying, betrayal, and epic battles have entered history, and now the franchise expands as CCP Games launches EVE Galaxy Conquest, a free-to-play 4x... | Read more »
Lord of Nazarick, the turn-based RPG bas...
Crunchyroll and A PLUS JAPAN have just confirmed that Lord of Nazarick, their turn-based RPG based on the popular OVERLORD anime, is now available for iOS and Android. Starting today at 2PM CET, fans can download the game from Google Play and the... | Read more »
Digital Extremes' recent Devstream...
If you are anything like me you are impatiently waiting for Warframe: 1999 whilst simultaneously cursing the fact Excalibur Prime is permanently Vault locked. To keep us fed during our wait, Digital Extremes hosted a Double Devstream to dish out a... | Read more »
The Frozen Canvas adds a splash of colou...
It is time to grab your gloves and layer up, as Torchlight: Infinite is diving into the frozen tundra in its sixth season. The Frozen Canvas is a colourful new update that brings a stylish flair to the Netherrealm and puts creativity in the... | Read more »
Back When AOL WAS the Internet – The Tou...
In Episode 606 of The TouchArcade Show we kick things off talking about my plans for this weekend, which has resulted in this week’s show being a bit shorter than normal. We also go over some more updates on our Patreon situation, which has been... | Read more »
Creative Assembly's latest mobile p...
The Total War series has been slowly trickling onto mobile, which is a fantastic thing because most, if not all, of them are incredibly great fun. Creative Assembly's latest to get the Feral Interactive treatment into portable form is Total War:... | Read more »

Price Scanner via MacPrices.net

Early Black Friday Deal: Apple’s newly upgrad...
Amazon has Apple 13″ MacBook Airs with M2 CPUs and 16GB of RAM on early Black Friday sale for $200 off MSRP, only $799. Their prices are the lowest currently available for these newly upgraded 13″ M2... Read more
13-inch 8GB M2 MacBook Airs for $749, $250 of...
Best Buy has Apple 13″ MacBook Airs with M2 CPUs and 8GB of RAM in stock and on sale on their online store for $250 off MSRP. Prices start at $749. Their prices are the lowest currently available for... Read more
Amazon is offering an early Black Friday $100...
Amazon is offering early Black Friday discounts on Apple’s new 2024 WiFi iPad minis ranging up to $100 off MSRP, each with free shipping. These are the lowest prices available for new minis anywhere... Read more
Price Drop! Clearance 14-inch M3 MacBook Pros...
Best Buy is offering a $500 discount on clearance 14″ M3 MacBook Pros on their online store this week with prices available starting at only $1099. Prices valid for online orders only, in-store... Read more
Apple AirPods Pro with USB-C on early Black F...
A couple of Apple retailers are offering $70 (28%) discounts on Apple’s AirPods Pro with USB-C (and hearing aid capabilities) this weekend. These are early AirPods Black Friday discounts if you’re... Read more
Price drop! 13-inch M3 MacBook Airs now avail...
With yesterday’s across-the-board MacBook Air upgrade to 16GB of RAM standard, Apple has dropped prices on clearance 13″ 8GB M3 MacBook Airs, Certified Refurbished, to a new low starting at only $829... Read more
Price drop! Apple 15-inch M3 MacBook Airs now...
With yesterday’s release of 15-inch M3 MacBook Airs with 16GB of RAM standard, Apple has dropped prices on clearance Certified Refurbished 15″ 8GB M3 MacBook Airs to a new low starting at only $999.... Read more
Apple has clearance 15-inch M2 MacBook Airs a...
Apple has clearance, Certified Refurbished, 15″ M2 MacBook Airs now available starting at $929 and ranging up to $410 off original MSRP. These are the cheapest 15″ MacBook Airs for sale today at... Read more
Apple drops prices on 13-inch M2 MacBook Airs...
Apple has dropped prices on 13″ M2 MacBook Airs to a new low of only $749 in their Certified Refurbished store. These are the cheapest M2-powered MacBooks for sale at Apple. Apple’s one-year warranty... Read more
Clearance 13-inch M1 MacBook Airs available a...
Apple has clearance 13″ M1 MacBook Airs, Certified Refurbished, now available for $679 for 8-Core CPU/7-Core GPU/256GB models. Apple’s one-year warranty is included, shipping is free, and each... Read more

Jobs Board

Seasonal Cashier - *Apple* Blossom Mall - J...
Seasonal Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Seasonal Fine Jewelry Commission Associate -...
…Fine Jewelry Commission Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) Read more
Seasonal Operations Associate - *Apple* Blo...
Seasonal Operations Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Read more
Hair Stylist - *Apple* Blossom Mall - JCPen...
Hair Stylist - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Read more
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
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.