4 * Copyright 1999 Andreas Mohr
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
33 #include "wine/debug.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(tapi);
38 static const char szCountrylistKey[] =
39 "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Country List";
40 static const char szLocationsKey[] =
41 "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Locations";
42 static const char szCardsKey[] =
43 "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Cards";
46 /***********************************************************************
47 * lineAccept (TAPI32.@)
49 DWORD WINAPI lineAccept(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
51 FIXME("(%p, %s, %d): stub.\n", hCall, lpsUserUserInfo, dwSize);
55 /***********************************************************************
56 * lineAddProviderA (TAPI32.@)
58 DWORD WINAPI lineAddProviderA(LPCSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID)
60 FIXME("(%s, %p, %p): stub.\n", lpszProviderName, hwndOwner, lpdwPermanentProviderID);
61 return LINEERR_OPERATIONFAILED;
64 /***********************************************************************
65 * lineAddProviderW (TAPI32.@)
67 DWORD WINAPI lineAddProviderW(LPCWSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID)
69 FIXME("(%s, %p, %p): stub.\n", wine_dbgstr_w(lpszProviderName), hwndOwner, lpdwPermanentProviderID);
70 return LINEERR_OPERATIONFAILED;
73 /***********************************************************************
74 * lineAddToConference (TAPI32.@)
76 DWORD WINAPI lineAddToConference(HCALL hConfCall, HCALL hConsultCall)
78 FIXME("(%p, %p): stub.\n", hConfCall, hConsultCall);
82 /***********************************************************************
83 * lineAnswer (TAPI32.@)
85 DWORD WINAPI lineAnswer(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
87 FIXME("(%p, %s, %d): stub.\n", hCall, lpsUserUserInfo, dwSize);
91 /***********************************************************************
92 * lineBlindTransfer (TAPI32.@)
94 DWORD WINAPI lineBlindTransferA(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
96 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszDestAddress, dwCountryCode);
100 /***********************************************************************
101 * lineClose (TAPI32.@)
103 DWORD WINAPI lineClose(HLINE hLine)
105 FIXME("(%p): stub.\n", hLine);
109 /***********************************************************************
110 * lineCompleteCall (TAPI32.@)
112 DWORD WINAPI lineCompleteCall(HCALL hCall, LPDWORD lpdwCompletionID, DWORD dwCompletionMode, DWORD dwMessageID)
114 FIXME("(%p, %p, %08x, %08x): stub.\n", hCall, lpdwCompletionID, dwCompletionMode, dwMessageID);
118 /***********************************************************************
119 * lineCompleteTransfer (TAPI32.@)
121 DWORD WINAPI lineCompleteTransfer(HCALL hCall, HCALL hConsultCall, LPHCALL lphConfCall, DWORD dwTransferMode)
123 FIXME("(%p, %p, %p, %08x): stub.\n", hCall, hConsultCall, lphConfCall, dwTransferMode);
127 /***********************************************************************
128 * lineConfigDialog (TAPI32.@)
130 DWORD WINAPI lineConfigDialogA(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass)
132 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID, hwndOwner, lpszDeviceClass);
136 /***********************************************************************
137 * lineConfigDialogEdit (TAPI32.@)
139 DWORD WINAPI lineConfigDialogEditA(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass, LPVOID const lpDeviceConfigIn, DWORD dwSize, LPVARSTRING lpDeviceConfigOut)
145 /***********************************************************************
146 * lineConfigProvider (TAPI32.@)
148 DWORD WINAPI lineConfigProvider(HWND hwndOwner, DWORD dwPermanentProviderID)
150 FIXME("(%p, %08x): stub.\n", hwndOwner, dwPermanentProviderID);
154 /***********************************************************************
155 * lineDeallocateCall (TAPI32.@)
157 DWORD WINAPI lineDeallocateCall(HCALL hCall)
159 FIXME("(%p): stub.\n", hCall);
163 /***********************************************************************
164 * lineDevSpecific (TAPI32.@)
166 DWORD WINAPI lineDevSpecific(HLINE hLine, DWORD dwAddressId, HCALL hCall, LPVOID lpParams, DWORD dwSize)
168 FIXME("(%p, %08x, %p, %p, %d): stub.\n", hLine, dwAddressId, hCall, lpParams, dwSize);
172 /***********************************************************************
173 * lineDevSpecificFeature (TAPI32.@)
175 DWORD WINAPI lineDevSpecificFeature(HLINE hLine, DWORD dwFeature, LPVOID lpParams, DWORD dwSize)
177 FIXME("(%p, %08x, %p, %d): stub.\n", hLine, dwFeature, lpParams, dwSize);
181 /***********************************************************************
182 * lineDial (TAPI32.@)
184 DWORD WINAPI lineDialA(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
186 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszDestAddress, dwCountryCode);
190 /***********************************************************************
191 * lineDrop (TAPI32.@)
193 DWORD WINAPI lineDrop(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
195 FIXME("(%p, %s, %08x): stub.\n", hCall, lpsUserUserInfo, dwSize);
199 /***********************************************************************
200 * lineForward (TAPI32.@)
202 DWORD WINAPI lineForwardA(HLINE hLine, DWORD bAllAddress, DWORD dwAddressID, LPLINEFORWARDLIST lpForwardList, DWORD dwNumRingsNoAnswer, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
208 /***********************************************************************
209 * lineGatherDigits (TAPI32.@)
211 DWORD WINAPI lineGatherDigitsA(HCALL hCall, DWORD dwDigitModes, LPSTR lpsDigits, DWORD dwNumDigits, LPCSTR lpszTerminationDigits, DWORD dwFirstDigitTimeout, DWORD dwInterDigitTimeout)
217 /***********************************************************************
218 * lineGenerateDigits (TAPI32.@)
220 DWORD WINAPI lineGenerateDigitsA(HCALL hCall, DWORD dwDigitModes, LPCSTR lpszDigits, DWORD dwDuration)
222 FIXME("(%p, %08x, %s, %d): stub.\n", hCall, dwDigitModes, lpszDigits, dwDuration);
226 /***********************************************************************
227 * lineGenerateTone (TAPI32.@)
229 DWORD WINAPI lineGenerateTone(HCALL hCall, DWORD dwToneMode, DWORD dwDuration, DWORD dwNumTones, LPLINEGENERATETONE lpTones)
231 FIXME("(%p, %08x, %d, %d, %p): stub.\n", hCall, dwToneMode, dwDuration, dwNumTones, lpTones);
235 /***********************************************************************
236 * lineGetAddressCaps (TAPI32.@)
238 DWORD WINAPI lineGetAddressCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAddressID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEADDRESSCAPS lpAddressCaps)
240 FIXME("(%p, %08x, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAddressID, dwAPIVersion, dwExtVersion, lpAddressCaps);
244 /***********************************************************************
245 * lineGetAddressID (TAPI32.@)
247 DWORD WINAPI lineGetAddressIDA(HLINE hLine, LPDWORD lpdwAddressID, DWORD dwAddressMode, LPCSTR lpsAddress, DWORD dwSize)
249 FIXME("%p, %p, %08x, %s, %d): stub.\n", hLine, lpdwAddressID, dwAddressMode, lpsAddress, dwSize);
253 /***********************************************************************
254 * lineGetAddressStatus (TAPI32.@)
256 DWORD WINAPI lineGetAddressStatusA(HLINE hLine, DWORD dwAddressID, LPLINEADDRESSSTATUS lpAddressStatus)
258 FIXME("(%p, %08x, %p): stub.\n", hLine, dwAddressID, lpAddressStatus);
262 /***********************************************************************
263 * lineGetAppPriority (TAPI32.@)
265 DWORD WINAPI lineGetAppPriorityA(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPVARSTRING lpExtensionName, LPDWORD lpdwPriority)
267 FIXME("(%s, %08x, %p, %08x, %p, %p): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpExtensionName, lpdwPriority);
271 /***********************************************************************
272 * lineGetCallInfo (TAPI32.@)
274 DWORD WINAPI lineGetCallInfoA(HCALL hCall, LPLINECALLINFO lpCallInfo)
276 FIXME("(%p, %p): stub.\n", hCall, lpCallInfo);
280 /***********************************************************************
281 * lineGetCallStatus (TAPI32.@)
283 DWORD WINAPI lineGetCallStatus(HCALL hCall, LPLINECALLSTATUS lpCallStatus)
285 FIXME("(%p, %p): stub.\n", hCall, lpCallStatus);
289 /***********************************************************************
290 * lineGetConfRelatedCalls (TAPI32.@)
292 DWORD WINAPI lineGetConfRelatedCalls(HCALL hCall, LPLINECALLLIST lpCallList)
294 FIXME("(%p, %p): stub.\n", hCall, lpCallList);
298 typedef struct tagTAPI_CountryInfo
303 LPSTR lpSameAreaRule;
304 LPSTR lpLongDistanceRule;
305 LPSTR lpInternationalRule;
308 /***********************************************************************
309 * lineGetCountry (TAPI32.@)
311 DWORD WINAPI lineGetCountryA(DWORD dwCountryID, DWORD dwAPIVersion, LPLINECOUNTRYLIST lpLineCountryList)
313 DWORD dwAvailSize, dwOffset, i, num_countries, max_subkey_len;
314 LPLINECOUNTRYENTRY lpLCE;
318 if(!lpLineCountryList) {
319 TRACE("(%08x, %08x, %p): stub. Returning LINEERR_INVALPOINTER\n",
320 dwCountryID, dwAPIVersion, lpLineCountryList);
321 return LINEERR_INVALPOINTER;
324 TRACE("(%08x, %08x, %p(%d)): stub.\n",
325 dwCountryID, dwAPIVersion, lpLineCountryList,
326 lpLineCountryList->dwTotalSize);
328 if(RegOpenKeyA(HKEY_LOCAL_MACHINE, szCountrylistKey, &hkey)
330 return LINEERR_INIFILECORRUPT;
333 dwAvailSize = lpLineCountryList->dwTotalSize;
334 dwOffset = sizeof (LINECOUNTRYLIST);
336 if(dwAvailSize<dwOffset)
337 return LINEERR_STRUCTURETOOSMALL;
339 memset(lpLineCountryList, 0, dwAvailSize);
341 lpLineCountryList->dwTotalSize = dwAvailSize;
342 lpLineCountryList->dwUsedSize = dwOffset;
343 lpLineCountryList->dwNumCountries = 0;
344 lpLineCountryList->dwCountryListSize = 0;
345 lpLineCountryList->dwCountryListOffset = dwOffset;
347 lpLCE = (LPLINECOUNTRYENTRY)(&lpLineCountryList[1]);
349 if(RegQueryInfoKeyA(hkey, NULL, NULL, NULL, &num_countries, &max_subkey_len,
350 NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
352 return LINEERR_STRUCTURETOOSMALL;
356 dwOffset = sizeof (LINECOUNTRYENTRY);
358 dwOffset += num_countries * sizeof (LINECOUNTRYENTRY);
361 subkey_name = HeapAlloc(GetProcessHeap(), 0, max_subkey_len);
362 for(i = 0; i < num_countries; i++)
364 DWORD len, size, size_int, size_long, size_name, size_same;
367 if(RegEnumKeyA(hkey, i, subkey_name, max_subkey_len) !=
371 if(dwCountryID && (atoi(subkey_name) != dwCountryID))
374 if(RegOpenKeyA(hkey, subkey_name, &hsubkey) != ERROR_SUCCESS)
377 RegQueryValueExA(hsubkey, "InternationalRule", NULL, NULL,
381 RegQueryValueExA(hsubkey, "LongDistanceRule", NULL, NULL,
385 RegQueryValueExA(hsubkey, "Name", NULL, NULL,
389 RegQueryValueExA(hsubkey, "SameAreaRule", NULL, NULL,
393 if(dwAvailSize < (dwOffset+len))
396 RegCloseKey(hsubkey);
402 lpLineCountryList->dwNumCountries++;
403 lpLineCountryList->dwCountryListSize += sizeof (LINECOUNTRYENTRY);
404 lpLineCountryList->dwUsedSize += len + sizeof (LINECOUNTRYENTRY);
409 lpLCE[i].dwCountryID = atoi(subkey_name);
410 size = sizeof(DWORD);
411 RegQueryValueExA(hsubkey, "CountryCode", NULL, NULL,
412 (BYTE*)&lpLCE[i].dwCountryCode, &size);
414 lpLCE[i].dwNextCountryID = 0;
417 lpLCE[i-1].dwNextCountryID = lpLCE[i].dwCountryID;
419 /* add country name */
420 lpLCE[i].dwCountryNameSize = size_name;
421 lpLCE[i].dwCountryNameOffset = dwOffset;
422 RegQueryValueExA(hsubkey, "Name", NULL, NULL,
423 ((LPBYTE)lpLineCountryList)+dwOffset,
425 dwOffset += size_name;
427 /* add Same Area Rule */
428 lpLCE[i].dwSameAreaRuleSize = size_same;
429 lpLCE[i].dwSameAreaRuleOffset = dwOffset;
430 RegQueryValueExA(hsubkey, "SameAreaRule", NULL, NULL,
431 ((LPBYTE)lpLineCountryList)+dwOffset,
433 dwOffset += size_same;
435 /* add Long Distance Rule */
436 lpLCE[i].dwLongDistanceRuleSize = size_long;
437 lpLCE[i].dwLongDistanceRuleOffset = dwOffset;
438 RegQueryValueExA(hsubkey, "LongDistanceRule", NULL, NULL,
439 ((LPBYTE)lpLineCountryList)+dwOffset,
441 dwOffset += size_long;
443 /* add Long Distance Rule */
444 lpLCE[i].dwInternationalRuleSize = size_int;
445 lpLCE[i].dwInternationalRuleOffset = dwOffset;
446 RegQueryValueExA(hsubkey, "InternationalRule", NULL, NULL,
447 ((LPBYTE)lpLineCountryList)+dwOffset,
449 dwOffset += size_int;
450 RegCloseKey(hsubkey);
452 TRACE("Added country %s at %p\n", (LPSTR)lpLineCountryList + lpLCE[i].dwCountryNameOffset,
455 if(dwCountryID) break;
458 lpLineCountryList->dwNeededSize = dwOffset;
460 TRACE("%d available %d required\n", dwAvailSize, dwOffset);
462 HeapFree(GetProcessHeap(), 0, subkey_name);
468 /***********************************************************************
469 * lineGetDevCaps (TAPI32.@)
471 DWORD WINAPI lineGetDevCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps)
473 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, dwExtVersion, lpLineDevCaps);
477 /***********************************************************************
478 * lineGetDevConfig (TAPI32.@)
480 DWORD WINAPI lineGetDevConfigA(DWORD dwDeviceID, LPVARSTRING lpDeviceConfig, LPCSTR lpszDeviceClass)
482 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID, lpDeviceConfig, lpszDeviceClass);
486 /***********************************************************************
487 * lineGetID (TAPI32.@)
489 DWORD WINAPI lineGetIDA(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass)
491 FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine, dwAddressID, hCall, dwSelect, lpDeviceID, lpszDeviceClass);
495 /***********************************************************************
496 * lineGetIcon (TAPI32.@)
498 DWORD WINAPI lineGetIconA(DWORD dwDeviceID, LPCSTR lpszDeviceClass, HICON *lphIcon)
500 FIXME("(%08x, %s, %p): stub.\n", dwDeviceID, lpszDeviceClass, lphIcon);
504 /***********************************************************************
505 * lineGetLineDevStatus (TAPI32.@)
507 DWORD WINAPI lineGetLineDevStatusA(HLINE hLine, LPLINEDEVSTATUS lpLineDevStatus)
509 FIXME("(%p, %p): stub.\n", hLine, lpLineDevStatus);
513 /***********************************************************************
514 * lineGetNewCalls (TAPI32.@)
516 DWORD WINAPI lineGetNewCalls(HLINE hLine, DWORD dwAddressID, DWORD dwSelect, LPLINECALLLIST lpCallList)
518 FIXME("(%p, %08x, %08x, %p): stub.\n", hLine, dwAddressID, dwSelect, lpCallList);
522 /***********************************************************************
523 * lineGetNumRings (TAPI32.@)
525 DWORD WINAPI lineGetNumRings(HLINE hLine, DWORD dwAddressID, LPDWORD lpdwNumRings)
527 FIXME("(%p, %08x, %p): stub.\n", hLine, dwAddressID, lpdwNumRings);
531 /***********************************************************************
532 * lineGetProviderListA (TAPI32.@)
534 DWORD WINAPI lineGetProviderListA(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList)
536 FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList);
537 return LINEERR_OPERATIONFAILED;
540 /***********************************************************************
541 * lineGetProviderListW (TAPI32.@)
543 DWORD WINAPI lineGetProviderListW(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList)
545 FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList);
546 return LINEERR_OPERATIONFAILED;
549 /***********************************************************************
550 * lineGetRequest (TAPI32.@)
552 DWORD WINAPI lineGetRequestA(HLINEAPP hLineApp, DWORD dwRequestMode, LPVOID lpRequestBuffer)
554 FIXME("%p, %08x, %p): stub.\n", hLineApp, dwRequestMode, lpRequestBuffer);
558 /***********************************************************************
559 * lineGetStatusMessages (TAPI32.@)
561 DWORD WINAPI lineGetStatusMessages(HLINE hLine, LPDWORD lpdwLineStatus, LPDWORD lpdwAddressStates)
563 FIXME("(%p, %p, %p): stub.\n", hLine, lpdwLineStatus, lpdwAddressStates);
567 /***********************************************************************
568 * lineGetTranslateCaps (TAPI32.@)
570 * get address translate capabilities. Returns a LINETRANSLATECAPS
573 * +-----------------------+
577 * +-----------------------+
579 * |LocationsListSize |
580 * |LocationsListOffset | -+
581 * |CurrentLocationID | |
582 * +-----------------------+ |
585 * |CardListOffset | -|--+
586 * |CurrentPreferredCardID | | |
587 * +-----------------------+ | |
589 * |LINELOCATIONENTRY #1 | |
591 * +-----------------------+ |
593 * +-----------------------+ |
595 * |LINELOCATIONENTRY | |
597 * +-----------------------+ |
599 * |LINECARDENTRY #1 |
601 * +-----------------------+
603 * +-----------------------+
605 * |LINECARDENTRY #NumCards|
607 * +-----------------------+
608 * | room for strings named|
609 * | in the structures |
611 * +-----------------------+
613 DWORD WINAPI lineGetTranslateCapsA(HLINEAPP hLineApp, DWORD dwAPIVersion,
614 LPLINETRANSLATECAPS lpTranslateCaps)
616 HKEY hkLocations, hkCards, hkCardLocations, hsubkey;
617 int numlocations, numcards;
620 char *loc_key_name = NULL;
621 char *card_key_name = NULL;
627 LPLINELOCATIONENTRY pLocEntry;
628 LPLINECARDENTRY pCardEntry;
630 TRACE("(%p, %08x, %p (tot. size %d)\n", hLineApp, dwAPIVersion,
631 lpTranslateCaps, lpTranslateCaps->dwTotalSize );
632 if( lpTranslateCaps->dwTotalSize < sizeof(LINETRANSLATECAPS))
633 return LINEERR_STRUCTURETOOSMALL;
634 if( RegCreateKeyA(HKEY_LOCAL_MACHINE, szLocationsKey, &hkLocations)
636 ERR("unexpected registry error 1.\n");
637 return LINEERR_INIFILECORRUPT;
639 lendword = sizeof( DWORD);
640 if( RegQueryValueExA( hkLocations, "CurrentID", NULL, NULL,
641 (LPBYTE) ¤tid, &lendword) != ERROR_SUCCESS )
642 currentid = -1; /* change this later */
643 if(RegQueryInfoKeyA(hkLocations, NULL, NULL, NULL, NULL, &maxlockeylen,
644 NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
645 RegCloseKey(hkLocations);
646 ERR("unexpected registry error 2.\n");
647 return LINEERR_INIFILECORRUPT;
650 if( maxlockeylen < 10)
651 maxlockeylen = 10; /* need this also if there is no key */
652 loc_key_name = HeapAlloc( GetProcessHeap(), 0, maxlockeylen);
653 /* first time through: calculate needed space */
657 while( RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen)
661 if( strncasecmp(loc_key_name, "location", 8) ||
662 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey)
666 length += sizeof(LINELOCATIONENTRY);
667 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val);
669 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL,NULL,&size_val);
671 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL,NULL,&size_val);
673 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL,NULL,&size_val);
675 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL,NULL,&size_val);
677 /* fixme: what about TollPrefixList???? */
678 RegCloseKey(hsubkey);
680 if(numlocations == 0) {
681 /* add one location */
682 if( RegCreateKeyA( hkLocations, "Location1", &hsubkey)
687 length += sizeof(LINELOCATIONENTRY) + 20 ;
688 RegSetValueExA( hsubkey, "AreaCode", 0, REG_SZ, (const BYTE *)"010", 4);
689 GetLocaleInfoA( LOCALE_SYSTEM_DEFAULT, LOCALE_ICOUNTRY, buf, 8);
691 RegSetValueExA( hsubkey, "Country", 0, REG_DWORD, (LPBYTE)&dwval,
693 RegSetValueExA( hsubkey, "DisableCallWaiting", 0, REG_SZ, (const BYTE *)"", 1);
695 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval,
697 RegSetValueExA( hsubkey, "LongDistanceAccess", 0, REG_SZ, (const BYTE *)"", 1);
698 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"New Location", 13);
699 RegSetValueExA( hsubkey, "OutsideAccess", 0, REG_SZ, (const BYTE *)"", 1);
700 RegCloseKey(hsubkey);
702 RegSetValueExA( hkLocations, "CurrentID", 0, REG_DWORD,
703 (LPBYTE)&dwval, sizeof(DWORD));
705 RegSetValueExA( hkLocations, "NextID", 0, REG_DWORD, (LPBYTE)&dwval,
709 /* do the card list */
711 if( RegCreateKeyA(HKEY_CURRENT_USER, szCardsKey, &hkCards)
713 if(RegQueryInfoKeyA(hkCards, NULL, NULL, NULL, NULL, &maxcardkeylen,
714 NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
716 if( maxcardkeylen < 6) maxcardkeylen = 6;
717 card_key_name = HeapAlloc(GetProcessHeap(), 0, maxcardkeylen);
719 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) ==
723 if( strncasecmp(card_key_name, "card", 4) || ERROR_SUCCESS !=
724 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) ))
727 length += sizeof(LINECARDENTRY);
728 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val);
730 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL,NULL,&size_val);
732 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL,NULL,&size_val);
734 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL,NULL,
737 RegCloseKey(hsubkey);
740 /* add one card (direct call) */
742 ERROR_SUCCESS == RegCreateKeyA( hkCards, "Card1", &hsubkey)) {
745 length += sizeof(LINECARDENTRY) + 22 ;
746 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"None (Direct Call)", 19);
748 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval,
750 RegSetValueExA( hsubkey, "InternationalRule", 0, REG_SZ, (const BYTE *)"", 1);
751 RegSetValueExA( hsubkey, "LDRule", 0, REG_SZ, (const BYTE *)"", 1);
752 RegSetValueExA( hsubkey, "LocalRule", 0, REG_SZ, (const BYTE *)"", 1);
753 RegCloseKey(hsubkey);
755 RegSetValueExA( hkCards, "NextID", 0, REG_DWORD, (LPBYTE)&dwval,
758 } else hkCards = 0; /* should really fail */
759 /* check if sufficient room is available */
760 lpTranslateCaps->dwNeededSize = sizeof(LINETRANSLATECAPS) + length;
761 if ( lpTranslateCaps->dwNeededSize > lpTranslateCaps->dwTotalSize ) {
762 RegCloseKey( hkLocations);
763 if( hkCards) RegCloseKey( hkCards);
764 HeapFree(GetProcessHeap(), 0, loc_key_name);
765 HeapFree(GetProcessHeap(), 0, card_key_name);
766 lpTranslateCaps->dwUsedSize = sizeof(LINETRANSLATECAPS);
767 TRACE("Insufficient space: total %d needed %d used %d\n",
768 lpTranslateCaps->dwTotalSize,
769 lpTranslateCaps->dwNeededSize,
770 lpTranslateCaps->dwUsedSize);
773 /* fill in the LINETRANSLATECAPS structure */
774 lpTranslateCaps->dwUsedSize = lpTranslateCaps->dwNeededSize;
775 lpTranslateCaps->dwNumLocations = numlocations;
776 lpTranslateCaps->dwLocationListSize = sizeof(LINELOCATIONENTRY) *
777 lpTranslateCaps->dwNumLocations;
778 lpTranslateCaps->dwLocationListOffset = sizeof(LINETRANSLATECAPS);
779 lpTranslateCaps->dwCurrentLocationID = currentid;
780 lpTranslateCaps->dwNumCards = numcards;
781 lpTranslateCaps->dwCardListSize = sizeof(LINECARDENTRY) *
782 lpTranslateCaps->dwNumCards;
783 lpTranslateCaps->dwCardListOffset = lpTranslateCaps->dwLocationListOffset +
784 lpTranslateCaps->dwLocationListSize;
785 lpTranslateCaps->dwCurrentPreferredCardID = 0;
786 /* this is where the strings will be stored */
787 strptr = ((LPBYTE) lpTranslateCaps) +
788 lpTranslateCaps->dwCardListOffset + lpTranslateCaps->dwCardListSize;
789 pLocEntry = (LPLINELOCATIONENTRY) (lpTranslateCaps + 1);
790 /* key with Preferred CardID's */
791 if( RegOpenKeyA(HKEY_CURRENT_USER, szLocationsKey, &hkCardLocations)
794 /* second time through all locations */
796 while(RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen)
800 if( strncasecmp(loc_key_name, "location", 8) ||
801 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey)
804 size_val=sizeof(DWORD);
805 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL,
806 (LPBYTE) &(pLocEntry->dwPermanentLocationID), &size_val) !=
808 pLocEntry->dwPermanentLocationID = atoi( loc_key_name + 8);
810 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val);
811 pLocEntry->dwLocationNameSize = size_val;
812 pLocEntry->dwLocationNameOffset = strptr - (LPBYTE) lpTranslateCaps;
816 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL, strptr, &size_val);
817 pLocEntry->dwCityCodeSize = size_val;
818 pLocEntry->dwCityCodeOffset = strptr - (LPBYTE) lpTranslateCaps;
822 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL, strptr, &size_val);
823 pLocEntry->dwLocalAccessCodeSize = size_val;
824 pLocEntry->dwLocalAccessCodeOffset = strptr - (LPBYTE) lpTranslateCaps;
827 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL, strptr,
829 pLocEntry->dwLongDistanceAccessCodeSize= size_val;
830 pLocEntry->dwLongDistanceAccessCodeOffset= strptr -
831 (LPBYTE) lpTranslateCaps;
834 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL, strptr,
836 pLocEntry->dwCancelCallWaitingSize= size_val;
837 pLocEntry->dwCancelCallWaitingOffset= strptr - (LPBYTE) lpTranslateCaps;
840 pLocEntry->dwTollPrefixListSize = 0; /* FIXME */
841 pLocEntry->dwTollPrefixListOffset = 0; /* FIXME */
843 size_val=sizeof(DWORD);
844 RegQueryValueExA(hsubkey, "Country",NULL,NULL,
845 (LPBYTE) &(pLocEntry->dwCountryCode), &size_val);
846 pLocEntry->dwCountryID = pLocEntry->dwCountryCode; /* FIXME */
847 RegQueryValueExA(hsubkey, "Flags",NULL,NULL,
848 (LPBYTE) &(pLocEntry->dwOptions), &size_val);
849 RegCloseKey(hsubkey);
850 /* get preferred cardid */
851 pLocEntry->dwPreferredCardID = 0;
852 if ( hkCardLocations) {
853 size_val=sizeof(DWORD);
854 if(RegOpenKeyA(hkCardLocations, loc_key_name, &hsubkey) ==
856 RegQueryValueExA(hsubkey, "CallingCard",NULL,NULL,
857 (LPBYTE) &(pLocEntry->dwPreferredCardID), &size_val);
858 RegCloseKey(hsubkey);
862 /* make sure there is a currentID */
864 currentid = pLocEntry->dwPermanentLocationID;
865 lpTranslateCaps->dwCurrentLocationID = currentid;
867 if(pLocEntry->dwPermanentLocationID == currentid )
868 lpTranslateCaps->dwCurrentPreferredCardID =
869 pLocEntry->dwPreferredCardID;
870 TRACE("added: ID %d %s CountryCode %d CityCode %s CardID %d "
871 "LocalAccess: %s LongDistanceAccess: %s CountryID %d "
872 "Options %d CancelCallWait %s\n",
873 pLocEntry->dwPermanentLocationID,
874 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocationNameOffset),
875 pLocEntry->dwCountryCode,
876 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCityCodeOffset),
877 pLocEntry->dwPreferredCardID,
878 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocalAccessCodeOffset),
879 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLongDistanceAccessCodeOffset),
880 pLocEntry->dwCountryID,
881 pLocEntry->dwOptions,
882 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCancelCallWaitingOffset));
885 pCardEntry= (LPLINECARDENTRY) pLocEntry;
886 /* do the card list */
889 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) ==
893 if( strncasecmp(card_key_name, "card", 4) ||
894 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) != ERROR_SUCCESS))
896 size_val=sizeof(DWORD);
897 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL,
898 (LPBYTE) &(pCardEntry->dwPermanentCardID), &size_val) !=
900 pCardEntry->dwPermanentCardID= atoi( card_key_name + 4);
902 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val);
903 pCardEntry->dwCardNameSize = size_val;
904 pCardEntry->dwCardNameOffset = strptr - (LPBYTE) lpTranslateCaps;
906 pCardEntry->dwCardNumberDigits = 1; /* FIXME */
908 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL, strptr, &size_val);
909 pCardEntry->dwSameAreaRuleSize= size_val;
910 pCardEntry->dwSameAreaRuleOffset= strptr - (LPBYTE) lpTranslateCaps;
913 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL, strptr, &size_val);
914 pCardEntry->dwLongDistanceRuleSize = size_val;
915 pCardEntry->dwLongDistanceRuleOffset = strptr - (LPBYTE) lpTranslateCaps;
918 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL, strptr,
920 pCardEntry->dwInternationalRuleSize = size_val;
921 pCardEntry->dwInternationalRuleOffset = strptr -
922 (LPBYTE) lpTranslateCaps;
924 size_val=sizeof(DWORD);
925 RegQueryValueExA(hsubkey, "Flags",NULL, NULL,
926 (LPBYTE) &(pCardEntry->dwOptions), &size_val);
927 TRACE( "added card: ID %d name %s SameArea %s LongDistance %s International %s Options 0x%x\n",
928 pCardEntry->dwPermanentCardID,
929 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwCardNameOffset),
930 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwSameAreaRuleOffset),
931 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwLongDistanceRuleOffset),
932 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwInternationalRuleOffset),
933 pCardEntry->dwOptions);
939 if(hkLocations) RegCloseKey(hkLocations);
940 if(hkCards) RegCloseKey(hkCards);
941 if(hkCardLocations) RegCloseKey(hkCardLocations);
942 HeapFree(GetProcessHeap(), 0, loc_key_name);
943 HeapFree(GetProcessHeap(), 0, card_key_name);
944 TRACE(" returning success tot %d needed %d used %d\n",
945 lpTranslateCaps->dwTotalSize,
946 lpTranslateCaps->dwNeededSize,
947 lpTranslateCaps->dwUsedSize );
948 return 0; /* success */
951 /***********************************************************************
952 * lineHandoff (TAPI32.@)
954 DWORD WINAPI lineHandoffA(HCALL hCall, LPCSTR lpszFileName, DWORD dwMediaMode)
956 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszFileName, dwMediaMode);
960 /***********************************************************************
961 * lineHold (TAPI32.@)
963 DWORD WINAPI lineHold(HCALL hCall)
965 FIXME("(%p): stub.\n", hCall);
969 /***********************************************************************
970 * lineInitialize (TAPI32.@)
972 DWORD WINAPI lineInitialize(
973 LPHLINEAPP lphLineApp,
975 LINECALLBACK lpfnCallback,
979 FIXME("(%p, %p, %p, %s, %p): stub.\n", lphLineApp, hInstance,
980 lpfnCallback, debugstr_a(lpszAppName), lpdwNumDevs);
984 /***********************************************************************
985 * lineInitializeExA (TAPI32.@)
987 LONG WINAPI lineInitializeExA(LPHLINEAPP lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, LPCSTR lpszFriendlyAppName, LPDWORD lpdwNumDevs, LPDWORD lpdwAPIVersion, LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams)
989 FIXME("(%p, %p, %p, %s, %p, %p, %p): stub.\n", lphLineApp, hInstance,
990 lpfnCallback, debugstr_a(lpszFriendlyAppName), lpdwNumDevs, lpdwAPIVersion, lpLineInitializeExParams);
994 /***********************************************************************
995 * lineMakeCall (TAPI32.@)
997 DWORD WINAPI lineMakeCallA(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress, DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams)
999 FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, lpszDestAddress, dwCountryCode, lpCallParams);
1003 /***********************************************************************
1004 * lineMonitorDigits (TAPI32.@)
1006 DWORD WINAPI lineMonitorDigits(HCALL hCall, DWORD dwDigitModes)
1008 FIXME("(%p, %08x): stub.\n", hCall, dwDigitModes);
1012 /***********************************************************************
1013 * lineMonitorMedia (TAPI32.@)
1015 DWORD WINAPI lineMonitorMedia(HCALL hCall, DWORD dwMediaModes)
1017 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes);
1021 /***********************************************************************
1022 * lineMonitorTones (TAPI32.@)
1024 DWORD WINAPI lineMonitorTones(HCALL hCall, LPLINEMONITORTONE lpToneList, DWORD dwNumEntries)
1026 FIXME("(%p, %p, %08x): stub.\n", hCall, lpToneList, dwNumEntries);
1030 /***********************************************************************
1031 * lineNegotiateAPIVersion (TAPI32.@)
1033 DWORD WINAPI lineNegotiateAPIVersion(
1036 DWORD dwAPILowVersion,
1037 DWORD dwAPIHighVersion,
1038 LPDWORD lpdwAPIVersion,
1039 LPLINEEXTENSIONID lpExtensionID
1042 FIXME("(%p, %d, %d, %d, %p, %p): stub.\n", hLineApp, dwDeviceID,
1043 dwAPILowVersion, dwAPIHighVersion, lpdwAPIVersion, lpExtensionID);
1044 *lpdwAPIVersion = dwAPIHighVersion;
1048 /***********************************************************************
1049 * lineNegotiateExtVersion (TAPI32.@)
1051 DWORD WINAPI lineNegotiateExtVersion(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtLowVersion, DWORD dwExtHighVersion, LPDWORD lpdwExtVersion)
1057 /***********************************************************************
1058 * lineOpen (TAPI32.@)
1060 DWORD WINAPI lineOpenA(HLINEAPP hLineApp, DWORD dwDeviceID, LPHLINE lphLine, DWORD dwAPIVersion, DWORD dwExtVersion, DWORD dwCallbackInstance, DWORD dwPrivileges, DWORD dwMediaModes, LPLINECALLPARAMS lpCallParams)
1066 /***********************************************************************
1067 * linePark (TAPI32.@)
1069 DWORD WINAPI lineParkA(HCALL hCall, DWORD dwParkMode, LPCSTR lpszDirAddress, LPVARSTRING lpNonDirAddress)
1071 FIXME("(%p, %08x, %s, %p): stub.\n", hCall, dwParkMode, lpszDirAddress, lpNonDirAddress);
1075 /***********************************************************************
1076 * linePickup (TAPI32.@)
1078 DWORD WINAPI linePickupA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress, LPCSTR lpszGroupID)
1080 FIXME("(%p, %08x, %p, %s, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress, lpszGroupID);
1084 /***********************************************************************
1085 * linePrepareAddToConference (TAPI32.@)
1087 DWORD WINAPI linePrepareAddToConferenceA(HCALL hConfCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
1089 FIXME("(%p, %p, %p): stub.\n", hConfCall, lphConsultCall, lpCallParams);
1093 /***********************************************************************
1094 * lineRedirect (TAPI32.@)
1096 DWORD WINAPI lineRedirectA(
1098 LPCSTR lpszDestAddress,
1099 DWORD dwCountryCode) {
1105 /***********************************************************************
1106 * lineRegisterRequestRecipient (TAPI32.@)
1108 DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP hLineApp, DWORD dwRegistrationInstance, DWORD dwRequestMode, DWORD dwEnable)
1110 FIXME("(%p, %08x, %08x, %08x): stub.\n", hLineApp, dwRegistrationInstance, dwRequestMode, dwEnable);
1114 /***********************************************************************
1115 * lineReleaseUserUserInfo (TAPI32.@)
1117 DWORD WINAPI lineReleaseUserUserInfo(HCALL hCall)
1119 FIXME("(%p): stub.\n", hCall);
1123 /***********************************************************************
1124 * lineRemoveFromConference (TAPI32.@)
1126 DWORD WINAPI lineRemoveFromConference(HCALL hCall)
1128 FIXME("(%p): stub.\n", hCall);
1132 /***********************************************************************
1133 * lineRemoveProvider (TAPI32.@)
1135 DWORD WINAPI lineRemoveProvider(DWORD dwPermanentProviderID, HWND hwndOwner)
1137 FIXME("(%08x, %p): stub.\n", dwPermanentProviderID, hwndOwner);
1141 /***********************************************************************
1142 * lineSecureCall (TAPI32.@)
1144 DWORD WINAPI lineSecureCall(HCALL hCall)
1146 FIXME("(%p): stub.\n", hCall);
1150 /***********************************************************************
1151 * lineSendUserUserInfo (TAPI32.@)
1153 DWORD WINAPI lineSendUserUserInfo(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
1155 FIXME("(%p, %s, %08x): stub.\n", hCall, lpsUserUserInfo, dwSize);
1159 /***********************************************************************
1160 * lineSetAppPriority (TAPI32.@)
1162 DWORD WINAPI lineSetAppPriorityA(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPCSTR lpszExtensionName, DWORD dwPriority)
1164 FIXME("(%s, %08x, %p, %08x, %s, %08x): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpszExtensionName, dwPriority);
1168 /***********************************************************************
1169 * lineSetAppSpecific (TAPI32.@)
1171 DWORD WINAPI lineSetAppSpecific(HCALL hCall, DWORD dwAppSpecific)
1173 FIXME("(%p, %08x): stub.\n", hCall, dwAppSpecific);
1177 /***********************************************************************
1178 * lineSetCallParams (TAPI32.@)
1180 DWORD WINAPI lineSetCallParams(HCALL hCall, DWORD dwBearerMode, DWORD dwMinRate, DWORD dwMaxRate, LPLINEDIALPARAMS lpDialParams)
1182 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hCall, dwBearerMode, dwMinRate, dwMaxRate, lpDialParams);
1186 /***********************************************************************
1187 * lineSetCallPrivilege (TAPI32.@)
1189 DWORD WINAPI lineSetCallPrivilege(HCALL hCall, DWORD dwCallPrivilege)
1191 FIXME("(%p, %08x): stub.\n", hCall, dwCallPrivilege);
1195 /***********************************************************************
1196 * lineSetCurrentLocation (TAPI32.@)
1198 DWORD WINAPI lineSetCurrentLocation(HLINEAPP hLineApp, DWORD dwLocation)
1200 FIXME("(%p, %08x): stub.\n", hLineApp, dwLocation);
1204 /***********************************************************************
1205 * lineSetDevConfig (TAPI32.@)
1207 DWORD WINAPI lineSetDevConfigA(DWORD dwDeviceID, LPVOID lpDeviceConfig, DWORD dwSize, LPCSTR lpszDeviceClass)
1209 FIXME("(%08x, %p, %08x, %s): stub.\n", dwDeviceID, lpDeviceConfig, dwSize, lpszDeviceClass);
1213 /***********************************************************************
1214 * lineSetMediaControl (TAPI32.@)
1216 DWORD WINAPI lineSetMediaControl(
1221 LPLINEMEDIACONTROLDIGIT const lpDigitList,
1222 DWORD dwDigitNumEntries,
1223 LPLINEMEDIACONTROLMEDIA const lpMediaList,
1224 DWORD dwMediaNumEntries,
1225 LPLINEMEDIACONTROLTONE const lpToneList,
1226 DWORD dwToneNumEntries,
1227 LPLINEMEDIACONTROLCALLSTATE const lpCallStateList,
1228 DWORD dwCallStateNumEntries)
1234 /***********************************************************************
1235 * lineSetMediaMode (TAPI32.@)
1237 DWORD WINAPI lineSetMediaMode(HCALL hCall, DWORD dwMediaModes)
1239 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes);
1243 /***********************************************************************
1244 * lineSetNumRings (TAPI32.@)
1246 DWORD WINAPI lineSetNumRings(HLINE hLine, DWORD dwAddressID, DWORD dwNumRings)
1248 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwAddressID, dwNumRings);
1252 /***********************************************************************
1253 * lineSetStatusMessages (TAPI32.@)
1255 DWORD WINAPI lineSetStatusMessages(HLINE hLine, DWORD dwLineStates, DWORD dwAddressStates)
1257 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwLineStates, dwAddressStates);
1261 /***********************************************************************
1262 * lineSetTerminal (TAPI32.@)
1264 DWORD WINAPI lineSetTerminal(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, DWORD dwTerminalModes, DWORD dwTerminalID, DWORD bEnable)
1266 FIXME("(%p, %08x, %p, %08x, %08x, %08x, %08x): stub.\n", hLine, dwAddressID, hCall, dwSelect, dwTerminalModes, dwTerminalID, bEnable);
1270 /***********************************************************************
1271 * lineSetTollList (TAPI32.@)
1273 DWORD WINAPI lineSetTollListA(HLINEAPP hLineApp, DWORD dwDeviceID, LPCSTR lpszAddressIn, DWORD dwTollListOption)
1275 FIXME("(%p, %08x, %s, %08x): stub.\n", hLineApp, dwDeviceID, lpszAddressIn, dwTollListOption);
1279 /***********************************************************************
1280 * lineSetupConference (TAPI32.@)
1282 DWORD WINAPI lineSetupConferenceA(HCALL hCall, HLINE hLine, LPHCALL lphConfCall, LPHCALL lphConsultCall, DWORD dwNumParties, LPLINECALLPARAMS lpCallParams)
1284 FIXME("(%p, %p, %p, %p, %08x, %p): stub.\n", hCall, hLine, lphConfCall, lphConsultCall, dwNumParties, lpCallParams);
1288 /***********************************************************************
1289 * lineSetupTransfer (TAPI32.@)
1291 DWORD WINAPI lineSetupTransferA(HCALL hCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
1293 FIXME("(%p, %p, %p): stub.\n", hCall, lphConsultCall, lpCallParams);
1297 /***********************************************************************
1298 * lineShutdown (TAPI32.@)
1300 DWORD WINAPI lineShutdown(HLINEAPP hLineApp)
1302 FIXME("(%p): stub.\n", hLineApp);
1306 /***********************************************************************
1307 * lineSwapHold (TAPI32.@)
1309 DWORD WINAPI lineSwapHold(HCALL hActiveCall, HCALL hHeldCall)
1311 FIXME("(active: %p, held: %p): stub.\n", hActiveCall, hHeldCall);
1315 /***********************************************************************
1316 * lineTranslateAddress (TAPI32.@)
1318 DWORD WINAPI lineTranslateAddressA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, LPCSTR lpszAddressIn, DWORD dwCard, DWORD dwTranslateOptions, LPLINETRANSLATEOUTPUT lpTranslateOutput)
1320 FIXME("(%p, %08x, %08x, %s, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, lpszAddressIn, dwCard, dwTranslateOptions, lpTranslateOutput);
1324 /***********************************************************************
1325 * lineTranslateDialog (TAPI32.@)
1327 DWORD WINAPI lineTranslateDialogA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, HWND hwndOwner, LPCSTR lpszAddressIn)
1329 FIXME("(%p, %08x, %08x, %p, %s): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, hwndOwner, lpszAddressIn);
1333 /***********************************************************************
1334 * lineUncompleteCall (TAPI32.@)
1336 DWORD WINAPI lineUncompleteCall(HLINE hLine, DWORD dwCompletionID)
1338 FIXME("(%p, %08x): stub.\n", hLine, dwCompletionID);
1342 /***********************************************************************
1343 * lineUnhold (TAPI32.@)
1345 DWORD WINAPI lineUnhold(HCALL hCall)
1347 FIXME("(%p): stub.\n", hCall);
1351 /***********************************************************************
1352 * lineUnpark (TAPI32.@)
1354 DWORD WINAPI lineUnparkA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress)
1356 FIXME("(%p, %08x, %p, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress);