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
$565.32
Apple Inc.
-5.24
MSFT
$29.07
Microsoft Corpora
-0.04
GOOG
$603.66
Google Inc.
-5.80
MacTech Search:
Community Search:

Empire of the Eclipse Review
Empire of the Eclipse Review By Carter Dotson on May 24th, 2012 Our Rating: :: OVERSHADOWINGiPhone App - Designed for the iPhone, compatible with the iPad Empire of the Eclipse is an ambitious strategy MMO that is very deep, and... | Read more »
Bejeweled HD Review
Bejeweled HD Review By Jennifer Allen on May 24th, 2012 Our Rating: :: ADDICTIVEiPad Only App - Designed for the iPad The iPad version of the ever addictive Match Three title.   Developer: PopCap Price: $3.99 Version Reviewed: 1... | Read more »
Facebook Releases New Camera App To Stre...
While not a replacement for Instagram, Facebook Camera is a good first step in this month+ old union of the two companies. Released today, Facebook camera looks to streamline the viewing of photos and the uploading of them. The app allows you to... | Read more »
Missile Monkey Review
Missile Monkey Review By Lisa Caplan on May 24th, 2012 Our Rating: :: FLYING LOWUniversal App - Designed for iPhone and iPad Missile Monkey is a must miss   Developer: Munsey Clan Games Price: $0.99 Version Reviewed: 1.0 Device... | Read more »
Boomlings Review
Boomlings Review By Lisa Caplan on May 24th, 2012 Our Rating: :: FUN FREEBIEUniversal App - Designed for iPhone and iPad Boomlings is a traditional matching puzzle game, with some explosive twists   | Read more »
Dave vs Cave Review
Dave vs Cave Review By Jason Wadsworth on May 24th, 2012 Our Rating: :: WATCH FOR FALLING ROCKSUniversal App - Designed for iPhone and iPad Kid falls down hole, kid gets trapped in cave, kid fights evil rock monsters to escape... | Read more »
Python Pocket Power: Python Bytes 3 – Mo...
Python fans are certain to welcome the best bits from the penultimate season of the BBC sketch comedy in a new iPhone app: Python Bytes 3 – Monty Python Series 3. If you have a flair for the obvious, you’ll correctly assume this is third in a series... | Read more »

Price Scanner via MacPrices.net

13″ 2.8GHz MacBook Pro on sale for $100 off MSRP
Adorama has lowered their price on the 13″ 2.8GHz MacBook Pro to $1399 including free shipping plus NY/NJ sales tax only. Their price is $100 off MSRP, and it’s the lowest price for this model from... Read more
Apple refurbished iPads available starting at $279
 The Apple Store Online has dropped prices on Apple Certified Refurbished iPad 2s and original iPads by as much as $50, with models now starting at $279. Apple’s one-year warranty is included with... Read more
Security Based Portable Operating System, Pocket D...
In conjunction with their consumer technology product, Pocket Desktop, a USB device that offers consumers enhanced security and portability in computing, has announced a new strategic alliance with... Read more
Apple’s Jonathan Ive Knighted By Britain’s Princes...
The BBC reports that Apple Senior Vice President Of Industrial Design Jonathan Ive is now Sir Jonathan Ive, having been knighted by Queen Elizabeth II’s daughter Anne, the Princess Royal (and an iPad... Read more
Microsoft Fixing to release Office for iOS and And...
BGR’s Jonathan S. Geller says BGR has learned from a “reliable source” that Microsoft is planning to release the company’s full Office suite for not only Apple’s iPad, but for Android tablets as well... Read more
Mac mini Server available for $949, $50 off MSRP
Adorama has Mac mini Servers on sale for $949 including free shipping. Their price is $50 off MSRP, and it’s the lowest price available for this model from any Apple Authorized Reseller. NY and NJ... Read more
21″ 2.7GHz iMac on sale for $1399, $100 off full r...
Adorama has the 21″ 2.7GHz iMac on sale for $1399 including free shipping. Their price is $100 off MSRP, and it’s the lowest price for this model from any Apple Authorized Reseller. NY and NJ sales... Read more
iMacs on sale bundled with free upgrade to 8GB RAM
MacConnection has 2011 iMacs in stock today with a free upgrade to 8GB of RAM. Shipping is also free. Their prices represent a $200+ savings over custom 8GB iMacs at The Apple Store: - 21″ 2.5GHz... Read more

Jobs Board

Helpdesk Support Technician - Mac Expert...
Mac hardwaresoftware preferably as a Mac Genius or Apple technician Demonstrated ability to troubleshoot ... in Mac OS X/Windows OS administration, exp supporting Mac, certified Apple and/or Windows... Read more
Mac Expert - Apple Online Store at Apple...
before calling a helpdesk for assistance). Description The Mac Expert is responsible for providing consultative ... to be effective, the Mac Expert will be knowledgeable about Mac product features... Read more
iOS Developer (iPhone and iPad) at Mahal...
Mahalo is looking for talented iOS developers to join its team of highly skilled engineers. Weve already released multiple successful apps in the Apple App Store with well over a million installs... Read more
MAC Imaging/Packaging, Administration.Pr...
Skills: Very good experience in building MAC ( Apple Macintosh ) operating system images. OS imaging Knowledge on ... Knowledge on configuring the LAN and Wireless network on MAC note books Knowledge... Read more
*Apple* Solutions Consultant-Retail Sal...
Requisition Number 15545402 Job title Apple Solutions Consultant-Retail Sales Location Mobile Country United States City Mobile State Alabama Job type Job description Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.