Implemented (nearly) all TAPI functions as stubs.

diff --git a/Makefile.in b/Makefile.in
index 2ea4562..351a0c3 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -39,6 +39,7 @@
 	dlls/psapi \
 	dlls/rasapi32 \
 	dlls/shell32 \
+	dlls/tapi32 \
 	dlls/ver \
 	dlls/version \
 	dlls/winaspi \
@@ -112,6 +113,7 @@
 	dlls/psapi/psapi.o \
 	dlls/rasapi32/rasapi32.o \
 	dlls/shell32/shell32.o \
+	dlls/tapi32/tapi32.o \
 	dlls/ver/ver.o \
 	dlls/version/version.o \
 	dlls/winaspi/winaspi.o \
diff --git a/configure b/configure
index d21293d..a83b473 100755
--- a/configure
+++ b/configure
@@ -4607,6 +4607,7 @@
 dlls/psapi/Makefile
 dlls/rasapi32/Makefile
 dlls/shell32/Makefile
+dlls/tapi32/Makefile
 dlls/ver/Makefile
 dlls/version/Makefile
 dlls/winaspi/Makefile
@@ -4769,6 +4770,7 @@
 dlls/psapi/Makefile
 dlls/rasapi32/Makefile
 dlls/shell32/Makefile
+dlls/tapi32/Makefile
 dlls/ver/Makefile
 dlls/version/Makefile
 dlls/winaspi/Makefile
diff --git a/configure.in b/configure.in
index 242d483..e2fa923 100644
--- a/configure.in
+++ b/configure.in
@@ -632,6 +632,7 @@
 dlls/psapi/Makefile
 dlls/rasapi32/Makefile
 dlls/shell32/Makefile
+dlls/tapi32/Makefile
 dlls/ver/Makefile
 dlls/version/Makefile
 dlls/winaspi/Makefile
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index dff6343..76cc186 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -9,6 +9,7 @@
 	ntdll \
 	psapi \
 	shell32 \
+	tapi32 \
 	ver \
 	version \
 	winaspi \
diff --git a/dlls/tapi32/.cvsignore b/dlls/tapi32/.cvsignore
new file mode 100644
index 0000000..f3c7a7c
--- /dev/null
+++ b/dlls/tapi32/.cvsignore
@@ -0,0 +1 @@
+Makefile
diff --git a/dlls/tapi32/Makefile.in b/dlls/tapi32/Makefile.in
new file mode 100644
index 0000000..5c2c793
--- /dev/null
+++ b/dlls/tapi32/Makefile.in
@@ -0,0 +1,18 @@
+DEFS      = @DLLFLAGS@ -D__WINE__
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = tapi32
+
+C_SRCS = \
+	assisted.c \
+	line.c \
+	phone.c
+
+all: $(MODULE).o
+
+@MAKE_RULES@
+
+### Dependencies:
+
diff --git a/dlls/tapi32/assisted.c b/dlls/tapi32/assisted.c
new file mode 100644
index 0000000..429e4a3
--- /dev/null
+++ b/dlls/tapi32/assisted.c
@@ -0,0 +1,29 @@
+/*
+ * TAPI32 Assisted Telephony
+ *
+ * Copyright 1999  Andreas Mohr
+ */
+
+#include "winbase.h"
+#include "wintypes.h"
+#include "tapi.h"
+#include "debug.h"
+
+DWORD WINAPI tapiGetLocationInfo(LPSTR lpszCountryCode, LPSTR lpszCityCode)
+{
+    char temp[30];
+    
+    FIXME(tapi, "(%s, %s): file sections ???\n", lpszCountryCode, lpszCityCode);
+    if (!(GetPrivateProfileStringA("Locations", "CurrentLocation", "", temp, 30, "telephon.ini")))
+        return TAPIERR_REQUESTFAILED;
+    if (!(GetPrivateProfileStringA("Locations", "FIXME_ENTRY", "", lpszCityCode, 8, "telephon.ini"))) 
+        return TAPIERR_REQUESTFAILED;
+    return 0;
+}
+
+DWORD WINAPI tapiRequestMakeCall(LPCSTR lpszDestAddress, LPCSTR lpszAppName,
+                                 LPCSTR lpszCalledParty, LPCSTR lpszComment)
+{
+    FIXME(tapi, "(%s, %s, %s, %s): stub.\n", lpszDestAddress, lpszAppName, lpszCalledParty, lpszComment);
+    return 0;
+}
diff --git a/dlls/tapi32/line.c b/dlls/tapi32/line.c
new file mode 100644
index 0000000..8219052
--- /dev/null
+++ b/dlls/tapi32/line.c
@@ -0,0 +1,526 @@
+/*
+ * TAPI32 line services
+ *
+ * Copyright 1999  Andreas Mohr
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "winbase.h"
+#include "wintypes.h"
+#include "tapi.h"
+#include "debug.h"
+
+DWORD WINAPI lineAccept(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, %s, %ld): stub.\n", hCall, lpsUserUserInfo, dwSize);
+    return 1;
+}
+
+DWORD WINAPI lineAddProvider(LPCSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID)
+{
+    FIXME(tapi, "(%s, %04x, %p): stub.\n", lpszProviderName, hwndOwner, lpdwPermanentProviderID);
+    return 1;
+}	
+
+DWORD WINAPI lineAddToConference(HCALL hConfCall, HCALL hConsultCall)
+{
+    FIXME(tapi, "(%04x, %04x): stub.\n", hConfCall, hConsultCall);
+    return 1;
+}
+
+DWORD WINAPI lineAnswer(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, %s, %ld): stub.\n", hCall, lpsUserUserInfo, dwSize);
+    return 1;
+}	
+
+DWORD WINAPI lineBlindTransfer(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
+{
+    FIXME(tapi, "(%04x, %s, %08lx): stub.\n", hCall, lpszDestAddress, dwCountryCode);
+    return 1;
+}	
+
+DWORD WINAPI lineClose(HLINE hLine)
+{
+    FIXME(tapi, "(%04x): stub.\n", hLine);
+    return 0;
+}	
+
+DWORD WINAPI lineCompleteCall(HCALL hCall, LPDWORD lpdwCompletionID, DWORD dwCompletionMode, DWORD dwMessageID)
+{
+    FIXME(tapi, "(%04x, %p, %08lx, %08lx): stub.\n", hCall, lpdwCompletionID, dwCompletionMode, dwMessageID);
+    return 1;
+}	
+
+DWORD WINAPI lineCompleteTransfer(HCALL hCall, HCALL hConsultCall, LPHCALL lphConfCall, DWORD dwTransferMode)
+{
+    FIXME(tapi, "(%04x, %04x, %p, %08lx): stub.\n", hCall, hConsultCall, lphConfCall, dwTransferMode);
+    return 1;
+}
+
+DWORD WINAPI lineConfigDialog(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass)
+{
+    FIXME(tapi, "(%08lx, %04x, %s): stub.\n", dwDeviceID, hwndOwner, lpszDeviceClass);
+    return 0;
+}	
+
+DWORD WINAPI lineConfigDialogEdit(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass, LPVOID const lpDeviceConfigIn, DWORD dwSize, LPVARSTRING lpDeviceConfigOut)
+{
+    FIXME(tapi, "stub.\n");
+    return 0;
+}	
+
+DWORD WINAPI lineConfigProvider(HWND hwndOwner, DWORD dwPermanentProviderID)
+{
+    FIXME(tapi, "(%04x, %08lx): stub.\n", hwndOwner, dwPermanentProviderID);
+    return 0;
+}
+
+DWORD WINAPI lineDeallocateCall(HCALL hCall)
+{
+    FIXME(tapi, "(%04x): stub.\n", hCall);
+    return 0;
+}
+
+DWORD WINAPI lineDevSpecific(HLINE hLine, DWORD dwAddressId, HCALL hCall, LPVOID lpParams, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, %08lx, %04x, %p, %ld): stub.\n", hLine, dwAddressId, hCall, lpParams, dwSize);
+    return 1;
+}	
+
+DWORD WINAPI lineDevSpecificFeature(HLINE hLine, DWORD dwFeature, LPVOID lpParams, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, %08lx, %p, %ld): stub.\n", hLine, dwFeature, lpParams, dwSize);
+    return 1;
+}
+
+DWORD WINAPI lineDial(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
+{
+    FIXME(tapi, "(%04x, %s, %08lx): stub.\n", hCall, lpszDestAddress, dwCountryCode);
+    return 1;
+}
+    
+DWORD WINAPI lineDrop(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, %s, %08lx): stub.\n", hCall, lpsUserUserInfo, dwSize);
+    return 1;
+}
+
+DWORD WINAPI lineForward(HLINE hLine, DWORD bAllAddress, DWORD dwAdressID, LPLINEFORWARDLIST lpForwardList, DWORD dwNumRingsNoAnswer, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
+{
+    FIXME(tapi, "stub.\n");
+    return 1;
+}	
+	
+DWORD WINAPI lineGatherDigits(HCALL hCall, DWORD dwDigitModes, LPSTR lpsDigits, DWORD dwNumDigits, LPCSTR lpszTerminationDigits, DWORD dwFirstDigitTimeout, DWORD dwInterDigitTimeout)
+{
+    FIXME(tapi, "stub.\n");
+    return 0;
+}
+
+DWORD WINAPI lineGenerateDigits(HCALL hCall, DWORD dwDigitModes, LPCSTR lpszDigits, DWORD dwDuration)
+{
+    FIXME(tapi, "(%04x, %08lx, %s, %ld): stub.\n", hCall, dwDigitModes, lpszDigits, dwDuration);
+    return 0;
+}
+
+DWORD WINAPI lineGenerateTone(HCALL hCall, DWORD dwToneMode, DWORD dwDuration, DWORD dwNumTones, LPLINEGENERATETONE lpTones)
+{
+    FIXME(tapi, "(%04x, %08lx, %ld, %ld, %p): stub.\n", hCall, dwToneMode, dwDuration, dwNumTones, lpTones);
+    return 0;
+}	
+
+DWORD WINAPI lineGetAddressCaps(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAddressID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEADDRESSCAPS lpAddressCaps)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx, %08lx, %08lx, %p): stub.\n", hLineApp, dwDeviceID, dwAddressID, dwAPIVersion, dwExtVersion, lpAddressCaps);
+    return 0;
+}
+
+DWORD WINAPI lineGetAddressID(HLINE hLine, LPDWORD lpdwAddressID, DWORD dwAddressMode, LPCSTR lpsAddress, DWORD dwSize)
+{
+    FIXME(tapi, "%04x, %p, %08lx, %s, %ld): stub.\n", hLine, lpdwAddressID, dwAddressMode, lpsAddress, dwSize);
+    return 0;
+}
+
+DWORD WINAPI lineGetAddressStatus(HLINE hLine, DWORD dwAddressID, LPLINEADDRESSSTATUS lpAddressStatus)
+{
+    FIXME(tapi, "(%04x, %08lx, %p): stub.\n", hLine, dwAddressID, lpAddressStatus);
+    return 0;
+}	
+
+DWORD WINAPI lineGetAppPriority(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPVARSTRING lpExtensionName, LPDWORD lpdwPriority)
+{
+    FIXME(tapi, "(%s, %08lx, %p, %08lx, %p, %p): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpExtensionName, lpdwPriority);
+    return 0;
+}	
+
+DWORD WINAPI lineGetCallInfo(HCALL hCall, LPLINECALLINFO lpCallInfo)
+{
+    FIXME(tapi, "(%04x, %p): stub.\n", hCall, lpCallInfo);
+    return 0;
+}
+
+DWORD WINAPI lineGetCallStatus(HCALL hCall, LPLINECALLSTATUS lpCallStatus)
+{
+    FIXME(tapi, "(%04x, %p): stub.\n", hCall, lpCallStatus);
+    return 0;
+}
+
+DWORD WINAPI lineGetConfRelatedCalls(HCALL hCall, LPLINECALLLIST lpCallList)
+{
+    FIXME(tapi, "(%04x, %p): stub.\n", hCall, lpCallList);
+    return 0;
+}	
+
+DWORD WINAPI lineGetCountry(DWORD dwCountryID, DWORD dwAPIVersion, LPLINECOUNTRYLIST lpLineCountryList)
+{
+    FIXME(tapi, "(%08lx, %08lx, %p): stub.\n", dwCountryID, dwAPIVersion, lpLineCountryList);
+    return 0;
+}
+
+DWORD WINAPI lineGetDevCaps(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx, %08lx, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, dwExtVersion, lpLineDevCaps);
+    return 0;
+}	
+
+DWORD WINAPI lineGetDevConfig(DWORD dwDeviceID, LPVARSTRING lpDeviceConfig, LPCSTR lpszDeviceClass)
+{
+    FIXME(tapi, "(%08lx, %p, %s): stub.\n", dwDeviceID, lpDeviceConfig, lpszDeviceClass);
+    return 0;
+}
+
+DWORD WINAPI lineGetID(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass)
+{
+    FIXME(tapi, "(%04x, %08lx, %04x, %08lx, %p, %s): stub.\n", hLine, dwAddressID, hCall, dwSelect, lpDeviceID, lpszDeviceClass);
+    return 0;
+}
+
+DWORD WINAPI lineGetIcon(DWORD dwDeviceID, LPCSTR lpszDeviceClass, HICON *lphIcon)
+{
+    FIXME(tapi, "(%08lx, %s, %p): stub.\n", dwDeviceID, lpszDeviceClass, lphIcon);
+    return 0;
+}	
+
+DWORD WINAPI lineGetLineDevStatus(HLINE hLine, LPLINEDEVSTATUS lpLineDevStatus)
+{
+    FIXME(tapi, "(%04x, %p): stub.\n", hLine, lpLineDevStatus);
+    return 0;
+}	
+
+DWORD WINAPI lineGetNewCalls(HLINE hLine, DWORD dwAddressID, DWORD dwSelect, LPLINECALLLIST lpCallList)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx, %p): stub.\n", hLine, dwAddressID, dwSelect, lpCallList);
+    return 0;
+}
+
+
+DWORD WINAPI lineGetNumRings(HLINE hLine, DWORD dwAddressID, LPDWORD lpdwNumRings)
+{
+    FIXME(tapi, "(%04x, %08lx, %p): stub.\n", hLine, dwAddressID, lpdwNumRings);
+    return 0;
+}
+
+DWORD WINAPI lineGetProviderList(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList)
+{
+    FIXME(tapi, "(%08lx, %p): stub.\n", dwAPIVersion, lpProviderList);
+    return 0;
+}	
+
+DWORD WINAPI lineGetRequest(HLINEAPP hLineApp, DWORD dwRequestMode, LPVOID lpRequestBuffer)
+{
+    FIXME(tapi, "%04x, %08lx, %p): stub.\n", hLineApp, dwRequestMode, lpRequestBuffer);
+    return 0;
+}	
+
+DWORD WINAPI lineGetStatusMessages(HLINE hLine, LPDWORD lpdwLineStatus, LPDWORD lpdwAddressStates)
+{
+    FIXME(tapi, "(%04x, %p, %p): stub.\n", hLine, lpdwLineStatus, lpdwAddressStates);
+    return 0;
+}	
+
+DWORD WINAPI lineGetTranslateCaps(HLINEAPP hLineApp, DWORD dwAPIVersion, LPLINETRANSLATECAPS lpTranslateCaps)
+{
+    FIXME(tapi, "(%04x, %08lx, %p): stub.\n", hLineApp, dwAPIVersion, lpTranslateCaps);
+    return 0;
+}
+
+DWORD WINAPI lineHandoff(HCALL hCall, LPCSTR lpszFileName, DWORD dwMediaMode)
+{
+    FIXME(tapi, "(%04x, %s, %08lx): stub.\n", hCall, lpszFileName, dwMediaMode);
+    return 0;
+}	
+
+DWORD WINAPI lineHold(HCALL hCall)
+{
+    FIXME(tapi, "(%04x): stub.\n", hCall);
+    return 1;
+}	
+
+DWORD WINAPI lineInitialize(
+  LPHLINEAPP lphLineApp,
+  HINSTANCE hInstance,
+  LINECALLBACK lpfnCallback,
+  LPCSTR lpszAppName,
+  LPDWORD lpdwNumDevs)
+{
+    FIXME(comm, "stub.\n");
+    return 0;
+}
+
+DWORD WINAPI lineMakeCall(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress, DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams)
+{
+    FIXME(tapi, "(%04x, %p, %s, %08lx, %p): stub.\n", hLine, lphCall, lpszDestAddress, dwCountryCode, lpCallParams);
+    return 1;
+}
+
+DWORD WINAPI lineMonitorDigits(HCALL hCall, DWORD dwDigitModes)
+{
+    FIXME(tapi, "(%04x, %08lx): stub.\n", hCall, dwDigitModes);
+    return 0;
+}
+
+DWORD WINAPI lineMonitorMedia(HCALL hCall, DWORD dwMediaModes)
+{
+    FIXME(tapi, "(%04x, %08lx): stub.\n", hCall, dwMediaModes);
+    return 0;
+}	
+
+DWORD WINAPI lineMonitorTones(HCALL hCall, LPLINEMONITORTONE lpToneList, DWORD dwNumEntries)
+{
+    FIXME(tapi, "(%04x, %p, %08lx): stub.\n", hCall, lpToneList, dwNumEntries);
+    return 0;
+}	
+
+DWORD WINAPI lineNegotiateAPIVersion(
+  HLINEAPP hLineApp,
+  DWORD dwDeviceID,
+  DWORD dwAPILowVersion,
+  DWORD dwAPIHighVersion,
+  LPDWORD lpdwAPIVersion,
+  LPLINEEXTENSIONID lpExtensionID
+)
+{
+    FIXME(comm, "stub.\n");
+    *lpdwAPIVersion = dwAPIHighVersion;
+    return 0;
+}
+
+DWORD WINAPI lineNegotiateExtVersion(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtLowVersion, DWORD dwExtHighVersion, LPDWORD lpdwExtVersion)
+{
+    FIXME(tapi, "stub.\n");
+    return 0;
+}
+
+DWORD WINAPI lineOpen(HLINEAPP hLineApp, DWORD dwDeviceID, LPHLINE lphLine, DWORD dwAPIVersion, DWORD dwExtVersion, DWORD dwCallbackInstance, DWORD dwPrivileges, DWORD dwMediaModes, LPLINECALLPARAMS lpCallParams)
+{
+    FIXME(tapi, "stub.\n");
+    return 0;
+}
+
+DWORD WINAPI linePark(HCALL hCall, DWORD dwParkMode, LPCSTR lpszDirAddress, LPVARSTRING lpNonDirAddress)
+{
+    FIXME(tapi, "(%04x, %08lx, %s, %p): stub.\n", hCall, dwParkMode, lpszDirAddress, lpNonDirAddress);
+    return 1;
+}	
+
+DWORD WINAPI linePickup(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress, LPCSTR lpszGroupID)
+{
+    FIXME(tapi, "(%04x, %08lx, %p, %s, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress, lpszGroupID);
+    return 1;
+}	
+
+DWORD WINAPI linePrepareAddToConference(HCALL hConfCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
+{
+    FIXME(tapi, "(%04x, %p, %p): stub.\n", hConfCall, lphConsultCall, lpCallParams);
+    return 1;
+}	
+
+/*************************************************************************
+ * lineRedirect [TAPI32.53]
+ * 
+ */
+DWORD WINAPI lineRedirect(
+  HCALL hCall,
+  LPCSTR lpszDestAddress,
+  DWORD  dwCountryCode) {
+
+  FIXME(comm, ": stub.\n");
+  return 1;
+}
+
+DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP hLineApp, DWORD dwRegistrationInstance, DWORD dwRequestMode, DWORD dwEnable)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx, %08lx): stub.\n", hLineApp, dwRegistrationInstance, dwRequestMode, dwEnable);
+    return 1;
+}
+
+DWORD WINAPI lineReleaseUserUserInfo(HCALL hCall)
+{
+    FIXME(tapi, "(%04x): stub.\n", hCall);
+    return 1;
+}	
+
+DWORD WINAPI lineRemoveFromConference(HCALL hCall)
+{
+    FIXME(tapi, "(%04x): stub.\n", hCall);
+    return 1;
+}
+
+DWORD WINAPI lineRemoveProvider(DWORD dwPermanentProviderID, HWND hwndOwner)
+{
+    FIXME(tapi, "(%08lx, %04x): stub.\n", dwPermanentProviderID, hwndOwner);
+    return 1;
+}	
+
+DWORD WINAPI lineSecureCall(HCALL hCall)
+{
+    FIXME(tapi, "(%04x): stub.\n", hCall);
+    return 1;
+}
+
+DWORD WINAPI lineSendUserUserInfo(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, %s, %08lx): stub.\n", hCall, lpsUserUserInfo, dwSize);
+    return 1;
+}
+
+DWORD WINAPI lineSetAppPriority(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPCSTR lpszExtensionName, DWORD dwPriority)
+{
+    FIXME(tapi, "(%s, %08lx, %p, %08lx, %s, %08lx): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpszExtensionName, dwPriority);
+    return 0;
+}
+
+DWORD WINAPI lineSetAppSpecific(HCALL hCall, DWORD dwAppSpecific)
+{
+    FIXME(tapi, "(%04x, %08lx): stub.\n", hCall, dwAppSpecific);
+    return 0;
+}
+
+DWORD WINAPI lineSetCallParams(HCALL hCall, DWORD dwBearerMode, DWORD dwMinRate, DWORD dwMaxRate, LPLINEDIALPARAMS lpDialParams)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx, %08lx, %p): stub.\n", hCall, dwBearerMode, dwMinRate, dwMaxRate, lpDialParams);
+    return 1;
+}
+
+DWORD WINAPI lineSetCallPrivilege(HCALL hCall, DWORD dwCallPrivilege)
+{
+    FIXME(tapi, "(%04x, %08lx): stub.\n", hCall, dwCallPrivilege);
+    return 0;
+}	
+		
+DWORD WINAPI lineSetCurrentLocation(HLINEAPP hLineApp, DWORD dwLocation)
+{
+    FIXME(tapi, "(%04x, %08lx): stub.\n", hLineApp, dwLocation);
+    return 0;
+}
+
+DWORD WINAPI lineSetDevConfig(DWORD dwDeviceID, LPVOID lpDeviceConfig, DWORD dwSize, LPCSTR lpszDeviceClass)
+{
+    FIXME(tapi, "(%0lx, %p, %08lx, %s): stub.\n", dwDeviceID, lpDeviceConfig, dwSize, lpszDeviceClass);
+    return 0;
+}
+
+DWORD WINAPI lineSetMediaControl(
+HLINE hLine,
+DWORD dwAddressID,
+HCALL hCall,
+DWORD dwSelect,
+LPLINEMEDIACONTROLDIGIT const lpDigitList,
+DWORD dwDigitNumEntries,
+LPLINEMEDIACONTROLMEDIA const lpMediaList,
+DWORD dwMediaNumEntries,
+LPLINEMEDIACONTROLTONE const lpToneList, 
+DWORD dwToneNumEntries,
+LPLINEMEDIACONTROLCALLSTATE const lpCallStateList,
+DWORD dwCallStateNumEntries)
+{
+    FIXME(tapi, ": stub.\n");
+    return 0;
+}
+
+DWORD WINAPI lineSetMediaMode(HCALL hCall, DWORD dwMediaModes)
+{
+    FIXME(tapi, "(%04x, %08lx): stub.\n", hCall, dwMediaModes);
+    return 0;
+}	
+
+DWORD WINAPI lineSetNumRings(HLINE hLine, DWORD dwAddressID, DWORD dwNumRings)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx): stub.\n", hLine, dwAddressID, dwNumRings);
+    return 0;
+}	
+		
+DWORD WINAPI lineSetStatusMessages(HLINE hLine, DWORD dwLineStates, DWORD dwAddressStates)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx): stub.\n", hLine, dwLineStates, dwAddressStates);
+    return 0;
+}	
+		
+DWORD WINAPI lineSetTerminal(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, DWORD dwTerminalModes, DWORD dwTerminalID, DWORD bEnable)
+{
+    FIXME(tapi, "(%04x, %08lx, %04x, %08lx, %08lx, %08lx, %08lx): stub.\n", hLine, dwAddressID, hCall, dwSelect, dwTerminalModes, dwTerminalID, bEnable);
+    return 1;
+}	
+
+DWORD WINAPI lineSetTollList(HLINEAPP hLineApp, DWORD dwDeviceID, LPCSTR lpszAddressIn, DWORD dwTollListOption)
+{
+    FIXME(tapi, "(%04x, %08lx, %s, %08lx): stub.\n", hLineApp, dwDeviceID, lpszAddressIn, dwTollListOption);
+    return 0;
+}	
+		
+DWORD WINAPI lineSetupConference(HCALL hCall, HLINE hLine, LPHCALL lphConfCall, LPHCALL lphConsultCall, DWORD dwNumParties, LPLINECALLPARAMS lpCallParams)
+{
+    FIXME(tapi, "(%04x, %04x, %p, %p, %08lx, %p): stub.\n", hCall, hLine, lphConfCall, lphConsultCall, dwNumParties, lpCallParams);
+    return 1;
+}
+
+DWORD WINAPI lineSetupTransfer(HCALL hCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
+{
+    FIXME(tapi, "(%04x, %p, %p): stub.\n", hCall, lphConsultCall, lpCallParams);
+    return 1;
+}	
+
+DWORD WINAPI lineShutdown(HLINEAPP hLineApp)
+{
+    FIXME(tapi, "(%04x): stub.\n", hLineApp);
+    return 0;
+}
+
+DWORD WINAPI lineSwapHold(HCALL hActiveCall, HCALL hHeldCall)
+{
+    FIXME(tapi, "(active: %04x, held: %04x): stub.\n", hActiveCall, hHeldCall);
+    return 1;
+}
+
+DWORD WINAPI lineTranslateAddress(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, LPCSTR lpszAddressIn, DWORD dwCard, DWORD dwTranslateOptions, LPLINETRANSLATEOUTPUT lpTranslateOutput)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx, %s, %08lx, %08lx, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, lpszAddressIn, dwCard, dwTranslateOptions, lpTranslateOutput);
+    return 0;
+}
+
+DWORD WINAPI lineTranslateDialog(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, HWND hwndOwner, LPCSTR lpszAddressIn)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx, %04x, %s): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, hwndOwner, lpszAddressIn);
+    return 0;
+}
+
+DWORD WINAPI lineUncompleteCall(HLINE hLine, DWORD dwCompletionID)
+{
+    FIXME(tapi, "(%04x, %08lx): stub.\n", hLine, dwCompletionID);
+    return 1;
+}
+
+DWORD WINAPI lineUnHold(HCALL hCall)
+{
+    FIXME(tapi, "(%04x): stub.\n", hCall);
+    return 1;
+}
+
+DWORD WINAPI lineUnpark(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress)
+{
+    FIXME(tapi, "(%04x, %08lx, %p, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress);
+    return 1;
+}	
diff --git a/dlls/tapi32/phone.c b/dlls/tapi32/phone.c
new file mode 100644
index 0000000..0a92cbf
--- /dev/null
+++ b/dlls/tapi32/phone.c
@@ -0,0 +1,206 @@
+/*
+ * TAPI32 phone services
+ *
+ * Copyright 1999  Andreas Mohr
+ */
+
+#include "winbase.h"
+#include "wintypes.h"
+#include "tapi.h"
+#include "debug.h"
+
+static LPPHONE PHONE_Alloc(void)
+{
+}
+
+static LPPHONE PHONE_Get(HPHONE hPhone)
+{	
+}
+
+DWORD WINAPI phoneClose(HPHONE hPhone)
+{
+    FIXME(tapi, "(%04x), stub.\n", hPhone);
+    return 0;
+}
+
+DWORD WINAPI phoneConfigDialog(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass)
+{
+    FIXME(tapi, "(%08lx, %04x, %s): stub.\n", dwDeviceID, hwndOwner, lpszDeviceClass);
+    return 0;
+}
+
+DWORD WINAPI phoneDevSpecific(HPHONE hPhone, LPVOID lpParams, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, %p, %08ld): stub.\n", hPhone, lpParams, dwSize);
+    return 1;
+}
+
+DWORD WINAPI phoneGetButtonInfo(HPHONE hPhone, DWORD dwButtonLampID,
+                                LPPHONEBUTTONINFO lpButtonInfo)
+{
+    FIXME(tapi, "(%04x, %08lx, %p): stub.\n", hPhone, dwButtonLampID, lpButtonInfo);
+    return 0;
+}
+
+DWORD WINAPI phoneGetData(HPHONE hPhone, DWORD dwDataID, LPVOID lpData, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, %08ld, %p, %08ld): stub.\n", hPhone, dwDataID, lpData, dwSize);
+    return 0;
+}
+
+DWORD WINAPI phoneGetDevCaps(HPHONEAPP hPhoneApp, DWORD dwDeviceID,
+               DWORD dwAPIVersion, DWORD dwExtVersion, LPPHONECAPS lpPhoneCaps)
+{
+    FIXME(tapi, "(%04x, %08ld, %08lx, %08lx, %p): stub.\n", hPhoneApp, dwDeviceID, dwAPIVersion, dwExtVersion, lpPhoneCaps);
+    return 0;
+}
+
+DWORD WINAPI phoneGetDisplay(HPHONE hPhone, LPVARSTRING lpDisplay)
+{
+    FIXME(tapi, "(%04x, %p): stub.\n", hPhone, lpDisplay);
+    return 0;
+}
+
+DWORD WINAPI phoneGetGain(HPHONE hPhone, DWORD dwHookSwitchDev, LPDWORD lpdwGain)
+{
+    FIXME(tapi, "(%04x, %08lx, %p): stub.\n", hPhone, dwHookSwitchDev, lpdwGain);
+    return 0;
+}	
+		
+DWORD WINAPI phoneGetHookSwitch(HPHONE hPhone, LPDWORD lpdwHookSwitchDevs)
+{
+   FIXME(tapi, "(%04x, %p): stub.\n", hPhone, lpdwHookSwitchDevs);
+   return 0;
+}
+
+DWORD WINAPI phoneGetID(HPHONE hPhone, LPVARSTRING lpDeviceID,
+                        LPCSTR lpszDeviceClass)
+{
+    FIXME(tapi, "(%04x, %p, %s): stub.\n", hPhone, lpDeviceID, lpszDeviceClass);    return 0;
+}
+
+DWORD WINAPI phoneGetIcon(DWORD dwDeviceID, LPCSTR lpszDeviceClass,
+		          HICON *lphIcon)
+{
+    FIXME(tapi, "(%08lx, %s, %p): stub.\n", dwDeviceID, lpszDeviceClass, lphIcon);
+    return 0;
+}
+
+DWORD WINAPI phoneGetLamp(HPHONE hPhone, DWORD dwButtonLampID,
+		          LPDWORD lpdwLampMode)
+{
+    FIXME(tapi, "(%04x, %08lx, %p): stub.\n", hPhone, dwButtonLampID, lpdwLampMode);
+    return 0;
+}
+
+DWORD WINAPI phoneGetRing(HPHONE hPhone, LPDWORD lpdwRingMode, LPDWORD lpdwVolume)
+{
+    FIXME(tapi, "(%04x, %p, %p): stub.\n", hPhone, lpdwRingMode, lpdwVolume);
+    return 0;
+}
+
+DWORD WINAPI phoneGetStatus(HPHONE hPhone, LPPHONESTATUS lpPhoneStatus)
+{
+    FIXME(tapi, "(%04x, %p): stub.\n", hPhone, lpPhoneStatus);
+    return 0;
+}
+
+DWORD WINAPI phoneGetStatusMessages(HPHONE hPhone, LPDWORD lpdwPhoneStates,
+		          LPDWORD lpdwButtonModes, LPDWORD lpdwButtonStates)
+{
+    FIXME(tapi, "(%04x, %p, %p, %p): stub.\n", hPhone, lpdwPhoneStates, lpdwButtonModes, lpdwButtonStates);
+    return 0;
+}
+
+DWORD WINAPI phoneGetVolume(HPHONE hPhone, DWORD dwHookSwitchDevs,
+		            LPDWORD lpdwVolume)
+{
+    FIXME(tapi, "(%04x, %08lx, %p): stub.\n", hPhone, dwHookSwitchDevs, lpdwVolume);
+    return 0;
+}
+
+DWORD WINAPI phoneInitialize(LPHPHONEAPP lphPhoneApp, HINSTANCE hInstance, PHONECALLBACK lpfnCallback, LPCSTR lpszAppName, LPDWORD lpdwNumDevs)
+{
+    FIXME(tapi, "(%p, %04x, %p, %s, %p): stub.\n", lphPhoneApp, hInstance, lpfnCallback, lpszAppName, lpdwNumDevs);
+    return 0;
+}
+
+DWORD WINAPI phoneNegotiateAPIVersion(HPHONEAPP hPhoneApp, DWORD dwDeviceID, DWORD dwAPILowVersion, DWORD dwAPIHighVersion, LPDWORD lpdwAPIVersion, LPPHONEEXTENSIONID lpExtensionID)
+{
+    FIXME(tapi, "(): stub.\n");
+    return 0;
+}
+
+DWORD WINAPI phoneNegotiateExtVersion(HPHONEAPP hPhoneApp, DWORD dwDeviceID,
+		                 DWORD dwAPIVersion, DWORD dwExtLowVersion,
+				 DWORD dwExtHighVersion, LPDWORD lpdwExtVersion)
+{
+    FIXME(tapi, "(): stub.\n");
+    return 0;
+}
+
+DWORD WINAPI phoneOpen(HPHONEAPP hPhoneApp, DWORD dwDeviceID, LPHPHONE lphPhone, DWORD dwAPIVersion, DWORD dwExtVersion, DWORD dwCallbackInstance, DWORD dwPrivileges)
+{
+    FIXME(tapi, "(): stub.\n");
+    return 0;
+}
+
+DWORD WINAPI phoneSetButtonInfo(HPHONE hPhone, DWORD dwButtonLampID, LPPHONEBUTTONINFO lpButtonInfo)
+{
+    FIXME(tapi, "(%04x, %08lx, %p): stub.\n", hPhone, dwButtonLampID, lpButtonInfo);
+    return 0;
+}
+
+DWORD WINAPI phoneSetData(HPHONE hPhone, DWORD dwDataID, LPVOID lpData, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, %08lx, %p, %ld): stub.\n", hPhone, dwDataID, lpData, dwSize);
+    return 1;
+}
+
+DWORD WINAPI phoneSetDisplay(HPHONE hPhone, DWORD dwRow, DWORD dwColumn, LPCSTR lpszDisplay, DWORD dwSize)
+{
+    FIXME(tapi, "(%04x, '%s' at %ld/%ld, len %ld): stub.\n", hPhone, lpszDisplay, dwRow, dwColumn, dwSize);
+    return 1;
+}
+
+DWORD WINAPI phoneSetGain(HPHONE hPhone, DWORD dwHookSwitchDev, DWORD dwGain)
+{
+    FIXME(tapi, "(%04x, %08lx, %ld): stub.\n", hPhone, dwHookSwitchDev, dwGain);
+    return 1;
+}
+
+DWORD WINAPI phoneSetHookSwitch(HPHONE hPhone, DWORD dwHookSwitchDevs, DWORD dwHookSwitchMode)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx): stub.\n", hPhone, dwHookSwitchDevs, dwHookSwitchMode);
+    return 1;
+}
+
+DWORD WINAPI phoneSetLamp(HPHONE hPhone, DWORD dwButtonLampID, DWORD lpdwLampMode)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx): stub.\n", hPhone, dwButtonLampID, lpdwLampMode);
+    return 1;
+}
+
+DWORD WINAPI phoneSetRing(HPHONE hPhone, DWORD dwRingMode, DWORD dwVolume)
+{
+    FIXME(tapi, "(%04x, %08lx, %08ld): stub.\n", hPhone, dwRingMode, dwVolume);
+    return 1;
+}
+
+DWORD WINAPI phoneSetStatusMessages(HPHONE hPhone, DWORD dwPhoneStates, DWORD dwButtonModes, DWORD dwButtonStates)
+{
+    FIXME(tapi, "(%04x, %08lx, %08lx, %08lx): stub.\n", hPhone, dwPhoneStates, dwButtonModes, dwButtonStates);
+    return 0; /* FIXME ? */
+}
+
+DWORD WINAPI phoneSetVolume(HPHONE hPhone, DWORD dwHookSwitchDev, DWORD dwVolume)
+{
+    FIXME(tapi, "(%04x, %08lx, %08ld): stub.\n", hPhone, dwHookSwitchDev, dwVolume);
+    return 1;
+}
+
+DWORD WINAPI phoneShutdown(HPHONEAPP hPhoneApp)
+{
+    FIXME(tapi, "(%04x): stub.\n", hPhoneApp);
+    return 0;
+}
diff --git a/include/debug.h b/include/debug.h
index f129e3e..8dc8908 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -131,33 +131,34 @@
 #define dbch_syscolor 123
 #define dbch_system 124
 #define dbch_tab 125
-#define dbch_task 126
-#define dbch_text 127
-#define dbch_thread 128
-#define dbch_thunk 129
-#define dbch_timer 130
-#define dbch_toolbar 131
-#define dbch_toolhelp 132
-#define dbch_tooltips 133
-#define dbch_trackbar 134
-#define dbch_treeview 135
-#define dbch_ttydrv 136
-#define dbch_tweak 137
-#define dbch_uitools 138
-#define dbch_unknown 139
-#define dbch_updown 140
-#define dbch_ver 141
-#define dbch_virtual 142
-#define dbch_vxd 143
-#define dbch_wave 144
-#define dbch_win 145
-#define dbch_win16drv 146
-#define dbch_win32 147
-#define dbch_wing 148
-#define dbch_winsock 149
-#define dbch_wnet 150
-#define dbch_x11 151
-#define dbch_x11drv 152
+#define dbch_tapi 126
+#define dbch_task 127
+#define dbch_text 128
+#define dbch_thread 129
+#define dbch_thunk 130
+#define dbch_timer 131
+#define dbch_toolbar 132
+#define dbch_toolhelp 133
+#define dbch_tooltips 134
+#define dbch_trackbar 135
+#define dbch_treeview 136
+#define dbch_ttydrv 137
+#define dbch_tweak 138
+#define dbch_uitools 139
+#define dbch_unknown 140
+#define dbch_updown 141
+#define dbch_ver 142
+#define dbch_virtual 143
+#define dbch_vxd 144
+#define dbch_wave 145
+#define dbch_win 146
+#define dbch_win16drv 147
+#define dbch_win32 148
+#define dbch_wing 149
+#define dbch_winsock 150
+#define dbch_wnet 151
+#define dbch_x11 152
+#define dbch_x11drv 153
 /* Definitions for classes identifiers */
 #define dbcl_fixme 0
 #define dbcl_err 1
diff --git a/include/debugdefs.h b/include/debugdefs.h
index 9f9ad39..2e5b986 100644
--- a/include/debugdefs.h
+++ b/include/debugdefs.h
@@ -4,7 +4,7 @@
 #include "debugtools.h"
 #endif
 
-#define DEBUG_CHANNEL_COUNT 153
+#define DEBUG_CHANNEL_COUNT 154
 #ifdef DEBUG_RUNTIME
 short debug_msg_enabled[][DEBUG_CLASS_COUNT] = {
 {1, 1, 0, 0},
@@ -160,6 +160,7 @@
 {1, 1, 0, 0},
 {1, 1, 0, 0},
 {1, 1, 0, 0},
+{1, 1, 0, 0},
 };
 const char* debug_ch_name[] = {
 "accel",
@@ -288,6 +289,7 @@
 "syscolor",
 "system",
 "tab",
+"tapi",
 "task",
 "text",
 "thread",
diff --git a/include/tapi.h b/include/tapi.h
new file mode 100644
index 0000000..a404941
--- /dev/null
+++ b/include/tapi.h
@@ -0,0 +1,626 @@
+/*
+ * TAPI definitions
+ * 
+ * Copyright (c) 1999 Andreas Mohr
+ */
+
+#ifndef __WINE_TAPI_H
+#define __WINE_TAPI_H
+
+#include "windef.h"
+
+typedef HANDLE HCALL, *LPHCALL;
+typedef HANDLE HLINE, *LPHLINE;
+typedef HANDLE HLINEAPP, *LPHLINEAPP;
+typedef HANDLE HPHONE, *LPHPHONE;
+typedef HANDLE HPHONEAPP, *LPHPHONEAPP;
+
+/* FIXME: bogus codes !! */
+#define TAPIERR_REQUESTFAILED   20
+
+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 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 dwNumOnHoldPendingCalls;
+    DWORD dwLineFeatures;
+    DWORD dwNumCallCompletion;
+    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 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 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 void (CALLBACK * LINECALLBACK)(DWORD, DWORD, DWORD, DWORD, DWORD, DWORD);
+
+typedef struct _PHONEAPP {
+} 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 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 lineAddProvider(LPCSTR,HWND,LPDWORD);
+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 lineGetDevCaps(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
+DWORD WINAPI lineGetDevConfig(DWORD,LPVARSTRING,LPCSTR);
+DWORD WINAPI lineGetID(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCSTR);
+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 lineGetProviderList(DWORD dwAPIVersion,LPLINEPROVIDERLIST);
+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);
+DWORD WINAPI lineMakeCall(HLINE,LPHCALL,LPCSTR,DWORD,LPLINECALLPARAMS);
+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);
+
+/* 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 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);
+
+/* "assisted" functions */
+DWORD WINAPI tapiGetLocationInfo(LPSTR,LPSTR);
+DWORD WINAPI tapiRequestMakeCall(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+
+#endif /* __WINE_TAPI_H */
diff --git a/misc/Makefile.in b/misc/Makefile.in
index 2c4c232..b99b404 100644
--- a/misc/Makefile.in
+++ b/misc/Makefile.in
@@ -29,7 +29,6 @@
 	stress.c \
 	string.c \
 	system.c \
-	tapi32.c \
 	toolhelp.c \
 	tweak.c \
 	version.c \
diff --git a/misc/tapi32.c b/misc/tapi32.c
deleted file mode 100644
index 331518d..0000000
--- a/misc/tapi32.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * TAPI32
- *
- * Copyright (c) 1998 Andreas Mohr
- */
-
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "wintypes.h"
-#include "debug.h"
-
-UINT WINAPI lineInitialize(
-  LPVOID lphLineApp, /* FIXME */
-  HINSTANCE hInstance,
-  LPVOID lpfnCallback, /* FIXME */
-  LPCSTR lpszAppName,
-  LPDWORD lpdwNumDevs)
-{
-    FIXME(comm, "stub.\n");
-    return 0;
-}
-
-UINT WINAPI lineShutdown( HANDLE hLineApp ) /* FIXME */
-{
-    FIXME(comm, "stub.\n");
-    return 0;
-}
-
-UINT WINAPI lineNegotiateAPIVersion(
-  HANDLE hLineApp, /* FIXME */
-  DWORD dwDeviceID,
-  DWORD dwAPILowVersion,
-  DWORD dwAPIHighVersion,
-  LPDWORD lpdwAPIVersion,
-  LPVOID lpExtensionID /* FIXME */
-)
-{
-    FIXME(comm, "stub.\n");
-    *lpdwAPIVersion = dwAPIHighVersion;
-    return 0;
-}
-
-/*************************************************************************
- * lineRedirect32 [TAPI32.53]
- * 
- */
-LONG WINAPI lineRedirect(
-  HANDLE* hCall,
-  LPCSTR lpszDestAddress,
-  DWORD  dwCountryCode) {
-
-  FIXME(comm, ": stub.\n");
-  return -1;
-/*  return LINEERR_OPERATIONFAILED; */
-}
-
-/*************************************************************************
- * tapiRequestMakeCall32 [TAPI32.113]
- * 
- */
-LONG WINAPI tapiRequestMakeCall(
-  LPCSTR lpszDestAddress,
-  LPCSTR lpszAppName,
-  LPCSTR lpszCalledParty,
-  LPCSTR lpszComment) {
-
-  FIXME(comm, ": stub.\n");
-  return -1;
-/*  return TAPIERR_REQUESTQUEUEFULL; */
-}
-
-
-
-
-
diff --git a/relay32/tapi32.spec b/relay32/tapi32.spec
index 7664a25..e418c59 100644
--- a/relay32/tapi32.spec
+++ b/relay32/tapi32.spec
@@ -1,117 +1,127 @@
 name	tapi32
 type	win32
 
-  1 stub    lineAccept
-  2 stub    lineAddProvider
-  3 stub    lineAddToConference
-  4 stub    lineAnswer
-  5 stub    lineBlindTransfer
-  6 stub    lineClose
-  7 stub    lineCompleteCall
-  8 stub    lineCompleteTransfer
-  9 stub    lineConfigDialog
- 10 stub    lineConfigDialogEdit
- 11 stub    lineConfigProvider
- 12 stub    lineDeallocateCall
- 13 stub    lineDevSpecific
- 14 stub    lineDevSpecificFeature
- 15 stub    lineDial
- 16 stub    lineDrop
- 17 stub    lineForward
- 18 stub    lineGatherDigits
- 19 stub    lineGenerateDigits
- 20 stub    lineGenerateTone
- 21 stub    lineGetAddressCaps
- 22 stub    lineGetAddressID
- 23 stub    lineGetAddressStatus
- 24 stub    lineGetAppPriority
- 25 stub    lineGetCallInfo
- 26 stub    lineGetCallStatus
- 27 stub    lineGetConfRelatedCalls
- 28 stub    lineGetCountry
- 29 stub    lineGetDevCaps
- 30 stub    lineGetDevConfig
- 31 stub    lineGetID
- 32 stub    lineGetIcon
- 33 stub    lineGetLineDevStatus
- 34 stub    lineGetNewCalls
- 35 stub    lineGetNumRings
- 36 stub    lineGetProviderList
- 37 stub    lineGetRequest
- 38 stub    lineGetStatusMessages
- 39 stub    lineGetTranslateCaps
- 40 stub    lineHandoff
- 41 stub    lineHold
+  1 stdcall lineAccept(long str long) lineAccept
+  2 stdcall lineAddProvider(str long ptr) lineAddProvider
+  3 stdcall lineAddToConference(long long) lineAddToConference
+  4 stdcall lineAnswer(long str long) lineAnswer
+  5 stdcall lineBlindTransfer(long str long) lineBlindTransfer
+  6 stdcall lineClose(long) lineClose
+  7 stdcall lineCompleteCall(long ptr long long) lineCompleteCall
+  8 stdcall lineCompleteTransfer(long long ptr long) lineCompleteTransfer
+  9 stdcall lineConfigDialog(long long str) lineConfigDialog
+ 10 stdcall lineConfigDialogEdit(long long str ptr long ptr)
+ lineConfigDialogEdit
+ 11 stdcall lineConfigProvider(long long) lineConfigProvider
+ 12 stdcall lineDeallocateCall(long) lineDeallocateCall
+ 13 stdcall lineDevSpecific(long long long ptr long) lineDevSpecific
+ 14 stdcall lineDevSpecificFeature(long long ptr long) lineDevSpecificFeature
+ 15 stdcall lineDial(long str long) lineDial
+ 16 stdcall lineDrop(long str long) lineDrop
+ 17 stdcall lineForward(long long long ptr long ptr ptr) lineForward
+ 18 stdcall lineGatherDigits(long long str long str long long)
+ lineGatherDigits
+ 19 stdcall lineGenerateDigits(long long str long) lineGenerateDigits
+ 20 stdcall lineGenerateTone(long long long long ptr) lineGenerateTone
+ 21 stdcall lineGetAddressCaps(long long long long long ptr)
+ lineGetAddressCaps
+ 22 stdcall lineGetAddressID(long ptr long str long) lineGetAddressID
+ 23 stdcall lineGetAddressStatus(long long ptr) lineGetAddressStatus
+ 24 stdcall lineGetAppPriority(str long ptr long ptr ptr) lineGetAppPriority
+ 25 stdcall lineGetCallInfo(long ptr) lineGetCallInfo
+ 26 stdcall lineGetCallStatus(long ptr) lineGetCallStatus
+ 27 stdcall lineGetConfRelatedCalls(long ptr) lineGetConfRelatedCalls
+ 28 stdcall lineGetCountry(long long ptr) lineGetCountry
+ 29 stdcall lineGetDevCaps(long long long long ptr) lineGetDevCaps
+ 30 stdcall lineGetDevConfig(long ptr str) lineGetDevConfig
+ 31 stdcall lineGetID(long long long long ptr str) lineGetID
+ 32 stdcall lineGetIcon(long str ptr) lineGetIcon
+ 33 stdcall lineGetLineDevStatus(long ptr) lineGetLineDevStatus
+ 34 stdcall lineGetNewCalls(long long long ptr) lineGetNewCalls
+ 35 stdcall lineGetNumRings(long long ptr) lineGetNumRings
+ 36 stdcall lineGetProviderList(long ptr) lineGetProviderList
+ 37 stdcall lineGetRequest(long long ptr) lineGetRequest
+ 38 stdcall lineGetStatusMessages(long ptr ptr) lineGetStatusMessages
+ 39 stdcall lineGetTranslateCaps(long long ptr) lineGetTranslateCaps
+ 40 stdcall lineHandoff(long str long) lineHandoff
+ 41 stdcall lineHold(long) lineHold
  42 stdcall lineInitialize(ptr long ptr str ptr) lineInitialize
- 43 stub    lineMakeCall
- 44 stub    lineMonitorDigits
- 45 stub    lineMonitorMedia
- 46 stub    lineMonitorTones
+ 43 stdcall lineMakeCall(long ptr str long ptr) lineMakeCall
+ 44 stdcall lineMonitorDigits(long long) lineMonitorDigits
+ 45 stdcall lineMonitorMedia(long long) lineMonitorMedia
+ 46 stdcall lineMonitorTones(long ptr long) lineMonitorTones
  47 stdcall lineNegotiateAPIVersion(long long long long ptr ptr) lineNegotiateAPIVersion
- 48 stub    lineNegotiateExtVersion
- 49 stub    lineOpen
- 50 stub    linePark
- 51 stub    linePickup
- 52 stub    linePrepareAddToConference
- 53 stdcall lineRedirect(long ptr long) lineRedirect
- 54 stub    lineRegisterRequestRecipient
- 55 stub    lineReleaseUserUserInfo
- 56 stub    lineRemoveFromConference
- 57 stub    lineRemoveProvider
- 58 stub    lineSecureCall
- 59 stub    lineSendUserUserInfo
- 60 stub    lineSetAppPriority
- 61 stub    lineSetAppSpecific
- 62 stub    lineSetCallParams
- 63 stub    lineSetCallPrivilege
- 64 stub    lineSetCurrentLocation
- 65 stub    lineSetDevConfig
- 66 stub    lineSetMediaControl
- 67 stub    lineSetMediaMode
- 68 stub    lineSetNumRings
- 69 stub    lineSetStatusMessages
- 70 stub    lineSetTerminal
- 71 stub    lineSetTollList
- 72 stub    lineSetupConference
- 73 stub    lineSetupTransfer
+ 48 stdcall lineNegotiateExtVersion(long long long long long ptr)
+ lineNegotiateExtVersion
+ 49 stdcall lineOpen(long long ptr long long long long long ptr) lineOpen
+ 50 stdcall linePark(long long str ptr) linePark
+ 51 stdcall linePickup(long long ptr str str) linePickup
+ 52 stdcall linePrepareAddToConference(long ptr ptr) linePrepareAddToConference
+ 53 stdcall lineRedirect(long str long) lineRedirect
+ 54 stdcall lineRegisterRequestRecipient(long long long long)
+ lineRegisterRequestRecipient
+ 55 stdcall lineReleaseUserUserInfo(long) lineReleaseUserUserInfo
+ 56 stdcall lineRemoveFromConference(long) lineRemoveFromConference
+ 57 stdcall lineRemoveProvider(long long) lineRemoveProvider
+ 58 stdcall lineSecureCall(long) lineSecureCall
+ 59 stdcall lineSendUserUserInfo(long str long) lineSendUserUserInfo
+ 60 stdcall lineSetAppPriority(str long ptr long str long) lineSetAppPriority
+ 61 stdcall lineSetAppSpecific(long long) lineSetAppSpecific
+ 62 stdcall lineSetCallParams(long long long long ptr) lineSetCallParams
+ 63 stdcall lineSetCallPrivilege(long long) lineSetCallPrivilege
+ 64 stdcall lineSetCurrentLocation(long long) lineSetCurrentLocation
+ 65 stdcall lineSetDevConfig(long ptr long str) lineSetDevConfig
+ 66 stdcall lineSetMediaControl(long long long long ptr) lineSetMediaControl
+ 67 stdcall lineSetMediaMode(long long) lineSetMediaMode
+ 68 stdcall lineSetNumRings(long long long) lineSetNumRings
+ 69 stdcall lineSetStatusMessages(long long long) lineSetStatusMessages
+ 70 stdcall lineSetTerminal(long long long long long long long)
+ lineSetTerminal
+ 71 stdcall lineSetTollList(long long str long) lineSetTollList
+ 72 stdcall lineSetupConference(long long ptr ptr long ptr)
+ lineSetupConference
+ 73 stdcall lineSetupTransfer(long ptr ptr) lineSetupTransfer
  74 stdcall lineShutdown(long) lineShutdown
- 75 stub    lineSwapHold
- 76 stub    lineTranslateAddress
- 77 stub    lineTranslateDialog
- 78 stub    lineUncompleteCall
- 79 stub    lineUnhold
- 80 stub    lineUnpark
- 81 stub    phoneClose
- 82 stub    phoneConfigDialog
- 83 stub    phoneDevSpecific
- 84 stub    phoneGetButtonInfo
- 85 stub    phoneGetData
- 86 stub    phoneGetDevCaps
- 87 stub    phoneGetDisplay
- 88 stub    phoneGetGain
- 89 stub    phoneGetHookSwitch
- 90 stub    phoneGetID
- 91 stub    phoneGetIcon
- 92 stub    phoneGetLamp
- 93 stub    phoneGetRing
- 94 stub    phoneGetStatus
- 95 stub    phoneGetStatusMessages
- 96 stub    phoneGetVolume
- 97 stub    phoneInitialize
- 98 stub    phoneNegotiateAPIVersion
- 99 stub    phoneNegotiateExtVersion
-100 stub    phoneOpen
-101 stub    phoneSetButtonInfo
-102 stub    phoneSetData
-103 stub    phoneSetDisplay
-104 stub    phoneSetGain
-105 stub    phoneSetHookSwitch
-106 stub    phoneSetLamp
-107 stub    phoneSetRing
-108 stub    phoneSetStatusMessages
-109 stub    phoneSetVolume
-110 stub    phoneShutdown
-111 stub    tapiGetLocationInfo
+ 75 stdcall lineSwapHold(long long) lineSwapHold
+ 76 stdcall lineTranslateAddress(long long long str long long ptr)
+ lineTranslateAddress
+ 77 stdcall lineTranslateDialog(long long long long str) lineTranslateDialog
+ 78 stdcall lineUncompleteCall(long long) lineUncompleteCall
+ 79 stdcall lineUnHold(long) lineUnHold
+ 80 stdcall lineUnpark(long long ptr str) lineUnpark
+ 81 stdcall phoneClose(long) phoneClose
+ 82 stdcall phoneConfigDialog(long long str) phoneConfigDialog
+ 83 stdcall phoneDevSpecific(long ptr long) phoneDevSpecific
+ 84 stdcall phoneGetButtonInfo(long long ptr) phoneGetButtonInfo
+ 85 stdcall phoneGetData(long long ptr long) phoneGetData
+ 86 stdcall phoneGetDevCaps(long long long long ptr) phoneGetDevCaps
+ 87 stdcall phoneGetDisplay(long ptr) phoneGetDisplay
+ 88 stdcall phoneGetGain(long long ptr) phoneGetGain
+ 89 stdcall phoneGetHookSwitch(long ptr) phoneGetHookSwitch
+ 90 stdcall phoneGetID(long ptr str) phoneGetID
+ 91 stdcall phoneGetIcon(long str ptr) phoneGetIcon
+ 92 stdcall phoneGetLamp(long long ptr) phoneGetLamp
+ 93 stdcall phoneGetRing(long ptr ptr) phoneGetRing
+ 94 stdcall phoneGetStatus(long ptr) phoneGetStatus
+ 95 stdcall phoneGetStatusMessages(long ptr ptr ptr) phoneGetStatusMessages
+ 96 stdcall phoneGetVolume(long long ptr) phoneGetVolume
+ 97 stdcall phoneInitialize(ptr long ptr str ptr) phoneInitialize
+ 98 stdcall phoneNegotiateAPIVersion(long long long long long ptr ptr)
+ phoneNegotiateAPIVersion
+ 99 stdcall phoneNegotiateExtVersion(long long long long long ptr)
+ phoneNegotiateExtVersion
+100 stdcall phoneOpen(long long ptr long long long long) phoneOpen
+101 stdcall phoneSetButtonInfo(long long ptr) phoneSetButtonInfo
+102 stdcall phoneSetData(long long ptr long) phoneSetData
+103 stdcall phoneSetDisplay(long long long str long) phoneSetDisplay
+104 stdcall phoneSetGain(long long long) phoneSetGain
+105 stdcall phoneSetHookSwitch(long long long) phoneSetHookSwitch
+106 stdcall phoneSetLamp(long long long) phoneSetLamp
+107 stdcall phoneSetRing(long long long) phoneSetRing
+108 stdcall phoneSetStatusMessages(long long long long) phoneSetStatusMessages
+109 stdcall phoneSetVolume(long long long) phoneSetVolume
+110 stdcall phoneShutdown(long) phoneShutdown
+111 stdcall tapiGetLocationInfo(str str) tapiGetLocationInfo
 112 stub    tapiRequestDrop
 113 stdcall tapiRequestMakeCall(str str str str) tapiRequestMakeCall
 114 stub    tapiRequestMediaCall