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 * lineAddProvider (TAPI32.@)
58 DWORD WINAPI lineAddProviderA(LPCSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID)
60 FIXME("(%s, %p, %p): stub.\n", lpszProviderName, hwndOwner, lpdwPermanentProviderID);
64 /***********************************************************************
65 * lineAddToConference (TAPI32.@)
67 DWORD WINAPI lineAddToConference(HCALL hConfCall, HCALL hConsultCall)
69 FIXME("(%p, %p): stub.\n", hConfCall, hConsultCall);
73 /***********************************************************************
74 * lineAnswer (TAPI32.@)
76 DWORD WINAPI lineAnswer(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
78 FIXME("(%p, %s, %d): stub.\n", hCall, lpsUserUserInfo, dwSize);
82 /***********************************************************************
83 * lineBlindTransfer (TAPI32.@)
85 DWORD WINAPI lineBlindTransferA(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
87 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszDestAddress, dwCountryCode);
91 /***********************************************************************
92 * lineClose (TAPI32.@)
94 DWORD WINAPI lineClose(HLINE hLine)
96 FIXME("(%p): stub.\n", hLine);
100 /***********************************************************************
101 * lineCompleteCall (TAPI32.@)
103 DWORD WINAPI lineCompleteCall(HCALL hCall, LPDWORD lpdwCompletionID, DWORD dwCompletionMode, DWORD dwMessageID)
105 FIXME("(%p, %p, %08x, %08x): stub.\n", hCall, lpdwCompletionID, dwCompletionMode, dwMessageID);
109 /***********************************************************************
110 * lineCompleteTransfer (TAPI32.@)
112 DWORD WINAPI lineCompleteTransfer(HCALL hCall, HCALL hConsultCall, LPHCALL lphConfCall, DWORD dwTransferMode)
114 FIXME("(%p, %p, %p, %08x): stub.\n", hCall, hConsultCall, lphConfCall, dwTransferMode);
118 /***********************************************************************
119 * lineConfigDialog (TAPI32.@)
121 DWORD WINAPI lineConfigDialogA(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass)
123 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID, hwndOwner, lpszDeviceClass);
127 /***********************************************************************
128 * lineConfigDialogEdit (TAPI32.@)
130 DWORD WINAPI lineConfigDialogEditA(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass, LPVOID const lpDeviceConfigIn, DWORD dwSize, LPVARSTRING lpDeviceConfigOut)
136 /***********************************************************************
137 * lineConfigProvider (TAPI32.@)
139 DWORD WINAPI lineConfigProvider(HWND hwndOwner, DWORD dwPermanentProviderID)
141 FIXME("(%p, %08x): stub.\n", hwndOwner, dwPermanentProviderID);
145 /***********************************************************************
146 * lineDeallocateCall (TAPI32.@)
148 DWORD WINAPI lineDeallocateCall(HCALL hCall)
150 FIXME("(%p): stub.\n", hCall);
154 /***********************************************************************
155 * lineDevSpecific (TAPI32.@)
157 DWORD WINAPI lineDevSpecific(HLINE hLine, DWORD dwAddressId, HCALL hCall, LPVOID lpParams, DWORD dwSize)
159 FIXME("(%p, %08x, %p, %p, %d): stub.\n", hLine, dwAddressId, hCall, lpParams, dwSize);
163 /***********************************************************************
164 * lineDevSpecificFeature (TAPI32.@)
166 DWORD WINAPI lineDevSpecificFeature(HLINE hLine, DWORD dwFeature, LPVOID lpParams, DWORD dwSize)
168 FIXME("(%p, %08x, %p, %d): stub.\n", hLine, dwFeature, lpParams, dwSize);
172 /***********************************************************************
173 * lineDial (TAPI32.@)
175 DWORD WINAPI lineDialA(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
177 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszDestAddress, dwCountryCode);
181 /***********************************************************************
182 * lineDrop (TAPI32.@)
184 DWORD WINAPI lineDrop(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
186 FIXME("(%p, %s, %08x): stub.\n", hCall, lpsUserUserInfo, dwSize);
190 /***********************************************************************
191 * lineForward (TAPI32.@)
193 DWORD WINAPI lineForwardA(HLINE hLine, DWORD bAllAddress, DWORD dwAddressID, LPLINEFORWARDLIST lpForwardList, DWORD dwNumRingsNoAnswer, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
199 /***********************************************************************
200 * lineGatherDigits (TAPI32.@)
202 DWORD WINAPI lineGatherDigitsA(HCALL hCall, DWORD dwDigitModes, LPSTR lpsDigits, DWORD dwNumDigits, LPCSTR lpszTerminationDigits, DWORD dwFirstDigitTimeout, DWORD dwInterDigitTimeout)
208 /***********************************************************************
209 * lineGenerateDigits (TAPI32.@)
211 DWORD WINAPI lineGenerateDigitsA(HCALL hCall, DWORD dwDigitModes, LPCSTR lpszDigits, DWORD dwDuration)
213 FIXME("(%p, %08x, %s, %d): stub.\n", hCall, dwDigitModes, lpszDigits, dwDuration);
217 /***********************************************************************
218 * lineGenerateTone (TAPI32.@)
220 DWORD WINAPI lineGenerateTone(HCALL hCall, DWORD dwToneMode, DWORD dwDuration, DWORD dwNumTones, LPLINEGENERATETONE lpTones)
222 FIXME("(%p, %08x, %d, %d, %p): stub.\n", hCall, dwToneMode, dwDuration, dwNumTones, lpTones);
226 /***********************************************************************
227 * lineGetAddressCaps (TAPI32.@)
229 DWORD WINAPI lineGetAddressCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAddressID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEADDRESSCAPS lpAddressCaps)
231 FIXME("(%p, %08x, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAddressID, dwAPIVersion, dwExtVersion, lpAddressCaps);
235 /***********************************************************************
236 * lineGetAddressID (TAPI32.@)
238 DWORD WINAPI lineGetAddressIDA(HLINE hLine, LPDWORD lpdwAddressID, DWORD dwAddressMode, LPCSTR lpsAddress, DWORD dwSize)
240 FIXME("%p, %p, %08x, %s, %d): stub.\n", hLine, lpdwAddressID, dwAddressMode, lpsAddress, dwSize);
244 /***********************************************************************
245 * lineGetAddressStatus (TAPI32.@)
247 DWORD WINAPI lineGetAddressStatusA(HLINE hLine, DWORD dwAddressID, LPLINEADDRESSSTATUS lpAddressStatus)
249 FIXME("(%p, %08x, %p): stub.\n", hLine, dwAddressID, lpAddressStatus);
253 /***********************************************************************
254 * lineGetAppPriority (TAPI32.@)
256 DWORD WINAPI lineGetAppPriorityA(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPVARSTRING lpExtensionName, LPDWORD lpdwPriority)
258 FIXME("(%s, %08x, %p, %08x, %p, %p): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpExtensionName, lpdwPriority);
262 /***********************************************************************
263 * lineGetCallInfo (TAPI32.@)
265 DWORD WINAPI lineGetCallInfoA(HCALL hCall, LPLINECALLINFO lpCallInfo)
267 FIXME("(%p, %p): stub.\n", hCall, lpCallInfo);
271 /***********************************************************************
272 * lineGetCallStatus (TAPI32.@)
274 DWORD WINAPI lineGetCallStatus(HCALL hCall, LPLINECALLSTATUS lpCallStatus)
276 FIXME("(%p, %p): stub.\n", hCall, lpCallStatus);
280 /***********************************************************************
281 * lineGetConfRelatedCalls (TAPI32.@)
283 DWORD WINAPI lineGetConfRelatedCalls(HCALL hCall, LPLINECALLLIST lpCallList)
285 FIXME("(%p, %p): stub.\n", hCall, lpCallList);
289 typedef struct tagTAPI_CountryInfo
294 LPSTR lpSameAreaRule;
295 LPSTR lpLongDistanceRule;
296 LPSTR lpInternationalRule;
299 /***********************************************************************
300 * lineGetCountry (TAPI32.@)
302 DWORD WINAPI lineGetCountryA(DWORD dwCountryID, DWORD dwAPIVersion, LPLINECOUNTRYLIST lpLineCountryList)
304 DWORD dwAvailSize, dwOffset, i, num_countries, max_subkey_len;
305 LPLINECOUNTRYENTRY lpLCE;
309 if(!lpLineCountryList) {
310 TRACE("(%08x, %08x, %p): stub. Returning LINEERR_INVALPOINTER\n",
311 dwCountryID, dwAPIVersion, lpLineCountryList);
312 return LINEERR_INVALPOINTER;
315 TRACE("(%08x, %08x, %p(%d)): stub.\n",
316 dwCountryID, dwAPIVersion, lpLineCountryList,
317 lpLineCountryList->dwTotalSize);
319 if(RegOpenKeyA(HKEY_LOCAL_MACHINE, szCountrylistKey, &hkey)
321 return LINEERR_INIFILECORRUPT;
324 dwAvailSize = lpLineCountryList->dwTotalSize;
325 dwOffset = sizeof (LINECOUNTRYLIST);
327 if(dwAvailSize<dwOffset)
328 return LINEERR_STRUCTURETOOSMALL;
330 memset(lpLineCountryList, 0, dwAvailSize);
332 lpLineCountryList->dwTotalSize = dwAvailSize;
333 lpLineCountryList->dwUsedSize = dwOffset;
334 lpLineCountryList->dwNumCountries = 0;
335 lpLineCountryList->dwCountryListSize = 0;
336 lpLineCountryList->dwCountryListOffset = dwOffset;
338 lpLCE = (LPLINECOUNTRYENTRY)(&lpLineCountryList[1]);
340 if(RegQueryInfoKeyA(hkey, NULL, NULL, NULL, &num_countries, &max_subkey_len,
341 NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
343 return LINEERR_STRUCTURETOOSMALL;
347 dwOffset = sizeof (LINECOUNTRYENTRY);
349 dwOffset += num_countries * sizeof (LINECOUNTRYENTRY);
352 subkey_name = HeapAlloc(GetProcessHeap(), 0, max_subkey_len);
353 for(i = 0; i < num_countries; i++)
355 DWORD len, size, size_int, size_long, size_name, size_same;
358 if(RegEnumKeyA(hkey, i, subkey_name, max_subkey_len) !=
362 if(dwCountryID && (atoi(subkey_name) != dwCountryID))
365 if(RegOpenKeyA(hkey, subkey_name, &hsubkey) != ERROR_SUCCESS)
368 RegQueryValueExA(hsubkey, "InternationalRule", NULL, NULL,
372 RegQueryValueExA(hsubkey, "LongDistanceRule", NULL, NULL,
376 RegQueryValueExA(hsubkey, "Name", NULL, NULL,
380 RegQueryValueExA(hsubkey, "SameAreaRule", NULL, NULL,
384 if(dwAvailSize < (dwOffset+len))
387 RegCloseKey(hsubkey);
393 lpLineCountryList->dwNumCountries++;
394 lpLineCountryList->dwCountryListSize += sizeof (LINECOUNTRYENTRY);
395 lpLineCountryList->dwUsedSize += len + sizeof (LINECOUNTRYENTRY);
400 lpLCE[i].dwCountryID = atoi(subkey_name);
401 size = sizeof(DWORD);
402 RegQueryValueExA(hsubkey, "CountryCode", NULL, NULL,
403 (BYTE*)&lpLCE[i].dwCountryCode, &size);
405 lpLCE[i].dwNextCountryID = 0;
408 lpLCE[i-1].dwNextCountryID = lpLCE[i].dwCountryID;
410 /* add country name */
411 lpLCE[i].dwCountryNameSize = size_name;
412 lpLCE[i].dwCountryNameOffset = dwOffset;
413 RegQueryValueExA(hsubkey, "Name", NULL, NULL,
414 ((LPBYTE)lpLineCountryList)+dwOffset,
416 dwOffset += size_name;
418 /* add Same Area Rule */
419 lpLCE[i].dwSameAreaRuleSize = size_same;
420 lpLCE[i].dwSameAreaRuleOffset = dwOffset;
421 RegQueryValueExA(hsubkey, "SameAreaRule", NULL, NULL,
422 ((LPBYTE)lpLineCountryList)+dwOffset,
424 dwOffset += size_same;
426 /* add Long Distance Rule */
427 lpLCE[i].dwLongDistanceRuleSize = size_long;
428 lpLCE[i].dwLongDistanceRuleOffset = dwOffset;
429 RegQueryValueExA(hsubkey, "LongDistanceRule", NULL, NULL,
430 ((LPBYTE)lpLineCountryList)+dwOffset,
432 dwOffset += size_long;
434 /* add Long Distance Rule */
435 lpLCE[i].dwInternationalRuleSize = size_int;
436 lpLCE[i].dwInternationalRuleOffset = dwOffset;
437 RegQueryValueExA(hsubkey, "InternationalRule", NULL, NULL,
438 ((LPBYTE)lpLineCountryList)+dwOffset,
440 dwOffset += size_int;
441 RegCloseKey(hsubkey);
443 TRACE("Added country %s at %p\n", (LPSTR)lpLineCountryList + lpLCE[i].dwCountryNameOffset,
446 if(dwCountryID) break;
449 lpLineCountryList->dwNeededSize = dwOffset;
451 TRACE("%d available %d required\n", dwAvailSize, dwOffset);
453 HeapFree(GetProcessHeap(), 0, subkey_name);
459 /***********************************************************************
460 * lineGetDevCaps (TAPI32.@)
462 DWORD WINAPI lineGetDevCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps)
464 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, dwExtVersion, lpLineDevCaps);
468 /***********************************************************************
469 * lineGetDevConfig (TAPI32.@)
471 DWORD WINAPI lineGetDevConfigA(DWORD dwDeviceID, LPVARSTRING lpDeviceConfig, LPCSTR lpszDeviceClass)
473 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID, lpDeviceConfig, lpszDeviceClass);
477 /***********************************************************************
478 * lineGetID (TAPI32.@)
480 DWORD WINAPI lineGetIDA(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass)
482 FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine, dwAddressID, hCall, dwSelect, lpDeviceID, lpszDeviceClass);
486 /***********************************************************************
487 * lineGetIcon (TAPI32.@)
489 DWORD WINAPI lineGetIconA(DWORD dwDeviceID, LPCSTR lpszDeviceClass, HICON *lphIcon)
491 FIXME("(%08x, %s, %p): stub.\n", dwDeviceID, lpszDeviceClass, lphIcon);
495 /***********************************************************************
496 * lineGetLineDevStatus (TAPI32.@)
498 DWORD WINAPI lineGetLineDevStatusA(HLINE hLine, LPLINEDEVSTATUS lpLineDevStatus)
500 FIXME("(%p, %p): stub.\n", hLine, lpLineDevStatus);
504 /***********************************************************************
505 * lineGetNewCalls (TAPI32.@)
507 DWORD WINAPI lineGetNewCalls(HLINE hLine, DWORD dwAddressID, DWORD dwSelect, LPLINECALLLIST lpCallList)
509 FIXME("(%p, %08x, %08x, %p): stub.\n", hLine, dwAddressID, dwSelect, lpCallList);
513 /***********************************************************************
514 * lineGetNumRings (TAPI32.@)
516 DWORD WINAPI lineGetNumRings(HLINE hLine, DWORD dwAddressID, LPDWORD lpdwNumRings)
518 FIXME("(%p, %08x, %p): stub.\n", hLine, dwAddressID, lpdwNumRings);
522 /***********************************************************************
523 * lineGetProviderListA (TAPI32.@)
525 DWORD WINAPI lineGetProviderListA(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList)
527 FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList);
528 return LINEERR_OPERATIONFAILED;
531 /***********************************************************************
532 * lineGetProviderListW (TAPI32.@)
534 DWORD WINAPI lineGetProviderListW(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList)
536 FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList);
537 return LINEERR_OPERATIONFAILED;
540 /***********************************************************************
541 * lineGetRequest (TAPI32.@)
543 DWORD WINAPI lineGetRequestA(HLINEAPP hLineApp, DWORD dwRequestMode, LPVOID lpRequestBuffer)
545 FIXME("%p, %08x, %p): stub.\n", hLineApp, dwRequestMode, lpRequestBuffer);
549 /***********************************************************************
550 * lineGetStatusMessages (TAPI32.@)
552 DWORD WINAPI lineGetStatusMessages(HLINE hLine, LPDWORD lpdwLineStatus, LPDWORD lpdwAddressStates)
554 FIXME("(%p, %p, %p): stub.\n", hLine, lpdwLineStatus, lpdwAddressStates);
558 /***********************************************************************
559 * lineGetTranslateCaps (TAPI32.@)
561 * get address translate capabilities. Returns a LINETRANSLATECAPS
564 * +-----------------------+
568 * +-----------------------+
570 * |LocationsListSize |
571 * |LocationsListOffset | -+
572 * |CurrentLocationID | |
573 * +-----------------------+ |
576 * |CardListOffset | -|--+
577 * |CurrentPreferredCardID | | |
578 * +-----------------------+ | |
580 * |LINELOCATIONENTRY #1 | |
582 * +-----------------------+ |
584 * +-----------------------+ |
586 * |LINELOCATIONENTRY | |
588 * +-----------------------+ |
590 * |LINECARDENTRY #1 |
592 * +-----------------------+
594 * +-----------------------+
596 * |LINECARDENTRY #NumCards|
598 * +-----------------------+
599 * | room for strings named|
600 * | in the structures |
602 * +-----------------------+
604 DWORD WINAPI lineGetTranslateCapsA(HLINEAPP hLineApp, DWORD dwAPIVersion,
605 LPLINETRANSLATECAPS lpTranslateCaps)
607 HKEY hkLocations, hkCards, hkCardLocations, hsubkey;
608 int numlocations, numcards;
611 char *loc_key_name = NULL;
612 char *card_key_name = NULL;
618 LPLINELOCATIONENTRY pLocEntry;
619 LPLINECARDENTRY pCardEntry;
621 TRACE("(%p, %08x, %p (tot. size %d)\n", hLineApp, dwAPIVersion,
622 lpTranslateCaps, lpTranslateCaps->dwTotalSize );
623 if( lpTranslateCaps->dwTotalSize < sizeof(LINETRANSLATECAPS))
624 return LINEERR_STRUCTURETOOSMALL;
625 if( RegCreateKeyA(HKEY_LOCAL_MACHINE, szLocationsKey, &hkLocations)
627 ERR("unexpected registry error 1.\n");
628 return LINEERR_INIFILECORRUPT;
630 lendword = sizeof( DWORD);
631 if( RegQueryValueExA( hkLocations, "CurrentID", NULL, NULL,
632 (LPBYTE) ¤tid, &lendword) != ERROR_SUCCESS )
633 currentid = -1; /* change this later */
634 if(RegQueryInfoKeyA(hkLocations, NULL, NULL, NULL, NULL, &maxlockeylen,
635 NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
636 RegCloseKey(hkLocations);
637 ERR("unexpected registry error 2.\n");
638 return LINEERR_INIFILECORRUPT;
641 if( maxlockeylen < 10)
642 maxlockeylen = 10; /* need this also if there is no key */
643 loc_key_name = HeapAlloc( GetProcessHeap(), 0, maxlockeylen);
644 /* first time through: calculate needed space */
648 while( RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen)
652 if( strncasecmp(loc_key_name, "location", 8) ||
653 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey)
657 length += sizeof(LINELOCATIONENTRY);
658 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val);
660 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL,NULL,&size_val);
662 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL,NULL,&size_val);
664 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL,NULL,&size_val);
666 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL,NULL,&size_val);
668 /* fixme: what about TollPrefixList???? */
669 RegCloseKey(hsubkey);
671 if(numlocations == 0) {
672 /* add one location */
673 if( RegCreateKeyA( hkLocations, "Location1", &hsubkey)
678 length += sizeof(LINELOCATIONENTRY) + 20 ;
679 RegSetValueExA( hsubkey, "AreaCode", 0, REG_SZ, (const BYTE *)"010", 4);
680 GetLocaleInfoA( LOCALE_SYSTEM_DEFAULT, LOCALE_ICOUNTRY, buf, 8);
682 RegSetValueExA( hsubkey, "Country", 0, REG_DWORD, (LPBYTE)&dwval,
684 RegSetValueExA( hsubkey, "DisableCallWaiting", 0, REG_SZ, (const BYTE *)"", 1);
686 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval,
688 RegSetValueExA( hsubkey, "LongDistanceAccess", 0, REG_SZ, (const BYTE *)"", 1);
689 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"New Location", 13);
690 RegSetValueExA( hsubkey, "OutsideAccess", 0, REG_SZ, (const BYTE *)"", 1);
691 RegCloseKey(hsubkey);
693 RegSetValueExA( hkLocations, "CurrentID", 0, REG_DWORD,
694 (LPBYTE)&dwval, sizeof(DWORD));
696 RegSetValueExA( hkLocations, "NextID", 0, REG_DWORD, (LPBYTE)&dwval,
700 /* do the card list */
702 if( RegCreateKeyA(HKEY_CURRENT_USER, szCardsKey, &hkCards)
704 if(RegQueryInfoKeyA(hkCards, NULL, NULL, NULL, NULL, &maxcardkeylen,
705 NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
707 if( maxcardkeylen < 6) maxcardkeylen = 6;
708 card_key_name = HeapAlloc(GetProcessHeap(), 0, maxcardkeylen);
710 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) ==
714 if( strncasecmp(card_key_name, "card", 4) || ERROR_SUCCESS !=
715 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) ))
718 length += sizeof(LINECARDENTRY);
719 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val);
721 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL,NULL,&size_val);
723 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL,NULL,&size_val);
725 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL,NULL,
728 RegCloseKey(hsubkey);
731 /* add one card (direct call) */
733 ERROR_SUCCESS == RegCreateKeyA( hkCards, "Card1", &hsubkey)) {
736 length += sizeof(LINECARDENTRY) + 22 ;
737 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"None (Direct Call)", 19);
739 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval,
741 RegSetValueExA( hsubkey, "InternationalRule", 0, REG_SZ, (const BYTE *)"", 1);
742 RegSetValueExA( hsubkey, "LDRule", 0, REG_SZ, (const BYTE *)"", 1);
743 RegSetValueExA( hsubkey, "LocalRule", 0, REG_SZ, (const BYTE *)"", 1);
744 RegCloseKey(hsubkey);
746 RegSetValueExA( hkCards, "NextID", 0, REG_DWORD, (LPBYTE)&dwval,
749 } else hkCards = 0; /* should really fail */
750 /* check if sufficient room is available */
751 lpTranslateCaps->dwNeededSize = sizeof(LINETRANSLATECAPS) + length;
752 if ( lpTranslateCaps->dwNeededSize > lpTranslateCaps->dwTotalSize ) {
753 RegCloseKey( hkLocations);
754 if( hkCards) RegCloseKey( hkCards);
755 HeapFree(GetProcessHeap(), 0, loc_key_name);
756 HeapFree(GetProcessHeap(), 0, card_key_name);
757 lpTranslateCaps->dwUsedSize = sizeof(LINETRANSLATECAPS);
758 TRACE("Insufficient space: total %d needed %d used %d\n",
759 lpTranslateCaps->dwTotalSize,
760 lpTranslateCaps->dwNeededSize,
761 lpTranslateCaps->dwUsedSize);
764 /* fill in the LINETRANSLATECAPS structure */
765 lpTranslateCaps->dwUsedSize = lpTranslateCaps->dwNeededSize;
766 lpTranslateCaps->dwNumLocations = numlocations;
767 lpTranslateCaps->dwLocationListSize = sizeof(LINELOCATIONENTRY) *
768 lpTranslateCaps->dwNumLocations;
769 lpTranslateCaps->dwLocationListOffset = sizeof(LINETRANSLATECAPS);
770 lpTranslateCaps->dwCurrentLocationID = currentid;
771 lpTranslateCaps->dwNumCards = numcards;
772 lpTranslateCaps->dwCardListSize = sizeof(LINECARDENTRY) *
773 lpTranslateCaps->dwNumCards;
774 lpTranslateCaps->dwCardListOffset = lpTranslateCaps->dwLocationListOffset +
775 lpTranslateCaps->dwLocationListSize;
776 lpTranslateCaps->dwCurrentPreferredCardID = 0;
777 /* this is where the strings will be stored */
778 strptr = ((LPBYTE) lpTranslateCaps) +
779 lpTranslateCaps->dwCardListOffset + lpTranslateCaps->dwCardListSize;
780 pLocEntry = (LPLINELOCATIONENTRY) (lpTranslateCaps + 1);
781 /* key with Preferred CardID's */
782 if( RegOpenKeyA(HKEY_CURRENT_USER, szLocationsKey, &hkCardLocations)
785 /* second time through all locations */
787 while(RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen)
791 if( strncasecmp(loc_key_name, "location", 8) ||
792 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey)
795 size_val=sizeof(DWORD);
796 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL,
797 (LPBYTE) &(pLocEntry->dwPermanentLocationID), &size_val) !=
799 pLocEntry->dwPermanentLocationID = atoi( loc_key_name + 8);
801 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val);
802 pLocEntry->dwLocationNameSize = size_val;
803 pLocEntry->dwLocationNameOffset = strptr - (LPBYTE) lpTranslateCaps;
807 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL, strptr, &size_val);
808 pLocEntry->dwCityCodeSize = size_val;
809 pLocEntry->dwCityCodeOffset = strptr - (LPBYTE) lpTranslateCaps;
813 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL, strptr, &size_val);
814 pLocEntry->dwLocalAccessCodeSize = size_val;
815 pLocEntry->dwLocalAccessCodeOffset = strptr - (LPBYTE) lpTranslateCaps;
818 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL, strptr,
820 pLocEntry->dwLongDistanceAccessCodeSize= size_val;
821 pLocEntry->dwLongDistanceAccessCodeOffset= strptr -
822 (LPBYTE) lpTranslateCaps;
825 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL, strptr,
827 pLocEntry->dwCancelCallWaitingSize= size_val;
828 pLocEntry->dwCancelCallWaitingOffset= strptr - (LPBYTE) lpTranslateCaps;
831 pLocEntry->dwTollPrefixListSize = 0; /* FIXME */
832 pLocEntry->dwTollPrefixListOffset = 0; /* FIXME */
834 size_val=sizeof(DWORD);
835 RegQueryValueExA(hsubkey, "Country",NULL,NULL,
836 (LPBYTE) &(pLocEntry->dwCountryCode), &size_val);
837 pLocEntry->dwCountryID = pLocEntry->dwCountryCode; /* FIXME */
838 RegQueryValueExA(hsubkey, "Flags",NULL,NULL,
839 (LPBYTE) &(pLocEntry->dwOptions), &size_val);
840 RegCloseKey(hsubkey);
841 /* get preferred cardid */
842 pLocEntry->dwPreferredCardID = 0;
843 if ( hkCardLocations) {
844 size_val=sizeof(DWORD);
845 if(RegOpenKeyA(hkCardLocations, loc_key_name, &hsubkey) ==
847 RegQueryValueExA(hsubkey, "CallingCard",NULL,NULL,
848 (LPBYTE) &(pLocEntry->dwPreferredCardID), &size_val);
849 RegCloseKey(hsubkey);
853 /* make sure there is a currentID */
855 currentid = pLocEntry->dwPermanentLocationID;
856 lpTranslateCaps->dwCurrentLocationID = currentid;
858 if(pLocEntry->dwPermanentLocationID == currentid )
859 lpTranslateCaps->dwCurrentPreferredCardID =
860 pLocEntry->dwPreferredCardID;
861 TRACE("added: ID %d %s CountryCode %d CityCode %s CardID %d "
862 "LocalAccess: %s LongDistanceAccess: %s CountryID %d "
863 "Options %d CancelCallWait %s\n",
864 pLocEntry->dwPermanentLocationID,
865 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocationNameOffset),
866 pLocEntry->dwCountryCode,
867 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCityCodeOffset),
868 pLocEntry->dwPreferredCardID,
869 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocalAccessCodeOffset),
870 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLongDistanceAccessCodeOffset),
871 pLocEntry->dwCountryID,
872 pLocEntry->dwOptions,
873 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCancelCallWaitingOffset));
876 pCardEntry= (LPLINECARDENTRY) pLocEntry;
877 /* do the card list */
880 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) ==
884 if( strncasecmp(card_key_name, "card", 4) ||
885 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) != ERROR_SUCCESS))
887 size_val=sizeof(DWORD);
888 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL,
889 (LPBYTE) &(pCardEntry->dwPermanentCardID), &size_val) !=
891 pCardEntry->dwPermanentCardID= atoi( card_key_name + 4);
893 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val);
894 pCardEntry->dwCardNameSize = size_val;
895 pCardEntry->dwCardNameOffset = strptr - (LPBYTE) lpTranslateCaps;
897 pCardEntry->dwCardNumberDigits = 1; /* FIXME */
899 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL, strptr, &size_val);
900 pCardEntry->dwSameAreaRuleSize= size_val;
901 pCardEntry->dwSameAreaRuleOffset= strptr - (LPBYTE) lpTranslateCaps;
904 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL, strptr, &size_val);
905 pCardEntry->dwLongDistanceRuleSize = size_val;
906 pCardEntry->dwLongDistanceRuleOffset = strptr - (LPBYTE) lpTranslateCaps;
909 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL, strptr,
911 pCardEntry->dwInternationalRuleSize = size_val;
912 pCardEntry->dwInternationalRuleOffset = strptr -
913 (LPBYTE) lpTranslateCaps;
915 size_val=sizeof(DWORD);
916 RegQueryValueExA(hsubkey, "Flags",NULL, NULL,
917 (LPBYTE) &(pCardEntry->dwOptions), &size_val);
918 TRACE( "added card: ID %d name %s SameArea %s LongDistance %s International %s Options 0x%x\n",
919 pCardEntry->dwPermanentCardID,
920 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwCardNameOffset),
921 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwSameAreaRuleOffset),
922 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwLongDistanceRuleOffset),
923 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwInternationalRuleOffset),
924 pCardEntry->dwOptions);
930 if(hkLocations) RegCloseKey(hkLocations);
931 if(hkCards) RegCloseKey(hkCards);
932 if(hkCardLocations) RegCloseKey(hkCardLocations);
933 HeapFree(GetProcessHeap(), 0, loc_key_name);
934 HeapFree(GetProcessHeap(), 0, card_key_name);
935 TRACE(" returning success tot %d needed %d used %d\n",
936 lpTranslateCaps->dwTotalSize,
937 lpTranslateCaps->dwNeededSize,
938 lpTranslateCaps->dwUsedSize );
939 return 0; /* success */
942 /***********************************************************************
943 * lineHandoff (TAPI32.@)
945 DWORD WINAPI lineHandoffA(HCALL hCall, LPCSTR lpszFileName, DWORD dwMediaMode)
947 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszFileName, dwMediaMode);
951 /***********************************************************************
952 * lineHold (TAPI32.@)
954 DWORD WINAPI lineHold(HCALL hCall)
956 FIXME("(%p): stub.\n", hCall);
960 /***********************************************************************
961 * lineInitialize (TAPI32.@)
963 DWORD WINAPI lineInitialize(
964 LPHLINEAPP lphLineApp,
966 LINECALLBACK lpfnCallback,
970 FIXME("(%p, %p, %p, %s, %p): stub.\n", lphLineApp, hInstance,
971 lpfnCallback, debugstr_a(lpszAppName), lpdwNumDevs);
975 /***********************************************************************
976 * lineInitializeExA (TAPI32.@)
978 LONG WINAPI lineInitializeExA(LPHLINEAPP lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, LPCSTR lpszFriendlyAppName, LPDWORD lpdwNumDevs, LPDWORD lpdwAPIVersion, LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams)
980 FIXME("(%p, %p, %p, %s, %p, %p, %p): stub.\n", lphLineApp, hInstance,
981 lpfnCallback, debugstr_a(lpszFriendlyAppName), lpdwNumDevs, lpdwAPIVersion, lpLineInitializeExParams);
985 /***********************************************************************
986 * lineMakeCall (TAPI32.@)
988 DWORD WINAPI lineMakeCallA(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress, DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams)
990 FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, lpszDestAddress, dwCountryCode, lpCallParams);
994 /***********************************************************************
995 * lineMonitorDigits (TAPI32.@)
997 DWORD WINAPI lineMonitorDigits(HCALL hCall, DWORD dwDigitModes)
999 FIXME("(%p, %08x): stub.\n", hCall, dwDigitModes);
1003 /***********************************************************************
1004 * lineMonitorMedia (TAPI32.@)
1006 DWORD WINAPI lineMonitorMedia(HCALL hCall, DWORD dwMediaModes)
1008 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes);
1012 /***********************************************************************
1013 * lineMonitorTones (TAPI32.@)
1015 DWORD WINAPI lineMonitorTones(HCALL hCall, LPLINEMONITORTONE lpToneList, DWORD dwNumEntries)
1017 FIXME("(%p, %p, %08x): stub.\n", hCall, lpToneList, dwNumEntries);
1021 /***********************************************************************
1022 * lineNegotiateAPIVersion (TAPI32.@)
1024 DWORD WINAPI lineNegotiateAPIVersion(
1027 DWORD dwAPILowVersion,
1028 DWORD dwAPIHighVersion,
1029 LPDWORD lpdwAPIVersion,
1030 LPLINEEXTENSIONID lpExtensionID
1033 FIXME("(%p, %d, %d, %d, %p, %p): stub.\n", hLineApp, dwDeviceID,
1034 dwAPILowVersion, dwAPIHighVersion, lpdwAPIVersion, lpExtensionID);
1035 *lpdwAPIVersion = dwAPIHighVersion;
1039 /***********************************************************************
1040 * lineNegotiateExtVersion (TAPI32.@)
1042 DWORD WINAPI lineNegotiateExtVersion(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtLowVersion, DWORD dwExtHighVersion, LPDWORD lpdwExtVersion)
1048 /***********************************************************************
1049 * lineOpen (TAPI32.@)
1051 DWORD WINAPI lineOpenA(HLINEAPP hLineApp, DWORD dwDeviceID, LPHLINE lphLine, DWORD dwAPIVersion, DWORD dwExtVersion, DWORD dwCallbackInstance, DWORD dwPrivileges, DWORD dwMediaModes, LPLINECALLPARAMS lpCallParams)
1057 /***********************************************************************
1058 * linePark (TAPI32.@)
1060 DWORD WINAPI lineParkA(HCALL hCall, DWORD dwParkMode, LPCSTR lpszDirAddress, LPVARSTRING lpNonDirAddress)
1062 FIXME("(%p, %08x, %s, %p): stub.\n", hCall, dwParkMode, lpszDirAddress, lpNonDirAddress);
1066 /***********************************************************************
1067 * linePickup (TAPI32.@)
1069 DWORD WINAPI linePickupA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress, LPCSTR lpszGroupID)
1071 FIXME("(%p, %08x, %p, %s, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress, lpszGroupID);
1075 /***********************************************************************
1076 * linePrepareAddToConference (TAPI32.@)
1078 DWORD WINAPI linePrepareAddToConferenceA(HCALL hConfCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
1080 FIXME("(%p, %p, %p): stub.\n", hConfCall, lphConsultCall, lpCallParams);
1084 /***********************************************************************
1085 * lineRedirect (TAPI32.@)
1087 DWORD WINAPI lineRedirectA(
1089 LPCSTR lpszDestAddress,
1090 DWORD dwCountryCode) {
1096 /***********************************************************************
1097 * lineRegisterRequestRecipient (TAPI32.@)
1099 DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP hLineApp, DWORD dwRegistrationInstance, DWORD dwRequestMode, DWORD dwEnable)
1101 FIXME("(%p, %08x, %08x, %08x): stub.\n", hLineApp, dwRegistrationInstance, dwRequestMode, dwEnable);
1105 /***********************************************************************
1106 * lineReleaseUserUserInfo (TAPI32.@)
1108 DWORD WINAPI lineReleaseUserUserInfo(HCALL hCall)
1110 FIXME("(%p): stub.\n", hCall);
1114 /***********************************************************************
1115 * lineRemoveFromConference (TAPI32.@)
1117 DWORD WINAPI lineRemoveFromConference(HCALL hCall)
1119 FIXME("(%p): stub.\n", hCall);
1123 /***********************************************************************
1124 * lineRemoveProvider (TAPI32.@)
1126 DWORD WINAPI lineRemoveProvider(DWORD dwPermanentProviderID, HWND hwndOwner)
1128 FIXME("(%08x, %p): stub.\n", dwPermanentProviderID, hwndOwner);
1132 /***********************************************************************
1133 * lineSecureCall (TAPI32.@)
1135 DWORD WINAPI lineSecureCall(HCALL hCall)
1137 FIXME("(%p): stub.\n", hCall);
1141 /***********************************************************************
1142 * lineSendUserUserInfo (TAPI32.@)
1144 DWORD WINAPI lineSendUserUserInfo(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
1146 FIXME("(%p, %s, %08x): stub.\n", hCall, lpsUserUserInfo, dwSize);
1150 /***********************************************************************
1151 * lineSetAppPriority (TAPI32.@)
1153 DWORD WINAPI lineSetAppPriorityA(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPCSTR lpszExtensionName, DWORD dwPriority)
1155 FIXME("(%s, %08x, %p, %08x, %s, %08x): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpszExtensionName, dwPriority);
1159 /***********************************************************************
1160 * lineSetAppSpecific (TAPI32.@)
1162 DWORD WINAPI lineSetAppSpecific(HCALL hCall, DWORD dwAppSpecific)
1164 FIXME("(%p, %08x): stub.\n", hCall, dwAppSpecific);
1168 /***********************************************************************
1169 * lineSetCallParams (TAPI32.@)
1171 DWORD WINAPI lineSetCallParams(HCALL hCall, DWORD dwBearerMode, DWORD dwMinRate, DWORD dwMaxRate, LPLINEDIALPARAMS lpDialParams)
1173 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hCall, dwBearerMode, dwMinRate, dwMaxRate, lpDialParams);
1177 /***********************************************************************
1178 * lineSetCallPrivilege (TAPI32.@)
1180 DWORD WINAPI lineSetCallPrivilege(HCALL hCall, DWORD dwCallPrivilege)
1182 FIXME("(%p, %08x): stub.\n", hCall, dwCallPrivilege);
1186 /***********************************************************************
1187 * lineSetCurrentLocation (TAPI32.@)
1189 DWORD WINAPI lineSetCurrentLocation(HLINEAPP hLineApp, DWORD dwLocation)
1191 FIXME("(%p, %08x): stub.\n", hLineApp, dwLocation);
1195 /***********************************************************************
1196 * lineSetDevConfig (TAPI32.@)
1198 DWORD WINAPI lineSetDevConfigA(DWORD dwDeviceID, LPVOID lpDeviceConfig, DWORD dwSize, LPCSTR lpszDeviceClass)
1200 FIXME("(%08x, %p, %08x, %s): stub.\n", dwDeviceID, lpDeviceConfig, dwSize, lpszDeviceClass);
1204 /***********************************************************************
1205 * lineSetMediaControl (TAPI32.@)
1207 DWORD WINAPI lineSetMediaControl(
1212 LPLINEMEDIACONTROLDIGIT const lpDigitList,
1213 DWORD dwDigitNumEntries,
1214 LPLINEMEDIACONTROLMEDIA const lpMediaList,
1215 DWORD dwMediaNumEntries,
1216 LPLINEMEDIACONTROLTONE const lpToneList,
1217 DWORD dwToneNumEntries,
1218 LPLINEMEDIACONTROLCALLSTATE const lpCallStateList,
1219 DWORD dwCallStateNumEntries)
1225 /***********************************************************************
1226 * lineSetMediaMode (TAPI32.@)
1228 DWORD WINAPI lineSetMediaMode(HCALL hCall, DWORD dwMediaModes)
1230 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes);
1234 /***********************************************************************
1235 * lineSetNumRings (TAPI32.@)
1237 DWORD WINAPI lineSetNumRings(HLINE hLine, DWORD dwAddressID, DWORD dwNumRings)
1239 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwAddressID, dwNumRings);
1243 /***********************************************************************
1244 * lineSetStatusMessages (TAPI32.@)
1246 DWORD WINAPI lineSetStatusMessages(HLINE hLine, DWORD dwLineStates, DWORD dwAddressStates)
1248 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwLineStates, dwAddressStates);
1252 /***********************************************************************
1253 * lineSetTerminal (TAPI32.@)
1255 DWORD WINAPI lineSetTerminal(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, DWORD dwTerminalModes, DWORD dwTerminalID, DWORD bEnable)
1257 FIXME("(%p, %08x, %p, %08x, %08x, %08x, %08x): stub.\n", hLine, dwAddressID, hCall, dwSelect, dwTerminalModes, dwTerminalID, bEnable);
1261 /***********************************************************************
1262 * lineSetTollList (TAPI32.@)
1264 DWORD WINAPI lineSetTollListA(HLINEAPP hLineApp, DWORD dwDeviceID, LPCSTR lpszAddressIn, DWORD dwTollListOption)
1266 FIXME("(%p, %08x, %s, %08x): stub.\n", hLineApp, dwDeviceID, lpszAddressIn, dwTollListOption);
1270 /***********************************************************************
1271 * lineSetupConference (TAPI32.@)
1273 DWORD WINAPI lineSetupConferenceA(HCALL hCall, HLINE hLine, LPHCALL lphConfCall, LPHCALL lphConsultCall, DWORD dwNumParties, LPLINECALLPARAMS lpCallParams)
1275 FIXME("(%p, %p, %p, %p, %08x, %p): stub.\n", hCall, hLine, lphConfCall, lphConsultCall, dwNumParties, lpCallParams);
1279 /***********************************************************************
1280 * lineSetupTransfer (TAPI32.@)
1282 DWORD WINAPI lineSetupTransferA(HCALL hCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
1284 FIXME("(%p, %p, %p): stub.\n", hCall, lphConsultCall, lpCallParams);
1288 /***********************************************************************
1289 * lineShutdown (TAPI32.@)
1291 DWORD WINAPI lineShutdown(HLINEAPP hLineApp)
1293 FIXME("(%p): stub.\n", hLineApp);
1297 /***********************************************************************
1298 * lineSwapHold (TAPI32.@)
1300 DWORD WINAPI lineSwapHold(HCALL hActiveCall, HCALL hHeldCall)
1302 FIXME("(active: %p, held: %p): stub.\n", hActiveCall, hHeldCall);
1306 /***********************************************************************
1307 * lineTranslateAddress (TAPI32.@)
1309 DWORD WINAPI lineTranslateAddressA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, LPCSTR lpszAddressIn, DWORD dwCard, DWORD dwTranslateOptions, LPLINETRANSLATEOUTPUT lpTranslateOutput)
1311 FIXME("(%p, %08x, %08x, %s, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, lpszAddressIn, dwCard, dwTranslateOptions, lpTranslateOutput);
1315 /***********************************************************************
1316 * lineTranslateDialog (TAPI32.@)
1318 DWORD WINAPI lineTranslateDialogA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, HWND hwndOwner, LPCSTR lpszAddressIn)
1320 FIXME("(%p, %08x, %08x, %p, %s): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, hwndOwner, lpszAddressIn);
1324 /***********************************************************************
1325 * lineUncompleteCall (TAPI32.@)
1327 DWORD WINAPI lineUncompleteCall(HLINE hLine, DWORD dwCompletionID)
1329 FIXME("(%p, %08x): stub.\n", hLine, dwCompletionID);
1333 /***********************************************************************
1334 * lineUnhold (TAPI32.@)
1336 DWORD WINAPI lineUnhold(HCALL hCall)
1338 FIXME("(%p): stub.\n", hCall);
1342 /***********************************************************************
1343 * lineUnpark (TAPI32.@)
1345 DWORD WINAPI lineUnparkA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress)
1347 FIXME("(%p, %08x, %p, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress);