/*
 	File:		Telephones.h
 
 	Contains:	Telephone Manager Interfaces.
 
 	Version:	Technology:	System 7.5
 				Release:	QuickTime 4.1
 
 	Copyright:	(c) 1994-1999 by Apple Computer, Inc., all rights reserved.
 
 	Bugs?:		For bug reports, consult the following page on
 				the World Wide Web:
 
 					http://developer.apple.com/bugreporter/
 
*/
#ifndef __TELEPHONES__
#define __TELEPHONES__

#ifndef __MACTYPES__
	#include <MacTypes.h>
#endif

#ifndef __DIALOGS__
	#include <Dialogs.h>
#endif

#ifndef __MACERRORS__
	#include <MacErrors.h>
#endif

#ifndef __EVENTS__
	#include <Events.h>
#endif

#ifndef __CTBUTILITIES__
	#include <CTBUtilities.h>
#endif

#ifndef __COMPONENTS__
	#include <Components.h>
#endif




#if PRAGMA_ONCE
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if PRAGMA_IMPORT
#pragma import on
#endif

#if PRAGMA_STRUCT_ALIGN
	#pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
	#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
	#pragma pack(2)
#endif

#if CALL_NOT_IN_CARBON
enum {
	curTELVersion				= 3,							/* current Telephone Manager version */
																/*	the chooseXXX symbols are defined in CTBUtilities.(pah) */
	telChooseDisaster			= chooseDisaster,
	telChooseFailed				= chooseFailed,
	telChooseAborted			= chooseAborted,
	telChooseOKMinor			= chooseOKMinor,
	telChooseOKMajor			= chooseOKMajor,
	telChooseCancel				= chooseCancel,
	telChooseOKTermChanged		= 4
};

#ifndef classTEL
enum {
																/* telephone tool file type */
	classTEL					= FOUR_CHAR_CODE('vbnd')
};

#endif  /* !defined(classTEL) */

enum {
																/* PHYSICAL TERMINAL CONSTANTS */
																/* INDEPENDENT HANDSET CONSTANTS */
	telIndHSOnHook				= 0,							/* independent handset on hook */
	telIndHSOffHook				= 1,							/* independent handset off hook */
	telIndHSDisconnected		= 0,							/* handset disconnected from the line */
	telIndHSConnected			= 1,							/* handset connected to the line */
																/* HOOK STATE CONSTANTS */
	telHandset					= 1,							/* handset hookswitch */
	telSpeakerphone				= 2,							/* speakerphone 'on' switch */
	telDeviceOffHook			= 1,							/* device off hook */
	telDeviceOnHook				= 0,							/* device on hook */
																/* VOLUME CONTROL CONSTANTS */
	telHandsetSpeakerVol		= 1,							/* volume of the handset speaker */
	telHandsetMicVol			= 2,							/* sensitivity of the handset mic */
	telSpeakerphoneVol			= 3,							/* speakerphone volume */
	telSpeakerphoneMicVol		= 4,							/* sensitivity of the spkrphone mic */
	telRingerVol				= 5,							/* volume of the ringer */
	telBuiltinSPVol				= 6,							/* volume of the built-in speakerphone */
	telBuiltinSPMicVol			= 7,							/* sensitivity of the built-in speakerphone mic */
	telVolSame					= 0,							/* leaves the volume at previous level */
	telVolMin					= 1,							/* turns volume down to minimum level, but not off */
	telVolMax					= 100,							/* highest level allowed by the Telephone Manager */
	telVolStateSame				= 0,							/* leaves device in same state */
	telVolStateOff				= 1,							/* turns the device off , */
																/* but doesn't change the volume setting. */
																/* Use for mute functions. */
	telVolStateOn				= 2,							/* turns the device on.  Volume setting is */
																/* the same as previously set.*/
																/* DISPLAY CONSTANTS */
	telNormalDisplayMode		= 1,							/* normal display mode */
	telInspectMode				= 2,							/* inspect display mode */
	telMiscMode					= 3,							/* miscellaneous display mode */
	telRetrieveMode				= 4,							/* message retrieval mode */
	telDirectoryQueryMode		= 5,							/* electronic directory mode */
	telEntireDisplay			= 0,							/* entire Display */
																/* KEY PRESS CONSTANTS */
	telHangupKey				= 1,							/* drop, or release, key pressed */
	telHoldKey					= 2,							/* hold key pressed */
	telConferenceKey			= 3,							/* conference key pressed */
	telTransferKey				= 4,							/* transfer key pressed */
	telForwardKey				= 5,							/* call forward key pressed */
	telCallbackKey				= 6,							/* call back key pressed */
	telDNDKey					= 7,							/* do not disturb key pressed */
	telCallPickupKey			= 8,							/* call Pickup key pressed */
	telCallParkKey				= 9,							/* call Park key pressed */
	telCallDeflectKey			= 10,							/* call Deflect key pressed */
	telVoiceMailAccessKey		= 11,							/* voice Mail Access key pressed */
	telCallRejectKey			= 12,							/* call Reject key pressed */
	telOtherKey					= 16,							/* other key pressed */
	telKeyPadPress				= 1,							/* key pressed on 12 digit keypad*/
	telFeatureKeyPress			= 2,							/* feature Key Pressed */
	telTerminalEnabled			= 0,
	telTerminalDisabled			= 1,
	telUnknown					= 0,							/* unknown error */
	telTerminalHWDisconnected	= 1,							/* terminal hardware is disconnected */
	telDeviceDriverClosed		= 2,							/* device driver is closed */
																/* ALERT PATTERN */
	telPattern0					= 0,
	telPattern1					= 1,
	telPattern2					= 2,
	telPattern3					= 3,
	telPattern4					= 4,
	telPattern5					= 5,
	telPattern6					= 6,
	telPattern7					= 7,
	telPatternOff				= 8,
	telPatternUndefined			= 15,							/* DN TYPES */
	telAllDNs					= 0,							/* counts all types of DNs */
	telInternalDNs				= 1,							/* connected to PBX or other non-public switch */
	telInternalDNsOnly			= 2,							/* connected to PBX or other non-public switch */
																/* and able to place internal calls only */
	telExternalDNs				= 3,							/* connected to public network */
	telDNTypeUnknown			= 4,							/* DN type unknown */
																/* DN USAGE */
	telDNNotUsed				= 0,							/* DN is not used - onhook */
	telDNPOTSCall				= 1,							/* DN used for POTs call */
	telDNFaxCall				= 2,							/* DN used for fax call */
	telDNDataCall				= 3,							/* DN used for data call */
	telDNAlerting				= 4,							/* Incoming call at DN */
	telDNUnknownState			= 5,							/* DN is in unknown state */
																/* CALL FORWARDING TYPES */
	telForwardImmediate			= 1,							/* immediately forward calls */
	telForwardBusy				= 2,							/* forward on Busy */
	telForwardNoAnswer			= 3,							/* forward on No answer */
	telForwardBusyNA			= 4,							/* forwarding for busy and no answer*/
	telForwardTypeUnknown		= 5,							/* type of forwarding is unknown */
																/* CALL FORWARDING MESSAGES */
	telForwardCleared			= 0,							/* forwarding has been cleared */
	telForwardEst				= 1,							/* forwarding has been established*/
	telForwardFailed			= 2,							/* attempt to setup forwarding has failed*/
																/* DO NOT DISTURB TYPES */
	telDNDIntExt				= 0,							/* do not disturb for all internal and external calls*/
	telDNDExternal				= 1,							/* do not disturb for external calls only */
	telDNDInternal				= 2,							/* do not disturb for internal calls only */
	telDNDNonIntercom			= 3,							/* do not disturb for all calls except intercom */
																/* DO NOT DISTURB MESSAGES */
	telDNDCleared				= 0,							/* do not disturb has been cleared */
	telDNDEst					= 1,							/* do not disturb has been established */
	telDNDFailed				= 2,							/* attempt to setup do not disturb has failed */
																/* VOICE MAIL MESSAGES */
	telAllVoiceMessagesRead		= 0,							/* all messages have been read, none are  waiting */
																/* to be read */
	telNewVoiceMessage			= 1,							/* a new message has arrived or messages are waiting */
																/* for this DN */
																/* DNSELECT MESSAGE */
	telDNDeselected				= 0,							/* DN has been deselected */
	telDNSelected				= 1,							/* DN has been selected */
																/* CALL ORIGINATORS */
	telInternalCall				= 0,							/* return nth internal CA */
	telExternalCall				= 1,							/* return nth external CA */
	telUnknownCallOrigin		= 2,							/* unknown call type */
	telAllCallOrigins			= 2,							/* return nth CA internal or external */
																/* CALL TYPES */
	telVoiceMailAccessOut		= (-7),
	telPageOut					= (-6),
	telIntercomOut				= (-5),
	telCallbackOut				= (-4),
	telPickup					= (-3),
	telParkRetrieve				= (-2),
	telNormalOut				= (-1),
	telUnknownCallType			= 0,
	telNormalIn					= 1,
	telForwardedImmediate		= 2,
	telForwardedBusy			= 3,
	telForwardedNoAnswer		= 4,
	telTransfer					= 5,
	telDeflected				= 6,
	telIntercepted				= 7,
	telDeflectRecall			= 8,
	telParkRecall				= 9,
	telTransferredRecall		= 10,
	telIntercomIn				= 11,
	telCallbackIn				= 12,							/* DIAL TYPES */
	telDNDialable				= 0,							/* this DN could be dialed via TELSetupCall */
	telDNNorthAmerican			= 1,							/* rmtDN is standard North America 10 digit number */
	telDNInternational			= 2,							/* rmtDN is an international number */
	telDNAlmostDialable			= 3,							/* rmtDN is almost dialable, */
																/* missing prefix such as 9 or 1 */
	telDNUnknown				= 15,							/* unknown whether DN is dialable */
																/* CALL PROGRESS MESSAGES */
	telCAPDialTone				= 1,							/* dial tone */
	telCAPRinging				= 2,							/* destination CA is alerting */
	telCAPDialing				= 3,							/* dialing the other end */
	telCAPReorder				= 4,							/* reorder */
	telCAPBusy					= 5,							/* busy */
	telCAPRouted				= 6,							/* call routed; rmtDN will hold the routing directory */
																/* number routeDN and routePartyName have been updated */
	telCAPRoutedOff				= 7,							/* call routed off-network; no further progress will */
																/* be available */
	telCAPTimeout				= 8,							/* call timed out */
	telCAPUpdate				= 9,							/* name and rmtDN information has been updated */
	telCAPPrompt				= 10,							/* the network is prompting for more information */
	telCAPWaiting				= 11,							/* call is proceeding, but there is no response yet */
																/* from the destination */
	telCAPCPC					= 12,							/* telephone tool detected CPC signal */
	telCAPNoDialTone			= 13,							/* dial tone not detected */
	telCAPUnknown				= 15,							/* call progress state unknown */
	telCAPDialDisabled			= 16,							/* Blacklisting: Dial Disabled */
	telCAPBlacklistedNumber		= 17,							/* Blacklisting: Blacklisted Number */
	telCAPForbiddenNumber		= 18,							/* Blacklisting: Forbidden Number */
	telCAPModemGuardTime		= 19,							/* Modem Guard Timein force, unable to dial */
	telCAPLCDetected			= 20,							/* trying to dial a number while the handset is offhook */
	telCAPLostLC				= 21,							/* trying manual dial or answer while handset not off hook */
																/* or also lost line current during dialing. */
																/* OUTGOING CALL MESSAGES */
	telPhysical					= 0,							/* user lifted handset and initiated call */
	telProgrammatic				= 1,							/* programmatic initiation of outgoing call */
																/* DISCONNECT MESSAGES */
	telLocalDisconnect			= 0,							/* local party, this user, responsible for disconnect */
	telRemoteDisconnect			= 1,							/* remote party responsible for disconnect */
																/* DISCONNECT TYPES */
	telCADNormal				= 1,							/* normal disconnect */
	telCADBusy					= 2,							/* remote user busy */
	telCADNoResponse			= 3,							/* remote not responding */
	telCADRejected				= 4,							/* call rejected */
	telCADNumberChanged			= 5,							/* number changed */
	telCADInvalidDest			= 6,							/* invalid destination address */
	telCADFacilityRejected		= 7,							/* requested facility rejected */
	telCADUnobtainableDest		= 9,							/* destination not obtainable */
	telCADCongested				= 10,							/* network congestion */
	telCADIncompatibleDest		= 11,							/* incompatible destination */
	telCADTimeout				= 12,							/* call timed out */
	telCADUnknown				= 15,							/* reason unknown */
																/* CONFERENCE MESSAGES */
	telConferencePrepFailed		= 0,							/* conference could not be prepared */
	telConferencePending		= 1,							/* conference prepared successfully */
	telConferenceEstFailed		= 2,							/* conference could not be established */
	telConferenceEst			= 3,							/* conference established */
																/* TRANSFER MESSAGES */
	telTransferPrepFailed		= 0,							/* transfer could not be prepared */
	telTransferPending			= 1,							/* transfer prepared successfully */
	telTransferEst				= 2,							/* consult or blind xfer successful */
	telTransferFailed			= 3,							/* consult or blind xfer failed */
	telTransferred				= 4,							/* message to originator of CA specifying */
																/* that call was transferred to rmtDN */
																/* HOLD MESSAGES */
	telHoldCleared				= 0,
	telHoldEst					= 1,
	telHoldFailed				= 2,							/* RECEIVE DIGIT MESSAGES */
	telDigitAudible				= 0,
	telDigitNotAudible			= 1,							/* CALL PARK MESSAGES */
	telCallParkEst				= 1,							/* call has been successfully parked */
	telCallParkRetrieveEst		= 2,							/* parked Call has been successfully retrieved */
	telCallParkFailed			= 3,							/* attempt to setup call park has failed */
	telCallParkRetrieveFailed	= 4,							/* attempt to retrieve parked call failed */
	telCallParkRecall			= 5,							/* call park has been recalled */
																/* CALL BACK MESSAGES */
	telCallbackCleared			= 0,							/* call back has been cleared */
	telCallbackEst				= 1,							/* call back has been established */
	telCallbackNowAvail			= 2,							/* call can be called back with TELCallBackNow */
																/* if CA is zero, else call IS calling back on CA */
	telCallbackFailed			= 3,							/* attempt to setup callback has failed */
	telCallbackDesired			= 4,							/* a user has called this terminal, received no */
																/* answer and desires this terminal to call it */
																/* back */
	telCallbackDesiredCleared	= 5,							/* call back for no answer no longer desired */
	telCalledback				= 6,							/* callback has occurred successfully */
																/* CALL REJECT MESSAGES */
	telCallRejectFailed			= 0,							/* attempt to reject call has failed */
	telCallRejectEst			= 1,							/* call successfully rejected */
	telCallRejected				= 2,							/* message to originator that call was rejected */
																/* CALL DEFLECT MESSAGES */
	telCallDeflectFailed		= 0,							/* attempt to deflect call has failed */
	telCallDeflectEst			= 1,							/* call successfully deflected */
	telCallDeflectRecall		= 2,							/* deflected call has been recalled */
	telCallDeflected			= 3,							/* message to originator that call was deflected */
																/* to rmtDN */
	telAutoDeflectImmediate		= 4,							/* a call was automatically deflected from this */
																/* terminal as a result of immediate call */
																/* forwarding */
	telAutoDeflectBusy			= 5,							/* a call was automatically deflected from this */
																/* terminal as a result of call forwarding on busy */
	telAutoDeflectNoAnswer		= 6,							/* a call was automatically deflected from this */
																/* terminal as a result of call forwarding on */
																/* no answer */
																/* CONFERENCE SPLIT MESSAGES */
	telConferenceSplitFailed	= 0,							/* CA could not be split */
	telConferenceSplitEst		= 1,							/* CA split successfully */
																/* CONFERENCE DROP MESSAGES */
	telConferenceDropFailed		= 0,							/* CA could not be dropped */
	telConferenceDropped		= 1,							/* CA dropped successfully */
																/* CALL PICKUP MESSAGES */
	telCallPickupEst			= 0,							/* call pickup was successful */
	telCallPickupFailed			= 1,							/* call pickup failed */
	telCallPickedUp				= 2,							/* message to originator that call was picked */
																/* up at a different DN */
																/* PAGING MESSAGES */
	telPageEst					= 0,							/* paging was successful */
	telPageComplete				= 1,							/* paging activity completed */
	telPageFailed				= 2,							/* paging failed */
																/* INTERCOM MESSAGES */
	telIntercomEst				= 0,							/* intercom was successful */
	telIntercomComplete			= 1,							/* intercom activity completed */
	telIntercomFailed			= 2,							/* intercom failed */
																/* MODEM TONE MESSAGES */
	telModemToneDetected		= 0,							/* modem tone was detected */
	telModemToneCleared			= 1,							/* modem tone went away */
																/* FAX TONE MESSAGES */
	telFaxToneDetected			= 0,							/* fax tone was detected */
	telFaxToneCleared			= 1,							/* fax tone went away */
																/* IN USE MESSAGES */
	telInUsePrivate				= 0,							/* MADN is in use and can't be accessed */
	telInUseCanAccess			= 1,							/* MADN is in use, and others can access it */
																/* and join in */
	telInUseCanMakePrivate		= 2,							/* MADN is in use, but available for any one */
																/* person to access */
	telInUseCleared				= 3,							/* MADN is no longer in use */
																/* CALL APPEARANCE STATES */
	telCAIdleState				= 0,							/* a call doesn't exist at this time */
	telCAInUseState				= 1,							/* the call is active but at another terminal */
	telCAOfferState				= 2,							/* a call is being offered to the terminal */
	telCAQueuedState			= 3,							/* a call is being queued at this terminal */
	telCAAlertingState			= 4,							/* a call is alerting at the terminal */
	telCADialToneState			= 5,							/* initiated outgoing call has dialtone */
	telCADialingState			= 6,							/* initiated outgoing call is dialing */
	telCAWaitingState			= 7,							/* initiated outgoing call is waiting for */
																/* response from destination */
	telCARingingState			= 8,							/* the outgoing call is ringing. */
	telCABusyState				= 9,							/* destination is busy or can't be reached */
	telCAHeldState				= 10,							/* call has been put on hold by this terminal */
	telCAConferencedState		= 11,							/* this CA is part of a conference now */
	telCAActiveState			= 12,							/* the call is active and parties are free */
																/* to exchange data */
	telCAReorderState			= 13,							/* CA is in a reorder state */
	telCAConferencedHeldState	= 14,							/* CA is a conference call in a held state */
	telCAUnknownState			= 15,							/* the call state is unknown */
																/* TERMINAL MESSAGE EVENTMASKS */
	telTermHookMsg				= 0x00000001,					/* the hookswitch state has changed */
	telTermKeyMsg				= 0x00000002,					/* a phone pad key has been depressed */
	telTermVolMsg				= 0x00000004,					/* volume setting has changed */
	telTermDisplayMsg			= 0x00000008,					/* display has changed */
	telTermEnableMsg			= 0x00000010,					/* terminal has become enabled */
	telTermOpenMsg				= 0x00000020,					/* terminal has been opened */
	telTermCloseMsg				= 0x00000040,					/* terminal is shutting down */
	telTermResetMsg				= 0x00000080,					/* terminal has been reset */
	telTermErrorMsg				= 0x00000100,					/* hard equipment error */
	telTermIndHSStateChgMsg		= 0x00000200,					/* change in handset state from inacive to */
																/* active or vice versa */
	telTermIndHSConnectMsg		= 0x00000400,					/* independent handset connection has been changed */
	telTermKeyImmMsg			= 0x00000800,					/* immidiate arrival of phone pad key */
	telTermVolStateMsg			= 0x00001000,					/* volume state has changed */
	telTermOtherMsg				= (long)0x80000000,				/* vendor defined error */
	telAllTermMsgs				= 0x00001FFF,					/* mask to all non tool specific terminal events */
																/* DN MESSAGE EVENTMASK CONSTANTS */
	telDNForwardMsg				= 0x00000001,					/* forward feature activity */
	telDNDNDMsg					= 0x00000002,					/* do not disturb feature activity */
	telDNVoiceMailMsg			= 0x00000004,					/* message has arrived for this DN */
	telDNSelectedMsg			= 0x00000008,					/* DN has been selected or deselected */
	telDNOtherMsg				= (long)0x80000000,				/* a custom message for use by tools */
	telAllDNMsgs				= 0x0000000F,					/* mask to all non tool specific dn events */
																/* CA MESSAGE EVENTMASK CONSTANTS */
	telCAAlertingMsg			= 0x00000001,					/* CA is alerting  */
	telCAOfferMsg				= 0x00000002,					/* CA is being offered a call */
	telCAProgressMsg			= 0x00000004,					/* call progress info for this CA */
	telCAOutgoingMsg			= 0x00000008,					/* CA is initiating an outgoing call */
	telCADisconnectMsg			= 0x00000010,					/* CA disconnected (dropped or rmt disc */
	telCAActiveMsg				= 0x00000020,					/* CA is active and voice/data is free */
																/* to flow end to end */
	telCAConferenceMsg			= 0x00000040,					/* conference activity on CA */
	telCATransferMsg			= 0x00000080,					/* transfer feature activity */
	telCAHoldMsg				= 0x00000100,					/* hold feature activity */
	telCADigitsMsg				= 0x00000200,					/* remote signaling digits arrived */
	telCACallParkMsg			= 0x00000400,					/* CA call park feature activity */
	telCACallbackMsg			= 0x00000800,					/* CA call back feature activity  */
	telCARejectMsg				= 0x00001000,					/* CA is rejected */
	telCADeflectMsg				= 0x00002000,					/* CA is deflected */
	telCAForwardMsg				= 0x00004000,					/* CA is forwarded to this DN  */
	telCAConferenceSplitMsg		= 0x00008000,					/* conference split activity  */
	telCAConferenceDropMsg		= 0x00010000,					/* conference drop activity  */
	telCAQueuedMsg				= 0x00020000,					/* CA has been queued  */
	telCAInUseMsg				= 0x00040000,					/* CA is in use  */
	telCACallPickupMsg			= 0x00080000,					/* CA pickup activity */
	telCAPagingMsg				= 0x00100000,					/* CA paging activity */
	telCAIntercomMsg			= 0x00200000,					/* CA intercom activity */
	telCAModemToneMsg			= 0x00400000,					/* modem tones detected */
	telCAFaxToneMsg				= 0x00800000,					/* fax tones detected */
	telCAIdleMsg				= 0x01000000,					/* CA is in idle state */
	telCASuccessiveAlertMsg		= 0x02000000,					/* phone is alerting, one per ring */
	telCAUserUserInfoMsg		= 0x04000000,					/* user to user information has arrrived */
																/* for this CA */
	telCAHandOffMsg				= 0x08000000,					/* CA is ready for hand-off */
	telCAVoiceDetectedMsg		= 0x10000000,					/* voice Detect related event */
	telCASilenceDetectedMsg		= 0x20000000,					/* silence Detect related event */
	telCADigitsImmMsg			= 0x40000000,					/* immidiate arrival of remote signaling digits */
	telCAOtherMsg				= (long)0x80000000,				/* tool specific CA message */
	telAllCAMsgs				= 0x7FFFFFFF					/* mask to all non tool specific CA events */
};

typedef OSErr 							TELErr;
typedef unsigned long 					TELFlags;
enum {
	telNoMenus					= 1L << 16,						/* tells tool not to display any custom menus */
	telQuiet					= 1L << 17,						/* tells tool not to display any dialog boxes or alerts */
	telConfigChanged			= 1L << 18						/* notifies application that the config has changed */
};

typedef unsigned long 					TELFeatureFlags;
enum {
	pcmAvail					= 1L << 0,						/* true if PCM voice data accessible */
	hasHandset					= 1L << 1,						/* true if a phone handset is attached  */
	hasSpeakerphone				= 1L << 2,						/* true if a 2 way speakerphone is attached */
	canOnHookDial				= 1L << 3,						/* can on-hook dial */
	hasRinger					= 1L << 4,						/* terminal has its own ringer */
	canSetDisplay				= 1L << 5,						/* application can write to the display */
	hasKeypad					= 1L << 6,						/* attached phone has standard 12 key pad */
	hasVideo					= 1L << 7,						/* terminal has a videophone */
	hasOther					= 1L << 8,						/* reserved for future use */
	crossDNConference			= 1L << 9,						/* can perform cross-DN conferences */
	hasSubaddress				= 1L << 10,						/* attached network supports subaddressing */
	hasUserUserInfo				= 1L << 11,						/* network supports user-to-user info */
	hasHandsetSoundStreams		= 1L << 12,						/* sound streams are supported on the handset */
	hasIndHandset				= 1L << 13,						/* handset can be accessed independently of the phone line */
	hasBuiltinSpeakerphone		= 1L << 14						/* speaker and microphone of the Mac can be used */
};



struct TELTermRecord {

	short 							tRef;
	TELFeatureFlags 				featureFlags;
	short 							handsetSpeakerVol;
	short 							handsetMicVol;
	short 							speakerphoneVol;
	short 							speakerphoneMicVol;
	short 							ringerVol;
	short 							otherVol;
	short 							ringerTypes;
	short 							hasDisplay;
	short 							displayRows;
	short 							numDNs;
	short 							maxAllocCA;
	short 							curAllocCA;
	short 							builtinSpeakerVol;
	short 							builtinSpeakerMicVol;
	long 							reserved;
};
typedef struct TELTermRecord			TELTermRecord;

typedef TELTermRecord *					TELTermPtr;

struct TELRecord {
	short 							procID;

	TELFlags 						flags;
	short 							reserved;

	long 							refCon;
	long 							userData;

	UniversalProcPtr 				defproc;

	Ptr 							config;
	Ptr 							oldConfig;

	TELTermPtr 						pTELTerm;

	long 							telPrivate;
	long 							reserved1;
	long 							reserved2;

	long 							pTELTermSize;
	short 							version;

};
typedef struct TELRecord				TELRecord;

typedef TELRecord *						TELPtr;
typedef TELPtr *						TELHandle;
typedef unsigned long 					TELDNFeatureFlags;
enum {
	dndSub						= 1L << 0,						/* do not disturb subscribed */
	dndAvail					= 1L << 1,						/* do not disturb available */
	dndActive					= 1L << 2,						/* do not disturb active */
	voiceMailAccessSub			= 1L << 3,						/* message waiting subscribed */
	voiceMailAccessAvail		= 1L << 4,						/* message waiting available */
	voiceMailAccessActive		= 1L << 5,						/* message waiting active */
	pagingSub					= 1L << 6,						/* paging is subscribed */
	pagingAvail					= 1L << 7,						/* paging is available */
	pagingActive				= 1L << 8,						/* paging is active */
	intercomSub					= 1L << 9,						/* intercom is subscribed */
	intercomAvail				= 1L << 10,						/* intercom is available */
	intercomActive				= 1L << 11,						/* intercom is active */
	dnSelectSub					= 1L << 12,						/* DN select is subscribed */
	dnSelectAvail				= 1L << 13,						/* DN select is available */
	dnSelectActive				= 1L << 14,						/* DN is selected */
	callPickupSub				= 1L << 15,						/* call pickup is subscribed */
	callPickupAvail				= 1L << 16,						/* call pickup is available */
	dnInUse						= 1L << 17,						/* a CA is allocated for this DN */
	logicalDN					= 1L << 18,						/* this DN is not on this terminal */
	dnAccessible				= 1L << 19,						/* commands can be sent to this DN */
	canInitiate					= 1L << 20,						/* an outgoing CA can be initiated */
	voiceMessageWaiting			= 1L << 21,						/* voice mail waiting for this dn */
	hasDNSoundStreams			= 1L << 22,						/* sound streams are supported on this DN */
	autoAnswerAvail				= 1L << 23,						/* AutoAnswer is set for this DN */
	autoAnswerActive			= 1L << 24,						/* AutoAnswer is currently applied to CA on this DN */
	tollSaverAvail				= 1L << 25,						/* tollSaver is set for this DN */
	tollSaverActive				= 1L << 26						/* tollSaver is currently applied to CA on this DN */
};

typedef unsigned long 					TELDNForwardFlags;
enum {
	immediateForwardSub			= 1L << 0,						/* immediate call forward subscribed */
	immediateForwardAvail		= 1L << 1,						/* immediate call forward available */
	immediateForwardActive		= 1L << 2,						/* immediate call forward active */
	busyForwardSub				= 1L << 3,						/* forward on busy subscribed */
	busyForwardAvail			= 1L << 4,						/* forward on busy available */
	busyForwardActive			= 1L << 5,						/* forward on busy active */
	noAnswerForwardSub			= 1L << 6,						/* no answer call forward subscribed */
	noAnswerForwardAvail		= 1L << 7,						/* no answer call forward available */
	noAnswerForwardActive		= 1L << 8,						/* no answer call forward active */
	busyNAForwardSub			= 1L << 9,						/* busy & no answer call forward subscribed */
	busyNAForwardAvail			= 1L << 10,						/* busy & no answer call forward available */
	busyNAForwardActive			= 1L << 11						/* busy & no answer call forward active */
};



struct TELDNRecord {

	short 							dnRef;
	StringPtr 						dn;
	StringPtr 						dnPartyName;
	StringPtr 						dnSubaddress;
	TELHandle 						hTEL;
	short 							maxAllocCA;
	short 							curAllocCA;
	short 							dnType;
	TELDNFeatureFlags 				featureFlags;
	short 							numPageIDs;
	short 							numIntercomIDs;
	short 							numPickupIDs;
	TELDNForwardFlags 				forwardFlags;
	StringPtr 						iForwardDN;
	StringPtr 						iForwardSubaddress;
	StringPtr 						iForwardPartyName;
	StringPtr 						bForwardDN;
	StringPtr 						bForwardSubaddress;
	StringPtr 						bForwardPartyName;
	StringPtr 						naForwardDN;
	StringPtr 						naForwardSubaddress;
	StringPtr 						naForwardPartyName;
	short 							naForwardRings;
	long 							telDNPrivate;
	long 							refCon;
	long 							userData;
	long 							reserved;
};
typedef struct TELDNRecord				TELDNRecord;

typedef TELDNRecord *					TELDNPtr;
typedef TELDNPtr *						TELDNHandle;
typedef unsigned long 					TELCAFeatureFlags;
enum {
	holdSub						= 1L << 0,						/* hold subscribed  */
	holdAvail					= 1L << 1,						/* hold available  */
	holdActive					= 1L << 2,						/* hold active  */
	conferenceSub				= 1L << 3,						/* conference subscribed */
	conferenceAvail				= 1L << 4,						/* conference available */
	conferenceActive			= 1L << 5,						/* conference active  */
	conferenceDropSub			= 1L << 6,						/* conference drop subscribed  */
	conferenceDropAvail			= 1L << 7,						/* a call to TELDrop will drop this */
																/* CA only from a conference */
	conferenceSplitSub			= 1L << 8,						/* conference split subscribed  */
	conferenceSplitAvail		= 1L << 9,						/* conference split available for this CA */
	numToConferenceRequired		= 1L << 10,						/* the number of CAs to be conferenced is */
																/* required in TELConfPrep  */
	transferSub					= 1L << 11,						/* transfer subscribed  */
	transferAvail				= 1L << 12,						/* transfer available  */
	transferActive				= 1L << 13,						/* transfer active */
	caRelated					= 1L << 14						/* this CA is the specified in some other CA's relatedCA field*/
};

typedef unsigned long 					TELCAOtherFeatures;
enum {
	callbackSub					= 1L << 0,						/* call back subscribed */
	callbackAvail				= 1L << 1,						/* call back available */
	callbackActive				= 1L << 2,						/* call back active  */
	callbackClearSub			= 1L << 3,						/* call back clearing subscribed */
	callbackNowSub				= 1L << 4,						/* call back now subscribed */
	callbackNowAvail			= 1L << 5,						/* call back now available  */
	callbackBusy				= 1L << 6,						/* call back on busy */
	callbackNoAnswer			= 1L << 7,						/* call back on no answer */
	callbackReturnsRef			= 1L << 8,						/* call back returns a reference */
	parkSub						= 1L << 9,						/* call park subscribed */
	parkAvail					= 1L << 10,						/* call park available */
	parkActive					= 1L << 11,						/* call park active */
	parkRetrieveSub				= 1L << 12,						/* call park retrieve subscribed */
	parkRetrieveWithID			= 1L << 13,						/* retrieve parked calls with IDs */
	parkWithReturnedID			= 1L << 14,						/* park call to a specific remote ID */
	parkWithGivenID				= 1L << 18,						/* for switch that requires ID for parking */
	rejectable					= 1L << 15,						/* CA is rejectable  */
	deflectable					= 1L << 16,						/* CA is deflectable  */
	acceptable					= 1L << 17,						/* CA is acceptable */
	voiceDetected				= 1L << 19,						/* voice has been detected on this CA incase of */
																/* an incoming call */
	callAnswdTSRings			= 1L << 20						/* incoimng call was answered on TollSaver rings */
};

typedef struct TELCARecord 				TELCARecord;
typedef TELCARecord *					TELCAPtr;
typedef TELCAPtr *						TELCAHandle;

struct TELCARecord {
	short 							caRef;
	TELDNHandle 					hTELDN;
	TELHandle 						hTEL;
	short 							caState;
	TELCAHandle 					relatedCA;
	long 							connectTime;				/* can be used by application to keep track of connect time */
	short 							intExt;
	short 							callType;
	short 							dialType;
	short 							bearerType;
	short 							rate;
	StringPtr 						rmtDN;
	StringPtr 						rmtPartyName;
	StringPtr 						rmtSubaddress;
	StringPtr 						routeDN;
	StringPtr 						routePartyName;
	StringPtr 						routeSubaddress;
	short 							priority;
	short 							conferenceLimit;
	TELCAFeatureFlags 				featureFlags;
	TELCAOtherFeatures 				otherFeatures;
	long 							telCAPrivate;
	long 							refCon;
	long 							userData;
	long 							reserved;
};

/* Constants for HandleType in structure above */
enum {
	telHandleType				= 0,							/* feature requires a terminal handle */
	telDNHandleType				= 1,							/* feature requires a DN handle */
	telCAHandleType				= 2								/* feature requires a CA handle */
};


struct FeatureList {
	short 							featureID;
	StringPtr 						featureName;
	short 							handleType;
	struct FeatureList *			nextFeature;
};
typedef struct FeatureList				FeatureList;
typedef FeatureList *					FeatureListPtr;
/* CA MESSAGE STRUCTURES FOR MSGINFO */

struct CAGenericMsgRec {
	StringPtr 						rmtDN;
	StringPtr 						rmtName;
	StringPtr 						rmtSubaddress;
	short 							dialType;
};
typedef struct CAGenericMsgRec			CAGenericMsgRec;

struct CAUserUserInfoMsgRec {
	StringPtr 						userUserInfo;
};
typedef struct CAUserUserInfoMsgRec		CAUserUserInfoMsgRec;

struct CAConfMsgRec {
	TELCAHandle 					relatedCA;
};
typedef struct CAConfMsgRec				CAConfMsgRec;

struct CATransfMsgRec {
	StringPtr 						rmtDN;
	StringPtr 						rmtName;
	StringPtr 						rmtSubaddress;
	short 							dialType;
	TELCAHandle 					prepCA;
};
typedef struct CATransfMsgRec			CATransfMsgRec;
typedef CALLBACK_API( void , TelephoneTermMsgProcPtr )(TELHandle hTEL, long msg, short mtype, short value, long globals);
typedef CALLBACK_API( void , TelephoneDNMsgProcPtr )(TELDNHandle hTELDN, long Msg, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param rmtName, ConstStr255Param rmtSubaddress, long globals);
typedef CALLBACK_API( void , TelephoneCAMsgProcPtr )(TELCAHandle hTELCA, long Msg, short mtype, short value, Ptr Msginfo, long globals);
typedef CALLBACK_API( void , TelephoneChooseIdleProcPtr )(void );
typedef STACK_UPP_TYPE(TelephoneTermMsgProcPtr) 				TelephoneTermMsgUPP;
typedef STACK_UPP_TYPE(TelephoneDNMsgProcPtr) 					TelephoneDNMsgUPP;
typedef STACK_UPP_TYPE(TelephoneCAMsgProcPtr) 					TelephoneCAMsgUPP;
typedef STACK_UPP_TYPE(TelephoneChooseIdleProcPtr) 				TelephoneChooseIdleUPP;
#if OPAQUE_UPP_TYPES
	EXTERN_API(TelephoneTermMsgUPP)
	NewTelephoneTermMsgUPP		   (TelephoneTermMsgProcPtr	userRoutine);

	EXTERN_API(TelephoneDNMsgUPP)
	NewTelephoneDNMsgUPP		   (TelephoneDNMsgProcPtr	userRoutine);

	EXTERN_API(TelephoneCAMsgUPP)
	NewTelephoneCAMsgUPP		   (TelephoneCAMsgProcPtr	userRoutine);

	EXTERN_API(TelephoneChooseIdleUPP)
	NewTelephoneChooseIdleUPP	   (TelephoneChooseIdleProcPtr userRoutine);

	EXTERN_API(void)
	DisposeTelephoneTermMsgUPP	   (TelephoneTermMsgUPP		userUPP);

	EXTERN_API(void)
	DisposeTelephoneDNMsgUPP	   (TelephoneDNMsgUPP		userUPP);

	EXTERN_API(void)
	DisposeTelephoneCAMsgUPP	   (TelephoneCAMsgUPP		userUPP);

	EXTERN_API(void)
	DisposeTelephoneChooseIdleUPP    (TelephoneChooseIdleUPP userUPP);

	EXTERN_API(void)
	InvokeTelephoneTermMsgUPP	   (TELHandle				hTEL,
									long					msg,
									short					mtype,
									short					value,
									long					globals,
									TelephoneTermMsgUPP		userUPP);

	EXTERN_API(void)
	InvokeTelephoneDNMsgUPP		   (TELDNHandle				hTELDN,
									long					Msg,
									short					mtype,
									short					value,
									ConstStr255Param		rmtDN,
									ConstStr255Param		rmtName,
									ConstStr255Param		rmtSubaddress,
									long					globals,
									TelephoneDNMsgUPP		userUPP);

	EXTERN_API(void)
	InvokeTelephoneCAMsgUPP		   (TELCAHandle				hTELCA,
									long					Msg,
									short					mtype,
									short					value,
									Ptr						Msginfo,
									long					globals,
									TelephoneCAMsgUPP		userUPP);

	EXTERN_API(void)
	InvokeTelephoneChooseIdleUPP    (TelephoneChooseIdleUPP	userUPP);

#else
	enum { uppTelephoneTermMsgProcInfo = 0x0000EBC0 }; 				/* pascal no_return_value Func(4_bytes, 4_bytes, 2_bytes, 2_bytes, 4_bytes) */
	enum { uppTelephoneDNMsgProcInfo = 0x003FEBC0 }; 				/* pascal no_return_value Func(4_bytes, 4_bytes, 2_bytes, 2_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */
	enum { uppTelephoneCAMsgProcInfo = 0x0003EBC0 }; 				/* pascal no_return_value Func(4_bytes, 4_bytes, 2_bytes, 2_bytes, 4_bytes, 4_bytes) */
	enum { uppTelephoneChooseIdleProcInfo = 0x00000000 }; 			/* pascal no_return_value Func() */
	#define NewTelephoneTermMsgUPP(userRoutine) 					(TelephoneTermMsgUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTelephoneTermMsgProcInfo, GetCurrentArchitecture())
	#define NewTelephoneDNMsgUPP(userRoutine) 						(TelephoneDNMsgUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTelephoneDNMsgProcInfo, GetCurrentArchitecture())
	#define NewTelephoneCAMsgUPP(userRoutine) 						(TelephoneCAMsgUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTelephoneCAMsgProcInfo, GetCurrentArchitecture())
	#define NewTelephoneChooseIdleUPP(userRoutine) 					(TelephoneChooseIdleUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTelephoneChooseIdleProcInfo, GetCurrentArchitecture())
	#define DisposeTelephoneTermMsgUPP(userUPP) 					DisposeRoutineDescriptor(userUPP)
	#define DisposeTelephoneDNMsgUPP(userUPP) 						DisposeRoutineDescriptor(userUPP)
	#define DisposeTelephoneCAMsgUPP(userUPP) 						DisposeRoutineDescriptor(userUPP)
	#define DisposeTelephoneChooseIdleUPP(userUPP) 					DisposeRoutineDescriptor(userUPP)
	#define InvokeTelephoneTermMsgUPP(hTEL, msg, mtype, value, globals, userUPP)  CALL_FIVE_PARAMETER_UPP((userUPP), uppTelephoneTermMsgProcInfo, (hTEL), (msg), (mtype), (value), (globals))
	#define InvokeTelephoneDNMsgUPP(hTELDN, Msg, mtype, value, rmtDN, rmtName, rmtSubaddress, globals, userUPP)  CALL_EIGHT_PARAMETER_UPP((userUPP), uppTelephoneDNMsgProcInfo, (hTELDN), (Msg), (mtype), (value), (rmtDN), (rmtName), (rmtSubaddress), (globals))
	#define InvokeTelephoneCAMsgUPP(hTELCA, Msg, mtype, value, Msginfo, globals, userUPP)  CALL_SIX_PARAMETER_UPP((userUPP), uppTelephoneCAMsgProcInfo, (hTELCA), (Msg), (mtype), (value), (Msginfo), (globals))
	#define InvokeTelephoneChooseIdleUPP(userUPP) 					CALL_ZERO_PARAMETER_UPP((userUPP), uppTelephoneChooseIdleProcInfo)
#endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
#define NewTelephoneTermMsgProc(userRoutine) 					NewTelephoneTermMsgUPP(userRoutine)
#define NewTelephoneDNMsgProc(userRoutine) 						NewTelephoneDNMsgUPP(userRoutine)
#define NewTelephoneCAMsgProc(userRoutine) 						NewTelephoneCAMsgUPP(userRoutine)
#define NewTelephoneChooseIdleProc(userRoutine) 				NewTelephoneChooseIdleUPP(userRoutine)
#define CallTelephoneTermMsgProc(userRoutine, hTEL, msg, mtype, value, globals) InvokeTelephoneTermMsgUPP(hTEL, msg, mtype, value, globals, userRoutine)
#define CallTelephoneDNMsgProc(userRoutine, hTELDN, Msg, mtype, value, rmtDN, rmtName, rmtSubaddress, globals) InvokeTelephoneDNMsgUPP(hTELDN, Msg, mtype, value, rmtDN, rmtName, rmtSubaddress, globals, userRoutine)
#define CallTelephoneCAMsgProc(userRoutine, hTELCA, Msg, mtype, value, Msginfo, globals) InvokeTelephoneCAMsgUPP(hTELCA, Msg, mtype, value, Msginfo, globals, userRoutine)
#define CallTelephoneChooseIdleProc(userRoutine)				InvokeTelephoneChooseIdleUPP(userRoutine)
#endif  /* CALL_NOT_IN_CARBON */

EXTERN_API( TELErr )
InitTEL							(void);

EXTERN_API( TELErr )
TELGetInfo						(TELHandle 				hTEL);

EXTERN_API( TELErr )
TELOpenTerm						(TELHandle 				hTEL);

EXTERN_API( TELErr )
TELResetTerm					(TELHandle 				hTEL);

EXTERN_API( TELErr )
TELCloseTerm					(TELHandle 				hTEL);

EXTERN_API( TELErr )
TELTermMsgHand					(TELHandle 				hTEL,
								 long 					eventMask,
								 TelephoneTermMsgUPP 	msgProc,
								 long 					globals);

EXTERN_API( TELErr )
TELClrTermMsgHand				(TELHandle 				hTEL,
								 TelephoneTermMsgUPP 	msgProc);

EXTERN_API( TELErr )
TELTermEventsSupp				(TELHandle 				hTEL,
								 long *					eventMask);

EXTERN_API( short )
TELGetProcID					(Str255 				name);

EXTERN_API( TELHandle )
TELNew							(short 					procID,
								 TELFlags 				flags,
								 long 					refCon,
								 long 					userData);

EXTERN_API( TELHandle )
TELNewWithResult				(short 					procID,
								 TELFlags 				flags,
								 long 					refCon,
								 long 					userData,
								 TELErr *				error);

EXTERN_API( TELErr )
TELDefault						(Ptr *					theConfig,
								 short 					procID,
								 Boolean 				allocate);

EXTERN_API( Boolean )
TELValidate						(TELHandle 				hTEL);

EXTERN_API( Ptr )
TELGetConfig					(TELHandle 				hTEL);

EXTERN_API( short )
TELSetConfig					(TELHandle 				hTEL,
								 Ptr 					thePtr);

EXTERN_API( TELErr )
TELChoose						(TELHandle *			hTEL,
								 Point 					where,
								 TelephoneChooseIdleUPP  idleProc);

EXTERN_API( Handle )
TELSetupPreflight				(short 					procID,
								 long *					magicCookie);

EXTERN_API( void )
TELSetupSetup					(short 					procID,
								 Ptr 					theConfig,
								 short 					count,
								 DialogPtr 				theDialog,
								 long *					magicCookie);

EXTERN_API( Boolean )
TELSetupFilter					(short 					procID,
								 Ptr 					theConfig,
								 short 					count,
								 DialogPtr 				theDialog,
								 EventRecord *			theEvent,
								 short *				theItem,
								 long *					magicCookie);

EXTERN_API( void )
TELSetupItem					(short 					procID,
								 Ptr 					theConfig,
								 short 					count,
								 DialogPtr 				theDialog,
								 short *				theItem,
								 long *					magicCookie);

EXTERN_API( void )
TELSetupCleanup					(short 					procID,
								 Ptr 					theConfig,
								 short 					count,
								 DialogPtr 				theDialog,
								 long *					magicCookie);

EXTERN_API( void )
TELSetupXCleanup				(short 					procID,
								 Ptr 					theConfig,
								 short 					count,
								 DialogPtr 				theDialog,
								 Boolean 				OKed,
								 long *					magicCookie);

EXTERN_API( void )
TELSetupPostflight				(short 					procID);

EXTERN_API( TELErr )
TELDispose						(TELHandle 				hTEL);

EXTERN_API( short )
TELCountDNs						(TELHandle 				hTEL,
								 short 					dnType,
								 Boolean 				physical);

EXTERN_API( TELErr )
TELDNLookupByIndex				(TELHandle 				hTEL,
								 short 					dnType,
								 Boolean 				physical,
								 short 					index,
								 TELDNHandle *			hTELDN);

EXTERN_API( TELErr )
TELDNLookupByName				(TELHandle 				hTEL,
								 ConstStr255Param 		DN,
								 TELDNHandle *			hTELDN);

EXTERN_API( TELErr )
TELDNSelect						(TELDNHandle 			hTELDN,
								 Boolean 				select);

EXTERN_API( TELErr )
TELDNDispose					(TELDNHandle 			hTELDN);

EXTERN_API( TELErr )
TELGetDNInfo					(TELDNHandle 			hTELDN);

EXTERN_API( TELErr )
TELGetDNFlags					(TELDNHandle 			hTELDN,
								 long *					dnFeatureFlags,
								 long *					dnForwardFlags);

EXTERN_API( TELErr )
TELDNMsgHand					(TELDNHandle 			hTELDN,
								 Boolean 				allDNs,
								 long 					eventMask,
								 TelephoneDNMsgUPP 		msgProc,
								 long 					globals);

EXTERN_API( TELErr )
TELClrDNMsgHand					(TELDNHandle 			hTELDN,
								 TelephoneDNMsgUPP 		msgProc);

EXTERN_API( TELErr )
TELDNEventsSupp					(TELDNHandle 			hTELDN,
								 long *					eventMask);

EXTERN_API( short )
TELCountCAs						(TELDNHandle 			hTELDN,
								 short 					internalExternal);

EXTERN_API( TELErr )
TELCALookup						(TELDNHandle 			hTELDN,
								 short 					internalExternal,
								 short 					index,
								 TELCAHandle *			hTELCA);

EXTERN_API( TELErr )
TELCADispose					(TELCAHandle 			hTELCA);

EXTERN_API( TELErr )
TELGetCAState					(TELCAHandle 			hTELCA,
								 short *				state);

EXTERN_API( TELErr )
TELGetCAFlags					(TELCAHandle 			hTELCA,
								 long *					caFeatureFlags,
								 long *					caOtherFeatures);

EXTERN_API( TELErr )
TELGetCAInfo					(TELCAHandle 			hTELCA);

EXTERN_API( TELErr )
TELCAMsgHand					(TELDNHandle 			hTELDN,
								 long 					eventMask,
								 TelephoneCAMsgUPP 		msgProc,
								 long 					globals);

EXTERN_API( TELErr )
TELClrCAMsgHand					(TELDNHandle 			hTELDN,
								 TelephoneCAMsgUPP 		msgProc);

EXTERN_API( TELErr )
TELCAEventsSupp					(TELDNHandle 			hTELDN,
								 long *					eventMask);

EXTERN_API( TELErr )
TELSetupCall					(TELDNHandle 			hTELDN,
								 TELCAHandle *			hTELCA,
								 ConstStr255Param 		destDN,
								 ConstStr255Param 		destName,
								 ConstStr255Param 		destSubaddress,
								 ConstStr255Param 		userUserInfo,
								 short 					bearerType,
								 short 					rate);

EXTERN_API( TELErr )
TELConnect						(TELCAHandle 			hTELCA);

EXTERN_API( TELErr )
TELDialDigits					(TELCAHandle 			hTELCA,
								 ConstStr255Param 		digits);

EXTERN_API( TELErr )
TELAcceptCall					(TELCAHandle 			hTELCA);

EXTERN_API( TELErr )
TELRejectCall					(TELCAHandle 			hTELCA,
								 short 					reason);

EXTERN_API( TELErr )
TELDeflectCall					(TELCAHandle 			hTELCA,
								 ConstStr255Param 		rmtDN,
								 ConstStr255Param 		rmtName,
								 ConstStr255Param 		rmtSubaddress);

EXTERN_API( TELErr )
TELAnswerCall					(TELCAHandle 			hTELCA);

EXTERN_API( TELErr )
TELDrop							(TELCAHandle 			hTELCA,
								 ConstStr255Param 		userUserInfo);

EXTERN_API( TELErr )
TELHold							(TELCAHandle 			hTELCA);

EXTERN_API( TELErr )
TELRetrieve						(TELCAHandle 			hTELCA);

EXTERN_API( TELErr )
TELConferencePrep				(TELCAHandle 			hTELCA1,
								 TELCAHandle 			hTELCA2,
								 short 					numToConference);

EXTERN_API( TELErr )
TELConferenceEstablish			(TELCAHandle 			hTELCA1,
								 TELCAHandle 			hTELCA2);

EXTERN_API( TELErr )
TELConferenceSplit				(TELCAHandle 			hTELCA);

EXTERN_API( TELErr )
TELTransferPrep					(TELCAHandle 			hTELCA1,
								 TELCAHandle 			hTELCA2);

EXTERN_API( TELErr )
TELTransferEstablish			(TELCAHandle 			hTELCA1,
								 TELCAHandle 			hTELCA2);

EXTERN_API( TELErr )
TELTransferBlind				(TELCAHandle 			hTELCA,
								 ConstStr255Param 		rmtDN,
								 ConstStr255Param 		rmtName,
								 ConstStr255Param 		rmtSubaddress);

EXTERN_API( TELErr )
TELForwardSet					(TELDNHandle 			hTELDN,
								 ConstStr255Param 		forwardDN,
								 ConstStr255Param 		forwardName,
								 ConstStr255Param 		forwardSubaddress,
								 short 					forwardType,
								 short 					numrings);

EXTERN_API( TELErr )
TELForwardClear					(TELDNHandle 			hTELDN,
								 short 					forwardType);

EXTERN_API( TELErr )
TELCallbackSet					(TELCAHandle 			hTELCA,
								 short *				callbackRef);

EXTERN_API( TELErr )
TELCallbackClear				(TELHandle 				hTEL,
								 short 					callbackRef);

EXTERN_API( TELErr )
TELCallbackNow					(TELCAHandle 			hTELCA,
								 short 					callbackRef);

EXTERN_API( TELErr )
TELDNDSet						(TELDNHandle 			hTELDN,
								 short 					dndType);

EXTERN_API( TELErr )
TELDNDClear						(TELDNHandle 			hTELDN,
								 short 					dndType);

EXTERN_API( TELErr )
TELCallPickup					(TELCAHandle 			hTELCA,
								 ConstStr255Param 		pickupDN,
								 short 					pickupGroupID);

EXTERN_API( TELErr )
TELParkCall						(TELCAHandle 			hTELCA,
								 StringPtr *			parkRetrieveID,
								 ConstStr255Param 		parkID);

EXTERN_API( TELErr )
TELRetrieveParkedCall			(TELCAHandle 			hTELCA,
								 ConstStr255Param 		parkRetrieveID);

EXTERN_API( TELErr )
TELVoiceMailAccess				(TELCAHandle 			hTELCA);

EXTERN_API( TELErr )
TELPaging						(TELCAHandle 			hTELCA,
								 short 					pageID);

EXTERN_API( TELErr )
TELIntercom						(TELCAHandle 			hTELCA,
								 short 					intercomID);

EXTERN_API( TELErr )
TELOtherFeatureList				(TELHandle 				hTEL,
								 FeatureListPtr *		fList);

EXTERN_API( TELErr )
TELOtherFeatureImplement		(TELHandle 				hTEL,
								 Handle 				theHandle,
								 short 					featureID);

EXTERN_API( TELErr )
TELToolFunctions				(TELHandle 				hTEL,
								 short 					msgcode,
								 Boolean *				supportsIt);

EXTERN_API( TELErr )
TELOtherFunction				(TELHandle 				hTEL,
								 Ptr 					paramblock,
								 long 					size);

EXTERN_API( TELErr )
TELGetHooksw					(TELHandle 				hTEL,
								 short 					hookType,
								 Boolean *				offHook);

EXTERN_API( TELErr )
TELSetHooksw					(TELHandle 				hTEL,
								 short 					hookType,
								 Boolean 				offHook);

EXTERN_API( TELErr )
TELGetVolume					(TELHandle 				hTEL,
								 short 					volType,
								 short *				level,
								 short *				volState);

EXTERN_API( TELErr )
TELSetVolume					(TELHandle 				hTEL,
								 short 					volType,
								 short *				level,
								 short 					volState);

EXTERN_API( TELErr )
TELAlert						(TELHandle 				hTEL,
								 short *				level,
								 short 					alertPattern);

EXTERN_API( TELErr )
TELGetDisplay					(TELHandle 				hTEL,
								 short 					index,
								 short *				displayMode,
								 StringPtr *			text);

EXTERN_API( TELErr )
TELSetDisplay					(TELHandle 				hTEL,
								 short 					index,
								 short 					displayMode,
								 ConstStr255Param 		text);

EXTERN_API( void )
TELIdle							(TELHandle 				hTEL);

EXTERN_API( void )
TELActivate						(TELHandle 				hTEL,
								 Boolean 				activate);

EXTERN_API( void )
TELResume						(TELHandle 				hTEL,
								 Boolean 				resume);

EXTERN_API( Boolean )
TELMenu							(TELHandle 				hTEL,
								 short 					menuID,
								 short 					item);

EXTERN_API( void )
TELEvent						(TELHandle 				hTEL,
								 const EventRecord *	theEvent);

EXTERN_API( void )
TELGetToolName					(short 					procID,
								 Str255 				name);

EXTERN_API( Handle )
TELGetVersion					(TELHandle 				hTEL);

EXTERN_API( short )
TELGetTELVersion				(void);

EXTERN_API( TELErr )
TELIntlToEnglish				(TELHandle 				hTEL,
								 Ptr 					inputPtr,
								 Ptr *					outputPtr,
								 short 					language);

EXTERN_API( TELErr )
TELEnglishToIntl				(TELHandle 				hTEL,
								 Ptr 					inputPtr,
								 Ptr *					outputPtr,
								 short 					language);

EXTERN_API( TELErr )
TELGetDNSoundInput				(TELDNHandle 			hTELDN,
								 Str255 				deviceName);

EXTERN_API( TELErr )
TELDisposeDNSoundInput			(TELDNHandle 			hTELDN,
								 ConstStr255Param 		deviceName);

EXTERN_API( TELErr )
TELGetDNSoundOutput				(TELDNHandle 			hTELDN,
								 Component *			SndOut);

EXTERN_API( TELErr )
TELDisposeDNSoundOutput			(TELDNHandle 			hTELDN,
								 Component 				SndOut);

EXTERN_API( TELErr )
TELGetHSSoundInput				(TELHandle 				termHand,
								 Str255 				deviceName);

EXTERN_API( TELErr )
TELDisposeHSSoundInput			(TELHandle 				termHand,
								 ConstStr255Param 		deviceName);

EXTERN_API( TELErr )
TELGetHSSoundOutput				(TELHandle 				termHand,
								 Component *			SndOut);

EXTERN_API( TELErr )
TELDisposeHSSoundOutput			(TELHandle 				termHand,
								 Component 				SndOut);

EXTERN_API( TELErr )
TELDNSetAutoAnswer				(TELDNHandle 			hTELDN,
								 Boolean 				AutoAnswerOn);

EXTERN_API( TELErr )
TELDNTollSaverControl			(TELDNHandle 			hTELDN,
								 Boolean 				QuickAnswer);

EXTERN_API( TELErr )
TELSetIndHSConnect				(TELHandle 				termHand,
								 Boolean 				Connect);

EXTERN_API( TELErr )
TELGetIndHSConnect				(TELHandle 				termHand,
								 Boolean *				Connect);

EXTERN_API( TELErr )
TELCAVoiceDetect				(TELCAHandle 			hTELCA,
								 Boolean 				VoiceDetectOn);

EXTERN_API( TELErr )
TELCASilenceDetect				(TELCAHandle 			hTELCA,
								 Boolean 				DetectOn,
								 long 					Period);

EXTERN_API( TELErr )
TELGetTelNewErr					(void);

EXTERN_API( TELErr )
TELDNSetDTMF					(TELDNHandle 			hTELDN,
								 Boolean 				dtmfOn);

EXTERN_API( TELErr )
TELDNGetDTMF					(TELDNHandle 			hTELDN,
								 Boolean *				dtmfOn);

EXTERN_API( TELErr )
TELHSSetDTMF					(TELHandle 				termHand,
								 Boolean 				dtmfOn);

EXTERN_API( TELErr )
TELHSGetDTMF					(TELHandle 				termHand,
								 Boolean *				dtmfOn);

EXTERN_API( TELErr )
TELGetDNStatus					(TELDNHandle 			hTELDN,
								 long *					inUse);

EXTERN_API( TELErr )
TELGetDNProgressDet				(TELDNHandle 			hTELDN,
								 long 					selector,
								 Boolean *				prgDetOn);

EXTERN_API( TELErr )
TELSetDNProgressDet				(TELDNHandle 			hTELDN,
								 long 					selector,
								 Boolean 				prgDetOn);



#if PRAGMA_STRUCT_ALIGN
	#pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
	#pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
	#pragma pack()
#endif

#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* __TELEPHONES__ */

