home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************************************/
- /* */
- /* Program Name: Stiletto */
- /* */
- /* File Name: TermWindow.c */
- /* */
- /* © Apple Computer, Inc. 1991-1995 */
- /* All Rights Reserved */
- /* */
- /* Revision History: */
- /* */
- /* Date Who Modification */
- /* */
- /* 1991-07-04 Chris Halim Original version */
- /* 1995-06-26 Jaakko Railo Version 2.0 */
- /* */
- /************************************************************************************************/
-
- /****************************************** DESCRIPTION ******************************************
-
- *************************************************************************************************/
-
- /******************************************** HEADERS *******************************************/
-
- #include "CommResources.h"
- #include "Gestalt.h"
- #include "Resources.h"
- #include "stdio.h"
- #include "string.h"
- #include "Strings.h"
- #include "ToolUtils.h"
-
- #include "Telephones.h"
-
- #include "Constants.h"
- #include "DNHandlers.h"
- #include "DNWindow.h"
- #include "LogWindow.h"
- #include "Preferences.h"
- //#include "RPWindow.h"
- #include "TermWindow.h"
- #include "Utilities.h"
-
- /****************************************** DEFINITIONS *****************************************/
-
- /****************************************** PROTOTYPES ******************************************/
-
- Boolean DoTelWindowMouseDown (const EventRecord *theEvent);
- void DoTelWindowClick (WindowPtr theWindow, const EventRecord * theEvent);
- void DoTelWindowActivate (WindowPtr theWindow, Boolean becomingActive);
- void DoTelWindowUpdate (WindowPtr theWindow);
- void DoTelWindowOSEvent (const EventRecord *theEvent);
- void DoTelWindowSuspend (Boolean doClipConvert);
- void DoTelWindowResume (Boolean doClipConvert);
-
- OSErr CreateDNList (TelWindowPtr telWindow);
- OSErr CreateDNWindowList (TelWindowPtr telWindow);
- OSErr DummyCreateDNWindowList (TelWindowPtr telWindow);
-
- void DisplaySelectedDNs (TelWindowPtr telWindow);
- void ShowDNWindow (TelWindowPtr telWindow, short whichDN);
-
- OSErr ListTelTools (void);
- TELHandle CreateTelInfoRec (void);
-
- void HandleTermHookMsg (TELHandle termHand, short mtype, short value);
- void HandleTermKeyMsg (TELHandle termHand, short mtype, short value);
- void HandleTermVolMsg (TELHandle termHand, short mtype, short value);
- void HandleTermDispMsg (TELHandle termHand, short mtype, short value);
- void HandleTermEnableMsg (TELHandle termHand, short mtype, short value);
- void HandleTermOpenMsg (TELHandle termHand, short mtype, short value);
- void HandleTermCloseMsg (TELHandle termHand, short mtype, short value);
- void HandleTermResetMsg (TELHandle termHand, short mtype, short value);
- void HandleTermErrorMsg (TELHandle termHand, short mtype, short value);
- void HandleTermIndHSStateChgMsg (TELHandle termHand, short mtype, short value);
- void HandleTermIndHSConnectMsg (TELHandle termHand, short mtype, short value);
- void HandleTermKeyImmMsg (TELHandle termHand, short mtype, short value);
- void HandleTermVolStateMsg (TELHandle termHand, short mtype, short value);
- void HandleTermOtherMsg (TELHandle termHand, short mtype, short value);
-
- void AdjustInternalDataStructures (TelWindowPtr telWindow);
- short GetConfigString (char * config);
-
- void HandleChoose (TelWindowPtr telWindow);
- void HandleConfig (TelWindowPtr telWindow);
- void HandleSelect (TelWindowPtr telWindow, short modifiers);
- //void HandleRP (TelWindowPtr telWindow, short modifiers);
-
- OSErr CreateFeatureList (TelWindowPtr telWindow);
-
- DNWindowPtr GetFirstSelectedDNWindow (TelWindowPtr telWindow);
-
- void PrepareGetAnyCADLOGUserItems (DialogPtr theDialog, TelWindowPtr telWindow);
- void BuildAnyCAMenu (MenuHandle theMenu, TelWindowPtr telWindow);
- TELCAHandle GetNthCAFromTelList (short n, TelWindowPtr telWindow);
-
- void PrepareGetAnyDNDLOGUserItems (DialogPtr theDialog, TelWindowPtr telWindow);
- void BuildAnyDNMenu (MenuHandle theMenu, TelWindowPtr telWindow);
- TELDNHandle GetNthDNFromTelList (short n, TelWindowPtr telWindow);
-
- /******************************************** GLOBALS *******************************************/
-
- extern LogWindowPtr gLogWindow;
- extern TelWindowPtr gTelWindow;
-
- extern TelephoneTermMsgUPP gTermMsgHandlerUPP;
- extern ModalFilterUPP gStandardFilterUPP;
- extern UserItemUPP gDrawBoxUPP;
- extern UserItemUPP gDrawDefaultUPP;
-
- /************************************************************************************************/
- /************************************************************************************************/
-
-
- #pragma segment Initialize
- OSErr InitCTBManagers (void)
- {
- OSErr errCode = noErr;
-
- if ((errCode = InitCRM ()) == crmNoErr) {
- if ((errCode = InitCTBUtilities ()) == ctbuNoErr) {
- if ((errCode = InitTEL ()) != noErr)
- AlertUser ("\pTelephone Manager needs to be installed before using this program !", errCode);
-
- } else
- AlertUser ("\pInitCTBUtilities Failed !!", errCode);
- } else
- AlertUser ("\pInitCRM Failed !!", errCode);
-
- return (errCode);
- }
-
-
- #pragma segment Main
- short CreateTelWindow (TelWindowPtr * telWindow, const Rect * windowRect, TELHandle hTEL)
- {
- WindowPtr savedPort;
- Ptr tPtr;
- short height;
- Str255 toolName;
- Rect tRect;
- ControlHandle theControl;
- OSErr errCode;
- RgnHandle grayRgn;
- Ptr configStr;
-
- /**
- ** Create storage for the window record. We will pass this to GetNewWindow().
- **
- **/
-
- tPtr = NewPtrClear (sizeof (TelWindowRec));
- if (tPtr == nil) {
- AlertUser ("\pNot enough memory to create tel window !", MemError ());
- return (-1);
- }
-
- /**
- ** Get a "WIND" resource for the tel window.
- **
- **/
-
- if (HasColorQD())
- *telWindow = (TelWindowPtr) GetNewCWindow (rTelWIND, tPtr, (WindowPtr)(-1L));
- else
- *telWindow = (TelWindowPtr) GetNewWindow (rTelWIND, tPtr, (WindowPtr)(-1L));
-
- if (*telWindow == nil) {
- AlertUser ("\pUnable to get a WIND resource for tel window!", ResError ());
- DisposPtr (tPtr);
- return (-1);
- }
-
- /**
- ** Move and resize the window according to the rect passed in windowRect.
- ** Also make sure that the window is within the screen boundary.
- **
- **/
-
- grayRgn = GetGrayRgn ();
- if (windowRect && !EmptyRect(windowRect) && RectInRgn (windowRect, grayRgn)) {
- MoveWindow ((WindowPtr) *telWindow, windowRect->left, windowRect->top, false);
- height = windowRect->bottom - windowRect->top;
- SizeWindow ((WindowPtr) *telWindow, windowRect->right - windowRect->left,
- height, true);
- }
-
- /**
- ** Set the window's characteristics.
- **
- **/
-
- GetPort (&savedPort);
- SetPort ((WindowPtr) *telWindow);
- TextSize (9);
- (void) GetNewControl (rChooseCNTL, (WindowPtr) *telWindow);
- (void) GetNewControl (rConfigCNTL, (WindowPtr) *telWindow);
- (void) GetNewControl (rSelectCNTL, (WindowPtr) *telWindow);
- (void) GetNewControl (rDeselectCNTL, (WindowPtr) *telWindow);
- // (void) GetNewControl (rRPCNTL, (WindowPtr) *telWindow);
-
- theControl = ((WindowPeek) *telWindow)->controlList;
- while (theControl != nil) {
- HiliteControl (theControl, 0xFF);
- theControl = (*theControl)->nextControl;
- }
-
- SetPort (savedPort);
-
- ShowWindow ((WindowPtr) *telWindow);
-
- if (hTEL) {
- (*hTEL)->userData = (long) *telWindow;
-
- (*telWindow)->fTELHandle = hTEL;
-
- // InstallTermHandler (*telWindow); /* TEMPORARY */
-
- if ((errCode = TELOpenTerm (hTEL)) != noErr)
- PutCLine (gLogWindow, kErrorColor, "### TELOpenTerm failed : %d", errCode);
- else {
- InstallTermHandler (*telWindow);
-
- TELGetToolName ((**(*telWindow)->fTELHandle).procID, toolName);
- SetWTitle ((WindowPtr)*telWindow, toolName);
-
- (void) CreateDNList (*telWindow);
-
- (void) CreateFeatureList (*telWindow);
- }
- }
- else if (ListTelTools () == noErr) {
- if (((*telWindow)->fTELHandle = CreateTelInfoRec ()) != nil) {
-
- (*(*telWindow)->fTELHandle)->userData = (long) *telWindow;
-
- PutLine (gLogWindow, "Config :");
- if ((configStr = TELGetConfig ((*telWindow)->fTELHandle)) != nil)
- PutLine (gLogWindow, " %s", configStr);
- else
- PutCLine (gLogWindow, kErrorColor, "### TELGetConfig failed");
- DisposePtr (configStr);
-
- InstallTermHandler (*telWindow);
-
- TELGetToolName ((**(*telWindow)->fTELHandle).procID, toolName);
- SetWTitle ((WindowPtr)*telWindow, toolName);
-
- (void) CreateDNList (*telWindow);
-
- (void) CreateFeatureList (*telWindow);
- }
- }
-
- SetRect (&tRect, 0,0,0,0);
- // (void) CreateRPWindow (&(*telWindow)->fRPWindow, &tRect, (*telWindow)->fTELHandle);
-
- #ifdef DEBUGNOCARD
-
- PutLine (gLogWindow, "Entering no card debug mode.");
- if (CreateDNList (*telWindow) == nil) {}
-
- #endif /* DEBUGNOCARD */
-
- return (noErr);
- }
-
-
- void DisposeTelWindow (TelWindowPtr telWindow)
- {
- short item, numOfItems = CountMItems (GetMenu (rFeatureMenu));
- TELHandle termHand;
- // OSErr errCode;
- DNWindowPtr dnWindow, tDNWindow;
-
- termHand = telWindow->fTELHandle;
-
- if (telWindow) {
-
- dnWindow = telWindow->fDNWindowList;
- while (tDNWindow = dnWindow) {
- dnWindow = dnWindow->next;
- DisposeDNWindow (tDNWindow);
- }
-
- if (telWindow->fDNList)
- LDispose (telWindow->fDNList);
-
- /*
- FeatureListPtr theList, previous;
-
- if (theList = telWindow->fFeatureList) {
- while (theList) {
- previous = theList;
- theList = theList->nextFeature;
- DisposPtr ((Ptr) previous);
- }
- }
- */
- for (item = numOfItems; item >= 1; --item)
- DelMenuItem (GetMenu (rFeatureMenu), item);
-
- // if (telWindow->fRPWindow)
- // DisposeRPWindow (telWindow->fRPWindow);
-
- // if (termHand) {
- // if ((errCode = TELClrTermMsgHand (termHand, gTermMsgHandlerUPP)) != noErr)
- // PutCLine (gLogWindow, kErrorColor, "### TELClrTermMsgHand failed : %d", errCode);
- //
- // if ((errCode = TELCloseTerm (termHand)) != noErr)
- // PutCLine (gLogWindow, kErrorColor, "### TELCloseTerm fails : %d", errCode);
- //
- // if ((errCode = TELDispose (termHand)) != noErr)
- // PutCLine (gLogWindow, kErrorColor, "### TELDispose fails : %d", errCode);
- // }
-
- DisposeWindow ((WindowPtr) telWindow);
- }
- }
-
-
- Boolean IsHandledByTelWindow (TelWindowPtr telWindow, const EventRecord * theEvent)
- {
- char key;
- WindowPtr theWindow;
- Boolean wasHandled = false;
- TELHandle termHand = nil;
-
- switch (theEvent->what) {
- case autoKey :
- case keyDown :
- theWindow = FrontWindow ();
- break;
- case mouseDown :
- (void) FindWindow(theEvent->where, &theWindow);
- break;
- default :
- theWindow = (WindowPtr) theEvent->message;
- }
-
- if (GetWRefCon (FrontWindow()) == (long) telWindow->fTELHandle)
- TELEvent (telWindow->fTELHandle, theEvent);
-
- if (telWindow != nil) {
- termHand = telWindow->fTELHandle;
-
- if ((wasHandled = IsHandledByDNWindowList (telWindow->fDNWindowList, theEvent)) == false) {
- // if ((wasHandled = IsHandledByRPWindow (telWindow->fRPWindow, theEvent)) == false) {
-
- switch ( theEvent->what ) {
- case mouseDown:
- if (theWindow == (WindowPtr) telWindow) {
- wasHandled = DoTelWindowMouseDown (theEvent);
- }
- break;
-
- case activateEvt:
- // first give a chance for the tool to update its menu, selection, etc.
- if (telWindow->fTELHandle != nil)
- TELActivate (telWindow->fTELHandle, (theEvent->modifiers & activeFlag) != 0);
-
- if ((TelWindowPtr) theEvent->message == telWindow) {
- DoTelWindowActivate ((WindowPtr) telWindow, (theEvent->modifiers & activeFlag) != 0);
- wasHandled = true;
- }
- break;
-
- case updateEvt:
- if ((TelWindowPtr) theEvent->message == telWindow) {
- DoTelWindowUpdate ((WindowPtr) telWindow);
- wasHandled = true;
- }
- break;
-
- case osEvt:
-
- if (telWindow->fTELHandle != nil)
- TELResume (telWindow->fTELHandle, (theEvent->message & resumeFlag) != 0);
-
- if ((TelWindowPtr) FrontWindow () == telWindow) {
- DoTelWindowOSEvent (theEvent);
- wasHandled = false;
- }
- break;
-
- case keyDown:
- case autoKey:
- if ((TelWindowPtr) FrontWindow() == telWindow) {
- key = theEvent->message & charCodeMask;
- if ( theEvent->modifiers & cmdKey ) { // Command key is down
- wasHandled = false;
- }
- else {
- switch (key) {
- case leftArrowKey :
- case upArrowKey :
- SelectPreviousCell (telWindow->fDNList);
- wasHandled = true;
- break;
-
- case rightArrowKey :
- case downArrowKey :
- SelectNextCell (telWindow->fDNList);
- wasHandled = true;
- break;
-
- case crKey :
- case enterKey :
- DisplaySelectedDNs (telWindow);
- wasHandled = true;
- break;
-
- case 'd' :
- DumpSelectedDNEvents (telWindow);
- wasHandled = true;
- break;
-
- case 'D' :
- DumpSelectedDNInfo (telWindow);
- wasHandled = true;
- break;
-
- case 'e' :
- case 'E' :
- DumpTermEvents (telWindow);
- wasHandled = true;
- break;
-
- case 'i' :
- case 'I' :
- DumpTermInfo (telWindow);
- wasHandled = true;
- break;
-
- default :
- wasHandled = false;
- }
- }
- }
- break;
-
- default :
- wasHandled = false;
- }
- // }
- }
-
- if (termHand != nil)
- TELIdle (termHand);
- }
-
- return (wasHandled);
- }
-
-
- Boolean DoTelWindowMouseDown (const EventRecord *theEvent)
- {
- short part;
- WindowPtr theWindow;
- Boolean wasHandled = false;
-
- part = FindWindow(theEvent->where, &theWindow);
- switch ( part ) {
- case inContent:
- if ( theWindow != FrontWindow() )
- SelectWindow(theWindow);
-
- DoTelWindowClick (theWindow, theEvent);
-
- wasHandled = true;
- break;
-
- default :
- wasHandled = false;
- }
-
- return (wasHandled);
- }
-
-
- void DisplaySelectedDNs (TelWindowPtr telWindow)
- {
- Cell tCell;
-
- SetPt (&tCell, 0, 0);
- while (LGetSelect (true, &tCell, telWindow->fDNList)) {
- ShowDNWindow (telWindow, tCell.v);
- if (! LNextCell (true, true, &tCell, telWindow->fDNList))
- break;
- }
- }
-
-
- void DoTelWindowClick (WindowPtr theWindow, const EventRecord * theEvent)
- {
- Point mousePos;
- Boolean dblClicked;
- WindowPtr savedPort;
- short part;
- ControlHandle theControl;
-
- GetPort (&savedPort);
- SetPort (theWindow);
-
- mousePos = theEvent->where;
- GlobalToLocal (&mousePos);
-
- if (((TelWindowPtr) theWindow)->fDNList != nil) {
- dblClicked = LClick (mousePos, theEvent->modifiers, ((TelWindowPtr) theWindow)->fDNList);
-
- if (dblClicked == true) {
- DisplaySelectedDNs ((TelWindowPtr) theWindow);
- }
- }
-
- part = FindControl (mousePos, theWindow, &theControl);
- switch (part) {
- case 0 : // invisible or inactive control was clicked
- break;
-
- case inThumb :
- break;
-
- case inButton :
- part = TrackControl (theControl, mousePos, nil);
- if (part != 0) {
- switch (GetCRefCon (theControl)) {
- case rChooseCNTL :
- HandleChoose ((TelWindowPtr) theWindow);
- break;
-
- case rConfigCNTL :
- HandleConfig ((TelWindowPtr) theWindow);
- break;
-
- case rSelectCNTL :
- HandleSelect ((TelWindowPtr) theWindow, theEvent->modifiers);
- break;
-
- case rDeselectCNTL :
- HandleSelect ((TelWindowPtr) theWindow, true);
- break;
-
- // case rRPCNTL :
- // HandleRP ((TelWindowPtr) theWindow, theEvent->modifiers);
- // break;
- }
- }
- break;
-
- case inCheckBox:
- break;
- }
-
- SetPort (savedPort);
- }
-
-
- void DoTelWindowActivate (WindowPtr theWindow, Boolean becomingActive)
- {
- WindowPtr savedPort;
- ControlHandle theControl;
-
- GetPort (&savedPort);
- SetPort (theWindow);
-
- theControl = ((WindowPeek) theWindow)->controlList;
- while (theControl != nil) {
- HiliteControl (theControl, (becomingActive)? 0 : 255);
- theControl = (*theControl)->nextControl;
- }
-
- if (((TelWindowPtr) theWindow)->fDNList != nil)
- LActivate (becomingActive, ((TelWindowPtr) theWindow)->fDNList);
-
- SetPort (savedPort);
- }
-
-
- void DoTelWindowUpdate (WindowPtr theWindow)
- {
- WindowPtr savedPort;
- Rect tRect;
-
- BeginUpdate (theWindow);
- if ( ! EmptyRgn (theWindow->visRgn) )
- {
- GetPort (&savedPort);
- SetPort (theWindow);
-
- // EraseRect(&theWindow->portRect);
- UpdtControl (theWindow, theWindow->visRgn);
-
- if (((TelWindowPtr) theWindow)->fDNList != nil) {
- LUpdate (theWindow->visRgn, ((TelWindowPtr) theWindow)->fDNList);
-
- tRect = (*((TelWindowPtr) theWindow)->fDNList)->rView;
- InsetRect (&tRect, -1, -1);
- FrameRect (&tRect);
- }
- SetPort (savedPort);
- }
- EndUpdate (theWindow);
- }
-
-
- void DoTelWindowOSEvent (const EventRecord *theEvent)
- {
- Boolean doConvert;
- unsigned char evType;
-
- evType = (unsigned char) (theEvent->message >> 24) & 0x00ff; // Get the high byte.
- switch (evType) { // The high byte of message is the type of event.
- case suspendResumeMessage :
- doConvert = (theEvent->message & convertClipboardFlag) != 0;
-
- if ((theEvent->message & resumeFlag) == 0)
- DoTelWindowSuspend (doConvert);
- else
- DoTelWindowResume (doConvert);
- break;
- }
- }
-
-
- void DoTelWindowSuspend (Boolean doClipConvert)
- {
- #pragma unused (doClipConvert)
-
- DoTelWindowActivate (FrontWindow(), false);
- }
-
-
- void DoTelWindowResume (Boolean doClipConvert)
- {
- #pragma unused (doClipConvert)
-
- InitCursor ();
- DoTelWindowActivate (FrontWindow(), true);
- }
-
-
- OSErr CreateDNList (TelWindowPtr telWindow)
- {
- Rect rView, dataBounds;
- Point cSize;
- Rect **rectHandle;
-
- SetRect (&dataBounds, 0, 0, 1, 0); // one-column list
-
- SetPt (&cSize, 0, 0); // use default cell size
-
- rectHandle = (Rect **) Get1Resource ('RECT', rDNListRECT);
- if (rectHandle) {
- rView = **rectHandle;
- rView.right -= 15;
- ReleaseResource ((Handle) rectHandle);
- } else {
- rView = ((WindowPtr) telWindow)->portRect; // the rect where list is displayed
- rView.right -= 15;
- }
-
- if ((telWindow->fDNList = lnew (&rView, &dataBounds, &cSize, 0, (WindowPtr)telWindow,
- true, false, false, true)) != nil) {
-
- LActivate (false, telWindow->fDNList);
-
- #ifdef DEBUGNOCARD
- return (DummyCreateDNWindowList (telWindow));
- #else
- return (CreateDNWindowList (telWindow));
- #endif /* DEBUGNOCARD */
- }
- else
- return (MemError());
- }
-
-
- #ifdef DEBUGNOCARD
- OSErr DummyCreateDNWindowList (TelWindowPtr telWindow)
- {
- OSErr errCode = noErr;
- short numOfDNs, index;
- TELDNHandle dnHand = nil;
- DNWindowPtr *tDNWindow;
- Cell tCell;
- char *dn[3];
-
- dn[0] = "12345";
- dn[1] = "67890";
- dn[2] = "chris";
-
- tDNWindow = &telWindow->fDNWindowList;
-
- numOfDNs = 3;
-
- for (index = 1; index <= numOfDNs; ++index) {
- *tDNWindow = CreateDNWindow (dnHand, dn[index-1]);
- if (*tDNWindow != nil) {
- tDNWindow = &(*tDNWindow)->next;
-
- SetPt (&tCell, 0, index-1);
- LAddRow (1, index-1, telWindow->fDNList);
- LSetCell (dn[index-1], 5, tCell, telWindow->fDNList);
- }
- else
- PutCLine (gLogWindow, kErrorColor, "### CreateDNWindow fails");
- }
-
- if (numOfDNs > 0) { // hilite the first row & column
- SetPt (&tCell, 0, 0);
- LSetSelect (true, tCell, telWindow->fDNList);
- }
-
- return (errCode);
- }
- #endif /* DEBUGNOCARD */
-
-
- OSErr CreateDNWindowList (TelWindowPtr telWindow)
- {
- OSErr errCode;
- TELHandle termHand;
- Boolean physical = false; //false means both logical & physical DNs
- short numOfDNs = 0, index;
- TELDNHandle dnHand;
- DNWindowPtr *tDNWindow;
- Cell tCell;
- Str31 title;
- short len;
- Str255 tString;
-
- termHand = telWindow->fTELHandle;
- tDNWindow = &telWindow->fDNWindowList;
-
- if (termHand != nil) {
- numOfDNs = TELCountDNs (termHand, telAllDNs, physical);
-
- for (index = 1; index <= numOfDNs; ++index) {
- errCode = TELDNLookupByIndex (termHand, telAllDNs, physical, index, &dnHand);
- if (errCode == noErr) {
- sprintf ((char *) title, "dnHand = 0x%x", dnHand);
- *tDNWindow = CreateDNWindow (dnHand, (char *) title);
- if (*tDNWindow != nil) {
- tDNWindow = &(*tDNWindow)->next;
-
- SetPt (&tCell, 0, index-1);
- LAddRow (1, index-1, telWindow->fDNList);
-
- // LSetCell ((*dnHand)->dn+1, (*dnHand)->dn[0], tCell, telWindow->fDNList);
- // len = sprintf ((char *) tString, "0x%08x %s", dnHand, (*dnHand)->dn+1);
- len = sprintf ((char *) tString, "0x%08x", dnHand);
- LSetCell (tString, len, tCell, telWindow->fDNList);
-
- }
- else
- if ((errCode = TELDNDispose (dnHand)) != noErr)
- PutCLine (gLogWindow, kErrorColor, "### TELDNDispose fails : %d", errCode);
- }
- else
- PutCLine (gLogWindow, kErrorColor, "### TELDNLookupByIndex fails : %d", errCode);
- }
- }
- else
- PutCLine (gLogWindow, kErrorColor, "### Invalid termHand");
-
- if (numOfDNs > 0) { // hilite the first row & column
- SetPt (&tCell, 0, 0);
- LSetSelect (true, tCell, telWindow->fDNList);
- DoTelWindowActivate ((WindowPtr) telWindow, false); // deactivate list since there is at least 1 dn window in front of this window
- }
-
- return (errCode);
- }
-
-
- OSErr ListTelTools (void)
- {
- OSErr errCode = noErr;
- Str255 toolName;
- short index = 1;
-
- PutLine (gLogWindow, "Scanning telephone tools :");
-
- while (errCode == noErr) {
- errCode = CRMGetIndToolName(classTEL, index, toolName);
- ++index;
-
- if (errCode == noErr) {
- PutLine (gLogWindow, " %s", p2cstr(toolName));
- }
- }
-
- if (index == 2) {
- PutCLine (gLogWindow, kErrorColor, "### No telephone tool was found !");
- errCode = -1;
- }
- else
- errCode = noErr;
-
- return (errCode);
- }
-
-
- short DisplayNewFlagsDialog (long *newFlags)
- {
- DialogPtr theDialog;
- short itemHit = nil;
- short returnValue;
- short itemType;
- Handle item;
- Rect box;
- short itemKind;
- Handle itemHand;
- Rect itemRect;
- Boolean checkBoxState;
-
- theDialog = GetNewDialog (rNewFlagsDLOG, nil, (WindowPtr)(-1L));
- if (theDialog == nil) {
- AlertUser ("\pUnable to get a DLOG resource!", ResError());
- return (-1);
- }
- GetDialogItem (theDialog, kNewFlagsDefault, &itemType, &item, &box);
- SetDialogItem (theDialog, kNewFlagsDefault, itemType, (Handle) gDrawDefaultUPP, &box);
-
- ShowWindow (theDialog);
- while ((itemHit != ok) && (itemHit != cancel)) {
- ModalDialog (gStandardFilterUPP, &itemHit);
- checkBoxState = ToggleCheckBox (theDialog, itemHit);
- }
- HideWindow (theDialog);
- *newFlags = 0;
- switch (itemHit) {
- case ok :
- GetDialogItem (theDialog, kNewFlagsNoMenusItem, &itemKind, &itemHand, &itemRect);
- if (GetControlValue ((ControlHandle) itemHand) == 1)
- *newFlags = telNoMenus;
- GetDialogItem (theDialog, kNewFlagsQuietItem, &itemKind, &itemHand, &itemRect);
- if (GetControlValue ((ControlHandle) itemHand) == 1)
- *newFlags = *newFlags | telQuiet;
- GetDialogItem (theDialog, kNewFlagsConfigChangedItem, &itemKind, &itemHand, &itemRect);
- if (GetControlValue ((ControlHandle) itemHand) == 1)
- *newFlags = *newFlags | telConfigChanged;
- returnValue = ok;
- break;
- default :
- returnValue = cancel;
- }
- DisposDialog (theDialog);
- return (returnValue);
- }
-
-
- TELHandle CreateTelInfoRec (void)
- {
- OSErr errCode = noErr;
- Str255 toolName;
- short i, procId = -1;
- TELHandle theTerm = nil;
- Point chooseOrigin;
- TELErr telErrCode;
- long newFlags;
- long response;
-
-
- DisplayNewFlagsDialog (&newFlags);
-
- for (i=1; theTerm == nil; i++) {
- errCode = noErr;
-
- // errCode = CRMGetIndToolName(classTEL, i, toolName);
- // if (*toolName == nil || errCode != noErr) {
- // PutLine (gLogWindow, "Couldn't get any tools!");
- // break;
- // }
- // procId = TELGetProcID (toolName);
- // if (procId == -1) {
- // PutLine (gLogWindow, "Couldn't get proc ID for tool %s!", p2cstr(toolName));
- // break;
- // }
- // theTerm = TELNew (procId, telNoMenus|telQuiet|telConfigChanged, 0, 0, &telErrCode); // telConfigChanged ??
- // if (telErrCode != noErr) {
- // PutLine (gLogWindow, "### TELNew failed : %d", telErrCode);
- // break;
- // }
-
- errCode = CRMGetIndToolName(classTEL, i, toolName);
- if (errCode != noErr) {
- PutLine (gLogWindow, "### CRMGetIndToolName failed : %d", errCode);
- break;
- }
- if (*toolName == nil) {
- PutLine (gLogWindow, "### Couldn't get any tools!");
- break;
- }
-
- procId = TELGetProcID (toolName);
- if (procId == -1)
- PutLine (gLogWindow, "### Couldn't get proc ID for %*.*s!", toolName[0], toolName[0], &toolName[1]);
- else
- {
-
- if ((errCode = Gestalt (gestaltTeleMgrAttr, &response)) == noErr)
- {
-
- if (response & (1 << gestaltTeleMgrNewTELNewSupport))
- {
- theTerm = TELNewWithResult (procId, newFlags, 0, 0, &telErrCode);
- if (telErrCode != noErr)
- PutLine (gLogWindow, "### TELNewWithResult for %*.*s failed : %d", toolName[0], toolName[0], &toolName[1], telErrCode);
- }
- else
- theTerm = TELNew (procId, newFlags, 0, 0);
- }
- else
- PutLine (gLogWindow, "### Gestalt failed");
- }
- }
-
- chooseOrigin.v = 80;
- chooseOrigin.h = 80;
- if (procId != -1) {
- errCode = TELChoose (&theTerm, chooseOrigin, nil);
- if (theTerm != nil) {
- if ((errCode = TELOpenTerm (theTerm)) != noErr) {
- PutCLine (gLogWindow, kErrorColor, "### TELOpenTerm fails : %d", errCode);
- if ((errCode = TELDispose (theTerm) != noErr)) {
- PutCLine (gLogWindow, kErrorColor, "### TELDispose fails : %d", errCode);
- theTerm = nil;
- }
- }
- }
- }
- else
- theTerm = nil;
-
- return theTerm;
- }
-
-
- #pragma segment Dump
- void DumpTermInfo (TelWindowPtr telWindow)
- {
- OSErr errCode;
- long flags;
- TELHandle termHand;
- TELTermPtr tTermInfoRecPtr;
-
- termHand = telWindow->fTELHandle;
-
- if (termHand != nil) {
- if ((errCode = TELGetInfo (termHand)) == noErr) {
- PutLine (gLogWindow, "=============== TELRecord ===============");
- PutLine (gLogWindow, " procID : %04x", (**termHand).procID);
- PutLine (gLogWindow, " flags : %08x", (**termHand).flags);
- PutLine (gLogWindow, " reserved : %08x", (**termHand).reserved);
- PutLine (gLogWindow, " refCon : %08x", (**termHand).refCon);
- PutLine (gLogWindow, " userData : %08x", (**termHand).userData);
- PutLine (gLogWindow, " defProc : %08x", (**termHand).defproc);
- PutLine (gLogWindow, " config : %08x", (**termHand).config);
- PutLine (gLogWindow, " oldConf : %08x", (**termHand).oldConfig);
- PutLine (gLogWindow, " pTELTerm : %d", (**termHand).pTELTerm);
- PutLine (gLogWindow, " telPrivate : %08x", (**termHand).telPrivate);
- PutLine (gLogWindow, " reserved1 : %08x", (**termHand).reserved1);
- PutLine (gLogWindow, " reserved2 : %08x", (**termHand).reserved2);
- PutLine (gLogWindow, " pTELTermSize : %d", (**termHand).pTELTermSize);
- PutLine (gLogWindow, " version : %d", (**termHand).version);
-
- tTermInfoRecPtr = (**termHand).pTELTerm;
-
- PutLine (gLogWindow, "=============== TELTermRecord ============");
- PutLine (gLogWindow, " tRef : %04x", (*tTermInfoRecPtr).tRef);
-
- flags = (*tTermInfoRecPtr).featureFlags;
- PutLine (gLogWindow, " featureFlags : %08x", flags);
- PutLine (gLogWindow, " %c pcmAvail", (flags & pcmAvail)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasHandset", (flags & hasHandset)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasSpeakerphone", (flags & hasSpeakerphone)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c canOnHookDial", (flags & canOnHookDial)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasRinger", (flags & hasRinger)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c canSetDisplay", (flags & canSetDisplay)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasKeypad", (flags & hasKeypad)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasVideo", (flags & hasVideo)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasOther", (flags & hasOther)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c crossDNConference", (flags & crossDNConference)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasSubaddress", (flags & hasSubaddress)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasUserUserInfo", (flags & hasUserUserInfo)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasHandsetSoundStreams", (flags & hasHandsetSoundStreams)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasIndHandset", (flags & hasIndHandset)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c hasBuiltinSpeakerphone", (flags & hasBuiltinSpeakerphone)?checkChar:spaceChar);
- PutLine (gLogWindow, " remainder : %08x", (flags & (0xFFFFFFFF << 15)));
-
- PutLine (gLogWindow, " handsetSpeakerVol : %d", (*tTermInfoRecPtr).handsetSpeakerVol);
- PutLine (gLogWindow, " handsetMicVol : %d", (*tTermInfoRecPtr).handsetMicVol);
- PutLine (gLogWindow, " speakerphoneVol : %d", (*tTermInfoRecPtr).speakerphoneVol);
- PutLine (gLogWindow, " speakerphoneMicVol : %d", (*tTermInfoRecPtr).speakerphoneMicVol);
- PutLine (gLogWindow, " builtinSpeakerVol : %d", (*tTermInfoRecPtr).builtinSpeakerVol);
- PutLine (gLogWindow, " builtinSpeakerMicVol : %d", (*tTermInfoRecPtr).builtinSpeakerMicVol);
- PutLine (gLogWindow, " ringerVol : %d", (*tTermInfoRecPtr).ringerVol);
- PutLine (gLogWindow, " otherVol : %d", (*tTermInfoRecPtr).otherVol);
- PutLine (gLogWindow, " ringerTypes : %04x", (*tTermInfoRecPtr).ringerTypes);
- PutLine (gLogWindow, " hasDisplay : %d", (*tTermInfoRecPtr).hasDisplay);
- PutLine (gLogWindow, " displayRows : %d", (*tTermInfoRecPtr).displayRows);
- PutLine (gLogWindow, " numDNs : %d", (*tTermInfoRecPtr).numDNs);
- PutLine (gLogWindow, " maxAllocCA : %d", (*tTermInfoRecPtr).maxAllocCA);
- PutLine (gLogWindow, " curAllocCA : %d", (*tTermInfoRecPtr).curAllocCA);
- PutLine (gLogWindow, " reserved : %08x", (*tTermInfoRecPtr).reserved);
- }
- else
- PutCLine (gLogWindow, kErrorColor, "### TELGetInfo fails : %d", errCode);
- }
- else
- PutCLine (gLogWindow, kErrorColor, "### Invalid termHand");
- }
-
-
- #pragma segment Dump
- void DumpTermEvents (TelWindowPtr telWindow)
- {
- OSErr errCode;
- TELHandle termHand;
- long eventMask;
-
- termHand = telWindow->fTELHandle;
-
- if (termHand != nil) {
- if ((errCode = TELTermEventsSupp (termHand, &eventMask)) == noErr) {
- PutLine (gLogWindow, "=============== TermEvents ===============");
- PutLine (gLogWindow, " mask : %08x", eventMask);
- PutLine (gLogWindow, " %c telTermHookMsg", (eventMask & telTermHookMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermKeyMsg", (eventMask & telTermKeyMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermVolMsg", (eventMask & telTermVolMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermDisplayMsg", (eventMask & telTermDisplayMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermEnableMsg", (eventMask & telTermEnableMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermOpenMsg", (eventMask & telTermOpenMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermCloseMsg", (eventMask & telTermCloseMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermResetMsg", (eventMask & telTermResetMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermErrorMsg", (eventMask & telTermErrorMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermIndHSStateChgMsg", (eventMask & telTermIndHSStateChgMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermIndHSConnectMsg", (eventMask & telTermIndHSConnectMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermKeyImmMsg", (eventMask & telTermKeyImmMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermVolStateMsg", (eventMask & telTermVolStateMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " %c telTermOtherMsg", (eventMask & telTermOtherMsg)?checkChar:spaceChar);
- PutLine (gLogWindow, " remainder : %08x", (eventMask & ~(telAllTermMsgs | telTermOtherMsg)));
- }
- else
- PutCLine (gLogWindow, kErrorColor, "### TELTermEventsSupp fails : %d", errCode);
- }
- else
- PutCLine (gLogWindow, kErrorColor, "### Invalid termHand");
- }
-
-
- #pragma segment Main
- pascal void AllTermMsgsHandler (TELHandle termHand, long msg, short mtype, short value, long ourA5)
- {
- #pragma unused (mtype, value)
-
- long oldA5;
- char *msgString;
-
- oldA5 = SetA5 (ourA5);
-
- switch (msg) {
- case telTermHookMsg : msgString = "telTermHookMsg"; break;
- case telTermKeyMsg : msgString = "telTermKeyMsg"; break;
- case telTermVolMsg : msgString = "telTermVolMsg"; break;
- case telTermDisplayMsg : msgString = "telTermDisplayMsg"; break;
- case telTermEnableMsg : msgString = "telTermEnableMsg"; break;
- case telTermOpenMsg : msgString = "telTermOpenMsg"; break;
- case telTermCloseMsg : msgString = "telTermCloseMsg"; break;
- case telTermResetMsg : msgString = "telTermResetMsg"; break;
- case telTermErrorMsg : msgString = "telTermErrorMsg"; break;
- case telTermIndHSStateChgMsg : msgString = "telTermIndHSStateChgMsg"; break;
- case telTermIndHSConnectMsg : msgString = "telTermIndHSConnectMsg"; break;
- case telTermKeyImmMsg : msgString = "telTermKeyImmMsg"; break;
- case telTermVolStateMsg : msgString = "telTermVolStateMsg"; break;
- case telTermOtherMsg : msgString = "telTermOtherMsg"; break;
-
- default :
- PutCLine (gLogWindow, kErrorColor, "### Unknown termMsg : %08x", msg);
- msgString = "### Unknown";
- }
-
- PutLine (gLogWindow, ">>> got a Term message (%08x) : %s", termHand, msgString);
-
- (void) SetA5 (oldA5);
- }
-
-
- pascal void TermMsgHandler (TELHandle termHand, long msg, short mtype, short value, long ourA5)
- {
- long oldA5;
-
- oldA5 = SetA5 (ourA5);
-
- switch (msg) {
- case telTermHookMsg :
- HandleTermHookMsg (termHand, mtype, value);
- break;
-
- case telTermKeyMsg :
- HandleTermKeyMsg (termHand, mtype, value);
- break;
-
- case telTermVolMsg :
- HandleTermVolMsg (termHand, mtype, value);
- break;
-
- case telTermDisplayMsg :
- HandleTermDispMsg (termHand, mtype, value);
- break;
-
- case telTermEnableMsg :
- HandleTermEnableMsg (termHand, mtype, value);
- break;
-
- case telTermOpenMsg :
- HandleTermOpenMsg (termHand, mtype, value);
- break;
-
- case telTermCloseMsg :
- HandleTermCloseMsg (termHand, mtype, value);
- break;
-
- case telTermResetMsg :
- HandleTermResetMsg (termHand, mtype, value);
- break;
-
- case telTermErrorMsg :
- HandleTermErrorMsg (termHand, mtype, value);
- break;
-
- case telTermIndHSStateChgMsg :
- HandleTermIndHSStateChgMsg (termHand, mtype, value);
- break;
-
- case telTermIndHSConnectMsg :
- HandleTermIndHSConnectMsg (termHand, mtype, value);
- break;
-
- case telTermKeyImmMsg :
- HandleTermKeyImmMsg (termHand, mtype, value);
- break;
-
- case telTermVolStateMsg :
- HandleTermVolStateMsg (termHand, mtype, value);
- break;
-
- case telTermOtherMsg :
- HandleTermOtherMsg (termHand, mtype, value);
- break;
-
- default :
- PutCLine (gLogWindow, kErrorColor, "### Unknown termMsg : %08x", msg);
- }
-
- (void) SetA5 (oldA5);
- }
-
-
- OSErr InstallTermHandler (TelWindowPtr telWindow)
- {
- OSErr errCode;
- TELHandle termHand;
-
- termHand = telWindow->fTELHandle;
-
- errCode = TELTermMsgHand (termHand, telAllTermMsgs | telTermOtherMsg, gTermMsgHandlerUPP, SetCurrentA5());
-
- if (errCode != noErr)
- PutCLine (gLogWindow, kErrorColor, "### TELTermMsgHand fails : %d", errCode);
-
- return (errCode);
- }
-
-
- void HandleTermHookMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermHookMsg (%08x) --> type = %d, value = %s", termHand, mtype, (value)?"telDeviceOffHook":"telDeviceOnHook");
- }
-
-
- void HandleTermKeyMsg (TELHandle termHand, short mtype, short value)
- {
- switch (mtype) {
- case telKeyPadPress :
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermKeyMsg (%08x) --> %c", termHand, value);
- break;
-
- case telFeatureKeyPress :
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermKeyMsg (%08x) --> %d", termHand, value);
- break;
-
- default :
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermKeyMsg (%08x) --> ### Unknown type", termHand);
- }
- }
-
-
- void HandleTermVolMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermVolMsg (%08x) --> spType = %d, level = %d", termHand, mtype, value);
- }
-
-
- void HandleTermDispMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermDisplayMsg (%08x) --> dispType = %d, what = %d", termHand, mtype, value);
- }
-
-
- void HandleTermEnableMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermEnableMsg (%08x) --> (reserved) type = %d, value = %d", termHand, mtype, value);
- }
-
-
- void HandleTermOpenMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermOpenMsg (%08x) --> (reserved) type = %d, value = %d", termHand, mtype, value);
- }
-
-
- void HandleTermCloseMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermCloseMsg (%08x) --> (reserved) type = %d, value = %d", termHand, mtype, value);
- }
-
-
- void HandleTermResetMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermResetMsg (%08x) --> (reserved) type = %d, value = %d", termHand, mtype, value);
- }
-
-
- void HandleTermErrorMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermErrorMsg (%08x) --> (reserved) type = %d, value = %d", termHand, mtype, value);
- }
-
-
- void HandleTermIndHSStateChgMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermIndHSStateChgMsg (%08x) --> (reserved) type = %s, value = %s", termHand, (mtype)?"telIndHSConnected":"telIndHSDisconnected", (value)?"telIndHSOffHook":"telIndHSOnHook");
- }
-
-
- void HandleTermIndHSConnectMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermIndHSConnectMsg (%08x) --> (reserved) type = %d, value = %s", termHand, mtype, (value)?"telIndHSConnected":"telIndHSDisconnected");
- }
-
-
- void HandleTermKeyImmMsg (TELHandle termHand, short mtype, short value)
- {
- switch (mtype) {
- case telKeyPadPress :
- // PutCLine (gLogWindow, kTermMsgColor, "::: telTermKeyImmMsg (%08x) --> %c", termHand, value);
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermKeyImmMsg (%08x) --> type = telKeyPadPress, value = %c", termHand, value);
- break;
-
- case telFeatureKeyPress :
- // PutCLine (gLogWindow, kTermMsgColor, "::: telTermKeyImmMsg (%08x) --> %d", termHand, value);
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermKeyImmMsg (%08x) --> type = telFeatureKeyPress, value = %d", termHand, value);
- break;
-
- default :
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermKeyImmMsg (%08x) --> ### Unknown type", termHand);
- }
- }
-
-
- void HandleTermVolStateMsg (TELHandle termHand, short mtype, short value)
- {
- char * typeStr;
- char * valueStr;
-
- switch (mtype) {
- case telHandsetSpeakerVol :
- typeStr = "telHandsetSpeakerVol";
- break;
- case telHandsetMicVol :
- typeStr = "telHandsetMicVol";
- break;
- case telSpeakerphoneVol :
- typeStr = "telSpeakerphoneVol";
- break;
- case telSpeakerphoneMicVol :
- typeStr = "telSpeakerphoneMicVol";
- break;
- case telRingerVol :
- typeStr = "telRingerVol";
- break;
- case telBuiltinSPVol :
- typeStr = "telBuiltinSPVol";
- break;
- case telBuiltinSPMicVol :
- typeStr = "telBuiltinSPMicVol";
- break;
- default :
- typeStr = "### Unknown mtype";
- PutCLine (gLogWindow, kErrorColor, "### Unknown mtype : %d", mtype);
- }
-
- switch (value) {
- case telVolStateOff :
- valueStr = "telVolStateOff";
- break;
- case telVolStateOn :
- valueStr = "telVolStateOn";
- break;
- default :
- valueStr = "### Unknown value";
- PutCLine (gLogWindow, kErrorColor, "### Unknown value : %d", value);
- }
-
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermVolStateMsg (%08x) --> (reserved) type = %s, value = %s", termHand, typeStr, valueStr);
- }
-
-
- void HandleTermOtherMsg (TELHandle termHand, short mtype, short value)
- {
- PutCLine (gLogWindow, kTermMsgColor, "::: telTermOtherMsg (%08x) --> (vendor defined) type = %d, value = %d", termHand, mtype, value);
- }
-
-
- void DumpSelectedDNInfo (TelWindowPtr telWindow)
- {
- short count;
- Cell tCell;
- DNWindowPtr tDNWindow;
-
- SetPt (&tCell, 0, 0);
- while (LGetSelect (true, &tCell, telWindow->fDNList)) {
- tDNWindow = telWindow->fDNWindowList;
- count = 0;
- while (count++ < tCell.v)
- tDNWindow = tDNWindow->next;
-
- DumpDNInfo (tDNWindow->fDNHandle);
- if (! LNextCell (true, true, &tCell, telWindow->fDNList))
- break;
- }
- }
-
-
- void DumpSelectedDNEvents (TelWindowPtr telWindow)
- {
- short count;
- Cell tCell;
- DNWindowPtr tDNWindow;
-
- SetPt (&tCell, 0, 0);
- while (LGetSelect (true, &tCell, telWindow->fDNList)) {
- tDNWindow = telWindow->fDNWindowList;
- count = 0;
- while (count++ < tCell.v)
- tDNWindow = tDNWindow->next;
-
- DumpDNEvents (tDNWindow->fDNHandle);
- if (! LNextCell (true, true, &tCell, telWindow->fDNList))
- break;
- }
- }
-
-
- void ShowDNWindow (TelWindowPtr telWindow, short whichDN)
- {
- short count = 0;
- DNWindowPtr tDNWindow = telWindow->fDNWindowList;
-
- while (count++ < whichDN)
- tDNWindow = tDNWindow->next;
-
- ShowWindow ((WindowPtr) tDNWindow);
- SelectWindow ((WindowPtr) tDNWindow);
- }
-
-
- void AdjustInternalDataStructures (TelWindowPtr telWindow)
- {
- DNWindowPtr dnWindow;
- CAWindowPtr caWindow;
-
- if (telWindow)
- {
- dnWindow = telWindow->fDNWindowList;
- while (dnWindow) {
- caWindow = dnWindow->fCAWindowList;
- while (caWindow) {
- caWindow->fCAHandle = nil;
- caWindow = caWindow->next;
- }
-
- dnWindow->fDNHandle = nil;
- dnWindow = dnWindow->next;
- }
-
- // if (telWindow->fRPWindow)
- // telWindow->fRPWindow->fTELHandle = nil;
-
- // telWindow->fTELHandle = nil; /* TEMPORARY */
- }
- }
-
-
- void HandleChoose (TelWindowPtr telWindow)
- {
- short returnValue;
- TELHandle termHand = telWindow->fTELHandle;
- Point where;
- char *chooseResult;
- Rect windRect;
- OSErr errCode;
- DNWindowPtr dnWindow, tDNWindow;
-
- SetPt (&where, 40, 40);
-
- returnValue = TELChoose(&termHand, where, nil);
-
- switch (returnValue) {
- case telChooseDisaster :
- chooseResult = "telChooseDisaster";
- break;
-
- case telChooseFailed :
- chooseResult = "telChooseFailed";
- break;
-
- case telChooseAborted :
- chooseResult = "telChooseAborted";
- break;
-
- case telChooseOKMinor :
- chooseResult = "telChooseOKMinor";
- break;
-
- case telChooseOKMajor :
- chooseResult = "telChooseOKMajor";
- break;
-
- case telChooseCancel :
- chooseResult = "telChooseCancel";
- break;
-
- case telChooseOKTermChanged :
- if ((errCode = TELClrTermMsgHand (termHand, gTermMsgHandlerUPP)) != noErr)
- PutCLine (gLogWindow, kErrorColor, "### TELClrTermMsgHand fails : %d", errCode);
-
- chooseResult = "telChooseOKTermChanged";
- break;
-
- default :
- chooseResult = "### unknown";
- }
-
- PutLine (gLogWindow, "TELChoose returns : %s", chooseResult);
-
- if ((termHand != telWindow->fTELHandle) || (returnValue == telChooseOKTermChanged)) {
-
- windRect = (**((WindowPeek) gTelWindow)->contRgn).rgnBBox;
-
- AdjustInternalDataStructures (gTelWindow);
- DisposeTelWindow (gTelWindow);
- gTelWindow = nil;
-
- (void) CreateTelWindow (&gTelWindow, &windRect, termHand);
- }
- else if ((returnValue == telChooseOKMajor) || (returnValue == telChooseOKMinor)) {
- dnWindow = telWindow->fDNWindowList;
- while (tDNWindow = dnWindow) {
- dnWindow = dnWindow->next;
- SetControlTitle (tDNWindow->fDirNumber, (*(tDNWindow->fDNHandle))->dn); /* TEMPORARY */
- }
- }
- }
-
-
- short GetConfigString (char * config)
- {
- short itemType;
- Handle itemHand;
- Rect itemRect;
- short itemHit;
- DialogPtr theDialog;
-
- if ((theDialog = GetNewDialog (rGetConfigDLOG, nil, (WindowPtr)(-1L))) != nil) {
-
- GetDItem (theDialog, kGetConfigDefault, &itemType, &itemHand, &itemRect);
- SetDItem (theDialog, kGetConfigDefault, itemType, (Handle) gDrawDefaultUPP, &itemRect);
-
- GetDItem (theDialog, kGetConfigConfig, &itemType, &itemHand, &itemRect);
- setitext (itemHand, config);
-
- ShowWindow (theDialog);
-
- ModalDialog (nil, &itemHit);
-
- if (itemHit == ok) {
- GetDItem (theDialog, kGetConfigConfig, &itemType, &itemHand, &itemRect);
- getitext (itemHand, config);
- }
-
- DisposeDialog (theDialog);
- }
- else
- itemHit = -1;
-
- return (itemHit);
- }
-
-
- void HandleConfig (TelWindowPtr telWindow)
- {
- OSErr errCode;
- Ptr config;
- short itemHit;
- Rect windRect;
- TELHandle termHand = telWindow->fTELHandle;
- Str255 oldConfig, newConfig;
-
- if ((config = TELGetConfig (termHand)) != nil)
- {
- strcpy ((char *) oldConfig, (char *) config);
- strcpy ((char *) newConfig, (char *) config); // Put into a slightly bigger buffer (Str255)
- DisposPtr (config);
-
- if ((itemHit = GetConfigString ((char *) newConfig)) == ok) {
-
- if ((errCode = TELSetConfig (termHand, (char *) newConfig)) == noErr) {
- PutLine (gLogWindow, "TELSetConfig : %s", newConfig);
-
- if ((config = TELGetConfig (termHand)) != nil)
- {
- if (strcmp ((char *) oldConfig, (char *) config) != 0)
- {
- windRect = (**((WindowPeek) gTelWindow)->contRgn).rgnBBox;
-
- AdjustInternalDataStructures (gTelWindow);
- DisposeTelWindow (gTelWindow);
-
- if ((errCode = TELClrTermMsgHand (termHand, gTermMsgHandlerUPP)) != noErr)
- PutCLine (gLogWindow, kErrorColor, "### TELClrTermMsgHand failed : %d", errCode);
-
- if ((errCode = TELCloseTerm (termHand)) != noErr)
- PutCLine (gLogWindow, kErrorColor, "### TELCloseTerm fails : %d", errCode);
-
- // if ((errCode = TELClrTermMsgHand (termHand, gTermMsgHandlerUPP)) != noErr) /* TEMPORARY */
- // PutCLine (gLogWindow, kErrorColor, "### TELClrTermMsgHand failed : %d", errCode); /* TEMPORARY */
-
- gTelWindow = nil;
-
- (void) CreateTelWindow (&gTelWindow, &windRect, termHand);
- }
-
- DisposPtr (config);
- }
- else
- PutLine (gLogWindow, "### TELGetConfig returns nil");
- }
- else
- PutLine (gLogWindow, "### TELSetConfig fails : %d", errCode);
- }
- }
- else
- PutLine (gLogWindow, "### TELGetConfig returns nil");
- }
-
-
- void HandleSelect (TelWindowPtr telWindow, short modifiers)
- {
- Cell tCell;
- short count = 0;
- DNWindowPtr tDNWindow = telWindow->fDNWindowList;
- OSErr errCode;
- Boolean select = (modifiers ? false : true);
-
- SetPt (&tCell, 0, 0);
- while (LGetSelect (true, &tCell, telWindow->fDNList)) {
-
- while (count++ < tCell.v)
- tDNWindow = tDNWindow->next;
-
- errCode = TELDNSelect (tDNWindow->fDNHandle, select);
- if (errCode == noErr)
- PutLine (gLogWindow, "TELDNSelect (%08x) : %s", tDNWindow->fDNHandle, (select?"selected":"deselected"));
- else
- PutCLine (gLogWindow, kErrorColor, "### TELDNSelect fails : %d", errCode);
-
- if (! LNextCell (true, true, &tCell, telWindow->fDNList))
- break;
- }
- }
-
-
- //void HandleRP (TelWindowPtr telWindow, short modifiers)
- //{
- // if (telWindow->fRPWindow) {
- //
- // if (modifiers)
- // SwitchToNew (telWindow->fRPWindow);
- // else
- // SwitchToOld (telWindow->fRPWindow);
- //
- // ShowWindow ((WindowPtr) telWindow->fRPWindow);
- // SelectWindow ((WindowPtr) telWindow->fRPWindow);
- // }
- //}
-
-
- OSErr CreateFeatureList (TelWindowPtr telWindow)
- {
- OSErr errCode = noErr;
- FeatureListPtr theList = nil;
- MenuHandle theMenu = GetMenu (rFeatureMenu);
- short item = 1;
-
- errCode = TELOtherFeatureList (telWindow->fTELHandle, &theList);
- if (errCode != noErr)
- PutCLine (gLogWindow, kErrorColor, "### TELOtherFeatureList fails : %d", errCode);
- else {
- if (telWindow->fFeatureList = theList)
- {
- while (theList)
- {
- AppendMenu (theMenu, "\pX");
- SetItem (theMenu, item, theList->featureName);
- theList = theList->nextFeature;
- ++item;
- }
- }
- else
- PutLine (gLogWindow, "No other features were found");
- }
-
- return (errCode);
- }
-
-
- void HandleFeatureMenu (TelWindowPtr telWindow, short menuID, short menuItem, short modifiers)
- {
- #pragma unused (menuID, modifiers)
-
- OSErr errCode = noErr;
- Handle tHandle = nil;
- FeatureListPtr theList = telWindow->fFeatureList;
- short index = 1;
- DNWindowPtr dnWindow;
-
- while (theList)
- {
- if (index == menuItem)
- break;
-
- ++index;
- theList = theList->nextFeature;
- }
-
- if (index == menuItem)
- {
- switch (theList->handleType) {
- case 0 :
- tHandle = (Handle) telWindow->fTELHandle;
- break;
-
- case 1 :
- dnWindow = GetFirstSelectedDNWindow (telWindow);
- tHandle = (Handle) dnWindow->fDNHandle;
- break;
-
- case 2 :
- tHandle = (Handle) GetAnyCA (telWindow);
-
- break;
- }
-
- if (tHandle) {
- errCode = TELOtherFeatureImplement (telWindow->fTELHandle, tHandle, theList->featureID);
-
- if (errCode == noErr)
- PutLine (gLogWindow, "TELOtherFeatureImplement (%08x)", tHandle);
- else {
- PutCLine (gLogWindow, kErrorColor, "### TELOtherFeatureImplement fails : %d", errCode);
- }
- }
- }
- else
- PutCLine (gLogWindow, kErrorColor, "### Can't find feature in list");
- }
-
-
- DNWindowPtr GetFirstSelectedDNWindow (TelWindowPtr telWindow)
- {
- short count;
- Cell tCell;
- DNWindowPtr tDNWindow = nil;
-
- SetPt (&tCell, 0, 0);
- if (LGetSelect (true, &tCell, telWindow->fDNList)) {
- tDNWindow = telWindow->fDNWindowList;
- count = 0;
- while (count++ < tCell.v)
- tDNWindow = tDNWindow->next;
- }
- else
- PutCLine (gLogWindow, kErrorColor, "### No DN is selected in telWindow");
-
- return (tDNWindow);
- }
-
-
- void PrepareGetAnyCADLOGUserItems (DialogPtr theDialog, TelWindowPtr telWindow)
- {
- short itemType;
- Handle item;
- Rect box;
- CursHandle watch = GetCursor(watchCursor);
-
- if (watch != nil)
- SetCursor (*watch);
-
- GetDItem (theDialog, kGetAnyCABox1, &itemType, &item, &box);
- SetDItem (theDialog, kGetAnyCABox1, itemType, (Handle) gDrawBoxUPP, &box);
-
- GetDItem (theDialog, kGetAnyCADefault, &itemType, &item, &box);
- SetDItem (theDialog, kGetAnyCADefault, itemType, (Handle) gDrawDefaultUPP, &box);
-
- BuildAnyCAMenu (GetPopupMHandle (theDialog, kGetAnyCAPopup), telWindow);
- SetPopupValue (theDialog, kGetAnyCAPopup, 1);
-
- if (watch != nil)
- ReleaseResource ((Handle) watch);
-
- SetCursor (&qd.arrow);
- }
-
-
- TELCAHandle GetAnyCA (TelWindowPtr telWindow)
- {
- TELCAHandle caHand = nil;
- DialogPtr theDialog;
- short itemHit;
-
- theDialog = GetNewDialog (rGetAnyCADLOG, nil, (WindowPtr)(-1L));
- if (theDialog == nil) {
- AlertUser ("\pUnable to get a DLOG resource !", ResError());
- return (nil);
- }
-
- PrepareGetAnyCADLOGUserItems (theDialog, telWindow);
-
- ShowWindow (theDialog);
-
- ModalDialog (gStandardFilterUPP, &itemHit);
-
- HideWindow (theDialog);
-
- switch (itemHit) {
- case ok :
- caHand = GetNthCAFromTelList (GetPopupValue (theDialog, kGetAnyCAPopup), telWindow);
-
- break;
-
- default :
- caHand = nil;
-
- PutCLine (gLogWindow, kErrorColor, "### User clicked Cancel"); /* TEMPORARY */
- }
-
- DisposDialog (theDialog);
-
- return (caHand);
- }
-
-
- void BuildAnyCAMenu (MenuHandle theMenu, TelWindowPtr telWindow)
- {
- DNWindowPtr dnWindow;
- CAWindowPtr caWindow;
- ListHandle theList;
- Str255 caString;
- short length, item = 1;
- Cell tCell;
-
- dnWindow = telWindow->fDNWindowList;
-
- while (dnWindow)
- {
- theList = dnWindow->fCAList;
- caWindow = dnWindow->fCAWindowList;
-
- SetPt (&tCell, 0, 0);
- while (caWindow) {
- length = 0xFF;
- LGetCell (caString+1, &length, tCell, theList);
- caString[0] = length;
- AppendMenu (theMenu, "\pX");
- SetItem (theMenu, item, caString);
-
- caWindow = caWindow->next;
- ++tCell.v; ++item;
- }
-
- dnWindow = dnWindow->next;
- }
- }
-
-
- TELCAHandle GetNthCAFromTelList (short n, TelWindowPtr telWindow)
- {
- DNWindowPtr dnWindow;
- CAWindowPtr caWindow;
- short index = 0;
- TELCAHandle caHand = nil;
-
- dnWindow = telWindow->fDNWindowList;
-
- if (n)
- {
- while (dnWindow)
- {
- caWindow = dnWindow->fCAWindowList;
-
- while (caWindow) {
- if (++index == n)
- return (caWindow->fCAHandle);
-
- caWindow = caWindow->next;
- }
-
- dnWindow = dnWindow->next;
- }
- }
-
- return (caHand);
- }
-
-
- void PrepareGetAnyDNDLOGUserItems (DialogPtr theDialog, TelWindowPtr telWindow)
- {
- short itemType;
- Handle item;
- Rect box;
- CursHandle watch = GetCursor(watchCursor);
-
- if (watch != nil)
- SetCursor (*watch);
-
- GetDItem (theDialog, kGetAnyDNBox1, &itemType, &item, &box);
- SetDItem (theDialog, kGetAnyDNBox1, itemType, (Handle) gDrawBoxUPP, &box);
-
- GetDItem (theDialog, kGetAnyDNDefault, &itemType, &item, &box);
- SetDItem (theDialog, kGetAnyDNDefault, itemType, (Handle) gDrawDefaultUPP, &box);
-
- BuildAnyDNMenu (GetPopupMHandle (theDialog, kGetAnyDNPopup), telWindow);
- SetPopupValue (theDialog, kGetAnyDNPopup, 1);
-
- if (watch != nil)
- ReleaseResource ((Handle) watch);
-
- SetCursor (&qd.arrow);
- }
-
-
- TELDNHandle GetAnyDN (TelWindowPtr telWindow)
- {
- // TELHandle termHand;
- Boolean physical = false; //false means both logical & physical DNs
- short numOfDNs = 0;
- TELDNHandle dnHand = nil;
- DialogPtr theDialog;
- short itemHit;
-
- // termHand = telWindow->fTELHandle;
- // numOfDNs = TELCountDNs (termHand, telAllDNs, physical);
-
- if ((numOfDNs = TELCountDNs (telWindow->fTELHandle, telAllDNs, physical)) < 0)
- PutCLine (gLogWindow, kErrorColor, "### TELCountDNs failed : %d", numOfDNs);
- else {
- if (numOfDNs == 1)
- dnHand = GetNthDNFromTelList (1, telWindow);
- else {
- theDialog = GetNewDialog (rGetAnyDNDLOG, nil, (WindowPtr)(-1L));
- if (theDialog == nil) {
- AlertUser ("\pUnable to get a DLOG resource !", ResError());
- return (nil);
- }
-
- PrepareGetAnyDNDLOGUserItems (theDialog, telWindow);
-
- ShowWindow (theDialog);
-
- ModalDialog (gStandardFilterUPP, &itemHit);
-
- HideWindow (theDialog);
-
- switch (itemHit) {
- case ok :
- dnHand = GetNthDNFromTelList (GetPopupValue (theDialog, kGetAnyDNPopup), telWindow);
- break;
-
- default :
- dnHand = nil;
- }
- DisposDialog (theDialog);
- }
- }
- return (dnHand);
- }
-
-
- void BuildAnyDNMenu (MenuHandle theMenu, TelWindowPtr telWindow)
- {
- DNWindowPtr dnWindow;
- ListHandle theList;
- Str255 dnString;
- short length, item = 1;
- Cell tCell;
-
- theList = telWindow->fDNList;
- dnWindow = telWindow->fDNWindowList;
-
- SetPt (&tCell, 0, 0);
- while (dnWindow) {
- length = 0xFF;
- LGetCell (dnString+1, &length, tCell, theList);
- dnString[0] = length;
- AppendMenu (theMenu, "\pX");
- SetItem (theMenu, item, dnString);
-
- dnWindow = dnWindow->next;
- ++tCell.v; ++item;
- }
- }
-
-
- TELDNHandle GetNthDNFromTelList (short n, TelWindowPtr telWindow)
- {
- DNWindowPtr dnWindow;
- short index = 0;
- TELDNHandle dnHand = nil;
-
- dnWindow = telWindow->fDNWindowList;
-
- if (n)
- {
- while (dnWindow)
- {
- if (++index == n)
- return (dnWindow->fDNHandle);
-
- dnWindow = dnWindow->next;
- }
- }
-
- return (dnHand);
- }
-
-
- TELCAHandle GetActiveCA (TELHandle termHand)
- {
- TelWindowPtr telWindow;
- DNWindowPtr dnWindow;
- CAWindowPtr caWindow;
- TELCAHandle caHand = nil;
- short caState;
- OSErr errCode;
-
- if (termHand)
- {
- if (telWindow = (TelWindowPtr) (*termHand)->userData)
- {
- dnWindow = telWindow->fDNWindowList;
-
- while (dnWindow)
- {
- caWindow = dnWindow->fCAWindowList;
-
- while (caWindow) {
- caHand = caWindow->fCAHandle;
-
- if ((errCode = TELGetCAState(caHand, &caState)) != noErr)
- PutCLine (gLogWindow, kErrorColor, "### TELGetCAState (%08x) fails : %d", caHand, errCode);
-
- if ((caState == telCAActiveState) || (caState == telCAConferencedState))
- return (caHand);
-
- caWindow = caWindow->next;
- }
-
- dnWindow = dnWindow->next;
- }
- }
- }
-
- PutCLine (gLogWindow, kErrorColor, "### No active CA currently available");
-
- return (nil);
- }