TweetFollow Us on Twitter

Oct 94 Tips
Volume Number:10
Issue Number:10
Column Tag:Tips &Tidbits

Related Info: Color Quickdraw

Tips &Tidbits

By Scott T Boyd, Editor

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

Tip Of The Month

Faster Color

RGBForeColor and RGBBackColor can take a surprising amount of time, especially if your main drawing loop calls both routines before most drawing operations. Even if you call RGBForeColor with the color that’s currently foremost, it still recalculates the best possible foreground color! By remembering the results of RGBForeColor and RGBBackColor, you can significantly increase your drawing speed; this example program shows a drawing speed increase of 20%!

The program is written to be pasted into a brand new Think C Project; no MacTraps library is required here. It dumps you into MacsBug at the end with location $40 holding the unoptimized time and $44 holding the optimized time. You can use locations $40 through $5B, inclusive, for debugging purposes.


/* 1 */
#include <QuickDraw.h>
#include <Windows.h>
#include <Palettes.h>
#include <Events.h>

void main(void) {
    CWindowRecord   cwr;
    WindowPtr       wp;
    Rect            bounds = {100, 50, 100 + 256, 50 + 100};
    RGBColor        theColor;
    unsigned short  i, lp;
    unsigned short  start, stop, inc;
    long            startT, stopT;
    long            ColorIndex[1000];
    short           optimized;

    InitGraf( NewPtr(2000) + 1000);
    InitCursor();
    InitFonts();
    InitWindows();
    InitMenus();
    TEInit();
    InitDialogs(0);

    wp = NewCWindow(&cwr,&bounds,"\pFill",TRUE,zoomDocProc,0,TRUE,237);
    SetPort(wp);
    OffsetRect(&bounds, -bounds.left, -bounds.top);

    for (optimized = 0; optimized <= 1; optimized++) {
        startT = TickCount();
    
        if (optimized) {
            for (i = 0; i < 256 * 255; i += 256) {
                theColor.red = i;
                theColor.green = i;
                theColor.blue = i;
                RGBForeColor(&theColor);
                ColorIndex[i >> 8] = cwr.port.fgColor;
            }
        } 
        PenPat((Pattern *)"\xF0\xF0\xF0\xF0\xF0\xF0\xF0\xF0");
        for (lp = 0; lp < 99; lp++) {
            MoveTo(0, 0);
            if (lp & 1) {
                start = 0;
                inc = 256;
                stop = 256 * 255;
            } else {
                stop = 0;
                start = 256 * 255;
                inc = -256;
            }
            for (i = start; i != stop; i += inc) {
                if (!optimized) {
                    theColor.red = theColor.green 
 = theColor.blue 
 = i;
                    RGBForeColor(&theColor);
                    theColor.red   = theColor.green 
 = theColor.blue 
 = 65536 - 256 - i;
                    RGBBackColor(&theColor);
                } else {
                    cwr.port.rgbFgColor.red 
 = cwr.port.rgbFgColor.green 
 = cwr.port.rgbFgColor.blue 
 = i;
                    cwr.port.fgColor =
                        ColorIndex[cwr.port.rgbFgColor.red >> 8];
                    cwr.port.rgbBkColor.red 
 = cwr.port.rgbBkColor.green 
 = cwr.port.rgbBkColor.blue 
 = 65536 - 256 - i;
                    cwr.port.bkColor =
                        ColorIndex[cwr.port.rgbBkColor.red >> 8];
                }
                Line(100, 0);
                Move(-100, 1);
            }
        }
        stopT = TickCount();
        if (!optimized) {
            *(long *)0x40 = stopT - startT;
        } else {
            *(long *)0x44 = stopT - startT;
        }
    }
    DebugStr("\p;dm 40");
    CloseWindow(wp);
}

- Jörg ‘jbx’ Brown

San Francisco, CA

Got a developer tip you’ve been keeping to yourself but really need to share? Think you have a better trick up your sleeve? Send us your tips and tricks, especially programming-related tips, but don’t hold back if you’ve got programmer’s user tips.

We want your tips! We pay $25 for every tip used, and $50 for Tip of the Month. You can take your award in orders or subscriptions if you prefer.

Make sure code compiles, and send tips by e-mail. See page two for our addresses.

Not Such A Drag After All

The drag manager is really cool and can make apps a lot more intuitive, but it’s a pain to debug since process switches are disabled while drags occur. Since both Think C’s and Metrowerks’ debugger require these, you cannot use them. Never fear! You can use The Debugger!

While we’re on the subject, here’s a gotcha for you. Watch out for a bug that causes deadlock if you call WaitNextevent from a drag receive handler.

- Rod Magnuson,

Cupertino, CA

Going Faster with Symantec TPM

Symantec C++, both versions 6.0 and 7.0, do not have the compilers as part of Think Project Manager. Instead, they are kept as quasi-standalone applications inside the Translators folder (located in the Symantec C++ folder). This goes for the C, C++, and rez compilers, as well as the .o converter. When the user tells Think Project Manager to compile a file, TPM looks at the file’s extension (such as .cp for a C++ file), and launches the appropriate compiler (or translator, as Symantec calls them). This is documented in the Symantec manuals.

What isn’t documented, however, is the process by which TPM launches the translators. As it is shipped from the factory, when TPM is launched, it turns around and launches the C++ translator and keeps it in memory. The C translator is left on the disk, and called when necessary. This works great if you do most of your work in C++. But if you’re like me, and work mostly in C, this slows down the compilation process because every time a C file is to be compiled, the C translator must launched and loaded into memory, while the C++ translator sits there in memory with nothing to do.

What’s a C user to do? Simply modify the C and C++ translators to work the way you want them to. Using ResEdit (or resource editor of your choice), open ‘INFO’ resource number 0 in the translator named Think C (Symantec graciously includes a ResEdit template for this). Change the setting of Memory Resident Translator? from 0 to 1. Close and save your changes. Voila! The C translator will now be loaded and kept in memory by TPM when it is launched. In one simple step, C compiles are now speeded up. The more files that are being compiled, the greater the speed increase. For instance, a one-file compile is not speeded up much, but if you’re working with large projects, the speed increase can be significant.

If you want to free up some memory, you can also modify the C++ translator (named Symantec C++) to not be memory resident.

- Chris Hawk

San Francisco, CA

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

The beginner's guide to Warbits
Warbits is a turn-based strategy that's clearly inspired by Nintendo's Advance Wars series. Since turn-based strategy games can be kind of tricky to dive into, see below for a few tips to help you in the beginning. Positioning is crucial [Read... | Read more »
How to upgrade your character in Spellsp...
So you’ve mastered the basics of Spellspire. By which I mean you’ve realised it’s all about spelling things in a spire. What next? Well you’re going to need to figure out how to toughen up your character. It’s all well and good being able to spell... | Read more »
5 slither.io mash-ups we'd love to...
If there's one thing that slither.io has proved, it's that the addictive gameplay of Agar.io can be transplanted onto basically anything and it will still be good fun. It wouldn't be surprising if we saw other developers jumping on the bandwagon,... | Read more »
How to navigate the terrain in Sky Charm...
Sky Charms is a whimsical match-'em up adventure that uses creative level design to really ramp up the difficulty. [Read more] | Read more »
Victorious Knight (Games)
Victorious Knight 1.3 Device: iOS Universal Category: Games Price: $1.99, Version: 1.3 (iTunes) Description: New challenges awaits you! Experience fresh RPG experience with a unique combat mechanic, packed with high quality 3D... | Read more »
Agent Gumball - Roguelike Spy Game (Gam...
Agent Gumball - Roguelike Spy Game 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Someone’s been spying on Gumball. What the what?! Two can play at that game! GO UNDERCOVERSneak past enemy... | Read more »
Runaway Toad (Games)
Runaway Toad 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: It ain’t easy bein’ green! Tap, hold, and swipe to help Toad hop to safety in this gorgeous new action game from the creators of... | Read more »
PsyCard (Games)
PsyCard 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: From the makers och Card City Nights, Progress To 100 and Ittle Dew PSYCARD is a minesweeper-like game set in a cozy cyberpunk... | Read more »
Sago Mini Robot Party (Education)
Sago Mini Robot Party 1.0 Device: iOS Universal Category: Education Price: $2.99, Version: 1.0 (iTunes) Description: -- Children's Technology Review Editor's Choice -- | Read more »
Egz – The Origin of the Universe (Games...
Egz – The Origin of the Universe 1.0.2 Device: iOS Universal Category: Games Price: $3.99, Version: 1.0.2 (iTunes) Description: ►►► Special offer until 2nd may : get the game at 2.99€ instead of 3.99€ ! ◄◄◄ Egz is a mesmerizing mix... | Read more »

Price Scanner via MacPrices.net

Mac minis on sale for up to $100 off MSRP
B&H Photo has Mac minis on sale for up to $100 off MSRP including free shipping plus NY sales tax only: - 1.4GHz Mac mini: $449 $50 off MSRP - 2.6GHz Mac mini: $649 $50 off MSRP - 2.8GHz Mac mini... Read more
13-inch Retina MacBook Pros on sale for up to...
B&H Photo has 13″ Retina MacBook Pros on sale for $130-$200 off MSRP. Shipping is free, and B&H charges NY tax only: - 13″ 2.7GHz/128GB Retina MacBook Pro: $1169 $130 off MSRP - 13″ 2.7GHz/... Read more
Apple price trackers, updated continuously
Scan our Apple Price Trackers for the latest information on sales, bundles, and availability on systems from Apple’s authorized internet/catalog resellers. We update the trackers continuously: - 15″... Read more
SanDisk Half-Terabyte SSD Optimized for Every...
SanDisk Corporation has announced the SanDisk Z410 SSD, a cost-competitive, half-terabyte solid state drive (SSD) that enables manufacturers to design for a broad range of desktop PCs and laptops.... Read more
Churchill Downs Racetrack Selects VenueNext t...
Churchill Downs Racetrack has announced an agreement with VenueNext to implement its technology platform for the start of Churchill Downs 2016 Spring Meet, which includes the 142nd running of the... Read more
Record 700 Million Pounds of CE Recycled in 2...
The Consumer Technology Association (CTA) reports that a record-setting 700 million pounds of consumer electronics (CE) have been recycled under the eCycling Leadership Initiative (ELI). According to... Read more
Price drops on clearance 12-inch Retina MacBo...
B&H Photo has dropped prices on leftover 2015 12″ Retina MacBooks with models now available starting at $999. Shipping is free, and B&H charges NY tax only: - 12″ 1.1GHz Gray Retina MacBook... Read more
15-inch Retina MacBook Pros available for $20...
B&H Photo has 15″ Retina MacBook Pros on sale for up to $210 off MSRP. Shipping is free, and B&H charges NY tax only: - 15″ 2.2GHz Retina MacBook Pro: $1799 $200 off MSRP - 15″ 2.5GHz Retina... Read more
Target offers Apple Watch Sport for $50 off M...
Target has Apple Watch Sports on sale for $50 off MSRP for a limited time. Choose free shipping or free local store pickup (if available). Sale prices for online orders only, in-store prices may vary... Read more
Apple restocks Certified Refurbished Mac mini...
Apple has restocked Certified Refurbished 2014 Mac minis, with models available starting at $419. Apple’s one-year warranty is included with each mini, and shipping is free: - 1.4GHz Mac mini: $419 $... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Restaurant Manager (Neighborhood Captain) - A...
…in every aspect of daily operation. WHY YOU'LL LIKE IT: You'll be the Big Apple . You'll solve problems. You'll get to show your ability to handle the stress and Read more
Restaurant Manager (Neighborhood Captain) - A...
…in every aspect of daily operation. WHY YOU'LL LIKE IT: You'll be the Big Apple . You'll solve problems. You'll get to show your ability to handle the stress and Read more
Simply Mac *Apple* Specialist- Service Repa...
Simply Mac is the largest premier retailer of Apple products in the nation. In order to support our growing customer base, we are currently looking for a driven Read more
*Apple* Retail - Multiple Positions - Apple,...
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
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.