TweetFollow Us on Twitter

Nov 96 Top 10
Volume Number:12
Issue Number:11
Column Tag:Symantec Top Ten

Symantec Top Ten

By Scott Morison, Symantec Technical Support

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

Q: After upgrading my Mac from 64M to 136MB of RAM the Symantec Project Manager (v8.1) now barks at me with -37 error, saying, “The application Symantec Project Manager cannot start up because of an unknown error.” What gives?

A: This error will occur while launching the Symantec Project Manager on any Macintosh possessing more than 110MB of RAM. There are two ways to fix this:

1) Call or send e-mail to Symantec Technical Support and request the SPM -37 patch.

Phone: (541) 465-8470

E-mail: support@devtools.symantec.com

2) You can make the necessary changes to the Symantec Project Manager yourself using ResEdit:

• Make a copy of the Symantec Project Manager and open it in ResEdit.

• Open the STR# ID 203 in the STR# resource.

• Change the 2nd string of STR# 203 to read, <Options>

• Change the 3rd string of STR# 203 to read, <Prefs>

Q: How do I send and receive data from the a serial port on my Mac?

A: This code sample walks through the basics of sending and receiving character data from a serial port:

[Thanks to Mark Y. Geschelin for the original code this is based on.]

#include <console.h>
#include <Serial.h>
#include <Devices.h>
#include <stdio.h>
#include <console.h>
#include <stdlib.h>
#include <Serial.h>
#include <Devices.h>

#define SERBUFSIZ 1024    // Define the Input buffer size to use
char *inbuf;// pointer to input character buffer
short inRefNum, outRefNum;// Device driver Reference Number holders

/////////////////////////////////////////
//  Initialize the Serial Port   //
/////////////////////////////////////////
OSErr InitializeSerialPort()
{
 OSErr   err;
 SerShk flags;
 Ptr buf;
 // Open Serial Drivers (note: Use “.BIn” and “.BOut” for Printer port)
    // assign Output and Input driver reference numbers
 if (err = OpenDriver(“\p.AOut”,&outRefNum)) return err;
 if (err = OpenDriver(“\p.AIn”, &inRefNum)) return err;  
 
 // Initialize input and output drivers, and 
    // assign basic communication protocols 
 if (err = SerReset(outRefNum,baud57600 + data8 + stop10+noParity))
 return err;
 if (err = SerReset(inRefNum,baud57600 + data8 + stop10+noParity)) 
 return err;
 // Set up the serial input driver to use a buffer of size SERBUFSIZ
 if(!(buf = NewPtr(SERBUFSIZ))) return MemError();
 if (err = SerSetBuf(inRefNum, buf, SERBUFSIZ)) return err;

 // Specify handshaking and cotrol info for the input driver 
 flags.fXOn = false; // XOn/Xoff Output enabled?
 flags.fCTS = true;// Using Clear To Send harware handshaking?
 flags.xOn = 0x11; // Character for XOn
 flags.xOff = 0x13;// Character for XOff
 flags.errs = false; // Abort Input requests if: Parity error
    //           or: Hardware overrun
    //           or: Franing error
 flags.evts = false; // Post event on CTS or Break status change
 flags.fInX = false; // XOn/Xoff Input enabled?
 flags.fDTR = false; // Using Data Terminal Ready flow control

 // Set driver to reflect settings
 if ( err = SerHShake(outRefNum,&flags)) return err;     
 // Allocate input buffer; return reason on failure  
 if (!( inbuf = (char *) NewPtr(SERBUFSIZ))) return MemError();
 
 return noErr;   // noErr = 0
}

////////////////////////////////////////////////////////
// Send a String to the Serial Port              //
////////////////////////////////////////////////////////
void SendSerial(char *outString, long strLen)
{
   FSWrite(outRefNum,  &strLen, outString);
}

[ Thanks to Andrew McFarland, Noah Lieberman and Levi Brown for their contributions. ]


/////////////////////////////
//  Main   //
/////////////////////////////
int main(void)
{
 OSErr err;
 long count;
 char keyChar;

 csetmode(C_RAW,stdin);   // disable echo and line buffering for input

 if (err = InitializeSerialPort()) // Check for failure to initialize port
 printf(“Serial initialization failed. Error = %d\n”,err);
 else
 {
 SendSerial(“ATX\r”,5);   // Send ubiquitous Hayes reset
 keyChar = getchar();// Get a character from stdin
 while (keyChar != 0x1B)  // Loop until escape key is pressed
 {
 if (keyChar > 0)// Is there a character to send?
 SendSerial(&keyChar,1);  // Call SendSerial to send it.
               
 SerGetBuf(inRefNum, &count); 
 // Is there anything in the Input buffer
 if (count) 
 {
 FSRead(inRefNum,&count,inbuf);  
 // Read all chars from Input driver
    // Send to console
 for (long i=0; i < count; putchar(inbuf[i++]));
 }
 keyChar = getchar();// Get another character from stdin
 }
 }
 
 // Clean up: Reset Ports, return pointer
 if(outRefNum) CloseDriver(outRefNum);
 if(inRefNum) CloseDriver(inRefNum);
 if (inbuf)  DisposPtr(inbuf);

 return EXIT_SUCCESS;
}

Q: How do I load and play a sound from a ‘snd ’ resource in my Symantec C/C++ or Pascal application?

A: Here’s an example of how to do just that, in both C and Pascal.

#include <Sound.h>

void CallSndPlay(void);   // Function Prototype
void CallSndPlay()
{
 Handle mySndHandle; // handle to an ‘snd ‘ resource
 SndChannelPtr mySndChan; // pointer to a sound channel
 OSErr myErr;

 void DoError(OSErr);// prototype for your DoError function

 mySndChan = nil;         // Initialize channel ptr for error checking
 mySndHandle = GetResource(‘snd ‘, mySndID); 
 // Read in ‘snd’ resource from resource

 if ( mySndHandle != NULL ) // Check for NULL handle
 {
 myErr = SndPlay (mySndChan, mySndHandle, TRUE);
 if ( myErr )
 DoError(myErr); // You define the function, “DoError.” 
 }
}

int main()
{
 InitToolbox();  // Function you get to define.
 CallSndPlay(9000);// Play ‘snd’ resource ID 9000
}


And the same snippet in Pascal would look like this:

program mySound;
uses Sound;

procedure CallSndPlay (mySndID: integer);

 { Be sure to add the file sound.p to your project }     

var
 mySndHandle: Handle;{ handle to an ‘snd ‘ resource }          
 mySndChan: SndChannelPtr;{ pointer to a sound channel } 
 myErr: OSErr;

begin { CallSndPlay }

 mySndChan   := nil; { Initialize channel ptr for error checking }
   mySndHandle := GetResource(‘snd ‘, mySndID);    
 { Read in ‘snd’ resource from resource }

 if (mySndHandle <> nil) then { check for a nil handle }
 begin
 myErr := SndPlay(mySndChan, mySndHandle, true);
 if (myErr <> noErr) then
 DoError(myErr); { You define the procedure, “DoError.” }
 end;

end;  { CallSndPlay }


begin { Main }
 InitToolbox;    { You need to add this procedure yourself. }
 CallSndPlay(9000);{ Play ‘snd’ resource ID 9000 }
end.  { Main }

Q: How do you view the contents of an array in the Symantec v8.1 Debugger?

A: Highlight the array in the debugger source window and hit Command-D, or just type the name of the array into the data view window.

• Select Address rather than Pointer from the Data menu.

• Turn down the hierarchical arrow to display array contents.

Q: How do I disable the debugging call outs that are embedded in the native Exception handling routines in Symantec C++?

A: Comment out the debugging #defines in, TCL #includes.cpp. Then re-precompile your headers.

Find the lines:

#define TCL_DEBUG// include debugging code, TCL_ASSERT, etc.
#define BR_DEBUG // if debugging BEL
#define TCL_BREAK_CATCH   // enter debugger on catch_all_()
#define TCL_BREAK_FAILURE // enter debugger on Failure()
#define TCL_BREAK_ASSERT  
// enter debugger on TCL_ASSERT fail (2.0.5) and comment them out:
#define TCL_DEBUG// include debugging code, TCL_ASSERT, etc.
#define BR_DEBUG // if debugging BEL
#define TCL_BREAK_CATCH   // enter debugger on catch_all_()
#define TCL_BREAK_FAILURE // enter debugger on Failure()
#define TCL_BREAK_ASSERT  // enter debugger on TCL_ASSERT fail (2.0.5)

Q: How do I convert projects that use MetroWerks proprietary .lib format libraries such as AEGizmos.lib, with Symantec C++.

A: We have recently built a MW .lib library format translator that allows you to simply drop a CodeWarrior v8 .lib format library into your Symantec C/C++ project allowing you to call any routines defined therein. This new translator will be available on our 8.0r6 CD coming this Fall.

If you would like to obtain this translator prior to the release of the CD, feel free to contact Symantec Technical Support:

Phone: 541/465-8470

E-mail: support@devtools.symantec.com

Q: Using Cafe, I have derived class B from class A. Since class B does not have a constructor, how do I pass the parameters to class A?

A: Whenever a class is instantiated, a default constructor (no parameters) is implicitly called if you do not create one explicitly. You need give class B a constructor which will receive the parameters and then pass them on to A via the super keyword.

class B extends A
{
 public B(double  aParameter)
 {
 super(aParameter);
 }
}

Q: Using Cafe how can I make a Component that is drawn to the screen observable since I cannot derive from both Component and Observable?

A: Say you want to make the cells in a Java spreadsheet both Observable and Observers so that you can perform distributed calculations based only on the items that changed, however, the items in your “table” need to be text fields so that the user can input the data. You need to do the following: 1) Create a Cell class that derives from Observable and implements Observer. 2) Create a SmartTextField class that derives from TextField, and make a data member that is a Cell. Now when data is entered in your SmartTextField you can process events in the SmartTextField and set variables in the Cell data member, call its notifyObservers method, etc.

Note: you can also have a reference in the Cell to the SmartTextField that contains it so that you can set the text:

class Cell extends Observable implements Observer
{
 double  curValue;
 double  oldValue;
 double  delta;

 SmartTextField  theText;

 public Cell(SmartTextField  aText)
 {
 theText = aText;
 }
 public void Update(Observable o, Object arg)
 {
 oldValue = curValue;// We are using a model where the cell is both an 
    // observing and observed so if this method is being
    // called then a cell that this object        
    // observes has changed.
 curValue += ((Cell)o).delta; // calculate delta
 theText.setText(“”+curValue);
 // set the SmartTextField to the new Value
 super.setChanged();
 notifyObservers();
 super.clearChanged();       
 }
}

class SmartTextField extends TextField
{
 Cell    theCell;

 public SmartTextField(String someText, int width)
 {
 super(someText, width);
 theCell = new Cell(this);
 }

 ////------ handleEvent ------/////
 public boolean handleEvent(Event evt)
 {
 // when the cell gets the focus, save its value 
    // so we can  check if it has changed when it loses the focus
 if(evt.id == evt.GOT_FOCUS)
 {
 ((SmartTextField)evt.target).selectAll();
 ((SmartTextField)evt.target).theCell.oldVal =                       

 Double.valueOf(((SmartTextField)evt.target)
 .getText()).doubleValue();
 return false;
 }
        
 //lost the focus check to see if the value changed and deal with it
 if(evt.id == evt.LOST_FOCUS)
 {
 //get the value of the current cell
 ((SmartTextField)evt.target).theCell.curVal = 
 Double.valueOf(((SmartTextField)evt.target)
 .getText()).doubleValue();

 //calculate the delta
 ((SmartTextField)evt.target).theCell.delta =  
 ((SmartTextField)evt.target).theCell.curVal -  
 ((SmartTextField)evt.target).theCell.oldVal;

 //if the delta is non zero, i.e. the value was changed
 if ( ((SmartTextField)evt.target).theCell.delta != 0 )
 {
 ((SmartTextField)evt.target).theCell.setChanged();
 ((SmartTextField)evt.target).theCell.notifyObservers();
 return true;
 } 
 else  
 return false;
 }
 else
 return false;
 }
}

 
AAPL
$98.15
Apple Inc.
-0.23
MSFT
$43.58
Microsoft Corpora
-0.31
GOOG
$587.42
Google Inc.
+1.81

MacTech Search:
Community Search:

Software Updates via MacUpdate

Knock 1.1.7 - Unlock your Mac by knockin...
Knock is a faster, safer way to sign in. You keep your iPhone with you all the time. Now you can use it as a password. You never have to open the app -- just knock on your phone twice, even when it's... Read more
Mellel 3.3.6 - Powerful word processor w...
Mellel is the leading word processor for OS X and has been widely considered the industry standard since its inception. Mellel focuses on writers and scholars for technical writing and multilingual... Read more
LibreOffice 4.3.0.4 - Free Open Source o...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
Freeway Pro 7.0 - Drag-and-drop Web desi...
Freeway Pro lets you build websites with speed and precision... without writing a line of code! With it's user-oriented drag-and-drop interface, Freeway Pro helps you piece together the website of... Read more
Drive Genius 3.2.4 - Powerful system uti...
Drive Genius is an OS X utility designed to provide unsurpassed storage management. Featuring an easy-to-use interface, Drive Genius is packed with powerful tools such as a drive optimizer, a... Read more
Vitamin-R 2.15 - Personal productivity t...
Vitamin-R creates the optimal conditions for your brain to work at its best by structuring your work into short bursts of distraction-free, highly focused activity alternating with opportunities for... Read more
Toast Titanium 12.0 - The ultimate media...
Toast Titanium goes way beyond the very basic burning in the Mac OS and iLife software, and sets the standard for burning CDs, DVDs, and now Blu-ray discs on the Mac. Create superior sounding audio... Read more
OS X Yosemite Wallpaper 1.0 - Desktop im...
OS X Yosemite Wallpaper is the gorgeous new background image for Apple's upcoming OS X 10.10 Yosemite. This wallpaper is available for all screen resolutions with a source file that measures 5,418... Read more
Acorn 4.4 - Bitmap image editor. (Demo)
Acorn is a new image editor built with one goal in mind - simplicity. Fast, easy, and fluid, Acorn provides the options you'll need without any overhead. Acorn feels right, and won't drain your bank... Read more
Bartender 1.2.20 - Organize your menu ba...
Bartender lets you organize your menu bar apps. Features: Lets you tidy your menu bar apps how you want. See your menu bar apps when you want. Hide the apps you need to run, but do not need to... Read more

Latest Forum Discussions

See All

Empire Manager (Games)
Empire Manager 1.0 Device: iOS iPhone Category: Games Price: $3.99, Version: 1.0 (iTunes) Description: Become ruler of an empire. Manage your economy, develop technology, hire an army and conquer the world in this addictive turn-... | Read more »
Empire Manager HD (Games)
Empire Manager HD 1.0 Device: iOS Universal Category: Games Price: $7.99, Version: 1.0 (iTunes) Description: Become ruler of an empire. Manage your economy, develop technology, hire an army and conquer the world in this addictive... | Read more »
Star Admiral Review
Star Admiral Review By Rob Thomas on July 30th, 2014 Our Rating: :: ADMIRABLE ADMIRALSUniversal App - Designed for iPhone and iPad While this new digital CCG may feel a bit familiar, Star Admiral offers a sci-fi twist and galaxy’s... | Read more »
Zap! Pow! Become a Badass Wizard in Phan...
Zap! Pow! | Read more »
Urban Trial Freestyle Review
Urban Trial Freestyle Review By Blake Grundman on July 30th, 2014 Our Rating: :: RIDIN' DIRTYUniversal App - Designed for iPhone and iPad A rough ride that has trouble keeping its wheels on the track.   | Read more »
Take Note! Noteshelf Has Recieved a Big...
Take Note! Noteshelf Has Recieved a Big Update. Posted by Jessica Fisher on July 30th, 2014 [ permalink ] iPad Only App - Designed for the iPad | Read more »
Cubama Review
Cubama Review By Nadia Oxford on July 30th, 2014 Our Rating: :: TETRIIIIIS IIIIIN SPAAAAACE!Universal App - Designed for iPhone and iPad With its addictive challenge and interesting premise, Cubama is frantic screen-tapping fun.   | Read more »
Become a Guardians of Galactic Peace Wit...
Become a Guardians of Galactic Peace With the New Spacefaring Sim, Kairobotica. Posted by Jessica Fisher on July 30th, 2014 [ permalink ] | Read more »
Soul Guardians: Age of Midgard Review
Soul Guardians: Age of Midgard Review By George Fagundes on July 30th, 2014 Our Rating: :: SO MUCH GRIND IT CRUNCHESUniversal App - Designed for iPhone and iPad Swords and trading cards are fun, right? So is Soul Guardians: Age of... | Read more »
NFL Fantasy Football App Redesigned Ahea...
NFL Fantasy Football App Redesigned Ahead of Upcoming 2014 Season Posted by Ellis Spice on July 30th, 2014 [ permalink ] | Read more »

Price Scanner via MacPrices.net

More iPad Upgrade Musings – The ‘Book Mystiqu...
Much discussed recently, what with Apple reporting iPad sales shrinkage over two consecutive quarters, is that it had apparently been widely assumed that tablet users would follow a two-year hardware... Read more
13-inch 2.5GHz MacBook Pro on sale for $999,...
Best Buy has the 13″ 2.5GHz MacBook Pro available for $999.99 on their online store. Choose free shipping or free instant local store pickup (if available). Their price is $100 off MSRP. Price is... Read more
Save up to $300 on an iMac with Apple refurbi...
The Apple Store has Apple Certified Refurbished iMacs available for up to $300 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free. These are the best prices on... Read more
WaterField Unveils 15″ Outback Solo & 13″...
Hard on the heels of Apple’s refreshed MacBook Pro Retina laptops announcement, WaterField Designs has unveiled a 15-inch version of the waxed-canvas and leather Outback Solo and a 13-inch version of... Read more
New Roxio Toast 12 Delivers Digital Media Pow...
Roxio Toast 12 is a hub for sharing digital media to virtually any platform or device. has introduced two new additions to its Roxio Toast product family – Roxio Toast 12 Titanium and Roxio Toast 12... Read more
The lowest prices on leftover Retina MacBook...
Best Buy has dropped prices on leftover 13″ and 15″ Retina MacBook Pros by up to $300 off original MSRP on their online store for a limited time. Choose free local store pickup (if available) or free... Read more
Apple Updates MacBook Pro with Retina Display...
Apple today updated its MacBook Pro with Retina display with faster processors and double the amount of memory in both entry-level configurations. MacBook Pro with Retina display features a Retina... Read more
Up to $250 price drop on leftover 15-inch Mac...
B&H Photo has dropped prices on 2013 15″ Retina MacBook Pros by as much as $250 off original MSRP. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.3GHz Retina MacBook Pro: $2349... Read more
Updated MacBook Pro Price Trackers
We’ve updated our MacBook Pro Price Trackers with the latest information on prices, bundles, and availability on the new 2014 models from Apple’s authorized internet/catalog resellers as well as... Read more
Apple updates MacBook Pros with slightly fast...
Apple updated 13″ and 15″ Retina MacBook Pros today with slightly faster Haswell processors. 13″ models now ship with 8GB of RAM standard, while 15″ MacBook Pros ship with 16GB across the board. Most... 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
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
*Apple* Solutions Consultant (ASC) - Apple (...
**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
Sr. Product Leader, *Apple* Store Apps - Ap...
**Job Summary** Imagine what you could do here. At Apple , great ideas have a way of becoming great products, services, and customer experiences very quickly. Bring Read more
*Apple* Solutions Consultant (ASC) - Apple (...
**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
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.