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;
 }
}

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

Six fantastic ways to spend National Vid...
As if anyone needed an excuse to play games today, I am about to give you one: it is National Video Games Day. A day for us to play games, like we no doubt do every day. Let’s not look a gift horse in the mouth. Instead, feast your eyes on this... | Read more »
Old School RuneScape players turn out in...
The sheer leap in technological advancements in our lifetime has been mind-blowing. We went from Commodore 64s to VR glasses in what feels like a heartbeat, but more importantly, the internet. It can be a dark mess, but it also brought hundreds of... | Read more »
Today's Best Mobile Game Discounts...
Every day, we pick out a curated list of the best mobile discounts on the App Store and post them here. This list won't be comprehensive, but it every game on it is recommended. Feel free to check out the coverage we did on them in the links below... | Read more »
Nintendo and The Pokémon Company's...
Unless you have been living under a rock, you know that Nintendo has been locked in an epic battle with Pocketpair, creator of the obvious Pokémon rip-off Palworld. Nintendo often resorts to legal retaliation at the drop of a hat, but it seems this... | Read more »
Apple exclusive mobile games don’t make...
If you are a gamer on phones, no doubt you have been as distressed as I am on one huge sticking point: exclusivity. For years, Xbox and PlayStation have done battle, and before this was the Sega Genesis and the Nintendo NES. On console, it makes... | Read more »
Regionally exclusive events make no sens...
Last week, over on our sister site AppSpy, I babbled excitedly about the Pokémon GO Safari Days event. You can get nine Eevees with an explorer hat per day. Or, can you? Specifically, you, reader. Do you have the time or funds to possibly fly for... | Read more »
As Jon Bellamy defends his choice to can...
Back in March, Jagex announced the appointment of a new CEO, Jon Bellamy. Mr Bellamy then decided to almost immediately paint a huge target on his back by cancelling the Runescapes Pride event. This led to widespread condemnation about his perceived... | Read more »
Marvel Contest of Champions adds two mor...
When I saw the latest two Marvel Contest of Champions characters, I scoffed. Mr Knight and Silver Samurai, thought I, they are running out of good choices. Then I realised no, I was being far too cynical. This is one of the things that games do best... | Read more »
Grass is green, and water is wet: Pokémo...
It must be a day that ends in Y, because Pokémon Trading Card Game Pocket has kicked off its Zoroark Drop Event. Here you can get a promo version of another card, and look forward to the next Wonder Pick Event and the next Mass Outbreak that will be... | Read more »
Enter the Gungeon review
It took me a minute to get around to reviewing this game for a couple of very good reasons. The first is that Enter the Gungeon's style of roguelike bullet-hell action is teetering on the edge of being straight-up malicious, which made getting... | Read more »

Price Scanner via MacPrices.net

Take $150 off every Apple 11-inch M3 iPad Air
Amazon is offering a $150 discount on 11-inch M3 WiFi iPad Airs right now. Shipping is free: – 11″ 128GB M3 WiFi iPad Air: $449, $150 off – 11″ 256GB M3 WiFi iPad Air: $549, $150 off – 11″ 512GB M3... Read more
Apple iPad minis back on sale for $100 off MS...
Amazon is offering $100 discounts (up to 20% off) on Apple’s newest 2024 WiFi iPad minis, each with free shipping. These are the lowest prices available for new minis among the Apple retailers we... Read more
Apple’s 16-inch M4 Max MacBook Pros are on sa...
Amazon has 16-inch M4 Max MacBook Pros (Silver and Black colors) on sale for up to $410 off Apple’s MSRP right now. Shipping is free. Be sure to select Amazon as the seller, rather than a third-party... Read more
Red Pocket Mobile is offering a $150 rebate o...
Red Pocket Mobile has new Apple iPhone 17’s on sale for $150 off MSRP when you switch and open up a new line of service. Red Pocket Mobile is a nationwide MVNO using all the major wireless carrier... Read more
Switch to Verizon, and get any iPhone 16 for...
With yesterday’s introduction of the new iPhone 17 models, Verizon responded by running “on us” promos across much of the iPhone 16 lineup: iPhone 16 and 16 Plus show as $0/mo for 36 months with bill... Read more
Here is a summary of the new features in Appl...
Apple’s September 2025 event introduced major updates across its most popular product lines, focusing on health, performance, and design breakthroughs. The AirPods Pro 3 now feature best-in-class... Read more
Apple’s Smartphone Lineup Could Use A Touch o...
COMMENTARY – Whatever happened to the old adage, “less is more”? Apple’s smartphone lineup. — which is due for its annual refresh either this month or next (possibly at an Apple Event on September 9... Read more
Take $50 off every 11th-generation A16 WiFi i...
Amazon has Apple’s 11th-generation A16 WiFi iPads in stock on sale for $50 off MSRP right now. Shipping is free: – 11″ 11th-generation 128GB WiFi iPads: $299 $50 off MSRP – 11″ 11th-generation 256GB... Read more
Sunday Sale: 14-inch M4 MacBook Pros for up t...
Don’t pay full price! Amazon has Apple’s 14-inch M4 MacBook Pros (Silver and Black colors) on sale for up to $220 off MSRP right now. Shipping is free. Be sure to select Amazon as the seller, rather... Read more
Mac mini with M4 Pro CPU back on sale for $12...
B&H Photo has Apple’s Mac mini with the M4 Pro CPU back on sale for $1259, $140 off MSRP. B&H offers free 1-2 day shipping to most US addresses: – Mac mini M4 Pro CPU (24GB/512GB): $1259, $... Read more

Jobs Board

All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.