/*
 * TAPI definitions
 *
 * Copyright (c) 1999 Andreas Mohr
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifndef __WINE_TAPI_H
#define __WINE_TAPI_H

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

#ifdef __cplusplus
extern "C" {
#endif /* defined(__cplusplus) */

typedef HANDLE HCALL, *LPHCALL;
typedef HANDLE HLINE, *LPHLINE;
typedef HANDLE HLINEAPP, *LPHLINEAPP;
typedef HANDLE HPHONE, *LPHPHONE;
typedef HANDLE HPHONEAPP, *LPHPHONEAPP;

#define TAPIERR_REQUESTFAILED          __MSABI_LONG(-16)
#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

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

#define LINEADDRESSMODE_ADDRESSID      0x00000001
#define LINEADDRESSMODE_DIALABLEADDR   0x00000002

#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

#define LINEMEDIAMODE_UNKNOWN          0x00000002
#define LINEMEDIAMODE_INTERACTIVEVOICE 0x00000004
#define LINEMEDIAMODE_AUTOMATEDVOICE   0x00000008
#define LINEMEDIAMODE_DATAMODEM        0x00000010

#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

#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 LINELOCATIONOPTION_PULSEDIAL   0x00000001


#define LINEFEATURE_DEVSPECIFIC        0x00000001
#define LINEFEATURE_DEVSPECIFICFEAT    0x00000002
#define LINEFEATURE_FORWARD            0x00000004
#define LINEFEATURE_MAKECALL           0x00000008
#define LINEFEATURE_SETMEDIACONTROL    0x00000010
#define LINEFEATURE_SETTERMINAL        0x00000020
#define LINEFEATURE_SETDEVSTATUS       0x00000040
#define LINEFEATURE_FORWARDFWD         0x00000080
#define LINEFEATURE_FORWARDDND         0x00000100

/* tapi callback messages */

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

#define LINE_AGENTSPECIFIC            __MSABI_LONG(21)
#define LINE_AGENTSTATUS              __MSABI_LONG(22)
#define LINE_APPNEWCALL               __MSABI_LONG(23)
#define LINE_PROXYREQUEST             __MSABI_LONG(24)
#define LINE_REMOVE                   __MSABI_LONG(25)
#define PHONE_REMOVE                  __MSABI_LONG(26)
/* these are used as Param1 of line_callstate messages */
#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
#define LINECONNECTEDMODE_ACTIVE            0x00000001
#define LINECONNECTEDMODE_INACTIVE          0x00000002
#define LINECONNECTEDMODE_ACTIVEHELD        0x00000004
#define LINECONNECTEDMODE_INACTIVEHELD      0x00000008
#define LINECONNECTEDMODE_CONFIRMED         0x00000010

/* these are Param2 values for state_disconnected line_callstate messages */
#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
#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

#define LINECALLSELECT_LINE                 0x00000001
#define LINECALLSELECT_ADDRESS              0x00000002
#define LINECALLSELECT_CALL                 0x00000004
#define LINECALLSELECT_DEVICEID             0x00000008

#define LINECALLPRIVILEGE_NONE              0x00000001
#define LINECALLPRIVILEGE_MONITOR           0x00000002
#define LINECALLPRIVILEGE_OWNER             0x00000004
#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

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

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;
} 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;
} LINECALLPARAMS, *LPLINECALLPARAMS;

typedef struct linecallstatus_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwCallState;
    DWORD dwCallStateMode;
    DWORD dwCallPrivilege;
    DWORD dwCallFeatures;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
} LINECALLSTATUS, *LPLINECALLSTATUS;

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

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

typedef struct lineinitializeexparams_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwOptions;
    union {
    HANDLE hEvent;
    HANDLE hCompletionPort;
    } Handles;
    DWORD dwCompletionKey;
} LINEINITIALIZEEXPARAMS, *LPLINEINITIALIZEEXPARAMS;

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;

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

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

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 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 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 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 linemessage_tag {
  DWORD     hDevice;
  DWORD     dwMessageID;
  DWORD_PTR dwCallbackInstance;
  DWORD_PTR dwParam1;
  DWORD_PTR dwParam2;
  DWORD_PTR dwParam3;
} LINEMESSAGE, *LPLINEMESSAGE;

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

typedef struct _PHONEAPP {
  int dummy;
} PHONEAPP, *LPPHONEAPP;

typedef struct _PHONE {
    DWORD dwRingMode;
    DWORD dwVolume;
} PHONE, *LPPHONE;

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;
} PHONECAPS, *LPPHONECAPS;

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

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;

typedef struct phonestatus_tag {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwStatusFlags;
    DWORD dwNumOwners;
    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;
} PHONESTATUS, *LPPHONESTATUS;

typedef void (CALLBACK *PHONECALLBACK)(HANDLE, DWORD, DWORD, DWORD, DWORD, DWORD);

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

/* line functions */
DWORD WINAPI lineAccept(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineAddProviderA(LPCSTR,HWND,LPDWORD);
DWORD WINAPI lineAddProviderW(LPCWSTR,HWND,LPDWORD);
#define      lineAddProvider WINELIB_NAME_AW(lineAddProvider)
DWORD WINAPI lineAddToConference(HCALL,HCALL);
DWORD WINAPI lineAnswer(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineBlindTransfer(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineClose(HLINE);
DWORD WINAPI lineCompleteCall(HCALL,LPDWORD,DWORD,DWORD);
DWORD WINAPI lineCompleteTransfer(HCALL,HCALL,LPHCALL,DWORD);
DWORD WINAPI lineConfigDialog(DWORD,HWND,LPCSTR);
DWORD WINAPI lineConfigDialogEdit(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);
DWORD WINAPI lineConfigProvider(HWND,DWORD);
DWORD WINAPI lineDeallocateCall(HCALL);
DWORD WINAPI lineDevSpecific(HLINE,DWORD,HCALL,LPVOID,DWORD);
DWORD WINAPI lineDevSpecificFeature(HLINE,DWORD,LPVOID,DWORD);
DWORD WINAPI lineDial(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineDrop(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineForward(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS);
DWORD WINAPI lineGatherDigits(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);
DWORD WINAPI lineGenerateDigits(HCALL,DWORD,LPCSTR,DWORD);
DWORD WINAPI lineGenerateTone(HCALL,DWORD,DWORD,DWORD,LPLINEGENERATETONE);
DWORD WINAPI lineGetAddressCaps(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);
DWORD WINAPI lineGetAddressID(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);
DWORD WINAPI lineGetAddressStatus(HLINE,DWORD,LPLINEADDRESSSTATUS);
DWORD WINAPI lineGetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD);
DWORD WINAPI lineGetCallInfo(HCALL,LPLINECALLINFO);
DWORD WINAPI lineGetCallStatus(HCALL,LPLINECALLSTATUS);
DWORD WINAPI lineGetConfRelatedCalls(HCALL,LPLINECALLLIST);
DWORD WINAPI lineGetCountry(DWORD,DWORD,LPLINECOUNTRYLIST);
DWORD WINAPI lineGetDevCapsA(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
DWORD WINAPI lineGetDevCapsW(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
#define      lineGetDevCaps WINELIB_NAME_AW(lineGetDevCaps)
DWORD WINAPI lineGetDevConfig(DWORD,LPVARSTRING,LPCSTR);
DWORD WINAPI lineGetIDA(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCSTR);
DWORD WINAPI lineGetIDW(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCWSTR);
#define      lineGetID WINELIB_NAME_AW(lineGetID)
DWORD WINAPI lineGetIcon(DWORD,LPCSTR,HICON *);
DWORD WINAPI lineGetLineDevStatus(HLINE,LPLINEDEVSTATUS);
DWORD WINAPI lineGetNewCalls(HLINE,DWORD,DWORD,LPLINECALLLIST);
DWORD WINAPI lineGetNumRings(HLINE,DWORD,LPDWORD);
DWORD WINAPI lineGetProviderListA(DWORD,LPLINEPROVIDERLIST);
DWORD WINAPI lineGetProviderListW(DWORD,LPLINEPROVIDERLIST);
#define      lineGetProviderList WINELIB_NAME_AW(lineGetProviderList)
DWORD WINAPI lineGetRequest(HLINEAPP,DWORD,LPVOID);
DWORD WINAPI lineGetStatusMessages(HLINE,LPDWORD,LPDWORD);
DWORD WINAPI lineGetTranslateCaps(HLINEAPP,DWORD,LPLINETRANSLATECAPS);
DWORD WINAPI lineHandoff(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineHold(HCALL);
DWORD WINAPI lineInitialize(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD);
LONG  WINAPI lineInitializeExA(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);
LONG  WINAPI lineInitializeExW(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCWSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);
#define      lineInitializeEx WINELIB_NAME_AW(lineInitializeEx)
DWORD WINAPI lineMakeCallA(HLINE,LPHCALL,LPCSTR,DWORD,LPLINECALLPARAMS);
DWORD WINAPI lineMakeCallW(HLINE,LPHCALL,LPCWSTR,DWORD,LPLINECALLPARAMS);
#define      lineMakeCall WINELIB_NAME_AW(lineMakeCall)
DWORD WINAPI lineMonitorDigits(HCALL,DWORD);
DWORD WINAPI lineMonitorMedia(HCALL,DWORD);
DWORD WINAPI lineMonitorTones(HCALL,LPLINEMONITORTONE,DWORD);
DWORD WINAPI lineNegotiateAPIVersion(HLINEAPP,DWORD,DWORD,DWORD,LPDWORD,LPLINEEXTENSIONID);
DWORD WINAPI lineNegotiateExtVersion(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);
DWORD WINAPI lineOpen(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS);
DWORD WINAPI linePark(HCALL,DWORD,LPCSTR,LPVARSTRING);
DWORD WINAPI linePickup(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);
DWORD WINAPI linePrepareAddToConference(HCALL,LPHCALL,LPLINECALLPARAMS);
DWORD WINAPI lineRedirect(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP,DWORD,DWORD,DWORD);
DWORD WINAPI lineReleaseUserUserInfo(HCALL);
DWORD WINAPI lineRemoveFromConference(HCALL);
DWORD WINAPI lineRemoveProvider(DWORD,HWND);
DWORD WINAPI lineSecureCall(HCALL);
DWORD WINAPI lineSendUserUserInfo(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineSetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD);
DWORD WINAPI lineSetAppSpecific(HCALL,DWORD);
DWORD WINAPI lineSetCallParams(HCALL,DWORD,DWORD,DWORD,LPLINEDIALPARAMS);
DWORD WINAPI lineSetCallPrivilege(HCALL,DWORD);
DWORD WINAPI lineSetCurrentLocation(HLINEAPP,DWORD);
DWORD WINAPI lineSetDevConfig(DWORD,LPVOID,DWORD,LPCSTR);
DWORD WINAPI lineSetMediaControl(HLINE,DWORD,HCALL,DWORD,LPLINEMEDIACONTROLDIGIT,DWORD,LPLINEMEDIACONTROLMEDIA,DWORD,LPLINEMEDIACONTROLTONE,DWORD,LPLINEMEDIACONTROLCALLSTATE,DWORD);
DWORD WINAPI lineSetMediaMode(HCALL,DWORD);
DWORD WINAPI lineSetNumRings(HLINE,DWORD,DWORD);
DWORD WINAPI lineSetStatusMessages(HLINE,DWORD,DWORD);
DWORD WINAPI lineSetTerminal(HLINE,DWORD,HCALL,DWORD,DWORD,DWORD,DWORD);
DWORD WINAPI lineSetTollList(HLINEAPP,DWORD,LPCSTR,DWORD);
DWORD WINAPI lineSetupConference(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS);
DWORD WINAPI lineSetupTransfer(HCALL,LPHCALL,LPLINECALLPARAMS);
DWORD WINAPI lineShutdown(HLINEAPP);
DWORD WINAPI lineSwapHold(HCALL,HCALL);
DWORD WINAPI lineTranslateAddress(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);
DWORD WINAPI lineTranslateDialog(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);
DWORD WINAPI lineUncompleteCall(HLINE,DWORD);
DWORD WINAPI lineUnHold(HCALL);
DWORD WINAPI lineUnpark(HLINE,DWORD,LPHCALL,LPCSTR);

DWORD WINAPI lineBlindTransferA(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineConfigDialogA(DWORD,HWND,LPCSTR);
DWORD WINAPI lineConfigDialogEditA(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);
DWORD WINAPI lineDialA(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineForwardA(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS);
DWORD WINAPI lineGatherDigitsA(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);
DWORD WINAPI lineGenerateDigitsA(HCALL,DWORD,LPCSTR,DWORD);
DWORD WINAPI lineGetAddressCapsA(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);
DWORD WINAPI lineGetAddressIDA(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);
DWORD WINAPI lineGetAddressStatusA(HLINE,DWORD,LPLINEADDRESSSTATUS);
DWORD WINAPI lineGetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD);
DWORD WINAPI lineGetCallInfoA(HCALL,LPLINECALLINFO);
DWORD WINAPI lineGetCountryA(DWORD,DWORD,LPLINECOUNTRYLIST);
DWORD WINAPI lineGetDevConfigA(DWORD,LPVARSTRING,LPCSTR);
DWORD WINAPI lineGetIconA(DWORD,LPCSTR,HICON *);
DWORD WINAPI lineGetLineDevStatusA(HLINE,LPLINEDEVSTATUS);
DWORD WINAPI lineGetRequestA(HLINEAPP,DWORD,LPVOID);
DWORD WINAPI lineGetTranslateCapsA(HLINEAPP,DWORD,LPLINETRANSLATECAPS);
DWORD WINAPI lineHandoffA(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineOpenA(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS);
DWORD WINAPI lineParkA(HCALL,DWORD,LPCSTR,LPVARSTRING);
DWORD WINAPI linePickupA(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);
DWORD WINAPI linePrepareAddToConferenceA(HCALL,LPHCALL,LPLINECALLPARAMS);
DWORD WINAPI lineRedirectA(HCALL,LPCSTR,DWORD);
DWORD WINAPI lineSetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD);
DWORD WINAPI lineSetDevConfigA(DWORD,LPVOID,DWORD,LPCSTR);
DWORD WINAPI lineSetTollListA(HLINEAPP,DWORD,LPCSTR,DWORD);
DWORD WINAPI lineSetupConferenceA(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS);
DWORD WINAPI lineSetupTransferA(HCALL,LPHCALL,LPLINECALLPARAMS);
DWORD WINAPI lineTranslateAddressA(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);
DWORD WINAPI lineTranslateDialogA(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);
DWORD WINAPI lineUnhold(HCALL);
DWORD WINAPI lineUnparkA(HLINE,DWORD,LPHCALL,LPCSTR);

/* phone functions */
DWORD WINAPI phoneClose(HPHONE);
DWORD WINAPI phoneConfigDialog(DWORD,HWND,LPCSTR);
DWORD WINAPI phoneDevSpecific(HPHONE,LPVOID,DWORD);
DWORD WINAPI phoneGetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO);
DWORD WINAPI phoneGetData(HPHONE,DWORD,LPVOID,DWORD);
DWORD WINAPI phoneGetDevCaps(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);
DWORD WINAPI phoneGetDisplay(HPHONE,LPVARSTRING);
DWORD WINAPI phoneGetGain(HPHONE,DWORD,LPDWORD);
DWORD WINAPI phoneGetHookSwitch(HPHONE,LPDWORD);
DWORD WINAPI phoneGetID(HPHONE,LPVARSTRING,LPCSTR);
DWORD WINAPI phoneGetIcon(DWORD,LPCSTR,HICON *);
DWORD WINAPI phoneGetLamp(HPHONE,DWORD,LPDWORD);
DWORD WINAPI phoneGetRing(HPHONE,LPDWORD,LPDWORD);
DWORD WINAPI phoneGetStatus(HPHONE,LPPHONESTATUS);
DWORD WINAPI phoneGetStatusMessages(HPHONE,LPDWORD,LPDWORD,LPDWORD);
DWORD WINAPI phoneGetVolume(HPHONE,DWORD,LPDWORD);
DWORD WINAPI phoneInitialize(LPHPHONEAPP,HINSTANCE,PHONECALLBACK,LPCSTR,LPDWORD);
DWORD WINAPI phoneNegotiateAPIVersion(HPHONEAPP,DWORD,DWORD,DWORD,LPDWORD,LPPHONEEXTENSIONID);
DWORD WINAPI phoneNegotiateExtVersion(HPHONEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);
DWORD WINAPI phoneOpen(HPHONEAPP,DWORD,LPHPHONE,DWORD,DWORD,DWORD,DWORD);
DWORD WINAPI phoneSetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO);
DWORD WINAPI phoneSetData(HPHONE,DWORD,LPVOID,DWORD);
DWORD WINAPI phoneSetDisplay(HPHONE,DWORD,DWORD,LPCSTR,DWORD);
DWORD WINAPI phoneSetGain(HPHONE,DWORD,DWORD);
DWORD WINAPI phoneSetHookSwitch(HPHONE,DWORD,DWORD);
DWORD WINAPI phoneSetLamp(HPHONE,DWORD,DWORD);
DWORD WINAPI phoneSetRing(HPHONE,DWORD,DWORD);
DWORD WINAPI phoneSetStatusMessages(HPHONE,DWORD,DWORD,DWORD);
DWORD WINAPI phoneSetVolume(HPHONE,DWORD,DWORD);
DWORD WINAPI phoneShutdown(HPHONEAPP);

DWORD WINAPI phoneConfigDialogA(DWORD,HWND,LPCSTR);
DWORD WINAPI phoneGetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO);
DWORD WINAPI phoneGetDevCapsA(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);
DWORD WINAPI phoneGetIDA(HPHONE,LPVARSTRING,LPCSTR);
DWORD WINAPI phoneGetIconA(DWORD,LPCSTR,HICON *);
DWORD WINAPI phoneGetStatusA(HPHONE,LPPHONESTATUS);
DWORD WINAPI phoneSetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO);

/* "assisted" functions */
DWORD WINAPI tapiGetLocationInfo(LPSTR,LPSTR);
DWORD WINAPI tapiRequestMakeCall(LPCSTR,LPCSTR,LPCSTR,LPCSTR);

DWORD WINAPI tapiGetLocationInfoA(LPSTR,LPSTR);
DWORD WINAPI tapiRequestMakeCallA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);

#ifdef __cplusplus
} /* extern "C" */
#endif /* defined(__cplusplus) */

#endif /* __WINE_TAPI_H */