#ifndef _TAPI_H
#define _TAPI_H

/* Telephony Application Programming Interface (TAPI) definitions */

#ifndef TAPI_CURRENT_VERSION
#define TAPI_CURRENT_VERSION  0x00020002
#endif

#include <windows.h>
#include <basetsd.h>

#if (TAPI_CURRENT_VERSION >= 0x00020002)
#include <oaidl.h>
#endif

#include <pshpack1.h>

#ifdef __cplusplus
extern "C" {
#endif

#if __POCC__ >= 290
#pragma warn(push)
#pragma warn(disable:2198)  /* Nameless field is not standard */
#endif

#define DECLARE_OPAQUE32(name)  typedef DWORD name
DECLARE_OPAQUE32(HCALL);
typedef HCALL *LPHCALL;

#if (TAPI_CURRENT_VERSION >= 0x00030000)
DECLARE_OPAQUE32(HCALLHUB);
typedef HCALLHUB *LPHCALLHUB;
#endif

DECLARE_OPAQUE32(HLINE);
typedef HLINE *LPHLINE;

DECLARE_OPAQUE32(HPHONE);
typedef HPHONE *LPHPHONE;

DECLARE_OPAQUE32(HLINEAPP);
typedef HLINEAPP *LPHLINEAPP;

DECLARE_OPAQUE32(HPHONEAPP);
typedef HPHONEAPP *LPHPHONEAPP;

#if (TAPI_CURRENT_VERSION >= 0x00020002)
DECLARE_OPAQUE32(HAGENTSESSION);
typedef HAGENTSESSION *LPHAGENTSESSION;
DECLARE_OPAQUE32(HAGENT);
typedef HAGENT *LPHAGENT;
#endif

#if (TAPI_CURRENT_VERSION >= 0x00030000)
DECLARE_OPAQUE32(HPRIVATECHANNEL);
typedef HPRIVATECHANNEL *LPHPRIVATECHANNEL;
#endif

typedef HICON *LPHICON;

typedef void (CALLBACK *LINECALLBACK)(DWORD,DWORD,DWORD_PTR,DWORD_PTR,DWORD_PTR,DWORD_PTR);
typedef void (CALLBACK *PHONECALLBACK)(DWORD,DWORD,DWORD_PTR,DWORD_PTR,DWORD_PTR,DWORD_PTR);

#define LINE_ADDRESSSTATE  0L
#define LINE_CALLINFO  1L
#define LINE_CALLSTATE  2L
#define LINE_CLOSE  3L
#define LINE_DEVSPECIFIC  4L
#define LINE_DEVSPECIFICFEATURE 5L
#define LINE_GATHERDIGITS  6L
#define LINE_GENERATE  7L
#define LINE_LINEDEVSTATE  8L
#define LINE_MONITORDIGITS  9L
#define LINE_MONITORMEDIA  10L
#define LINE_MONITORTONE  11L
#define LINE_REPLY  12L
#define LINE_REQUEST  13L
#define PHONE_BUTTON  14L
#define PHONE_CLOSE  15L
#define PHONE_DEVSPECIFIC  16L
#define PHONE_REPLY  17L
#define PHONE_STATE  18L
#define LINE_CREATE  19L
#define PHONE_CREATE  20L

#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINE_AGENTSPECIFIC  21L
#define LINE_AGENTSTATUS  22L
#define LINE_APPNEWCALL  23L
#define LINE_PROXYREQUEST  24L
#define LINE_REMOVE  25L
#define PHONE_REMOVE  26L
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020002)
#define LINE_AGENTSESSIONSTATUS 27L
#define LINE_QUEUESTATUS  28L
#define LINE_AGENTSTATUSEX  29L
#define LINE_GROUPSTATUS  30L
#define LINE_PROXYSTATUS  31L
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
#define LINE_APPNEWCALLHUB  32L
#define LINE_CALLHUBCLOSE  33L
#define LINE_DEVSPECIFICEX  34L
#endif
#define INITIALIZE_NEGOTIATION  0xFFFFFFFF UL

#define LINEADDRCAPFLAGS_FWDNUMRINGS  0x00000001
#define LINEADDRCAPFLAGS_PICKUPGROUPID  0x00000002
#define LINEADDRCAPFLAGS_SECURE  0x00000004
#define LINEADDRCAPFLAGS_BLOCKIDDEFAULT  0x00000008
#define LINEADDRCAPFLAGS_BLOCKIDOVERRIDE  0x00000010
#define LINEADDRCAPFLAGS_DIALED  0x00000020
#define LINEADDRCAPFLAGS_ORIGOFFHOOK  0x00000040
#define LINEADDRCAPFLAGS_DESTOFFHOOK  0x00000080
#define LINEADDRCAPFLAGS_FWDCONSULT  0x00000100
#define LINEADDRCAPFLAGS_SETUPCONFNULL  0x00000200
#define LINEADDRCAPFLAGS_AUTORECONNECT  0x00000400
#define LINEADDRCAPFLAGS_COMPLETIONID  0x00000800
#define LINEADDRCAPFLAGS_TRANSFERHELD  0x00001000
#define LINEADDRCAPFLAGS_TRANSFERMAKE  0x00002000
#define LINEADDRCAPFLAGS_CONFERENCEHELD  0x00004000
#define LINEADDRCAPFLAGS_CONFERENCEMAKE  0x00008000
#define LINEADDRCAPFLAGS_PARTIALDIAL  0x00010000
#define LINEADDRCAPFLAGS_FWDSTATUSVALID  0x00020000
#define LINEADDRCAPFLAGS_FWDINTEXTADDR  0x00040000
#define LINEADDRCAPFLAGS_FWDBUSYNAADDR  0x00080000
#define LINEADDRCAPFLAGS_ACCEPTTOALERT  0x00100000
#define LINEADDRCAPFLAGS_CONFDROP  0x00200000
#define LINEADDRCAPFLAGS_PICKUPCALLWAIT  0x00400000
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINEADDRCAPFLAGS_PREDICTIVEDIALER  0x00800000
#define LINEADDRCAPFLAGS_QUEUE  0x01000000
#define LINEADDRCAPFLAGS_ROUTEPOINT  0x02000000
#define LINEADDRCAPFLAGS_HOLDMAKESNEW  0x04000000
#define LINEADDRCAPFLAGS_NOINTERNALCALLS  0x08000000
#define LINEADDRCAPFLAGS_NOEXTERNALCALLS  0x10000000
#define LINEADDRCAPFLAGS_SETCALLINGID  0x20000000
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020002)
#define LINEADDRCAPFLAGS_ACDGROUP  0x40000000
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
#define LINEADDRCAPFLAGS_NOPSTNADDRESSTRANSLATION  0x80000000
#endif
#define LINEADDRESSMODE_ADDRESSID  0x00000001
#define LINEADDRESSMODE_DIALABLEADDR  0x00000002

#define LINEADDRESSSHARING_PRIVATE  0x00000001
#define LINEADDRESSSHARING_BRIDGEDEXCL  0x00000002
#define LINEADDRESSSHARING_BRIDGEDNEW  0x00000004
#define LINEADDRESSSHARING_BRIDGEDSHARED  0x00000008
#define LINEADDRESSSHARING_MONITORED  0x00000010

#define LINEADDRESSSTATE_OTHER  0x00000001
#define LINEADDRESSSTATE_DEVSPECIFIC  0x00000002
#define LINEADDRESSSTATE_INUSEZERO  0x00000004
#define LINEADDRESSSTATE_INUSEONE  0x00000008
#define LINEADDRESSSTATE_INUSEMANY  0x00000010
#define LINEADDRESSSTATE_NUMCALLS  0x00000020
#define LINEADDRESSSTATE_FORWARD  0x00000040
#define LINEADDRESSSTATE_TERMINALS  0x00000080
#define LINEADDRESSSTATE_CAPSCHANGE  0x00000100

#if (TAPI_CURRENT_VERSION >= 0x00030000)
#define LINEADDRESSTYPE_PHONENUMBER 0x00000001
#define LINEADDRESSTYPE_SDP  0x00000002
#define LINEADDRESSTYPE_EMAILNAME  0x00000004
#define LINEADDRESSTYPE_DOMAINNAME  0x00000008
#define LINEADDRESSTYPE_IPADDRESS  0x00000010
#endif
#define LINEADDRFEATURE_FORWARD  0x00000001
#define LINEADDRFEATURE_MAKECALL  0x00000002
#define LINEADDRFEATURE_PICKUP  0x00000004
#define LINEADDRFEATURE_SETMEDIACONTROL 0x00000008
#define LINEADDRFEATURE_SETTERMINAL  0x00000010
#define LINEADDRFEATURE_SETUPCONF  0x00000020
#define LINEADDRFEATURE_UNCOMPLETECALL  0x00000040
#define LINEADDRFEATURE_UNPARK  0x00000080
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINEADDRFEATURE_PICKUPHELD  0x00000100
#define LINEADDRFEATURE_PICKUPGROUP  0x00000200
#define LINEADDRFEATURE_PICKUPDIRECT  0x00000400
#define LINEADDRFEATURE_PICKUPWAITING  0x00000800
#define LINEADDRFEATURE_FORWARDFWD  0x00001000
#define LINEADDRFEATURE_FORWARDDND  0x00002000
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINEAGENTFEATURE_SETAGENTGROUP  0x00000001
#define LINEAGENTFEATURE_SETAGENTSTATE  0x00000002
#define LINEAGENTFEATURE_SETAGENTACTIVITY  0x00000004
#define LINEAGENTFEATURE_AGENTSPECIFIC  0x00000008
#define LINEAGENTFEATURE_GETAGENTACTIVITYLIST  0x00000010
#define LINEAGENTFEATURE_GETAGENTGROUP  0x00000020

#define LINEAGENTSTATE_LOGGEDOFF  0x00000001
#define LINEAGENTSTATE_NOTREADY  0x00000002
#define LINEAGENTSTATE_READY  0x00000004
#define LINEAGENTSTATE_BUSYACD  0x00000008
#define LINEAGENTSTATE_BUSYINCOMING  0x00000010
#define LINEAGENTSTATE_BUSYOUTBOUND  0x00000020
#define LINEAGENTSTATE_BUSYOTHER  0x00000040
#define LINEAGENTSTATE_WORKINGAFTERCALL  0x00000080
#define LINEAGENTSTATE_UNKNOWN  0x00000100
#define LINEAGENTSTATE_UNAVAIL  0x00000200

#define LINEAGENTSTATUS_GROUP  0x00000001
#define LINEAGENTSTATUS_STATE  0x00000002
#define LINEAGENTSTATUS_NEXTSTATE  0x00000004
#define LINEAGENTSTATUS_ACTIVITY  0x00000008
#define LINEAGENTSTATUS_ACTIVITYLIST  0x00000010
#define LINEAGENTSTATUS_GROUPLIST  0x00000020
#define LINEAGENTSTATUS_CAPSCHANGE  0x00000040
#define LINEAGENTSTATUS_VALIDSTATES  0x00000080
#define LINEAGENTSTATUS_VALIDNEXTSTATES  0x00000100
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020002)
#define LINEAGENTSTATEEX_NOTREADY  0x00000001
#define LINEAGENTSTATEEX_READY  0x00000002
#define LINEAGENTSTATEEX_BUSYACD  0x00000004
#define LINEAGENTSTATEEX_BUSYINCOMING  0x00000008
#define LINEAGENTSTATEEX_BUSYOUTGOING  0x00000010
#define LINEAGENTSTATEEX_UNKNOWN  0x00000020
#define LINEAGENTSTATEEX_RELEASED  0x00000040

#define LINEAGENTSTATUSEX_NEWAGENT  0x00000001
#define LINEAGENTSTATUSEX_STATE  0x00000002
#define LINEAGENTSTATUSEX_UPDATEINFO  0x00000004

#define LINEAGENTSESSIONSTATE_NOTREADY  0x00000001
#define LINEAGENTSESSIONSTATE_READY  0x00000002
#define LINEAGENTSESSIONSTATE_BUSYONCALL  0x00000004
#define LINEAGENTSESSIONSTATE_BUSYWRAPUP  0x00000008
#define LINEAGENTSESSIONSTATE_ENDED  0x00000010
#define LINEAGENTSESSIONSTATE_RELEASED  0x00000020

#define LINEAGENTSESSIONSTATUS_NEWSESSION  0x00000001
#define LINEAGENTSESSIONSTATUS_STATE  0x00000002
#define LINEAGENTSESSIONSTATUS_UPDATEINFO  0x00000004

#define LINEQUEUESTATUS_UPDATEINFO  0x00000001
#define LINEQUEUESTATUS_NEWQUEUE  0x00000002
#define LINEQUEUESTATUS_QUEUEREMOVED  0x00000004

#define LINEGROUPSTATUS_NEWGROUP  0x00000001
#define LINEGROUPSTATUS_GROUPREMOVED  0x00000002

#define LINEPROXYSTATUS_OPEN  0x00000001
#define LINEPROXYSTATUS_CLOSE  0x00000002
#define LINEPROXYSTATUS_ALLOPENFORACD  0x00000004
#endif
#define LINEANSWERMODE_NONE  0x00000001
#define LINEANSWERMODE_DROP  0x00000002
#define LINEANSWERMODE_HOLD  0x00000004

#define LINEBEARERMODE_VOICE  0x00000001
#define LINEBEARERMODE_SPEECH  0x00000002
#define LINEBEARERMODE_MULTIUSE  0x00000004
#define LINEBEARERMODE_DATA  0x00000008
#define LINEBEARERMODE_ALTSPEECHDATA  0x00000010
#define LINEBEARERMODE_NONCALLSIGNALING 0x00000020
#define LINEBEARERMODE_PASSTHROUGH  0x00000040
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINEBEARERMODE_RESTRICTEDDATA  0x00000080
#endif
#define LINEBUSYMODE_STATION  0x00000001
#define LINEBUSYMODE_TRUNK  0x00000002
#define LINEBUSYMODE_UNKNOWN  0x00000004
#define LINEBUSYMODE_UNAVAIL  0x00000008

#define LINECALLCOMPLCOND_BUSY  0x00000001
#define LINECALLCOMPLCOND_NOANSWER  0x00000002

#define LINECALLCOMPLMODE_CAMPON  0x00000001
#define LINECALLCOMPLMODE_CALLBACK  0x00000002
#define LINECALLCOMPLMODE_INTRUDE  0x00000004
#define LINECALLCOMPLMODE_MESSAGE  0x00000008

#define LINECALLFEATURE_ACCEPT  0x00000001
#define LINECALLFEATURE_ADDTOCONF  0x00000002
#define LINECALLFEATURE_ANSWER  0x00000004
#define LINECALLFEATURE_BLINDTRANSFER  0x00000008
#define LINECALLFEATURE_COMPLETECALL  0x00000010
#define LINECALLFEATURE_COMPLETETRANSF  0x00000020
#define LINECALLFEATURE_DIAL  0x00000040
#define LINECALLFEATURE_DROP  0x00000080
#define LINECALLFEATURE_GATHERDIGITS  0x00000100
#define LINECALLFEATURE_GENERATEDIGITS  0x00000200
#define LINECALLFEATURE_GENERATETONE  0x00000400
#define LINECALLFEATURE_HOLD  0x00000800
#define LINECALLFEATURE_MONITORDIGITS  0x00001000
#define LINECALLFEATURE_MONITORMEDIA  0x00002000
#define LINECALLFEATURE_MONITORTONES  0x00004000
#define LINECALLFEATURE_PARK  0x00008000
#define LINECALLFEATURE_PREPAREADDCONF  0x00010000
#define LINECALLFEATURE_REDIRECT  0x00020000
#define LINECALLFEATURE_REMOVEFROMCONF  0x00040000
#define LINECALLFEATURE_SECURECALL  0x00080000
#define LINECALLFEATURE_SENDUSERUSER  0x00100000
#define LINECALLFEATURE_SETCALLPARAMS  0x00200000
#define LINECALLFEATURE_SETMEDIACONTROL  0x00400000
#define LINECALLFEATURE_SETTERMINAL  0x00800000
#define LINECALLFEATURE_SETUPCONF  0x01000000
#define LINECALLFEATURE_SETUPTRANSFER  0x02000000
#define LINECALLFEATURE_SWAPHOLD  0x04000000
#define LINECALLFEATURE_UNHOLD  0x08000000
#define LINECALLFEATURE_RELEASEUSERUSERINFO 0x10000000
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINECALLFEATURE_SETTREATMENT  0x20000000
#define LINECALLFEATURE_SETQOS  0x40000000
#define LINECALLFEATURE_SETCALLDATA  0x80000000
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINECALLFEATURE2_NOHOLDCONFERENCE  0x00000001
#define LINECALLFEATURE2_ONESTEPTRANSFER  0x00000002
#define LINECALLFEATURE2_COMPLCAMPON  0x00000004
#define LINECALLFEATURE2_COMPLCALLBACK  0x00000008
#define LINECALLFEATURE2_COMPLINTRUDE  0x00000010
#define LINECALLFEATURE2_COMPLMESSAGE  0x00000020
#define LINECALLFEATURE2_TRANSFERNORM  0x00000040
#define LINECALLFEATURE2_TRANSFERCONF  0x00000080
#define LINECALLFEATURE2_PARKDIRECT  0x00000100
#define LINECALLFEATURE2_PARKNONDIRECT  0x00000200
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
#define LINECALLHUBTRACKING_NONE  0x00000000
#define LINECALLHUBTRACKING_PROVIDERLEVEL  0x00000001
#define LINECALLHUBTRACKING_ALLCALLS  0x00000002
#endif
#define LINECALLINFOSTATE_OTHER  0x00000001
#define LINECALLINFOSTATE_DEVSPECIFIC  0x00000002
#define LINECALLINFOSTATE_BEARERMODE  0x00000004
#define LINECALLINFOSTATE_RATE  0x00000008
#define LINECALLINFOSTATE_MEDIAMODE  0x00000010
#define LINECALLINFOSTATE_APPSPECIFIC  0x00000020
#define LINECALLINFOSTATE_CALLID  0x00000040
#define LINECALLINFOSTATE_RELATEDCALLID 0x00000080
#define LINECALLINFOSTATE_ORIGIN  0x00000100
#define LINECALLINFOSTATE_REASON  0x00000200
#define LINECALLINFOSTATE_COMPLETIONID  0x00000400
#define LINECALLINFOSTATE_NUMOWNERINCR  0x00000800
#define LINECALLINFOSTATE_NUMOWNERDECR  0x00001000
#define LINECALLINFOSTATE_NUMMONITORS  0x00002000
#define LINECALLINFOSTATE_TRUNK  0x00004000
#define LINECALLINFOSTATE_CALLERID  0x00008000
#define LINECALLINFOSTATE_CALLEDID  0x00010000
#define LINECALLINFOSTATE_CONNECTEDID  0x00020000
#define LINECALLINFOSTATE_REDIRECTIONID 0x00040000
#define LINECALLINFOSTATE_REDIRECTINGID 0x00080000
#define LINECALLINFOSTATE_DISPLAY  0x00100000
#define LINECALLINFOSTATE_USERUSERINFO  0x00200000
#define LINECALLINFOSTATE_HIGHLEVELCOMP 0x00400000
#define LINECALLINFOSTATE_LOWLEVELCOMP  0x00800000
#define LINECALLINFOSTATE_CHARGINGINFO  0x01000000
#define LINECALLINFOSTATE_TERMINAL  0x02000000
#define LINECALLINFOSTATE_DIALPARAMS  0x04000000
#define LINECALLINFOSTATE_MONITORMODES  0x08000000
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINECALLINFOSTATE_TREATMENT 0x10000000
#define LINECALLINFOSTATE_QOS  0x20000000
#define LINECALLINFOSTATE_CALLDATA  0x40000000
#endif
#define LINECALLORIGIN_OUTBOUND  0x00000001
#define LINECALLORIGIN_INTERNAL  0x00000002
#define LINECALLORIGIN_EXTERNAL  0x00000004
#define LINECALLORIGIN_UNKNOWN  0x00000010
#define LINECALLORIGIN_UNAVAIL  0x00000020
#define LINECALLORIGIN_CONFERENCE  0x00000040
#define LINECALLORIGIN_INBOUND  0x00000080

#define LINECALLPARAMFLAGS_SECURE  0x00000001
#define LINECALLPARAMFLAGS_IDLE  0x00000002
#define LINECALLPARAMFLAGS_BLOCKID  0x00000004
#define LINECALLPARAMFLAGS_ORIGOFFHOOK  0x00000008
#define LINECALLPARAMFLAGS_DESTOFFHOOK  0x00000010
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINECALLPARAMFLAGS_NOHOLDCONFERENCE 0x00000020
#define LINECALLPARAMFLAGS_PREDICTIVEDIAL  0x00000040
#define LINECALLPARAMFLAGS_ONESTEPTRANSFER  0x00000080
#endif
#define LINECALLPARTYID_BLOCKED  0x00000001
#define LINECALLPARTYID_OUTOFAREA  0x00000002
#define LINECALLPARTYID_NAME  0x00000004
#define LINECALLPARTYID_ADDRESS  0x00000008
#define LINECALLPARTYID_PARTIAL  0x00000010
#define LINECALLPARTYID_UNKNOWN  0x00000020
#define LINECALLPARTYID_UNAVAIL  0x00000040

#define LINECALLPRIVILEGE_NONE  0x00000001
#define LINECALLPRIVILEGE_MONITOR  0x00000002
#define LINECALLPRIVILEGE_OWNER  0x00000004

#define LINECALLREASON_DIRECT  0x00000001
#define LINECALLREASON_FWDBUSY  0x00000002
#define LINECALLREASON_FWDNOANSWER  0x00000004
#define LINECALLREASON_FWDUNCOND  0x00000008
#define LINECALLREASON_PICKUP  0x00000010
#define LINECALLREASON_UNPARK  0x00000020
#define LINECALLREASON_REDIRECT  0x00000040
#define LINECALLREASON_CALLCOMPLETION  0x00000080
#define LINECALLREASON_TRANSFER  0x00000100
#define LINECALLREASON_REMINDER  0x00000200
#define LINECALLREASON_UNKNOWN  0x00000400
#define LINECALLREASON_UNAVAIL  0x00000800
#define LINECALLREASON_INTRUDE  0x00001000
#define LINECALLREASON_PARKED  0x00002000
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINECALLREASON_CAMPEDON  0x00004000
#define LINECALLREASON_ROUTEREQUEST 0x00008000
#endif
#define LINECALLSELECT_LINE  0x00000001
#define LINECALLSELECT_ADDRESS  0x00000002
#define LINECALLSELECT_CALL  0x00000004
#if (TAPI_CURRENT_VERSION >= 0x00020001)
#define LINECALLSELECT_DEVICEID 0x00000008
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
#define LINECALLSELECT_CALLID  0x00000010
#endif
#define LINECALLSTATE_IDLE  0x00000001
#define LINECALLSTATE_OFFERING  0x00000002
#define LINECALLSTATE_ACCEPTED  0x00000004
#define LINECALLSTATE_DIALTONE  0x00000008
#define LINECALLSTATE_DIALING  0x00000010
#define LINECALLSTATE_RINGBACK  0x00000020
#define LINECALLSTATE_BUSY  0x00000040
#define LINECALLSTATE_SPECIALINFO  0x00000080
#define LINECALLSTATE_CONNECTED  0x00000100
#define LINECALLSTATE_PROCEEDING  0x00000200
#define LINECALLSTATE_ONHOLD  0x00000400
#define LINECALLSTATE_CONFERENCED  0x00000800
#define LINECALLSTATE_ONHOLDPENDCONF  0x00001000
#define LINECALLSTATE_ONHOLDPENDTRANSFER  0x00002000
#define LINECALLSTATE_DISCONNECTED  0x00004000
#define LINECALLSTATE_UNKNOWN  0x00008000

#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINECALLTREATMENT_SILENCE  0x00000001
#define LINECALLTREATMENT_RINGBACK  0x00000002
#define LINECALLTREATMENT_BUSY  0x00000003
#define LINECALLTREATMENT_MUSIC  0x00000004
#endif
#define LINECARDOPTION_PREDEFINED  0x00000001
#define LINECARDOPTION_HIDDEN  0x00000002

#define LINECONNECTEDMODE_ACTIVE  0x00000001
#define LINECONNECTEDMODE_INACTIVE  0x00000002
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINECONNECTEDMODE_ACTIVEHELD  0x00000004
#define LINECONNECTEDMODE_INACTIVEHELD  0x00000008
#define LINECONNECTEDMODE_CONFIRMED  0x00000010
#endif
#define LINEDEVCAPFLAGS_CROSSADDRCONF  0x00000001
#define LINEDEVCAPFLAGS_HIGHLEVCOMP  0x00000002
#define LINEDEVCAPFLAGS_LOWLEVCOMP  0x00000004
#define LINEDEVCAPFLAGS_MEDIACONTROL  0x00000008
#define LINEDEVCAPFLAGS_MULTIPLEADDR  0x00000010
#define LINEDEVCAPFLAGS_CLOSEDROP  0x00000020
#define LINEDEVCAPFLAGS_DIALBILLING  0x00000040
#define LINEDEVCAPFLAGS_DIALQUIET  0x00000080
#define LINEDEVCAPFLAGS_DIALDIALTONE  0x00000100
#if (TAPI_CURRENT_VERSION >= 0x00030000)
#define LINEDEVCAPFLAGS_MSP  0x00000200
#define LINEDEVCAPFLAGS_CALLHUB  0x00000400
#define LINEDEVCAPFLAGS_CALLHUBTRACKING 0x00000800
#define LINEDEVCAPFLAGS_PRIVATEOBJECTS  0x00001000
#endif
#define LINEDEVSTATE_OTHER  0x00000001
#define LINEDEVSTATE_RINGING  0x00000002
#define LINEDEVSTATE_CONNECTED  0x00000004
#define LINEDEVSTATE_DISCONNECTED  0x00000008
#define LINEDEVSTATE_MSGWAITON  0x00000010
#define LINEDEVSTATE_MSGWAITOFF  0x00000020
#define LINEDEVSTATE_INSERVICE  0x00000040
#define LINEDEVSTATE_OUTOFSERVICE  0x00000080
#define LINEDEVSTATE_MAINTENANCE  0x00000100
#define LINEDEVSTATE_OPEN  0x00000200
#define LINEDEVSTATE_CLOSE  0x00000400
#define LINEDEVSTATE_NUMCALLS  0x00000800
#define LINEDEVSTATE_NUMCOMPLETIONS  0x00001000
#define LINEDEVSTATE_TERMINALS  0x00002000
#define LINEDEVSTATE_ROAMMODE  0x00004000
#define LINEDEVSTATE_BATTERY  0x00008000
#define LINEDEVSTATE_SIGNAL  0x00010000
#define LINEDEVSTATE_DEVSPECIFIC  0x00020000
#define LINEDEVSTATE_REINIT  0x00040000
#define LINEDEVSTATE_LOCK  0x00080000
#define LINEDEVSTATE_CAPSCHANGE  0x00100000
#define LINEDEVSTATE_CONFIGCHANGE  0x00200000
#define LINEDEVSTATE_TRANSLATECHANGE  0x00400000
#define LINEDEVSTATE_COMPLCANCEL  0x00800000
#define LINEDEVSTATE_REMOVED  0x01000000

#define LINEDEVSTATUSFLAGS_CONNECTED  0x00000001
#define LINEDEVSTATUSFLAGS_MSGWAIT  0x00000002
#define LINEDEVSTATUSFLAGS_INSERVICE  0x00000004
#define LINEDEVSTATUSFLAGS_LOCKED  0x00000008

#define LINEDIALTONEMODE_NORMAL  0x00000001
#define LINEDIALTONEMODE_SPECIAL  0x00000002
#define LINEDIALTONEMODE_INTERNAL  0x00000004
#define LINEDIALTONEMODE_EXTERNAL  0x00000008
#define LINEDIALTONEMODE_UNKNOWN  0x00000010
#define LINEDIALTONEMODE_UNAVAIL  0x00000020

#define LINEDIGITMODE_PULSE  0x00000001
#define LINEDIGITMODE_DTMF  0x00000002
#define LINEDIGITMODE_DTMFEND  0x00000004

#define LINEDISCONNECTMODE_NORMAL  0x00000001
#define LINEDISCONNECTMODE_UNKNOWN  0x00000002
#define LINEDISCONNECTMODE_REJECT  0x00000004
#define LINEDISCONNECTMODE_PICKUP  0x00000008
#define LINEDISCONNECTMODE_FORWARDED  0x00000010
#define LINEDISCONNECTMODE_BUSY  0x00000020
#define LINEDISCONNECTMODE_NOANSWER  0x00000040
#define LINEDISCONNECTMODE_BADADDRESS  0x00000080
#define LINEDISCONNECTMODE_UNREACHABLE  0x00000100
#define LINEDISCONNECTMODE_CONGESTION  0x00000200
#define LINEDISCONNECTMODE_INCOMPATIBLE 0x00000400
#define LINEDISCONNECTMODE_UNAVAIL  0x00000800
#define LINEDISCONNECTMODE_NODIALTONE  0x00001000
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINEDISCONNECTMODE_NUMBERCHANGED  0x00002000
#define LINEDISCONNECTMODE_OUTOFORDER  0x00004000
#define LINEDISCONNECTMODE_TEMPFAILURE  0x00008000
#define LINEDISCONNECTMODE_QOSUNAVAIL  0x00010000
#define LINEDISCONNECTMODE_BLOCKED  0x00020000
#define LINEDISCONNECTMODE_DONOTDISTURB  0x00040000
#define LINEDISCONNECTMODE_CANCELLED  0x00080000
#endif
#define LINEERR_ALLOCATED  0x80000001
#define LINEERR_BADDEVICEID  0x80000002
#define LINEERR_BEARERMODEUNAVAIL  0x80000003
#define LINEERR_CALLUNAVAIL  0x80000005
#define LINEERR_COMPLETIONOVERRUN  0x80000006
#define LINEERR_CONFERENCEFULL  0x80000007
#define LINEERR_DIALBILLING  0x80000008
#define LINEERR_DIALDIALTONE  0x80000009
#define LINEERR_DIALPROMPT  0x8000000A
#define LINEERR_DIALQUIET  0x8000000B
#define LINEERR_INCOMPATIBLEAPIVERSION  0x8000000C
#define LINEERR_INCOMPATIBLEEXTVERSION  0x8000000D
#define LINEERR_INIFILECORRUPT  0x8000000E
#define LINEERR_INUSE  0x8000000F
#define LINEERR_INVALADDRESS  0x80000010
#define LINEERR_INVALADDRESSID  0x80000011
#define LINEERR_INVALADDRESSMODE  0x80000012
#define LINEERR_INVALADDRESSSTATE  0x80000013
#define LINEERR_INVALAPPHANDLE  0x80000014
#define LINEERR_INVALAPPNAME  0x80000015
#define LINEERR_INVALBEARERMODE  0x80000016
#define LINEERR_INVALCALLCOMPLMODE  0x80000017
#define LINEERR_INVALCALLHANDLE  0x80000018
#define LINEERR_INVALCALLPARAMS  0x80000019
#define LINEERR_INVALCALLPRIVILEGE  0x8000001A
#define LINEERR_INVALCALLSELECT  0x8000001B
#define LINEERR_INVALCALLSTATE  0x8000001C
#define LINEERR_INVALCALLSTATELIST  0x8000001D
#define LINEERR_INVALCARD  0x8000001E
#define LINEERR_INVALCOMPLETIONID  0x8000001F
#define LINEERR_INVALCONFCALLHANDLE  0x80000020
#define LINEERR_INVALCONSULTCALLHANDLE  0x80000021
#define LINEERR_INVALCOUNTRYCODE  0x80000022
#define LINEERR_INVALDEVICECLASS  0x80000023
#define LINEERR_INVALDEVICEHANDLE  0x80000024
#define LINEERR_INVALDIALPARAMS  0x80000025
#define LINEERR_INVALDIGITLIST  0x80000026
#define LINEERR_INVALDIGITMODE  0x80000027
#define LINEERR_INVALDIGITS  0x80000028
#define LINEERR_INVALEXTVERSION  0x80000029
#define LINEERR_INVALGROUPID  0x8000002A
#define LINEERR_INVALLINEHANDLE  0x8000002B
#define LINEERR_INVALLINESTATE  0x8000002C
#define LINEERR_INVALLOCATION  0x8000002D
#define LINEERR_INVALMEDIALIST  0x8000002E
#define LINEERR_INVALMEDIAMODE  0x8000002F
#define LINEERR_INVALMESSAGEID  0x80000030
#define LINEERR_INVALPARAM  0x80000032
#define LINEERR_INVALPARKID  0x80000033
#define LINEERR_INVALPARKMODE  0x80000034
#define LINEERR_INVALPOINTER  0x80000035
#define LINEERR_INVALPRIVSELECT  0x80000036
#define LINEERR_INVALRATE  0x80000037
#define LINEERR_INVALREQUESTMODE  0x80000038
#define LINEERR_INVALTERMINALID  0x80000039
#define LINEERR_INVALTERMINALMODE  0x8000003A
#define LINEERR_INVALTIMEOUT  0x8000003B
#define LINEERR_INVALTONE  0x8000003C
#define LINEERR_INVALTONELIST  0x8000003D
#define LINEERR_INVALTONEMODE  0x8000003E
#define LINEERR_INVALTRANSFERMODE  0x8000003F
#define LINEERR_LINEMAPPERFAILED  0x80000040
#define LINEERR_NOCONFERENCE  0x80000041
#define LINEERR_NODEVICE  0x80000042
#define LINEERR_NODRIVER  0x80000043
#define LINEERR_NOMEM  0x80000044
#define LINEERR_NOREQUEST  0x80000045
#define LINEERR_NOTOWNER  0x80000046
#define LINEERR_NOTREGISTERED  0x80000047
#define LINEERR_OPERATIONFAILED  0x80000048
#define LINEERR_OPERATIONUNAVAIL  0x80000049
#define LINEERR_RATEUNAVAIL  0x8000004A
#define LINEERR_RESOURCEUNAVAIL  0x8000004B
#define LINEERR_REQUESTOVERRUN  0x8000004C
#define LINEERR_STRUCTURETOOSMALL  0x8000004D
#define LINEERR_TARGETNOTFOUND  0x8000004E
#define LINEERR_TARGETSELF  0x8000004F
#define LINEERR_UNINITIALIZED  0x80000050
#define LINEERR_USERUSERINFOTOOBIG  0x80000051
#define LINEERR_REINIT  0x80000052
#define LINEERR_ADDRESSBLOCKED  0x80000053
#define LINEERR_BILLINGREJECTED  0x80000054
#define LINEERR_INVALFEATURE  0x80000055
#define LINEERR_NOMULTIPLEINSTANCE  0x80000056
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINEERR_INVALAGENTID  0x80000057
#define LINEERR_INVALAGENTGROUP  0x80000058
#define LINEERR_INVALPASSWORD  0x80000059
#define LINEERR_INVALAGENTSTATE  0x8000005A
#define LINEERR_INVALAGENTACTIVITY  0x8000005B
#define LINEERR_DIALVOICEDETECT  0x8000005C
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020002)
#define LINEERR_USERCANCELLED  0x8000005D
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
#define LINEERR_INVALADDRESSTYPE  0x8000005E
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020002)
#define LINEERR_INVALAGENTSESSIONSTATE  0x8000005F
#define LINEERR_DISCONNECTED  0X80000060
#endif
#define LINEFEATURE_DEVSPECIFIC  0x00000001
#define LINEFEATURE_DEVSPECIFICFEAT 0x00000002
#define LINEFEATURE_FORWARD  0x00000004
#define LINEFEATURE_MAKECALL  0x00000008
#define LINEFEATURE_SETMEDIACONTROL 0x00000010
#define LINEFEATURE_SETTERMINAL  0x00000020
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINEFEATURE_SETDEVSTATUS  0x00000040
#define LINEFEATURE_FORWARDFWD  0x00000080
#define LINEFEATURE_FORWARDDND  0x00000100
#endif
#define LINEFORWARDMODE_UNCOND  0x00000001
#define LINEFORWARDMODE_UNCONDINTERNAL  0x00000002
#define LINEFORWARDMODE_UNCONDEXTERNAL  0x00000004
#define LINEFORWARDMODE_UNCONDSPECIFIC  0x00000008
#define LINEFORWARDMODE_BUSY  0x00000010
#define LINEFORWARDMODE_BUSYINTERNAL  0x00000020
#define LINEFORWARDMODE_BUSYEXTERNAL  0x00000040
#define LINEFORWARDMODE_BUSYSPECIFIC  0x00000080
#define LINEFORWARDMODE_NOANSW  0x00000100
#define LINEFORWARDMODE_NOANSWINTERNAL  0x00000200
#define LINEFORWARDMODE_NOANSWEXTERNAL  0x00000400
#define LINEFORWARDMODE_NOANSWSPECIFIC  0x00000800
#define LINEFORWARDMODE_BUSYNA  0x00001000
#define LINEFORWARDMODE_BUSYNAINTERNAL  0x00002000
#define LINEFORWARDMODE_BUSYNAEXTERNAL  0x00004000
#define LINEFORWARDMODE_BUSYNASPECIFIC  0x00008000
#define LINEFORWARDMODE_UNKNOWN  0x00010000
#define LINEFORWARDMODE_UNAVAIL  0x00020000

#define LINEGATHERTERM_BUFFERFULL  0x00000001
#define LINEGATHERTERM_TERMDIGIT  0x00000002
#define LINEGATHERTERM_FIRSTTIMEOUT  0x00000004
#define LINEGATHERTERM_INTERTIMEOUT  0x00000008
#define LINEGATHERTERM_CANCEL  0x00000010

#define LINEGENERATETERM_DONE  0x00000001
#define LINEGENERATETERM_CANCEL  0x00000002

#if (TAPI_CURRENT_VERSION >= 0x00020000)

#define LINEINITIALIZEEXOPTION_USEHIDDENWINDOW  0x00000001
#define LINEINITIALIZEEXOPTION_USEEVENT  0x00000002
#define LINEINITIALIZEEXOPTION_USECOMPLETIONPORT  0x00000003
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
#define LINEINITIALIZEEXOPTION_CALLHUBTRACKING  0x80000000
#endif
#define LINELOCATIONOPTION_PULSEDIAL  0x00000001

#define LINEMAPPER  0xFFFFFFFF

#define LINEMEDIACONTROL_NONE  0x00000001
#define LINEMEDIACONTROL_START  0x00000002
#define LINEMEDIACONTROL_RESET  0x00000004
#define LINEMEDIACONTROL_PAUSE  0x00000008
#define LINEMEDIACONTROL_RESUME  0x00000010
#define LINEMEDIACONTROL_RATEUP  0x00000020
#define LINEMEDIACONTROL_RATEDOWN  0x00000040
#define LINEMEDIACONTROL_RATENORMAL  0x00000080
#define LINEMEDIACONTROL_VOLUMEUP  0x00000100
#define LINEMEDIACONTROL_VOLUMEDOWN  0x00000200
#define LINEMEDIACONTROL_VOLUMENORMAL  0x00000400

#define LINEMEDIAMODE_UNKNOWN  0x00000002
#define LINEMEDIAMODE_INTERACTIVEVOICE  0x00000004
#define LINEMEDIAMODE_AUTOMATEDVOICE  0x00000008
#define LINEMEDIAMODE_DATAMODEM  0x00000010
#define LINEMEDIAMODE_G3FAX  0x00000020
#define LINEMEDIAMODE_TDD  0x00000040
#define LINEMEDIAMODE_G4FAX  0x00000080
#define LINEMEDIAMODE_DIGITALDATA  0x00000100
#define LINEMEDIAMODE_TELETEX  0x00000200
#define LINEMEDIAMODE_VIDEOTEX  0x00000400
#define LINEMEDIAMODE_TELEX  0x00000800
#define LINEMEDIAMODE_MIXED  0x00001000
#define LINEMEDIAMODE_ADSI  0x00002000
#define LINEMEDIAMODE_VOICEVIEW  0x00004000
#if (TAPI_CURRENT_VERSION >= 0x00020001)
#define LINEMEDIAMODE_VIDEO 0x00008000
#endif
#define LAST_LINEMEDIAMODE  0x00008000

#define LINEOFFERINGMODE_ACTIVE  0x00000001
#define LINEOFFERINGMODE_INACTIVE  0x00000002

#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINEOPENOPTION_SINGLEADDRESS  0x80000000
#define LINEOPENOPTION_PROXY  0x40000000
#endif
#define LINEPARKMODE_DIRECTED  0x00000001
#define LINEPARKMODE_NONDIRECTED  0x00000002

#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINEPROXYREQUEST_SETAGENTGROUP  0x00000001
#define LINEPROXYREQUEST_SETAGENTSTATE  0x00000002
#define LINEPROXYREQUEST_SETAGENTACTIVITY  0x00000003
#define LINEPROXYREQUEST_GETAGENTCAPS  0x00000004
#define LINEPROXYREQUEST_GETAGENTSTATUS  0x00000005
#define LINEPROXYREQUEST_AGENTSPECIFIC  0x00000006
#define LINEPROXYREQUEST_GETAGENTACTIVITYLIST  0x00000007
#define LINEPROXYREQUEST_GETAGENTGROUPLIST  0x00000008
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020002)
#define LINEPROXYREQUEST_CREATEAGENT  0x00000009
#define LINEPROXYREQUEST_SETAGENTMEASUREMENTPERIOD  0x0000000A
#define LINEPROXYREQUEST_GETAGENTINFO  0x0000000B
#define LINEPROXYREQUEST_CREATEAGENTSESSION  0x0000000C
#define LINEPROXYREQUEST_GETAGENTSESSIONLIST  0x0000000D
#define LINEPROXYREQUEST_SETAGENTSESSIONSTATE  0x0000000E
#define LINEPROXYREQUEST_GETAGENTSESSIONINFO  0x0000000F
#define LINEPROXYREQUEST_GETQUEUELIST  0x00000010
#define LINEPROXYREQUEST_SETQUEUEMEASUREMENTPERIOD  0x00000011
#define LINEPROXYREQUEST_GETQUEUEINFO  0x00000012
#define LINEPROXYREQUEST_GETGROUPLIST  0x00000013
#define LINEPROXYREQUEST_SETAGENTSTATEEX  0x00000014
#endif
#define LINEREMOVEFROMCONF_NONE  0x00000001
#define LINEREMOVEFROMCONF_LAST  0x00000002
#define LINEREMOVEFROMCONF_ANY  0x00000003

#define LINEREQUESTMODE_MAKECALL  0x00000001
#define LINEREQUESTMODE_MEDIACALL  0x00000002
#define LINEREQUESTMODE_DROP  0x00000004
#define LAST_LINEREQUESTMODE  LINEREQUESTMODE_MEDIACALL

#define LINEROAMMODE_UNKNOWN  0x00000001
#define LINEROAMMODE_UNAVAIL  0x00000002
#define LINEROAMMODE_HOME  0x00000004
#define LINEROAMMODE_ROAMA  0x00000008
#define LINEROAMMODE_ROAMB  0x00000010

#define LINESPECIALINFO_NOCIRCUIT  0x00000001
#define LINESPECIALINFO_CUSTIRREG  0x00000002
#define LINESPECIALINFO_REORDER  0x00000004
#define LINESPECIALINFO_UNKNOWN  0x00000008
#define LINESPECIALINFO_UNAVAIL  0x00000010

#define LINETERMDEV_PHONE  0x00000001
#define LINETERMDEV_HEADSET  0x00000002
#define LINETERMDEV_SPEAKER  0x00000004

#define LINETERMMODE_BUTTONS  0x00000001
#define LINETERMMODE_LAMPS  0x00000002
#define LINETERMMODE_DISPLAY  0x00000004
#define LINETERMMODE_RINGER  0x00000008
#define LINETERMMODE_HOOKSWITCH  0x00000010
#define LINETERMMODE_MEDIATOLINE  0x00000020
#define LINETERMMODE_MEDIAFROMLINE  0x00000040
#define LINETERMMODE_MEDIABIDIRECT  0x00000080

#define LINETERMSHARING_PRIVATE  0x00000001
#define LINETERMSHARING_SHAREDEXCL  0x00000002
#define LINETERMSHARING_SHAREDCONF  0x00000004

#define LINETOLLLISTOPTION_ADD  0x00000001
#define LINETOLLLISTOPTION_REMOVE  0x00000002

#define LINETONEMODE_CUSTOM  0x00000001
#define LINETONEMODE_RINGBACK  0x00000002
#define LINETONEMODE_BUSY  0x00000004
#define LINETONEMODE_BEEP  0x00000008
#define LINETONEMODE_BILLING  0x00000010

#define LINETRANSFERMODE_TRANSFER  0x00000001
#define LINETRANSFERMODE_CONFERENCE  0x00000002

#define LINETRANSLATEOPTION_CARDOVERRIDE  0x00000001
#define LINETRANSLATEOPTION_CANCELCALLWAITING  0x00000002
#define LINETRANSLATEOPTION_FORCELOCAL  0x00000004
#define LINETRANSLATEOPTION_FORCELD  0x00000008

#define LINETRANSLATERESULT_CANONICAL  0x00000001
#define LINETRANSLATERESULT_INTERNATIONAL  0x00000002
#define LINETRANSLATERESULT_LONGDISTANCE  0x00000004
#define LINETRANSLATERESULT_LOCAL  0x00000008
#define LINETRANSLATERESULT_INTOLLLIST  0x00000010
#define LINETRANSLATERESULT_NOTINTOLLLIST  0x00000020
#define LINETRANSLATERESULT_DIALBILLING  0x00000040
#define LINETRANSLATERESULT_DIALQUIET  0x00000080
#define LINETRANSLATERESULT_DIALDIALTONE  0x00000100
#define LINETRANSLATERESULT_DIALPROMPT  0x00000200
#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define LINETRANSLATERESULT_VOICEDETECT 0x00000400
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
#define LINETRANSLATERESULT_NOTRANSLATION  0x00000800
#endif
#define PHONEBUTTONFUNCTION_UNKNOWN  0x00000000
#define PHONEBUTTONFUNCTION_CONFERENCE  0x00000001
#define PHONEBUTTONFUNCTION_TRANSFER  0x00000002
#define PHONEBUTTONFUNCTION_DROP  0x00000003
#define PHONEBUTTONFUNCTION_HOLD  0x00000004
#define PHONEBUTTONFUNCTION_RECALL  0x00000005
#define PHONEBUTTONFUNCTION_DISCONNECT  0x00000006
#define PHONEBUTTONFUNCTION_CONNECT  0x00000007
#define PHONEBUTTONFUNCTION_MSGWAITON  0x00000008
#define PHONEBUTTONFUNCTION_MSGWAITOFF  0x00000009
#define PHONEBUTTONFUNCTION_SELECTRING  0x0000000A
#define PHONEBUTTONFUNCTION_ABBREVDIAL  0x0000000B
#define PHONEBUTTONFUNCTION_FORWARD  0x0000000C
#define PHONEBUTTONFUNCTION_PICKUP  0x0000000D
#define PHONEBUTTONFUNCTION_RINGAGAIN  0x0000000E
#define PHONEBUTTONFUNCTION_PARK  0x0000000F
#define PHONEBUTTONFUNCTION_REJECT  0x00000010
#define PHONEBUTTONFUNCTION_REDIRECT  0x00000011
#define PHONEBUTTONFUNCTION_MUTE  0x00000012
#define PHONEBUTTONFUNCTION_VOLUMEUP  0x00000013
#define PHONEBUTTONFUNCTION_VOLUMEDOWN  0x00000014
#define PHONEBUTTONFUNCTION_SPEAKERON  0x00000015
#define PHONEBUTTONFUNCTION_SPEAKEROFF  0x00000016
#define PHONEBUTTONFUNCTION_FLASH  0x00000017
#define PHONEBUTTONFUNCTION_DATAON  0x00000018
#define PHONEBUTTONFUNCTION_DATAOFF  0x00000019
#define PHONEBUTTONFUNCTION_DONOTDISTURB  0x0000001A
#define PHONEBUTTONFUNCTION_INTERCOM  0x0000001B
#define PHONEBUTTONFUNCTION_BRIDGEDAPP  0x0000001C
#define PHONEBUTTONFUNCTION_BUSY  0x0000001D
#define PHONEBUTTONFUNCTION_CALLAPP  0x0000001E
#define PHONEBUTTONFUNCTION_DATETIME  0x0000001F
#define PHONEBUTTONFUNCTION_DIRECTORY  0x00000020
#define PHONEBUTTONFUNCTION_COVER  0x00000021
#define PHONEBUTTONFUNCTION_CALLID  0x00000022
#define PHONEBUTTONFUNCTION_LASTNUM  0x00000023
#define PHONEBUTTONFUNCTION_NIGHTSRV  0x00000024
#define PHONEBUTTONFUNCTION_SENDCALLS  0x00000025
#define PHONEBUTTONFUNCTION_MSGINDICATOR  0x00000026
#define PHONEBUTTONFUNCTION_REPDIAL  0x00000027
#define PHONEBUTTONFUNCTION_SETREPDIAL  0x00000028
#define PHONEBUTTONFUNCTION_SYSTEMSPEED  0x00000029
#define PHONEBUTTONFUNCTION_STATIONSPEED  0x0000002A
#define PHONEBUTTONFUNCTION_CAMPON  0x0000002B
#define PHONEBUTTONFUNCTION_SAVEREPEAT  0x0000002C
#define PHONEBUTTONFUNCTION_QUEUECALL  0x0000002D
#define PHONEBUTTONFUNCTION_NONE  0x0000002E

#define PHONEBUTTONMODE_DUMMY  0x00000001
#define PHONEBUTTONMODE_CALL  0x00000002
#define PHONEBUTTONMODE_FEATURE  0x00000004
#define PHONEBUTTONMODE_KEYPAD  0x00000008
#define PHONEBUTTONMODE_LOCAL  0x00000010
#define PHONEBUTTONMODE_DISPLAY  0x00000020

#define PHONEBUTTONSTATE_UP  0x00000001
#define PHONEBUTTONSTATE_DOWN  0x00000002
#define PHONEBUTTONSTATE_UNKNOWN  0x00000004
#define PHONEBUTTONSTATE_UNAVAIL  0x00000008

#define PHONEERR_ALLOCATED  0x90000001
#define PHONEERR_BADDEVICEID  0x90000002
#define PHONEERR_INCOMPATIBLEAPIVERSION  0x90000003
#define PHONEERR_INCOMPATIBLEEXTVERSION  0x90000004
#define PHONEERR_INIFILECORRUPT  0x90000005
#define PHONEERR_INUSE  0x90000006
#define PHONEERR_INVALAPPHANDLE  0x90000007
#define PHONEERR_INVALAPPNAME  0x90000008
#define PHONEERR_INVALBUTTONLAMPID  0x90000009
#define PHONEERR_INVALBUTTONMODE  0x9000000A
#define PHONEERR_INVALBUTTONSTATE  0x9000000B
#define PHONEERR_INVALDATAID  0x9000000C
#define PHONEERR_INVALDEVICECLASS  0x9000000D
#define PHONEERR_INVALEXTVERSION  0x9000000E
#define PHONEERR_INVALHOOKSWITCHDEV  0x9000000F
#define PHONEERR_INVALHOOKSWITCHMODE  0x90000010
#define PHONEERR_INVALLAMPMODE  0x90000011
#define PHONEERR_INVALPARAM  0x90000012
#define PHONEERR_INVALPHONEHANDLE  0x90000013
#define PHONEERR_INVALPHONESTATE  0x90000014
#define PHONEERR_INVALPOINTER  0x90000015
#define PHONEERR_INVALPRIVILEGE  0x90000016
#define PHONEERR_INVALRINGMODE  0x90000017
#define PHONEERR_NODEVICE  0x90000018
#define PHONEERR_NODRIVER  0x90000019
#define PHONEERR_NOMEM  0x9000001A
#define PHONEERR_NOTOWNER  0x9000001B
#define PHONEERR_OPERATIONFAILED  0x9000001C
#define PHONEERR_OPERATIONUNAVAIL  0x9000001D
#define PHONEERR_RESOURCEUNAVAIL  0x9000001F
#define PHONEERR_REQUESTOVERRUN  0x90000020
#define PHONEERR_STRUCTURETOOSMALL  0x90000021
#define PHONEERR_UNINITIALIZED  0x90000022
#define PHONEERR_REINIT  0x90000023
#define PHONEERR_DISCONNECTED  0x90000024

#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define PHONEFEATURE_GETBUTTONINFO  0x00000001
#define PHONEFEATURE_GETDATA  0x00000002
#define PHONEFEATURE_GETDISPLAY  0x00000004
#define PHONEFEATURE_GETGAINHANDSET  0x00000008
#define PHONEFEATURE_GETGAINSPEAKER  0x00000010
#define PHONEFEATURE_GETGAINHEADSET  0x00000020
#define PHONEFEATURE_GETHOOKSWITCHHANDSET  0x00000040
#define PHONEFEATURE_GETHOOKSWITCHSPEAKER  0x00000080
#define PHONEFEATURE_GETHOOKSWITCHHEADSET  0x00000100
#define PHONEFEATURE_GETLAMP  0x00000200
#define PHONEFEATURE_GETRING  0x00000400
#define PHONEFEATURE_GETVOLUMEHANDSET  0x00000800
#define PHONEFEATURE_GETVOLUMESPEAKER  0x00001000
#define PHONEFEATURE_GETVOLUMEHEADSET  0x00002000
#define PHONEFEATURE_SETBUTTONINFO  0x00004000
#define PHONEFEATURE_SETDATA  0x00008000
#define PHONEFEATURE_SETDISPLAY  0x00010000
#define PHONEFEATURE_SETGAINHANDSET  0x00020000
#define PHONEFEATURE_SETGAINSPEAKER  0x00040000
#define PHONEFEATURE_SETGAINHEADSET  0x00080000
#define PHONEFEATURE_SETHOOKSWITCHHANDSET  0x00100000
#define PHONEFEATURE_SETHOOKSWITCHSPEAKER  0x00200000
#define PHONEFEATURE_SETHOOKSWITCHHEADSET  0x00400000
#define PHONEFEATURE_SETLAMP  0x00800000
#define PHONEFEATURE_SETRING  0x01000000
#define PHONEFEATURE_SETVOLUMEHANDSET  0x02000000
#define PHONEFEATURE_SETVOLUMESPEAKER  0x04000000
#define PHONEFEATURE_SETVOLUMEHEADSET  0x08000000
#endif
#define PHONEHOOKSWITCHDEV_HANDSET  0x00000001
#define PHONEHOOKSWITCHDEV_SPEAKER  0x00000002
#define PHONEHOOKSWITCHDEV_HEADSET  0x00000004

#define PHONEHOOKSWITCHMODE_ONHOOK  0x00000001
#define PHONEHOOKSWITCHMODE_MIC  0x00000002
#define PHONEHOOKSWITCHMODE_SPEAKER  0x00000004
#define PHONEHOOKSWITCHMODE_MICSPEAKER  0x00000008
#define PHONEHOOKSWITCHMODE_UNKNOWN  0x00000010

#if (TAPI_CURRENT_VERSION >= 0x00020000)
#define PHONEINITIALIZEEXOPTION_USEHIDDENWINDOW  0x00000001
#define PHONEINITIALIZEEXOPTION_USEEVENT  0x00000002
#define PHONEINITIALIZEEXOPTION_USECOMPLETIONPORT  0x00000003
#endif
#define PHONELAMPMODE_DUMMY  0x00000001
#define PHONELAMPMODE_OFF  0x00000002
#define PHONELAMPMODE_STEADY  0x00000004
#define PHONELAMPMODE_WINK  0x00000008
#define PHONELAMPMODE_FLASH  0x00000010
#define PHONELAMPMODE_FLUTTER  0x00000020
#define PHONELAMPMODE_BROKENFLUTTER  0x00000040
#define PHONELAMPMODE_UNKNOWN  0x00000080

#define PHONEPRIVILEGE_MONITOR  0x00000001
#define PHONEPRIVILEGE_OWNER  0x00000002

#define PHONESTATE_OTHER  0x00000001
#define PHONESTATE_CONNECTED  0x00000002
#define PHONESTATE_DISCONNECTED  0x00000004
#define PHONESTATE_OWNER  0x00000008
#define PHONESTATE_MONITORS  0x00000010
#define PHONESTATE_DISPLAY  0x00000020
#define PHONESTATE_LAMP  0x00000040
#define PHONESTATE_RINGMODE  0x00000080
#define PHONESTATE_RINGVOLUME  0x00000100
#define PHONESTATE_HANDSETHOOKSWITCH  0x00000200
#define PHONESTATE_HANDSETVOLUME  0x00000400
#define PHONESTATE_HANDSETGAIN  0x00000800
#define PHONESTATE_SPEAKERHOOKSWITCH  0x00001000
#define PHONESTATE_SPEAKERVOLUME  0x00002000
#define PHONESTATE_SPEAKERGAIN  0x00004000
#define PHONESTATE_HEADSETHOOKSWITCH  0x00008000
#define PHONESTATE_HEADSETVOLUME  0x00010000
#define PHONESTATE_HEADSETGAIN  0x00020000
#define PHONESTATE_SUSPEND  0x00040000
#define PHONESTATE_RESUME  0x00080000
#define PHONESTATE_DEVSPECIFIC  0x00100000
#define PHONESTATE_REINIT  0x00200000
#define PHONESTATE_CAPSCHANGE  0x00400000
#define PHONESTATE_REMOVED  0x00800000

#define PHONESTATUSFLAGS_CONNECTED  0x00000001
#define PHONESTATUSFLAGS_SUSPENDED  0x00000002

#define STRINGFORMAT_ASCII  0x00000001
#define STRINGFORMAT_DBCS  0x00000002
#define STRINGFORMAT_UNICODE  0x00000003
#define STRINGFORMAT_BINARY  0x00000004

#define TAPI_REPLY  WM_USER+99

#define TAPIERR_CONNECTED  0L
#define TAPIERR_DROPPED  -1L
#define TAPIERR_NOREQUESTRECIPIENT  -2L
#define TAPIERR_REQUESTQUEUEFULL  -3L
#define TAPIERR_INVALDESTADDRESS  -4L
#define TAPIERR_INVALWINDOWHANDLE  -5L
#define TAPIERR_INVALDEVICECLASS  -6L
#define TAPIERR_INVALDEVICEID  -7L
#define TAPIERR_DEVICECLASSUNAVAIL  -8L
#define TAPIERR_DEVICEIDUNAVAIL  -9L
#define TAPIERR_DEVICEINUSE  -10L
#define TAPIERR_DESTBUSY  -11L
#define TAPIERR_DESTNOANSWER  -12L
#define TAPIERR_DESTUNAVAIL  -13L
#define TAPIERR_UNKNOWNWINHANDLE  -14L
#define TAPIERR_UNKNOWNREQUESTID  -15L
#define TAPIERR_REQUESTFAILED  -16L
#define TAPIERR_REQUESTCANCELLED  -17L
#define TAPIERR_INVALPOINTER  -18L
#define TAPIERR_NOTADMIN  -19L

#define TAPIMAXDESTADDRESSSIZE  80L
#define TAPIMAXAPPNAMESIZE  40L
#define TAPIMAXCALLEDPARTYSIZE  40L
#define TAPIMAXCOMMENTSIZE  80L
#define TAPIMAXDEVICECLASSSIZE  40L
#define TAPIMAXDEVICEIDSIZE  40L

#ifndef __LPGUID_DEFINED__
#define __LPGUID_DEFINED__
typedef GUID *LPGUID;
#endif

typedef struct lineaddresscaps_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwLineDeviceID;
    DWORD dwAddressSize;
    DWORD dwAddressOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
    DWORD dwAddressSharing;
    DWORD dwAddressStates;
    DWORD dwCallInfoStates;
    DWORD dwCallerIDFlags;
    DWORD dwCalledIDFlags;
    DWORD dwConnectedIDFlags;
    DWORD dwRedirectionIDFlags;
    DWORD dwRedirectingIDFlags;
    DWORD dwCallStates;
    DWORD dwDialToneModes;
    DWORD dwBusyModes;
    DWORD dwSpecialInfo;
    DWORD dwDisconnectModes;
    DWORD dwMaxNumActiveCalls;
    DWORD dwMaxNumOnHoldCalls;
    DWORD dwMaxNumOnHoldPendingCalls;
    DWORD dwMaxNumConference;
    DWORD dwMaxNumTransConf;
    DWORD dwAddrCapFlags;
    DWORD dwCallFeatures;
    DWORD dwRemoveFromConfCaps;
    DWORD dwRemoveFromConfState;
    DWORD dwTransferModes;
    DWORD dwParkModes;
    DWORD dwForwardModes;
    DWORD dwMaxForwardEntries;
    DWORD dwMaxSpecificEntries;
    DWORD dwMinFwdNumRings;
    DWORD dwMaxFwdNumRings;
    DWORD dwMaxCallCompletions;
    DWORD dwCallCompletionConds;
    DWORD dwCallCompletionModes;
    DWORD dwNumCompletionMessages;
    DWORD dwCompletionMsgTextEntrySize;
    DWORD dwCompletionMsgTextSize;
    DWORD dwCompletionMsgTextOffset;
    DWORD dwAddressFeatures;
#if (TAPI_CURRENT_VERSION >= 0x00020000)
    DWORD dwPredictiveAutoTransferStates;
    DWORD dwNumCallTreatments;
    DWORD dwCallTreatmentListSize;
    DWORD dwCallTreatmentListOffset;
    DWORD dwDeviceClassesSize;
    DWORD dwDeviceClassesOffset;
    DWORD dwMaxCallDataSize;
    DWORD dwCallFeatures2;
    DWORD dwMaxNoAnswerTimeout;
    DWORD dwConnectedModes;
    DWORD dwOfferingModes;
    DWORD dwAvailableMediaModes;
#endif
} LINEADDRESSCAPS, *LPLINEADDRESSCAPS;

typedef struct lineaddressstatus_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumInUse;
    DWORD dwNumActiveCalls;
    DWORD dwNumOnHoldCalls;
    DWORD dwNumOnHoldPendCalls;
    DWORD dwAddressFeatures;
    DWORD dwNumRingsNoAnswer;
    DWORD dwForwardNumEntries;
    DWORD dwForwardSize;
    DWORD dwForwardOffset;
    DWORD dwTerminalModesSize;
    DWORD dwTerminalModesOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
} LINEADDRESSSTATUS, *LPLINEADDRESSSTATUS;

#if (TAPI_CURRENT_VERSION >= 0x00020000)
typedef struct lineagentactivityentry_tag {
    DWORD dwID;
    DWORD dwNameSize;
    DWORD dwNameOffset;
} LINEAGENTACTIVITYENTRY, *LPLINEAGENTACTIVITYENTRY;

typedef struct lineagentactivitylist_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumEntries;
    DWORD dwListSize;
    DWORD dwListOffset;
} LINEAGENTACTIVITYLIST, *LPLINEAGENTACTIVITYLIST;

typedef struct lineagentcaps_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwAgentHandlerInfoSize;
    DWORD dwAgentHandlerInfoOffset;
    DWORD dwCapsVersion;
    DWORD dwFeatures;
    DWORD dwStates;
    DWORD dwNextStates;
    DWORD dwMaxNumGroupEntries;
    DWORD dwAgentStatusMessages;
    DWORD dwNumAgentExtensionIDs;
    DWORD dwAgentExtensionIDListSize;
    DWORD dwAgentExtensionIDListOffset;
#if (TAPI_CURRENT_VERSION >= 0x00020002)
    GUID ProxyGUID;
#endif
} LINEAGENTCAPS, *LPLINEAGENTCAPS;

typedef struct lineagentgroupentry_tag {
    struct {
        DWORD dwGroupID1;
        DWORD dwGroupID2;
        DWORD dwGroupID3;
        DWORD dwGroupID4;
    } GroupID;
    DWORD dwNameSize;
    DWORD dwNameOffset;
} LINEAGENTGROUPENTRY, *LPLINEAGENTGROUPENTRY;

typedef struct lineagentgrouplist_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumEntries;
    DWORD dwListSize;
    DWORD dwListOffset;
} LINEAGENTGROUPLIST, *LPLINEAGENTGROUPLIST;

typedef struct lineagentstatus_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumEntries;
    DWORD dwGroupListSize;
    DWORD dwGroupListOffset;
    DWORD dwState;
    DWORD dwNextState;
    DWORD dwActivityID;
    DWORD dwActivitySize;
    DWORD dwActivityOffset;
    DWORD dwAgentFeatures;
    DWORD dwValidStates;
    DWORD dwValidNextStates;
} LINEAGENTSTATUS, *LPLINEAGENTSTATUS;

typedef struct lineappinfo_tag {
    DWORD dwMachineNameSize;
    DWORD dwMachineNameOffset;
    DWORD dwUserNameSize;
    DWORD dwUserNameOffset;
    DWORD dwModuleFilenameSize;
    DWORD dwModuleFilenameOffset;
    DWORD dwFriendlyNameSize;
    DWORD dwFriendlyNameOffset;
    DWORD dwMediaModes;
    DWORD dwAddressID;
} LINEAPPINFO, *LPLINEAPPINFO;
#endif

#if (TAPI_CURRENT_VERSION >= 0x00020002)
typedef struct lineagententry_tag {
    HAGENT hAgent;
    DWORD dwNameSize;
    DWORD dwNameOffset;
    DWORD dwIDSize;
    DWORD dwIDOffset;
    DWORD dwPINSize;
    DWORD dwPINOffset;
} LINEAGENTENTRY, *LPLINEAGENTENTRY;

typedef struct lineagentlist_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumEntries;
    DWORD dwListSize;
    DWORD dwListOffset;
} LINEAGENTLIST, *LPLINEAGENTLIST;

typedef struct lineagentinfo_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwAgentState;
    DWORD dwNextAgentState;
    DWORD dwMeasurementPeriod;
    CURRENCY cyOverallCallRate;
    DWORD dwNumberOfACDCalls;
    DWORD dwNumberOfIncomingCalls;
    DWORD dwNumberOfOutgoingCalls;
    DWORD dwTotalACDTalkTime;
    DWORD dwTotalACDCallTime;
    DWORD dwTotalACDWrapUpTime;
} LINEAGENTINFO, *LPLINEAGENTINFO;

typedef struct lineagentsession_tag {
    HAGENTSESSION hAgentSession;
    HAGENT hAgent;
    GUID GroupID;
    DWORD dwWorkingAddressID;
} LINEAGENTSESSIONENTRY, *LPLINEAGENTSESSIONENTRY;

typedef struct lineagentsessionlist_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumEntries;
    DWORD dwListSize;
    DWORD dwListOffset;
} LINEAGENTSESSIONLIST, *LPLINEAGENTSESSIONLIST;

typedef struct lineagentsessioninfo_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwAgentSessionState;
    DWORD dwNextAgentSessionState;
    DATE dateSessionStartTime;
    DWORD dwSessionDuration;
    DWORD dwNumberOfCalls;
    DWORD dwTotalTalkTime;
    DWORD dwAverageTalkTime;
    DWORD dwTotalCallTime;
    DWORD dwAverageCallTime;
    DWORD dwTotalWrapUpTime;
    DWORD dwAverageWrapUpTime;
    CURRENCY cyACDCallRate;
    DWORD dwLongestTimeToAnswer;
    DWORD dwAverageTimeToAnswer;
} LINEAGENTSESSIONINFO, *LPLINEAGENTSESSIONINFO;

typedef struct linequeueentry_tag {
    DWORD dwQueueID;
    DWORD dwNameSize;
    DWORD dwNameOffset;
} LINEQUEUEENTRY, *LPLINEQUEUEENTRY;

typedef struct linequeuelist_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumEntries;
    DWORD dwListSize;
    DWORD dwListOffset;
} LINEQUEUELIST, *LPLINEQUEUELIST;

typedef struct linequeueinfo_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwMeasurementPeriod;
    DWORD dwTotalCallsQueued;
    DWORD dwCurrentCallsQueued;
    DWORD dwTotalCallsAbandoned;
    DWORD dwTotalCallsFlowedIn;
    DWORD dwTotalCallsFlowedOut;
    DWORD dwLongestEverWaitTime;
    DWORD dwCurrentLongestWaitTime;
    DWORD dwAverageWaitTime;
    DWORD dwFinalDisposition;
} LINEQUEUEINFO, *LPLINEQUEUEINFO;

typedef struct lineproxyrequestlist_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumEntries;
    DWORD dwListSize;
    DWORD dwListOffset;
} LINEPROXYREQUESTLIST, *LPLINEPROXYREQUESTLIST;
#endif

#if (TAPI_CURRENT_VERSION >= 0x00030000)
typedef struct linecallhubtrackinginfo_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwAvailableTracking;
    DWORD dwCurrentTracking;
} LINECALLHUBTRACKINGINFO, *LPLINECALLHUBTRACKINGINFO;
#endif

typedef struct linedialparams_tag {
    DWORD dwDialPause;
    DWORD dwDialSpeed;
    DWORD dwDigitDuration;
    DWORD dwWaitForDialtone;
} LINEDIALPARAMS, *LPLINEDIALPARAMS;

typedef struct linecallinfo_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    HLINE hLine;
    DWORD dwLineDeviceID;
    DWORD dwAddressID;
    DWORD dwBearerMode;
    DWORD dwRate;
    DWORD dwMediaMode;
    DWORD dwAppSpecific;
    DWORD dwCallID;
    DWORD dwRelatedCallID;
    DWORD dwCallParamFlags;
    DWORD dwCallStates;
    DWORD dwMonitorDigitModes;
    DWORD dwMonitorMediaModes;
    LINEDIALPARAMS DialParams;
    DWORD dwOrigin;
    DWORD dwReason;
    DWORD dwCompletionID;
    DWORD dwNumOwners;
    DWORD dwNumMonitors;
    DWORD dwCountryCode;
    DWORD dwTrunk;
    DWORD dwCallerIDFlags;
    DWORD dwCallerIDSize;
    DWORD dwCallerIDOffset;
    DWORD dwCallerIDNameSize;
    DWORD dwCallerIDNameOffset;
    DWORD dwCalledIDFlags;
    DWORD dwCalledIDSize;
    DWORD dwCalledIDOffset;
    DWORD dwCalledIDNameSize;
    DWORD dwCalledIDNameOffset;
    DWORD dwConnectedIDFlags;
    DWORD dwConnectedIDSize;
    DWORD dwConnectedIDOffset;
    DWORD dwConnectedIDNameSize;
    DWORD dwConnectedIDNameOffset;
    DWORD dwRedirectionIDFlags;
    DWORD dwRedirectionIDSize;
    DWORD dwRedirectionIDOffset;
    DWORD dwRedirectionIDNameSize;
    DWORD dwRedirectionIDNameOffset;
    DWORD dwRedirectingIDFlags;
    DWORD dwRedirectingIDSize;
    DWORD dwRedirectingIDOffset;
    DWORD dwRedirectingIDNameSize;
    DWORD dwRedirectingIDNameOffset;
    DWORD dwAppNameSize;
    DWORD dwAppNameOffset;
    DWORD dwDisplayableAddressSize;
    DWORD dwDisplayableAddressOffset;
    DWORD dwCalledPartySize;
    DWORD dwCalledPartyOffset;
    DWORD dwCommentSize;
    DWORD dwCommentOffset;
    DWORD dwDisplaySize;
    DWORD dwDisplayOffset;
    DWORD dwUserUserInfoSize;
    DWORD dwUserUserInfoOffset;
    DWORD dwHighLevelCompSize;
    DWORD dwHighLevelCompOffset;
    DWORD dwLowLevelCompSize;
    DWORD dwLowLevelCompOffset;
    DWORD dwChargingInfoSize;
    DWORD dwChargingInfoOffset;
    DWORD dwTerminalModesSize;
    DWORD dwTerminalModesOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
#if (TAPI_CURRENT_VERSION >= 0x00020000)
    DWORD dwCallTreatment;
    DWORD dwCallDataSize;
    DWORD dwCallDataOffset;
    DWORD dwSendingFlowspecSize;
    DWORD dwSendingFlowspecOffset;
    DWORD dwReceivingFlowspecSize;
    DWORD dwReceivingFlowspecOffset;
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
    DWORD dwCallerIDAddressType;
    DWORD dwCalledIDAddressType;
    DWORD dwConnectedIDAddressType;
    DWORD dwRedirectionIDAddressType;
    DWORD dwRedirectingIDAddressType;
#endif
} LINECALLINFO, *LPLINECALLINFO;

typedef struct linecalllist_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwCallsNumEntries;
    DWORD dwCallsSize;
    DWORD dwCallsOffset;
} LINECALLLIST, *LPLINECALLLIST;

typedef struct linecallparams_tag {
    DWORD dwTotalSize;
    DWORD dwBearerMode;
    DWORD dwMinRate;
    DWORD dwMaxRate;
    DWORD dwMediaMode;
    DWORD dwCallParamFlags;
    DWORD dwAddressMode;
    DWORD dwAddressID;
    LINEDIALPARAMS DialParams;
    DWORD dwOrigAddressSize;
    DWORD dwOrigAddressOffset;
    DWORD dwDisplayableAddressSize;
    DWORD dwDisplayableAddressOffset;
    DWORD dwCalledPartySize;
    DWORD dwCalledPartyOffset;
    DWORD dwCommentSize;
    DWORD dwCommentOffset;
    DWORD dwUserUserInfoSize;
    DWORD dwUserUserInfoOffset;
    DWORD dwHighLevelCompSize;
    DWORD dwHighLevelCompOffset;
    DWORD dwLowLevelCompSize;
    DWORD dwLowLevelCompOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
#if (TAPI_CURRENT_VERSION >= 0x00020000)
    DWORD dwPredictiveAutoTransferStates;
    DWORD dwTargetAddressSize;
    DWORD dwTargetAddressOffset;
    DWORD dwSendingFlowspecSize;
    DWORD dwSendingFlowspecOffset;
    DWORD dwReceivingFlowspecSize;
    DWORD dwReceivingFlowspecOffset;
    DWORD dwDeviceClassSize;
    DWORD dwDeviceClassOffset;
    DWORD dwDeviceConfigSize;
    DWORD dwDeviceConfigOffset;
    DWORD dwCallDataSize;
    DWORD dwCallDataOffset;
    DWORD dwNoAnswerTimeout;
    DWORD dwCallingPartyIDSize;
    DWORD dwCallingPartyIDOffset;
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
    DWORD dwAddressType;
#endif
} LINECALLPARAMS, *LPLINECALLPARAMS;

typedef struct linecallstatus_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwCallState;
    DWORD dwCallStateMode;
    DWORD dwCallPrivilege;
    DWORD dwCallFeatures;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
#if (TAPI_CURRENT_VERSION >= 0x00020000)
    DWORD dwCallFeatures2;
    SYSTEMTIME tStateEntryTime;
#endif
} LINECALLSTATUS, *LPLINECALLSTATUS;

#if (TAPI_CURRENT_VERSION >= 0x00020000)
typedef struct linecalltreatmententry_tag {
    DWORD dwCallTreatmentID;
    DWORD dwCallTreatmentNameSize;
    DWORD dwCallTreatmentNameOffset;
} LINECALLTREATMENTENTRY, *LPLINECALLTREATMENTENTRY;
#endif

typedef struct linecardentry_tag {
    DWORD dwPermanentCardID;
    DWORD dwCardNameSize;
    DWORD dwCardNameOffset;
    DWORD dwCardNumberDigits;
    DWORD dwSameAreaRuleSize;
    DWORD dwSameAreaRuleOffset;
    DWORD dwLongDistanceRuleSize;
    DWORD dwLongDistanceRuleOffset;
    DWORD dwInternationalRuleSize;
    DWORD dwInternationalRuleOffset;
    DWORD dwOptions;
} LINECARDENTRY, *LPLINECARDENTRY;

typedef struct linecountryentry_tag {
    DWORD dwCountryID;
    DWORD dwCountryCode;
    DWORD dwNextCountryID;
    DWORD dwCountryNameSize;
    DWORD dwCountryNameOffset;
    DWORD dwSameAreaRuleSize;
    DWORD dwSameAreaRuleOffset;
    DWORD dwLongDistanceRuleSize;
    DWORD dwLongDistanceRuleOffset;
    DWORD dwInternationalRuleSize;
    DWORD dwInternationalRuleOffset;
} LINECOUNTRYENTRY, *LPLINECOUNTRYENTRY;

typedef struct linecountrylist_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumCountries;
    DWORD dwCountryListSize;
    DWORD dwCountryListOffset;
} LINECOUNTRYLIST, *LPLINECOUNTRYLIST;

typedef struct linedevcaps_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwProviderInfoSize;
    DWORD dwProviderInfoOffset;
    DWORD dwSwitchInfoSize;
    DWORD dwSwitchInfoOffset;
    DWORD dwPermanentLineID;
    DWORD dwLineNameSize;
    DWORD dwLineNameOffset;
    DWORD dwStringFormat;
    DWORD dwAddressModes;
    DWORD dwNumAddresses;
    DWORD dwBearerModes;
    DWORD dwMaxRate;
    DWORD dwMediaModes;
    DWORD dwGenerateToneModes;
    DWORD dwGenerateToneMaxNumFreq;
    DWORD dwGenerateDigitModes;
    DWORD dwMonitorToneMaxNumFreq;
    DWORD dwMonitorToneMaxNumEntries;
    DWORD dwMonitorDigitModes;
    DWORD dwGatherDigitsMinTimeout;
    DWORD dwGatherDigitsMaxTimeout;
    DWORD dwMedCtlDigitMaxListSize;
    DWORD dwMedCtlMediaMaxListSize;
    DWORD dwMedCtlToneMaxListSize;
    DWORD dwMedCtlCallStateMaxListSize;
    DWORD dwDevCapFlags;
    DWORD dwMaxNumActiveCalls;
    DWORD dwAnswerMode;
    DWORD dwRingModes;
    DWORD dwLineStates;
    DWORD dwUUIAcceptSize;
    DWORD dwUUIAnswerSize;
    DWORD dwUUIMakeCallSize;
    DWORD dwUUIDropSize;
    DWORD dwUUISendUserUserInfoSize;
    DWORD dwUUICallInfoSize;
    LINEDIALPARAMS MinDialParams;
    LINEDIALPARAMS MaxDialParams;
    LINEDIALPARAMS DefaultDialParams;
    DWORD dwNumTerminals;
    DWORD dwTerminalCapsSize;
    DWORD dwTerminalCapsOffset;
    DWORD dwTerminalTextEntrySize;
    DWORD dwTerminalTextSize;
    DWORD dwTerminalTextOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
    DWORD dwLineFeatures;
#if (TAPI_CURRENT_VERSION >= 0x00020000)
    DWORD dwSettableDevStatus;
    DWORD dwDeviceClassesSize;
    DWORD dwDeviceClassesOffset;
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020002)
    GUID PermanentLineGuid;
#endif
#if (TAPI_CURRENT_VERSION >= 0x00030000)
    DWORD dwAddressTypes;
    GUID ProtocolGuid;
    DWORD dwAvailableTracking;
#endif
} LINEDEVCAPS, *LPLINEDEVCAPS;

typedef struct linedevstatus_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumOpens;
    DWORD dwOpenMediaModes;
    DWORD dwNumActiveCalls;
    DWORD dwNumOnHoldCalls;
    DWORD dwNumOnHoldPendCalls;
    DWORD dwLineFeatures;
    DWORD dwNumCallCompletions;
    DWORD dwRingMode;
    DWORD dwSignalLevel;
    DWORD dwBatteryLevel;
    DWORD dwRoamMode;
    DWORD dwDevStatusFlags;
    DWORD dwTerminalModesSize;
    DWORD dwTerminalModesOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
#if (TAPI_CURRENT_VERSION >= 0x00020000)
    DWORD dwAvailableMediaModes;
    DWORD dwAppInfoSize;
    DWORD dwAppInfoOffset;
#endif
} LINEDEVSTATUS, *LPLINEDEVSTATUS;

typedef struct lineextensionid_tag {
    DWORD dwExtensionID0;
    DWORD dwExtensionID1;
    DWORD dwExtensionID2;
    DWORD dwExtensionID3;
} LINEEXTENSIONID, *LPLINEEXTENSIONID;

typedef struct lineforward_tag {
    DWORD dwForwardMode;
    DWORD dwCallerAddressSize;
    DWORD dwCallerAddressOffset;
    DWORD dwDestCountryCode;
    DWORD dwDestAddressSize;
    DWORD dwDestAddressOffset;
} LINEFORWARD, *LPLINEFORWARD;

typedef struct lineforwardlist_tag {
    DWORD dwTotalSize;
    DWORD dwNumEntries;
    LINEFORWARD ForwardList[1];
} LINEFORWARDLIST, *LPLINEFORWARDLIST;

typedef struct linegeneratetone_tag {
    DWORD dwFrequency;
    DWORD dwCadenceOn;
    DWORD dwCadenceOff;
    DWORD dwVolume;
} LINEGENERATETONE, *LPLINEGENERATETONE;

#if (TAPI_CURRENT_VERSION >= 0x00020000)
typedef struct lineinitializeexparams_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwOptions;
    union {
        HANDLE hEvent;
        HANDLE hCompletionPort;
    } Handles;
    DWORD dwCompletionKey;
} LINEINITIALIZEEXPARAMS, *LPLINEINITIALIZEEXPARAMS;
#endif

typedef struct linelocationentry_tag {
    DWORD dwPermanentLocationID;
    DWORD dwLocationNameSize;
    DWORD dwLocationNameOffset;
    DWORD dwCountryCode;
    DWORD dwCityCodeSize;
    DWORD dwCityCodeOffset;
    DWORD dwPreferredCardID;
    DWORD dwLocalAccessCodeSize;
    DWORD dwLocalAccessCodeOffset;
    DWORD dwLongDistanceAccessCodeSize;
    DWORD dwLongDistanceAccessCodeOffset;
    DWORD dwTollPrefixListSize;
    DWORD dwTollPrefixListOffset;
    DWORD dwCountryID;
    DWORD dwOptions;
    DWORD dwCancelCallWaitingSize;
    DWORD dwCancelCallWaitingOffset;
} LINELOCATIONENTRY, *LPLINELOCATIONENTRY;

typedef struct linemediacontrolcallstate_tag {
    DWORD dwCallStates;
    DWORD dwMediaControl;
} LINEMEDIACONTROLCALLSTATE, *LPLINEMEDIACONTROLCALLSTATE;

typedef struct linemediacontroldigit_tag {
    DWORD dwDigit;
    DWORD dwDigitModes;
    DWORD dwMediaControl;
} LINEMEDIACONTROLDIGIT, *LPLINEMEDIACONTROLDIGIT;

typedef struct linemediacontrolmedia_tag {
    DWORD dwMediaModes;
    DWORD dwDuration;
    DWORD dwMediaControl;
} LINEMEDIACONTROLMEDIA, *LPLINEMEDIACONTROLMEDIA;

typedef struct linemediacontroltone_tag {
    DWORD dwAppSpecific;
    DWORD dwDuration;
    DWORD dwFrequency1;
    DWORD dwFrequency2;
    DWORD dwFrequency3;
    DWORD dwMediaControl;
} LINEMEDIACONTROLTONE, *LPLINEMEDIACONTROLTONE;

#if (TAPI_CURRENT_VERSION >= 0x00020000)
typedef struct linemessage_tag {
    DWORD hDevice;
    DWORD dwMessageID;
    DWORD_PTR dwCallbackInstance;
    DWORD_PTR dwParam1;
    DWORD_PTR dwParam2;
    DWORD_PTR dwParam3;
} LINEMESSAGE, *LPLINEMESSAGE;
#endif

typedef struct linemonitortone_tag {
    DWORD dwAppSpecific;
    DWORD dwDuration;
    DWORD dwFrequency1;
    DWORD dwFrequency2;
    DWORD dwFrequency3;
} LINEMONITORTONE, *LPLINEMONITORTONE;

typedef struct lineproviderentry_tag {
    DWORD dwPermanentProviderID;
    DWORD dwProviderFilenameSize;
    DWORD dwProviderFilenameOffset;
} LINEPROVIDERENTRY, *LPLINEPROVIDERENTRY;

typedef struct lineproviderlist_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumProviders;
    DWORD dwProviderListSize;
    DWORD dwProviderListOffset;
} LINEPROVIDERLIST, *LPLINEPROVIDERLIST;

#if (TAPI_CURRENT_VERSION >= 0x00020000)
typedef struct lineproxyrequest_tag {
    DWORD dwSize;
    DWORD dwClientMachineNameSize;
    DWORD dwClientMachineNameOffset;
    DWORD dwClientUserNameSize;
    DWORD dwClientUserNameOffset;
    DWORD dwClientAppAPIVersion;
    DWORD dwRequestType;
    union {
        struct {
            DWORD dwAddressID;
            LINEAGENTGROUPLIST GroupList;
        } SetAgentGroup;
        struct {
            DWORD dwAddressID;
            DWORD dwAgentState;
            DWORD dwNextAgentState;
        } SetAgentState;
        struct {
            DWORD dwAddressID;
            DWORD dwActivityID;
        } SetAgentActivity;
        struct {
            DWORD dwAddressID;
            LINEAGENTCAPS AgentCaps;
        } GetAgentCaps;
        struct {
            DWORD dwAddressID;
            LINEAGENTSTATUS AgentStatus;
        } GetAgentStatus;
        struct {
            DWORD dwAddressID;
            DWORD dwAgentExtensionIDIndex;
            DWORD dwSize;
            BYTE Params[1];
        } AgentSpecific;
        struct {
            DWORD dwAddressID;
            LINEAGENTACTIVITYLIST ActivityList;
        } GetAgentActivityList;
        struct {
            DWORD dwAddressID;
            LINEAGENTGROUPLIST GroupList;
        } GetAgentGroupList;
#if (TAPI_CURRENT_VERSION >= 0x00020002)
        struct {
            HAGENT hAgent;
            DWORD dwAgentIDSize;
            DWORD dwAgentIDOffset;
            DWORD dwAgentPINSize;
            DWORD dwAgentPINOffset;
        } CreateAgent;
        struct {
            HAGENT hAgent;
            DWORD dwAgentState;
            DWORD dwNextAgentState;
        } SetAgentStateEx;
        struct {
            HAGENT hAgent;
            DWORD dwMeasurementPeriod;
        } SetAgentMeasurementPeriod;
        struct {
            HAGENT hAgent;
            LINEAGENTINFO AgentInfo;
        } GetAgentInfo;
        struct {
            HAGENTSESSION hAgentSession;
            DWORD dwAgentPINSize;
            DWORD dwAgentPINOffset;
            HAGENT hAgent;
            GUID GroupID;
            DWORD dwWorkingAddressID;
        } CreateAgentSession;
        struct {
            HAGENT hAgent;
            LINEAGENTSESSIONLIST SessionList;
        } GetAgentSessionList;
        struct {
            HAGENTSESSION hAgentSession;
            LINEAGENTSESSIONINFO SessionInfo;
        } GetAgentSessionInfo;
        struct {
            HAGENTSESSION hAgentSession;
            DWORD dwAgentSessionState;
            DWORD dwNextAgentSessionState;
        } SetAgentSessionState;
        struct {
            GUID GroupID;
            LINEQUEUELIST QueueList;
        } GetQueueList;
        struct {
            DWORD dwQueueID;
            DWORD dwMeasurementPeriod;
        } SetQueueMeasurementPeriod;
        struct {
            DWORD dwQueueID;
            LINEQUEUEINFO QueueInfo;
        } GetQueueInfo;
        struct {
            LINEAGENTGROUPLIST GroupList;
        } GetGroupList;
#endif
    };
} LINEPROXYREQUEST, *LPLINEPROXYREQUEST;
#endif

typedef struct linereqmakecall_tag {
    char szDestAddress[TAPIMAXDESTADDRESSSIZE];
    char szAppName[TAPIMAXAPPNAMESIZE];
    char szCalledParty[TAPIMAXCALLEDPARTYSIZE];
    char szComment[TAPIMAXCOMMENTSIZE];
} LINEREQMAKECALL, *LPLINEREQMAKECALL;

#if (TAPI_CURRENT_VERSION >= 0x00020000)
typedef struct linereqmakecallW_tag {
    WCHAR szDestAddress[TAPIMAXDESTADDRESSSIZE];
    WCHAR szAppName[TAPIMAXAPPNAMESIZE];
    WCHAR szCalledParty[TAPIMAXCALLEDPARTYSIZE];
    WCHAR szComment[TAPIMAXCOMMENTSIZE];
} LINEREQMAKECALLW, *LPLINEREQMAKECALLW;
#endif

#ifdef UNICODE
#define LINEREQMAKECALL LINEREQMAKECALLW
#endif

typedef struct linereqmediacall_tag {
    HWND hWnd;
    WPARAM wRequestID;
    char szDeviceClass[TAPIMAXDEVICECLASSSIZE];
    unsigned char ucDeviceID[TAPIMAXDEVICEIDSIZE];
    DWORD dwSize;
    DWORD dwSecure;
    char szDestAddress[TAPIMAXDESTADDRESSSIZE];
    char szAppName[TAPIMAXAPPNAMESIZE];
    char szCalledParty[TAPIMAXCALLEDPARTYSIZE];
    char szComment[TAPIMAXCOMMENTSIZE];
} LINEREQMEDIACALL, *LPLINEREQMEDIACALL;

#if (TAPI_CURRENT_VERSION >= 0x00020000)
typedef struct linereqmediacallW_tag {
    HWND hWnd;
    WPARAM wRequestID;
    WCHAR szDeviceClass[TAPIMAXDEVICECLASSSIZE];
    unsigned char ucDeviceID[TAPIMAXDEVICEIDSIZE];
    DWORD dwSize;
    DWORD dwSecure;
    WCHAR szDestAddress[TAPIMAXDESTADDRESSSIZE];
    WCHAR szAppName[TAPIMAXAPPNAMESIZE];
    WCHAR szCalledParty[TAPIMAXCALLEDPARTYSIZE];
    WCHAR szComment[TAPIMAXCOMMENTSIZE];
} LINEREQMEDIACALLW, *LPLINEREQMEDIACALLW;
#endif

#ifdef UNICODE
#define LINEREQMEDIACALL  LINEREQMEDIACALLW
#endif

typedef struct linetermcaps_tag {
    DWORD dwTermDev;
    DWORD dwTermModes;
    DWORD dwTermSharing;
} LINETERMCAPS, *LPLINETERMCAPS;

typedef struct linetranslatecaps_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwNumLocations;
    DWORD dwLocationListSize;
    DWORD dwLocationListOffset;
    DWORD dwCurrentLocationID;
    DWORD dwNumCards;
    DWORD dwCardListSize;
    DWORD dwCardListOffset;
    DWORD dwCurrentPreferredCardID;
} LINETRANSLATECAPS, *LPLINETRANSLATECAPS;

typedef struct linetranslateoutput_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwDialableStringSize;
    DWORD dwDialableStringOffset;
    DWORD dwDisplayableStringSize;
    DWORD dwDisplayableStringOffset;
    DWORD dwCurrentCountry;
    DWORD dwDestCountry;
    DWORD dwTranslateResults;
} LINETRANSLATEOUTPUT, *LPLINETRANSLATEOUTPUT;

typedef struct phonebuttoninfo_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwButtonMode;
    DWORD dwButtonFunction;
    DWORD dwButtonTextSize;
    DWORD dwButtonTextOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
    DWORD dwButtonState;
} PHONEBUTTONINFO, *LPPHONEBUTTONINFO;

typedef struct phonecaps_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwProviderInfoSize;
    DWORD dwProviderInfoOffset;
    DWORD dwPhoneInfoSize;
    DWORD dwPhoneInfoOffset;
    DWORD dwPermanentPhoneID;
    DWORD dwPhoneNameSize;
    DWORD dwPhoneNameOffset;
    DWORD dwStringFormat;
    DWORD dwPhoneStates;
    DWORD dwHookSwitchDevs;
    DWORD dwHandsetHookSwitchModes;
    DWORD dwSpeakerHookSwitchModes;
    DWORD dwHeadsetHookSwitchModes;
    DWORD dwVolumeFlags;
    DWORD dwGainFlags;
    DWORD dwDisplayNumRows;
    DWORD dwDisplayNumColumns;
    DWORD dwNumRingModes;
    DWORD dwNumButtonLamps;
    DWORD dwButtonModesSize;
    DWORD dwButtonModesOffset;
    DWORD dwButtonFunctionsSize;
    DWORD dwButtonFunctionsOffset;
    DWORD dwLampModesSize;
    DWORD dwLampModesOffset;
    DWORD dwNumSetData;
    DWORD dwSetDataSize;
    DWORD dwSetDataOffset;
    DWORD dwNumGetData;
    DWORD dwGetDataSize;
    DWORD dwGetDataOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
#if (TAPI_CURRENT_VERSION >= 0x00020000)
    DWORD dwDeviceClassesSize;
    DWORD dwDeviceClassesOffset;
    DWORD dwPhoneFeatures;
    DWORD dwSettableHandsetHookSwitchModes;
    DWORD dwSettableSpeakerHookSwitchModes;
    DWORD dwSettableHeadsetHookSwitchModes;
    DWORD dwMonitoredHandsetHookSwitchModes;
    DWORD dwMonitoredSpeakerHookSwitchModes;
    DWORD dwMonitoredHeadsetHookSwitchModes;
#endif
#if (TAPI_CURRENT_VERSION >= 0x00020002)
    GUID PermanentPhoneGuid;
#endif
} PHONECAPS, *LPPHONECAPS;

typedef struct phoneextensionid_tag {
    DWORD dwExtensionID0;
    DWORD dwExtensionID1;
    DWORD dwExtensionID2;
    DWORD dwExtensionID3;
} PHONEEXTENSIONID, *LPPHONEEXTENSIONID;

#if (TAPI_CURRENT_VERSION >= 0x00020000)
typedef struct phoneinitializeexparams_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwOptions;
    union {
        HANDLE hEvent;
        HANDLE hCompletionPort;
    } Handles;
    DWORD dwCompletionKey;
} PHONEINITIALIZEEXPARAMS, *LPPHONEINITIALIZEEXPARAMS;

typedef struct phonemessage_tag {
    DWORD hDevice;
    DWORD dwMessageID;
    DWORD_PTR dwCallbackInstance;
    DWORD_PTR dwParam1;
    DWORD_PTR dwParam2;
    DWORD_PTR dwParam3;
} PHONEMESSAGE, *LPPHONEMESSAGE;
#endif

typedef struct phonestatus_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwStatusFlags;
    DWORD dwNumOwners;
    DWORD dwNumMonitors;
    DWORD dwRingMode;
    DWORD dwRingVolume;
    DWORD dwHandsetHookSwitchMode;
    DWORD dwHandsetVolume;
    DWORD dwHandsetGain;
    DWORD dwSpeakerHookSwitchMode;
    DWORD dwSpeakerVolume;
    DWORD dwSpeakerGain;
    DWORD dwHeadsetHookSwitchMode;
    DWORD dwHeadsetVolume;
    DWORD dwHeadsetGain;
    DWORD dwDisplaySize;
    DWORD dwDisplayOffset;
    DWORD dwLampModesSize;
    DWORD dwLampModesOffset;
    DWORD dwOwnerNameSize;
    DWORD dwOwnerNameOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
#if (TAPI_CURRENT_VERSION >= 0x00020000)
    DWORD dwPhoneFeatures;
#endif
} PHONESTATUS, *LPPHONESTATUS;

typedef struct varstring_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwStringFormat;
    DWORD dwStringSize;
    DWORD dwStringOffset;
} VARSTRING, *LPVARSTRING;

LONG WINAPI lineAccept(HCALL,LPCSTR,DWORD);
LONG WINAPI lineAddProvider(LPCSTR,HWND,LPDWORD);
LONG WINAPI lineAddProviderA(LPCSTR,HWND,LPDWORD);
LONG WINAPI lineAddProviderW(LPCWSTR,HWND,LPDWORD);
LONG WINAPI lineAddToConference(HCALL,HCALL);
LONG WINAPI lineAnswer(HCALL,LPCSTR,DWORD);
LONG WINAPI lineBlindTransfer(HCALL,LPCSTR,DWORD);
LONG WINAPI lineBlindTransferA(HCALL,LPCSTR,DWORD);
LONG WINAPI lineBlindTransferW(HCALL,LPCWSTR,DWORD);
LONG WINAPI lineClose(HLINE);
LONG WINAPI lineCompleteCall(HCALL,LPDWORD,DWORD,DWORD);
LONG WINAPI lineCompleteTransfer(HCALL,HCALL,LPHCALL,DWORD);
LONG WINAPI lineConfigDialog(DWORD,HWND,LPCSTR);
LONG WINAPI lineConfigDialogA(DWORD,HWND,LPCSTR);
LONG WINAPI lineConfigDialogW(DWORD,HWND,LPCWSTR);
LONG WINAPI lineConfigDialogEdit(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);
LONG WINAPI lineConfigDialogEditA(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);
LONG WINAPI lineConfigDialogEditW(DWORD,HWND,LPCWSTR,LPVOID const,DWORD,LPVARSTRING);
LONG WINAPI lineConfigProvider(HWND,DWORD);
LONG WINAPI lineDeallocateCall(HCALL);
LONG WINAPI lineDevSpecific(HLINE,DWORD,HCALL,LPVOID,DWORD);
LONG WINAPI lineDevSpecificFeature(HLINE,DWORD,LPVOID,DWORD);
LONG WINAPI lineDial(HCALL,LPCSTR,DWORD);
LONG WINAPI lineDialA(HCALL,LPCSTR,DWORD);
LONG WINAPI lineDialW(HCALL,LPCWSTR,DWORD);
LONG WINAPI lineDrop(HCALL,LPCSTR,DWORD);
LONG WINAPI lineForward(HLINE,DWORD,DWORD,LPLINEFORWARDLIST const,DWORD,LPHCALL,LPLINECALLPARAMS const);
LONG WINAPI lineForwardA(HLINE,DWORD,DWORD,LPLINEFORWARDLIST const,DWORD,LPHCALL,LPLINECALLPARAMS const);
LONG WINAPI lineForwardW(HLINE,DWORD,DWORD,LPLINEFORWARDLIST const,DWORD,LPHCALL,LPLINECALLPARAMS const);
LONG WINAPI lineGatherDigits(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);
LONG WINAPI lineGatherDigitsA(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);
LONG WINAPI lineGatherDigitsW(HCALL,DWORD,LPWSTR,DWORD,LPCWSTR,DWORD,DWORD);
LONG WINAPI lineGenerateDigits(HCALL,DWORD,LPCSTR,DWORD);
LONG WINAPI lineGenerateDigitsA(HCALL,DWORD,LPCSTR,DWORD);
LONG WINAPI lineGenerateDigitsW(HCALL,DWORD,LPCWSTR,DWORD);
LONG WINAPI lineGenerateTone(HCALL,DWORD,DWORD,DWORD,LPLINEGENERATETONE const);
LONG WINAPI lineGetAddressCaps(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);
LONG WINAPI lineGetAddressCapsA(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);
LONG WINAPI lineGetAddressCapsW(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);
LONG WINAPI lineGetAddressID(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);
LONG WINAPI lineGetAddressIDA(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);
LONG WINAPI lineGetAddressIDW(HLINE,LPDWORD,DWORD,LPCWSTR,DWORD);
LONG WINAPI lineGetAddressStatus(HLINE,DWORD,LPLINEADDRESSSTATUS);
LONG WINAPI lineGetAddressStatusA(HLINE,DWORD,LPLINEADDRESSSTATUS);
LONG WINAPI lineGetAddressStatusW(HLINE,DWORD,LPLINEADDRESSSTATUS);
LONG WINAPI lineGetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID,DWORD,LPVARSTRING,LPDWORD);
LONG WINAPI lineGetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID,DWORD,LPVARSTRING,LPDWORD);
LONG WINAPI lineGetAppPriorityW(LPCWSTR,DWORD,LPLINEEXTENSIONID,DWORD,LPVARSTRING,LPDWORD);
LONG WINAPI lineGetCallInfo(HCALL,LPLINECALLINFO);
LONG WINAPI lineGetCallInfoA(HCALL,LPLINECALLINFO);
LONG WINAPI lineGetCallInfoW(HCALL,LPLINECALLINFO);
LONG WINAPI lineGetCallStatus(HCALL,LPLINECALLSTATUS);
LONG WINAPI lineGetConfRelatedCalls(HCALL,LPLINECALLLIST);
LONG WINAPI lineGetCountry(DWORD,DWORD,LPLINECOUNTRYLIST);
LONG WINAPI lineGetCountryA(DWORD,DWORD,LPLINECOUNTRYLIST);
LONG WINAPI lineGetCountryW(DWORD,DWORD,LPLINECOUNTRYLIST);
LONG WINAPI lineGetDevCaps(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
LONG WINAPI lineGetDevCapsA(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
LONG WINAPI lineGetDevCapsW(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
LONG WINAPI lineGetDevConfig(DWORD,LPVARSTRING,LPCSTR);
LONG WINAPI lineGetDevConfigA(DWORD,LPVARSTRING,LPCSTR);
LONG WINAPI lineGetDevConfigW(DWORD,LPVARSTRING,LPCWSTR);
LONG WINAPI lineGetIcon(DWORD,LPCSTR,LPHICON);
LONG WINAPI lineGetIconA(DWORD,LPCSTR,LPHICON);
LONG WINAPI lineGetIconW(DWORD,LPCWSTR,LPHICON);
LONG WINAPI lineGetID(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCSTR);
LONG WINAPI lineGetIDA(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCSTR);
LONG WINAPI lineGetIDW(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCWSTR);
LONG WINAPI lineGetLineDevStatus(HLINE,LPLINEDEVSTATUS);
LONG WINAPI lineGetLineDevStatusA(HLINE,LPLINEDEVSTATUS);
LONG WINAPI lineGetLineDevStatusW(HLINE,LPLINEDEVSTATUS);
LONG WINAPI lineGetNewCalls(HLINE,DWORD,DWORD,LPLINECALLLIST);
LONG WINAPI lineGetNumRings(HLINE,DWORD,LPDWORD);
LONG WINAPI lineGetProviderList(DWORD,LPLINEPROVIDERLIST);
LONG WINAPI lineGetProviderListA(DWORD,LPLINEPROVIDERLIST);
LONG WINAPI lineGetProviderListW(DWORD,LPLINEPROVIDERLIST);
LONG WINAPI lineGetRequest(HLINEAPP,DWORD,LPVOID);
LONG WINAPI lineGetRequestA(HLINEAPP,DWORD,LPVOID);
LONG WINAPI lineGetRequestW(HLINEAPP,DWORD,LPVOID);
LONG WINAPI lineGetStatusMessages(HLINE,LPDWORD,LPDWORD);
LONG WINAPI lineGetTranslateCaps(HLINEAPP,DWORD,LPLINETRANSLATECAPS);
LONG WINAPI lineGetTranslateCapsA(HLINEAPP,DWORD,LPLINETRANSLATECAPS);
LONG WINAPI lineGetTranslateCapsW(HLINEAPP,DWORD,LPLINETRANSLATECAPS);
LONG WINAPI lineHandoff(HCALL,LPCSTR,DWORD);
LONG WINAPI lineHandoffA(HCALL,LPCSTR,DWORD);
LONG WINAPI lineHandoffW(HCALL,LPCWSTR,DWORD);
LONG WINAPI lineHold(HCALL);
LONG WINAPI lineInitialize(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD);
LONG WINAPI lineMakeCall(HLINE,LPHCALL,LPCSTR,DWORD,LPLINECALLPARAMS const);
LONG WINAPI lineMakeCallA(HLINE,LPHCALL,LPCSTR,DWORD,LPLINECALLPARAMS const);
LONG WINAPI lineMakeCallW(HLINE,LPHCALL,LPCWSTR,DWORD,LPLINECALLPARAMS const);
LONG WINAPI lineMonitorDigits(HCALL,DWORD);
LONG WINAPI lineMonitorMedia(HCALL,DWORD);
LONG WINAPI lineMonitorTones(HCALL,LPLINEMONITORTONE const,DWORD);
LONG WINAPI lineNegotiateAPIVersion(HLINEAPP,DWORD,DWORD,DWORD,LPDWORD,LPLINEEXTENSIONID);
LONG WINAPI lineNegotiateExtVersion(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);
LONG WINAPI lineOpen(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD_PTR,DWORD,DWORD,LPLINECALLPARAMS const);
LONG WINAPI lineOpenA(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD_PTR,DWORD,DWORD,LPLINECALLPARAMS const);
LONG WINAPI lineOpenW(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD_PTR,DWORD,DWORD,LPLINECALLPARAMS const);
LONG WINAPI linePark(HCALL,DWORD,LPCSTR,LPVARSTRING);
LONG WINAPI lineParkA(HCALL,DWORD,LPCSTR,LPVARSTRING);
LONG WINAPI lineParkW(HCALL,DWORD,LPCWSTR,LPVARSTRING);
LONG WINAPI linePickup(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);
LONG WINAPI linePickupA(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);
LONG WINAPI linePickupW(HLINE,DWORD,LPHCALL,LPCWSTR,LPCWSTR);
LONG WINAPI linePrepareAddToConference(HCALL,LPHCALL,LPLINECALLPARAMS const);
LONG WINAPI linePrepareAddToConferenceA(HCALL, LPHCALL, LPLINECALLPARAMS const);
LONG WINAPI linePrepareAddToConferenceW(HCALL, LPHCALL, LPLINECALLPARAMS const);
LONG WINAPI lineRedirect(HCALL,LPCSTR,DWORD);
LONG WINAPI lineRedirectA(HCALL,LPCSTR,DWORD);
LONG WINAPI lineRedirectW(HCALL,LPCWSTR,DWORD);
LONG WINAPI lineRegisterRequestRecipient(HLINEAPP,DWORD,DWORD,DWORD);
LONG WINAPI lineReleaseUserUserInfo(HCALL);
LONG WINAPI lineRemoveFromConference(HCALL);
LONG WINAPI lineRemoveProvider(DWORD,HWND);
LONG WINAPI lineSecureCall(HCALL);
LONG WINAPI lineSendUserUserInfo(HCALL,LPCSTR,DWORD);
LONG WINAPI lineSetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID,DWORD,LPCSTR,DWORD);
LONG WINAPI lineSetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID,DWORD,LPCSTR,DWORD);
LONG WINAPI lineSetAppPriorityW(LPCWSTR,DWORD,LPLINEEXTENSIONID,DWORD,LPCWSTR,DWORD);
LONG WINAPI lineSetAppSpecific(HCALL, DWORD);
LONG WINAPI lineSetCallParams(HCALL,DWORD,DWORD,DWORD,LPLINEDIALPARAMS const);
LONG WINAPI lineSetCallPrivilege(HCALL,DWORD);
LONG WINAPI lineSetCurrentLocation(HLINEAPP,DWORD);
LONG WINAPI lineSetDevConfig(DWORD,LPVOID const,DWORD,LPCSTR);
LONG WINAPI lineSetDevConfigA(DWORD,LPVOID const,DWORD,LPCSTR);
LONG WINAPI lineSetDevConfigW(DWORD,LPVOID const,DWORD,LPCWSTR);
LONG WINAPI lineSetMediaControl(HLINE,DWORD,HCALL,DWORD,LPLINEMEDIACONTROLDIGIT const,DWORD,LPLINEMEDIACONTROLMEDIA const,DWORD,LPLINEMEDIACONTROLTONE const,DWORD,LPLINEMEDIACONTROLCALLSTATE const,DWORD);
LONG WINAPI lineSetMediaMode(HCALL,DWORD);
LONG WINAPI lineSetNumRings(HLINE,DWORD,DWORD);
LONG WINAPI lineSetStatusMessages(HLINE,DWORD,DWORD);
LONG WINAPI lineSetTerminal(HLINE,DWORD,HCALL,DWORD,DWORD,DWORD,DWORD);
LONG WINAPI lineSetTollList(HLINEAPP,DWORD,LPCSTR,DWORD);
LONG WINAPI lineSetTollListA(HLINEAPP,DWORD,LPCSTR,DWORD);
LONG WINAPI lineSetTollListW(HLINEAPP,DWORD,LPCWSTR,DWORD);
LONG WINAPI lineSetupConference(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS const);
LONG WINAPI lineSetupConferenceA(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS const);
LONG WINAPI lineSetupConferenceW(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS const);
LONG WINAPI lineSetupTransfer(HCALL,LPHCALL,LPLINECALLPARAMS const);
LONG WINAPI lineSetupTransferA(HCALL,LPHCALL,LPLINECALLPARAMS const);
LONG WINAPI lineSetupTransferW(HCALL,LPHCALL,LPLINECALLPARAMS const);
LONG WINAPI lineShutdown(HLINEAPP);
LONG WINAPI lineSwapHold(HCALL,HCALL);
LONG WINAPI lineTranslateAddress(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);
LONG WINAPI lineTranslateAddressA(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);
LONG WINAPI lineTranslateAddressW(HLINEAPP,DWORD,DWORD,LPCWSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);
LONG WINAPI lineTranslateDialog(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);
LONG WINAPI lineTranslateDialogA(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);
LONG WINAPI lineTranslateDialogW(HLINEAPP,DWORD,DWORD,HWND,LPCWSTR);
LONG WINAPI lineUncompleteCall(HLINE, DWORD);
LONG WINAPI lineUnhold(HCALL);
LONG WINAPI lineUnpark(HLINE,DWORD,LPHCALL,LPCSTR);
LONG WINAPI lineUnparkA(HLINE,DWORD,LPHCALL,LPCSTR);
LONG WINAPI lineUnparkW(HLINE,DWORD,LPHCALL,LPCWSTR);
LONG WINAPI phoneClose(HPHONE);
LONG WINAPI phoneConfigDialog(DWORD,HWND,LPCSTR);
LONG WINAPI phoneConfigDialogA(DWORD,HWND,LPCSTR);
LONG WINAPI phoneConfigDialogW(DWORD,HWND,LPCWSTR);
LONG WINAPI phoneDevSpecific(HPHONE,LPVOID,DWORD);
LONG WINAPI phoneGetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO);
LONG WINAPI phoneGetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO);
LONG WINAPI phoneGetButtonInfoW(HPHONE,DWORD,LPPHONEBUTTONINFO);
LONG WINAPI phoneGetData(HPHONE,DWORD,LPVOID,DWORD);
LONG WINAPI phoneGetDevCaps(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);
LONG WINAPI phoneGetDevCapsA(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);
LONG WINAPI phoneGetDevCapsW(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);
LONG WINAPI phoneGetDisplay(HPHONE,LPVARSTRING);
LONG WINAPI phoneGetGain(HPHONE,DWORD,LPDWORD);
LONG WINAPI phoneGetHookSwitch(HPHONE,LPDWORD);
LONG WINAPI phoneGetIcon(DWORD,LPCSTR,LPHICON);
LONG WINAPI phoneGetIconA(DWORD,LPCSTR,LPHICON);
LONG WINAPI phoneGetIconW(DWORD,LPCWSTR,LPHICON);
LONG WINAPI phoneGetID(HPHONE,LPVARSTRING,LPCSTR);
LONG WINAPI phoneGetIDA(HPHONE,LPVARSTRING,LPCSTR);
LONG WINAPI phoneGetIDW(HPHONE,LPVARSTRING,LPCWSTR);
LONG WINAPI phoneGetLamp(HPHONE,DWORD,LPDWORD);
LONG WINAPI phoneGetRing(HPHONE,LPDWORD,LPDWORD);
LONG WINAPI phoneGetStatus(HPHONE,LPPHONESTATUS);
LONG WINAPI phoneGetStatusA(HPHONE,LPPHONESTATUS);
LONG WINAPI phoneGetStatusW(HPHONE,LPPHONESTATUS);
LONG WINAPI phoneGetStatusMessages(HPHONE,LPDWORD,LPDWORD,LPDWORD);
LONG WINAPI phoneGetVolume(HPHONE,DWORD,LPDWORD);
LONG WINAPI phoneInitialize(LPHPHONEAPP,HINSTANCE,PHONECALLBACK,LPCSTR,LPDWORD);
LONG WINAPI phoneNegotiateAPIVersion(HPHONEAPP,DWORD,DWORD,DWORD,LPDWORD,LPPHONEEXTENSIONID);
LONG WINAPI phoneNegotiateExtVersion(HPHONEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);
LONG WINAPI phoneOpen(HPHONEAPP,DWORD,LPHPHONE,DWORD,DWORD,DWORD_PTR,DWORD);
LONG WINAPI phoneSetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO const);
LONG WINAPI phoneSetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO const);
LONG WINAPI phoneSetButtonInfoW(HPHONE,DWORD,LPPHONEBUTTONINFO const);
LONG WINAPI phoneSetData(HPHONE,DWORD,LPVOID const,DWORD);
LONG WINAPI phoneSetDisplay(HPHONE,DWORD,DWORD,LPCSTR,DWORD);
LONG WINAPI phoneSetGain(HPHONE,DWORD,DWORD);
LONG WINAPI phoneSetHookSwitch(HPHONE,DWORD,DWORD);
LONG WINAPI phoneSetLamp(HPHONE,DWORD,DWORD);
LONG WINAPI phoneSetRing(HPHONE,DWORD,DWORD);
LONG WINAPI phoneSetStatusMessages(HPHONE,DWORD,DWORD,DWORD);
LONG WINAPI phoneSetVolume(HPHONE,DWORD,DWORD);
LONG WINAPI phoneShutdown(HPHONEAPP);
LONG WINAPI tapiGetLocationInfo(LPSTR,LPSTR);
LONG WINAPI tapiGetLocationInfoA(LPSTR,LPSTR);
LONG WINAPI tapiGetLocationInfoW(LPWSTR,LPWSTR);
LONG WINAPI tapiRequestDrop(HWND,WPARAM);
LONG WINAPI tapiRequestMakeCall(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
LONG WINAPI tapiRequestMakeCallA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
LONG WINAPI tapiRequestMakeCallW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
LONG WINAPI tapiRequestMediaCall(HWND,WPARAM,LPCSTR,LPCSTR,DWORD,DWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR);
LONG WINAPI tapiRequestMediaCallA(HWND,WPARAM,LPCSTR,LPCSTR,DWORD,DWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR);
LONG WINAPI tapiRequestMediaCallW(HWND,WPARAM,LPCWSTR,LPCWSTR,DWORD,DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
#if (TAPI_CURRENT_VERSION >= 0x00020000)
LONG WINAPI lineAgentSpecific(HLINE,DWORD,DWORD,LPVOID,DWORD);
LONG WINAPI lineProxyMessage(HLINE,HCALL,DWORD,DWORD,DWORD,DWORD);
LONG WINAPI lineProxyResponse(HLINE,LPLINEPROXYREQUEST,DWORD);
LONG WINAPI lineSetAgentActivity(HLINE,DWORD,DWORD);
LONG WINAPI lineSetAgentGroup(HLINE,DWORD,LPLINEAGENTGROUPLIST);
LONG WINAPI lineSetAgentState(HLINE,DWORD,DWORD,DWORD);
LONG WINAPI lineSetCallData(HCALL,LPVOID,DWORD);
LONG WINAPI lineSetCallQualityOfService(HCALL,LPVOID,DWORD,LPVOID,DWORD);
LONG WINAPI lineSetCallTreatment(HCALL,DWORD);
LONG WINAPI lineSetLineDevStatus(HLINE,DWORD,DWORD);
LONG WINAPI lineGetAgentActivityListA(HLINE,DWORD,LPLINEAGENTACTIVITYLIST);
LONG WINAPI lineGetAgentActivityListW(HLINE,DWORD,LPLINEAGENTACTIVITYLIST);
LONG WINAPI lineGetAgentCapsA(HLINEAPP,DWORD,DWORD,DWORD,LPLINEAGENTCAPS);
LONG WINAPI lineGetAgentCapsW(HLINEAPP,DWORD,DWORD,DWORD,LPLINEAGENTCAPS);
LONG WINAPI lineGetAgentGroupListA(HLINE,DWORD,LPLINEAGENTGROUPLIST);
LONG WINAPI lineGetAgentGroupListW(HLINE,DWORD,LPLINEAGENTGROUPLIST);
LONG WINAPI lineGetAgentStatusA(HLINE,DWORD,LPLINEAGENTSTATUS);
LONG WINAPI lineGetAgentStatusW(HLINE,DWORD,LPLINEAGENTSTATUS);
LONG WINAPI lineGetMessage(HLINEAPP,LPLINEMESSAGE,DWORD);
LONG WINAPI lineInitializeExA(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);
LONG WINAPI lineInitializeExW(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCWSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);
LONG WINAPI phoneGetMessage(HPHONEAPP,LPPHONEMESSAGE,DWORD);
LONG WINAPI phoneInitializeExA(LPHPHONEAPP,HINSTANCE,PHONECALLBACK,LPCSTR,LPDWORD,LPDWORD,LPPHONEINITIALIZEEXPARAMS);
LONG WINAPI phoneInitializeExW(LPHPHONEAPP,HINSTANCE,PHONECALLBACK,LPCWSTR,LPDWORD,LPDWORD,LPPHONEINITIALIZEEXPARAMS);
#endif /* VERSION >= 0x00020000 */
#if (TAPI_CURRENT_VERSION >= 0x00020002)
LONG WINAPI lineSetAgentMeasurementPeriod(HLINE,HAGENT,DWORD);
LONG WINAPI lineSetAgentSessionState(HLINE,HAGENTSESSION,DWORD,DWORD);
LONG WINAPI lineSetAgentStateEx(HLINE,HAGENT,DWORD,DWORD);
LONG WINAPI lineSetQueueMeasurementPeriod(HLINE,DWORD,DWORD);
LONG WINAPI lineCreateAgentW(HLINE,LPWSTR,LPWSTR,LPHAGENT);
LONG WINAPI lineCreateAgentA(HLINE,LPSTR,LPSTR,LPHAGENT);
LONG WINAPI lineCreateAgentSessionW(HLINE,HAGENT,LPWSTR,DWORD,LPGUID,LPHAGENTSESSION);
LONG WINAPI lineCreateAgentSessionA(HLINE,HAGENT,LPSTR,DWORD,LPGUID,LPHAGENTSESSION);
LONG WINAPI lineGetAgentInfo(HLINE,HAGENT,LPLINEAGENTINFO);
LONG WINAPI lineGetAgentSessionInfo(HLINE,HAGENTSESSION,LPLINEAGENTSESSIONINFO);
LONG WINAPI lineGetAgentSessionList(HLINE,HAGENT,LPLINEAGENTSESSIONLIST);
LONG WINAPI lineGetGroupListA(HLINE,LPLINEAGENTGROUPLIST);
LONG WINAPI lineGetGroupListW(HLINE,LPLINEAGENTGROUPLIST);
LONG WINAPI lineGetProxyStatus(HLINEAPP,DWORD,DWORD,LPLINEPROXYREQUESTLIST);
LONG WINAPI lineGetQueueInfo(HLINE,DWORD,LPLINEQUEUEINFO);
LONG WINAPI lineGetQueueListA(HLINE,LPGUID,LPLINEQUEUELIST);
LONG WINAPI lineGetQueueListW(HLINE,LPGUID,LPLINEQUEUELIST);
#endif /* VERSION >= 0x00020002 */

#ifdef UNICODE
#define lineAddProvider lineAddProviderW
#define lineBlindTransfer  lineBlindTransferW
#define lineConfigDialog  lineConfigDialogW
#define lineConfigDialogEdit  lineConfigDialogEditW
#define lineDial  lineDialW
#define lineForward lineForwardW
#define lineGatherDigits  lineGatherDigitsW
#define lineGenerateDigits  lineGenerateDigitsW
#define lineGetAddressCaps  lineGetAddressCapsW
#define lineGetAddressID  lineGetAddressIDW
#define lineGetAddressStatus  lineGetAddressStatusW
#define lineGetAppPriority  lineGetAppPriorityW
#define lineGetCallInfo lineGetCallInfoW
#define lineGetCountry  lineGetCountryW
#define lineGetDevCaps  lineGetDevCapsW
#define lineGetDevConfig  lineGetDevConfigW
#define lineGetIcon lineGetIconW
#define lineGetID  lineGetIDW
#define lineGetDevStatus  lineGetDevStatusW
#define lineGetProviderList lineGetProviderListW
#define lineGetRequest  lineGetRequestW
#define lineGetTranslateCaps  lineGetTranslateCapsW
#define lineHandoff lineHandoffW
#define lineMakeCall  lineMakeCallW
#define lineOpen  lineOpenW
#define linePark  lineParkW
#define linePickup  linePickupW
#define linePrepareAddToConference  linePrepareAddToConferenceW
#define lineRedirect  lineRedirectW
#define lineSetAppPriority  lineSetAppPriorityW
#define lineSetDevConfig  lineSetDevConfigW
#define lineSetTollList lineSetTollListW
#define lineSetupConference lineSetupConferenceW
#define lineSetupTransfer  lineSetupTransferW
#define lineTranslateAddress  lineTranslateAddressW
#define lineTranslateDialog lineTranslateDialogW
#define lineUnpark  lineUnparkW
#define phoneConfigDialog  phoneConfigDialogW
#define phoneGetButtonInfo  phoneGetButtonInfoW
#define phoneGetDevCaps phoneGetDevCapsW
#define phoneGetIcon  phoneGetIconW
#define phoneGetID  phoneGetIDW
#define phoneGetStatus  phoneGetStatusW
#define phoneSetButtonInfo  phoneSetButtonInfoW
#define tapiGetLocationInfo tapiGetLocationInfoW
#define tapiRequestMakeCall tapiRequestMakeCallW
#define tapiRequestMediaCall  tapiRequestMediaCallW
#define lineCreateAgent lineCreateAgentW
#define lineCreateAgentSession lineCreateAgentW
#define lineGetAgentActivityList  lineGetAgentActivityListW
#define lineGetAgentCaps  lineGetAgentCapsW
#define lineGetAgentGroupList  lineGetAgentGroupListW
#define lineGetAgentStatus  lineGetAgentStatusW
#define lineGetGroupList  lineGetGroupListW
#define lineGetQueueList  lineGetQueueListW
#define lineInitializeEx  lineInitializeExW
#define phoneInitializeEx  phoneInitializeExW
#elif (TAPI_CURRENT_VERSION >= 0x00020000)
#define lineAddProvider lineAddProviderA
#define lineBlindTransfer  lineBlindTransferA
#define lineConfigDialog  lineConfigDialogA
#define lineConfigDialogEdit  lineConfigDialogEditA
#define lineDial  lineDialA
#define lineForward lineForwardA
#define lineGatherDigits  lineGatherDigitsA
#define lineGenerateDigits  lineGenerateDigitsA
#define lineGetAddressCaps  lineGetAddressCapsA
#define lineGetAddressID  lineGetAddressIDA
#define lineGetAddressStatus  lineGetAddressStatusA
#define lineGetAppPriority  lineGetAppPriorityA
#define lineGetCallInfo lineGetCallInfoA
#define lineGetCountry  lineGetCountryA
#define lineGetDevCaps  lineGetDevCapsA
#define lineGetDevConfig  lineGetDevConfigA
#define lineGetIcon lineGetIconA
#define lineGetID  lineGetIDA
#define lineGetDevStatus  lineGetDevStatusA
#define lineGetProviderList lineGetProviderListA
#define lineGetRequest  lineGetRequestA
#define lineGetTranslateCaps  lineGetTranslateCapsA
#define lineHandoff lineHandoffA
#define lineMakeCall  lineMakeCallA
#define lineOpen  lineOpenA
#define linePark  lineParkA
#define linePickup  linePickupA
#define linePrepareAddToConference  linePrepareAddToConferenceA
#define lineRedirect  lineRedirectA
#define lineSetAppPriority  lineSetAppPriorityA
#define lineSetDevConfig  lineSetDevConfigA
#define lineSetTollList lineSetTollListA
#define lineSetupConference lineSetupConferenceA
#define lineSetupTransfer  lineSetupTransferA
#define lineTranslateAddress  lineTranslateAddressA
#define lineTranslateDialog lineTranslateDialogA
#define lineUnpark  lineUnparkA
#define phoneConfigDialog  phoneConfigDialogA
#define phoneGetButtonInfo  phoneGetButtonInfoA
#define phoneGetDevCaps phoneGetDevCapsA
#define phoneGetIcon  phoneGetIconA
#define phoneGetID  phoneGetIDA
#define phoneGetStatus  phoneGetStatusA
#define phoneSetButtonInfo  phoneSetButtonInfoA
#define tapiGetLocationInfo tapiGetLocationInfoA
#define tapiRequestMakeCall tapiRequestMakeCallA
#define tapiRequestMediaCall  tapiRequestMediaCallA
#define lineCreateAgent lineCreateAgentA
#define lineCreateAgentSession lineCreateAgentA
#define lineGetAgentActivityList  lineGetAgentActivityListA
#define lineGetAgentCaps  lineGetAgentCapsA
#define lineGetAgentGroupList  lineGetAgentGroupListA
#define lineGetAgentStatus  lineGetAgentStatusA
#define lineGetGroupList  lineGetGroupListA
#define lineGetQueueList  lineGetQueueListA
#define lineInitializeEx  lineInitializeExA
#define phoneInitializeEx  phoneInitializeExA
#endif /* UNICODE */

#define TAPIERROR_FORMATMESSAGE(__ErrCode__)  (((__ErrCode__)>0xFFFF0000) ? ((__ErrCode__)&0x0000FFFF) : (((__ErrCode__)&0x10000000) ? ((__ErrCode__)-0x90000000+0xF000) : ((__ErrCode__)-0x80000000+0xE000)))

#if __POCC__ >= 290
#pragma warn(pop)
#endif

#ifdef __cplusplus
}
#endif

#include <poppack.h>

#endif /* _TAPI_H */
