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 * lineGetProviderList (TAPI32.@)
525 DWORD WINAPI lineGetProviderListA(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList)
527 FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList);
531 /***********************************************************************
532 * lineGetRequest (TAPI32.@)
534 DWORD WINAPI lineGetRequestA(HLINEAPP hLineApp, DWORD dwRequestMode, LPVOID lpRequestBuffer)
536 FIXME("%p, %08x, %p): stub.\n", hLineApp, dwRequestMode, lpRequestBuffer);
540 /***********************************************************************
541 * lineGetStatusMessages (TAPI32.@)
543 DWORD WINAPI lineGetStatusMessages(HLINE hLine, LPDWORD lpdwLineStatus, LPDWORD lpdwAddressStates)
545 FIXME("(%p, %p, %p): stub.\n", hLine, lpdwLineStatus, lpdwAddressStates);
549 /***********************************************************************
550 * lineGetTranslateCaps (TAPI32.@)
552 * get address translate capabilities. Returns a LINETRANSLATECAPS
555 * +-----------------------+
559 * +-----------------------+
561 * |LocationsListSize |
562 * |LocationsListOffset | -+
563 * |CurrentLocationID | |
564 * +-----------------------+ |
567 * |CardListOffset | -|--+
568 * |CurrentPreferredCardID | | |
569 * +-----------------------+ | |
571 * |LINELOCATIONENTRY #1 | |
573 * +-----------------------+ |
575 * +-----------------------+ |
577 * |LINELOCATIONENTRY | |
579 * +-----------------------+ |
581 * |LINECARDENTRY #1 |
583 * +-----------------------+
585 * +-----------------------+
587 * |LINECARDENTRY #NumCards|
589 * +-----------------------+
590 * | room for strings named|
591 * | in the structures |
593 * +-----------------------+
595 DWORD WINAPI lineGetTranslateCapsA(HLINEAPP hLineApp, DWORD dwAPIVersion,
596 LPLINETRANSLATECAPS lpTranslateCaps)
598 HKEY hkLocations, hkCards, hkCardLocations, hsubkey;
599 int numlocations, numcards;
602 char *loc_key_name = NULL;
603 char *card_key_name = NULL;
609 LPLINELOCATIONENTRY pLocEntry;
610 LPLINECARDENTRY pCardEntry;
612 TRACE("(%p, %08x, %p (tot. size %d)\n", hLineApp, dwAPIVersion,
613 lpTranslateCaps, lpTranslateCaps->dwTotalSize );
614 if( lpTranslateCaps->dwTotalSize < sizeof(LINETRANSLATECAPS))
615 return LINEERR_STRUCTURETOOSMALL;
616 if( RegCreateKeyA(HKEY_LOCAL_MACHINE, szLocationsKey, &hkLocations)
618 ERR("unexpected registry error 1.\n");
619 return LINEERR_INIFILECORRUPT;
621 lendword = sizeof( DWORD);
622 if( RegQueryValueExA( hkLocations, "CurrentID", NULL, NULL,
623 (LPBYTE) ¤tid, &lendword) != ERROR_SUCCESS )
624 currentid = -1; /* change this later */
625 if(RegQueryInfoKeyA(hkLocations, NULL, NULL, NULL, NULL, &maxlockeylen,
626 NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
627 RegCloseKey(hkLocations);
628 ERR("unexpected registry error 2.\n");
629 return LINEERR_INIFILECORRUPT;
632 if( maxlockeylen < 10)
633 maxlockeylen = 10; /* need this also if there is no key */
634 loc_key_name = HeapAlloc( GetProcessHeap(), 0, maxlockeylen);
635 /* first time through: calculate needed space */
639 while( RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen)
643 if( strncasecmp(loc_key_name, "location", 8) ||
644 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey)
648 length += sizeof(LINELOCATIONENTRY);
649 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val);
651 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL,NULL,&size_val);
653 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL,NULL,&size_val);
655 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL,NULL,&size_val);
657 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL,NULL,&size_val);
659 /* fixme: what about TollPrefixList???? */
660 RegCloseKey(hsubkey);
662 if(numlocations == 0) {
663 /* add one location */
664 if( RegCreateKeyA( hkLocations, "Location1", &hsubkey)
669 length += sizeof(LINELOCATIONENTRY) + 20 ;
670 RegSetValueExA( hsubkey, "AreaCode", 0, REG_SZ, (const BYTE *)"010", 4);
671 GetLocaleInfoA( LOCALE_SYSTEM_DEFAULT, LOCALE_ICOUNTRY, buf, 8);
673 RegSetValueExA( hsubkey, "Country", 0, REG_DWORD, (LPBYTE)&dwval,
675 RegSetValueExA( hsubkey, "DisableCallWaiting", 0, REG_SZ, (const BYTE *)"", 1);
677 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval,
679 RegSetValueExA( hsubkey, "LongDistanceAccess", 0, REG_SZ, (const BYTE *)"", 1);
680 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"New Location", 13);
681 RegSetValueExA( hsubkey, "OutsideAccess", 0, REG_SZ, (const BYTE *)"", 1);
682 RegCloseKey(hsubkey);
684 RegSetValueExA( hkLocations, "CurrentID", 0, REG_DWORD,
685 (LPBYTE)&dwval, sizeof(DWORD));
687 RegSetValueExA( hkLocations, "NextID", 0, REG_DWORD, (LPBYTE)&dwval,
691 /* do the card list */
693 if( RegCreateKeyA(HKEY_CURRENT_USER, szCardsKey, &hkCards)
695 if(RegQueryInfoKeyA(hkCards, NULL, NULL, NULL, NULL, &maxcardkeylen,
696 NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
698 if( maxcardkeylen < 6) maxcardkeylen = 6;
699 card_key_name = HeapAlloc(GetProcessHeap(), 0, maxcardkeylen);
701 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) ==
705 if( strncasecmp(card_key_name, "card", 4) || ERROR_SUCCESS !=
706 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) ))
709 length += sizeof(LINECARDENTRY);
710 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val);
712 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL,NULL,&size_val);
714 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL,NULL,&size_val);
716 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL,NULL,
719 RegCloseKey(hsubkey);
722 /* add one card (direct call) */
724 ERROR_SUCCESS == RegCreateKeyA( hkCards, "Card1", &hsubkey)) {
727 length += sizeof(LINECARDENTRY) + 22 ;
728 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"None (Direct Call)", 19);
730 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval,
732 RegSetValueExA( hsubkey, "InternationalRule", 0, REG_SZ, (const BYTE *)"", 1);
733 RegSetValueExA( hsubkey, "LDRule", 0, REG_SZ, (const BYTE *)"", 1);
734 RegSetValueExA( hsubkey, "LocalRule", 0, REG_SZ, (const BYTE *)"", 1);
735 RegCloseKey(hsubkey);
737 RegSetValueExA( hkCards, "NextID", 0, REG_DWORD, (LPBYTE)&dwval,
740 } else hkCards = 0; /* should realy fail */
741 /* check if sufficient room is available */
742 lpTranslateCaps->dwNeededSize = sizeof(LINETRANSLATECAPS) + length;
743 if ( lpTranslateCaps->dwNeededSize > lpTranslateCaps->dwTotalSize ) {
744 RegCloseKey( hkLocations);
745 if( hkCards) RegCloseKey( hkCards);
746 HeapFree(GetProcessHeap(), 0, loc_key_name);
747 HeapFree(GetProcessHeap(), 0, card_key_name);
748 lpTranslateCaps->dwUsedSize = sizeof(LINETRANSLATECAPS);
749 TRACE("Insufficient space: total %d needed %d used %d\n",
750 lpTranslateCaps->dwTotalSize,
751 lpTranslateCaps->dwNeededSize,
752 lpTranslateCaps->dwUsedSize);
755 /* fill in the LINETRANSLATECAPS structure */
756 lpTranslateCaps->dwUsedSize = lpTranslateCaps->dwNeededSize;
757 lpTranslateCaps->dwNumLocations = numlocations;
758 lpTranslateCaps->dwLocationListSize = sizeof(LINELOCATIONENTRY) *
759 lpTranslateCaps->dwNumLocations;
760 lpTranslateCaps->dwLocationListOffset = sizeof(LINETRANSLATECAPS);
761 lpTranslateCaps->dwCurrentLocationID = currentid;
762 lpTranslateCaps->dwNumCards = numcards;
763 lpTranslateCaps->dwCardListSize = sizeof(LINECARDENTRY) *
764 lpTranslateCaps->dwNumCards;
765 lpTranslateCaps->dwCardListOffset = lpTranslateCaps->dwLocationListOffset +
766 lpTranslateCaps->dwLocationListSize;
767 lpTranslateCaps->dwCurrentPreferredCardID = 0;
768 /* this is where the strings will be stored */
769 strptr = ((LPBYTE) lpTranslateCaps) +
770 lpTranslateCaps->dwCardListOffset + lpTranslateCaps->dwCardListSize;
771 pLocEntry = (LPLINELOCATIONENTRY) (lpTranslateCaps + 1);
772 /* key with Preferred CardID's */
773 if( RegOpenKeyA(HKEY_CURRENT_USER, szLocationsKey, &hkCardLocations)
776 /* second time through all locations */
778 while(RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen)
782 if( strncasecmp(loc_key_name, "location", 8) ||
783 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey)
786 size_val=sizeof(DWORD);
787 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL,
788 (LPBYTE) &(pLocEntry->dwPermanentLocationID), &size_val) !=
790 pLocEntry->dwPermanentLocationID = atoi( loc_key_name + 8);
792 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val);
793 pLocEntry->dwLocationNameSize = size_val;
794 pLocEntry->dwLocationNameOffset = strptr - (LPBYTE) lpTranslateCaps;
798 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL, strptr, &size_val);
799 pLocEntry->dwCityCodeSize = size_val;
800 pLocEntry->dwCityCodeOffset = strptr - (LPBYTE) lpTranslateCaps;
804 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL, strptr, &size_val);
805 pLocEntry->dwLocalAccessCodeSize = size_val;
806 pLocEntry->dwLocalAccessCodeOffset = strptr - (LPBYTE) lpTranslateCaps;
809 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL, strptr,
811 pLocEntry->dwLongDistanceAccessCodeSize= size_val;
812 pLocEntry->dwLongDistanceAccessCodeOffset= strptr -
813 (LPBYTE) lpTranslateCaps;
816 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL, strptr,
818 pLocEntry->dwCancelCallWaitingSize= size_val;
819 pLocEntry->dwCancelCallWaitingOffset= strptr - (LPBYTE) lpTranslateCaps;
822 pLocEntry->dwTollPrefixListSize = 0; /* FIXME */
823 pLocEntry->dwTollPrefixListOffset = 0; /* FIXME */
825 size_val=sizeof(DWORD);
826 RegQueryValueExA(hsubkey, "Country",NULL,NULL,
827 (LPBYTE) &(pLocEntry->dwCountryCode), &size_val);
828 pLocEntry->dwCountryID = pLocEntry->dwCountryCode; /* FIXME */
829 RegQueryValueExA(hsubkey, "Flags",NULL,NULL,
830 (LPBYTE) &(pLocEntry->dwOptions), &size_val);
831 RegCloseKey(hsubkey);
832 /* get preferred cardid */
833 pLocEntry->dwPreferredCardID = 0;
834 if ( hkCardLocations) {
835 size_val=sizeof(DWORD);
836 if(RegOpenKeyA(hkCardLocations, loc_key_name, &hsubkey) ==
838 RegQueryValueExA(hsubkey, "CallingCard",NULL,NULL,
839 (LPBYTE) &(pLocEntry->dwPreferredCardID), &size_val);
840 RegCloseKey(hsubkey);
844 /* make sure there is a currentID */
846 currentid = pLocEntry->dwPermanentLocationID;
847 lpTranslateCaps->dwCurrentLocationID = currentid;
849 if(pLocEntry->dwPermanentLocationID == currentid )
850 lpTranslateCaps->dwCurrentPreferredCardID =
851 pLocEntry->dwPreferredCardID;
852 TRACE("added: ID %d %s CountryCode %d CityCode %s CardID %d "
853 "LocalAccess: %s LongDistanceAccess: %s CountryID %d "
854 "Options %d CancelCallWait %s\n",
855 pLocEntry->dwPermanentLocationID,
856 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocationNameOffset),
857 pLocEntry->dwCountryCode,
858 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCityCodeOffset),
859 pLocEntry->dwPreferredCardID,
860 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocalAccessCodeOffset),
861 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLongDistanceAccessCodeOffset),
862 pLocEntry->dwCountryID,
863 pLocEntry->dwOptions,
864 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCancelCallWaitingOffset));
867 pCardEntry= (LPLINECARDENTRY) pLocEntry;
868 /* do the card list */
871 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) ==
875 if( strncasecmp(card_key_name, "card", 4) ||
876 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) != ERROR_SUCCESS))
878 size_val=sizeof(DWORD);
879 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL,
880 (LPBYTE) &(pCardEntry->dwPermanentCardID), &size_val) !=
882 pCardEntry->dwPermanentCardID= atoi( card_key_name + 4);
884 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val);
885 pCardEntry->dwCardNameSize = size_val;
886 pCardEntry->dwCardNameOffset = strptr - (LPBYTE) lpTranslateCaps;
888 pCardEntry->dwCardNumberDigits = 1; /* FIXME */
890 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL, strptr, &size_val);
891 pCardEntry->dwSameAreaRuleSize= size_val;
892 pCardEntry->dwSameAreaRuleOffset= strptr - (LPBYTE) lpTranslateCaps;
895 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL, strptr, &size_val);
896 pCardEntry->dwLongDistanceRuleSize = size_val;
897 pCardEntry->dwLongDistanceRuleOffset = strptr - (LPBYTE) lpTranslateCaps;
900 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL, strptr,
902 pCardEntry->dwInternationalRuleSize = size_val;
903 pCardEntry->dwInternationalRuleOffset = strptr -
904 (LPBYTE) lpTranslateCaps;
906 size_val=sizeof(DWORD);
907 RegQueryValueExA(hsubkey, "Flags",NULL, NULL,
908 (LPBYTE) &(pCardEntry->dwOptions), &size_val);
909 TRACE( "added card: ID %d name %s SameArea %s LongDistance %s International %s Options 0x%x\n",
910 pCardEntry->dwPermanentCardID,
911 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwCardNameOffset),
912 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwSameAreaRuleOffset),
913 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwLongDistanceRuleOffset),
914 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwInternationalRuleOffset),
915 pCardEntry->dwOptions);
921 if(hkLocations) RegCloseKey(hkLocations);
922 if(hkCards) RegCloseKey(hkCards);
923 if(hkCardLocations) RegCloseKey(hkCardLocations);
924 HeapFree(GetProcessHeap(), 0, loc_key_name);
925 HeapFree(GetProcessHeap(), 0, card_key_name);
926 TRACE(" returning success tot %d needed %d used %d\n",
927 lpTranslateCaps->dwTotalSize,
928 lpTranslateCaps->dwNeededSize,
929 lpTranslateCaps->dwUsedSize );
930 return 0; /* success */
933 /***********************************************************************
934 * lineHandoff (TAPI32.@)
936 DWORD WINAPI lineHandoffA(HCALL hCall, LPCSTR lpszFileName, DWORD dwMediaMode)
938 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszFileName, dwMediaMode);
942 /***********************************************************************
943 * lineHold (TAPI32.@)
945 DWORD WINAPI lineHold(HCALL hCall)
947 FIXME("(%p): stub.\n", hCall);
951 /***********************************************************************
952 * lineInitialize (TAPI32.@)
954 DWORD WINAPI lineInitialize(
955 LPHLINEAPP lphLineApp,
957 LINECALLBACK lpfnCallback,
961 FIXME("(%p, %p, %p, %s, %p): stub.\n", lphLineApp, hInstance,
962 lpfnCallback, debugstr_a(lpszAppName), lpdwNumDevs);
966 /***********************************************************************
967 * lineMakeCall (TAPI32.@)
969 DWORD WINAPI lineMakeCallA(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress, DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams)
971 FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, lpszDestAddress, dwCountryCode, lpCallParams);
975 /***********************************************************************
976 * lineMonitorDigits (TAPI32.@)
978 DWORD WINAPI lineMonitorDigits(HCALL hCall, DWORD dwDigitModes)
980 FIXME("(%p, %08x): stub.\n", hCall, dwDigitModes);
984 /***********************************************************************
985 * lineMonitorMedia (TAPI32.@)
987 DWORD WINAPI lineMonitorMedia(HCALL hCall, DWORD dwMediaModes)
989 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes);
993 /***********************************************************************
994 * lineMonitorTones (TAPI32.@)
996 DWORD WINAPI lineMonitorTones(HCALL hCall, LPLINEMONITORTONE lpToneList, DWORD dwNumEntries)
998 FIXME("(%p, %p, %08x): stub.\n", hCall, lpToneList, dwNumEntries);
1002 /***********************************************************************
1003 * lineNegotiateAPIVersion (TAPI32.@)
1005 DWORD WINAPI lineNegotiateAPIVersion(
1008 DWORD dwAPILowVersion,
1009 DWORD dwAPIHighVersion,
1010 LPDWORD lpdwAPIVersion,
1011 LPLINEEXTENSIONID lpExtensionID
1014 FIXME("(%p, %d, %d, %d, %p, %p): stub.\n", hLineApp, dwDeviceID,
1015 dwAPILowVersion, dwAPIHighVersion, lpdwAPIVersion, lpExtensionID);
1016 *lpdwAPIVersion = dwAPIHighVersion;
1020 /***********************************************************************
1021 * lineNegotiateExtVersion (TAPI32.@)
1023 DWORD WINAPI lineNegotiateExtVersion(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtLowVersion, DWORD dwExtHighVersion, LPDWORD lpdwExtVersion)
1029 /***********************************************************************
1030 * lineOpen (TAPI32.@)
1032 DWORD WINAPI lineOpenA(HLINEAPP hLineApp, DWORD dwDeviceID, LPHLINE lphLine, DWORD dwAPIVersion, DWORD dwExtVersion, DWORD dwCallbackInstance, DWORD dwPrivileges, DWORD dwMediaModes, LPLINECALLPARAMS lpCallParams)
1038 /***********************************************************************
1039 * linePark (TAPI32.@)
1041 DWORD WINAPI lineParkA(HCALL hCall, DWORD dwParkMode, LPCSTR lpszDirAddress, LPVARSTRING lpNonDirAddress)
1043 FIXME("(%p, %08x, %s, %p): stub.\n", hCall, dwParkMode, lpszDirAddress, lpNonDirAddress);
1047 /***********************************************************************
1048 * linePickup (TAPI32.@)
1050 DWORD WINAPI linePickupA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress, LPCSTR lpszGroupID)
1052 FIXME("(%p, %08x, %p, %s, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress, lpszGroupID);
1056 /***********************************************************************
1057 * linePrepareAddToConference (TAPI32.@)
1059 DWORD WINAPI linePrepareAddToConferenceA(HCALL hConfCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
1061 FIXME("(%p, %p, %p): stub.\n", hConfCall, lphConsultCall, lpCallParams);
1065 /***********************************************************************
1066 * lineRedirect (TAPI32.@)
1068 DWORD WINAPI lineRedirectA(
1070 LPCSTR lpszDestAddress,
1071 DWORD dwCountryCode) {
1077 /***********************************************************************
1078 * lineRegisterRequestRecipient (TAPI32.@)
1080 DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP hLineApp, DWORD dwRegistrationInstance, DWORD dwRequestMode, DWORD dwEnable)
1082 FIXME("(%p, %08x, %08x, %08x): stub.\n", hLineApp, dwRegistrationInstance, dwRequestMode, dwEnable);
1086 /***********************************************************************
1087 * lineReleaseUserUserInfo (TAPI32.@)
1089 DWORD WINAPI lineReleaseUserUserInfo(HCALL hCall)
1091 FIXME("(%p): stub.\n", hCall);
1095 /***********************************************************************
1096 * lineRemoveFromConference (TAPI32.@)
1098 DWORD WINAPI lineRemoveFromConference(HCALL hCall)
1100 FIXME("(%p): stub.\n", hCall);
1104 /***********************************************************************
1105 * lineRemoveProvider (TAPI32.@)
1107 DWORD WINAPI lineRemoveProvider(DWORD dwPermanentProviderID, HWND hwndOwner)
1109 FIXME("(%08x, %p): stub.\n", dwPermanentProviderID, hwndOwner);
1113 /***********************************************************************
1114 * lineSecureCall (TAPI32.@)
1116 DWORD WINAPI lineSecureCall(HCALL hCall)
1118 FIXME("(%p): stub.\n", hCall);
1122 /***********************************************************************
1123 * lineSendUserUserInfo (TAPI32.@)
1125 DWORD WINAPI lineSendUserUserInfo(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
1127 FIXME("(%p, %s, %08x): stub.\n", hCall, lpsUserUserInfo, dwSize);
1131 /***********************************************************************
1132 * lineSetAppPriority (TAPI32.@)
1134 DWORD WINAPI lineSetAppPriorityA(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPCSTR lpszExtensionName, DWORD dwPriority)
1136 FIXME("(%s, %08x, %p, %08x, %s, %08x): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpszExtensionName, dwPriority);
1140 /***********************************************************************
1141 * lineSetAppSpecific (TAPI32.@)
1143 DWORD WINAPI lineSetAppSpecific(HCALL hCall, DWORD dwAppSpecific)
1145 FIXME("(%p, %08x): stub.\n", hCall, dwAppSpecific);
1149 /***********************************************************************
1150 * lineSetCallParams (TAPI32.@)
1152 DWORD WINAPI lineSetCallParams(HCALL hCall, DWORD dwBearerMode, DWORD dwMinRate, DWORD dwMaxRate, LPLINEDIALPARAMS lpDialParams)
1154 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hCall, dwBearerMode, dwMinRate, dwMaxRate, lpDialParams);
1158 /***********************************************************************
1159 * lineSetCallPrivilege (TAPI32.@)
1161 DWORD WINAPI lineSetCallPrivilege(HCALL hCall, DWORD dwCallPrivilege)
1163 FIXME("(%p, %08x): stub.\n", hCall, dwCallPrivilege);
1167 /***********************************************************************
1168 * lineSetCurrentLocation (TAPI32.@)
1170 DWORD WINAPI lineSetCurrentLocation(HLINEAPP hLineApp, DWORD dwLocation)
1172 FIXME("(%p, %08x): stub.\n", hLineApp, dwLocation);
1176 /***********************************************************************
1177 * lineSetDevConfig (TAPI32.@)
1179 DWORD WINAPI lineSetDevConfigA(DWORD dwDeviceID, LPVOID lpDeviceConfig, DWORD dwSize, LPCSTR lpszDeviceClass)
1181 FIXME("(%08x, %p, %08x, %s): stub.\n", dwDeviceID, lpDeviceConfig, dwSize, lpszDeviceClass);
1185 /***********************************************************************
1186 * lineSetMediaControl (TAPI32.@)
1188 DWORD WINAPI lineSetMediaControl(
1193 LPLINEMEDIACONTROLDIGIT const lpDigitList,
1194 DWORD dwDigitNumEntries,
1195 LPLINEMEDIACONTROLMEDIA const lpMediaList,
1196 DWORD dwMediaNumEntries,
1197 LPLINEMEDIACONTROLTONE const lpToneList,
1198 DWORD dwToneNumEntries,
1199 LPLINEMEDIACONTROLCALLSTATE const lpCallStateList,
1200 DWORD dwCallStateNumEntries)
1206 /***********************************************************************
1207 * lineSetMediaMode (TAPI32.@)
1209 DWORD WINAPI lineSetMediaMode(HCALL hCall, DWORD dwMediaModes)
1211 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes);
1215 /***********************************************************************
1216 * lineSetNumRings (TAPI32.@)
1218 DWORD WINAPI lineSetNumRings(HLINE hLine, DWORD dwAddressID, DWORD dwNumRings)
1220 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwAddressID, dwNumRings);
1224 /***********************************************************************
1225 * lineSetStatusMessages (TAPI32.@)
1227 DWORD WINAPI lineSetStatusMessages(HLINE hLine, DWORD dwLineStates, DWORD dwAddressStates)
1229 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwLineStates, dwAddressStates);
1233 /***********************************************************************
1234 * lineSetTerminal (TAPI32.@)
1236 DWORD WINAPI lineSetTerminal(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, DWORD dwTerminalModes, DWORD dwTerminalID, DWORD bEnable)
1238 FIXME("(%p, %08x, %p, %08x, %08x, %08x, %08x): stub.\n", hLine, dwAddressID, hCall, dwSelect, dwTerminalModes, dwTerminalID, bEnable);
1242 /***********************************************************************
1243 * lineSetTollList (TAPI32.@)
1245 DWORD WINAPI lineSetTollListA(HLINEAPP hLineApp, DWORD dwDeviceID, LPCSTR lpszAddressIn, DWORD dwTollListOption)
1247 FIXME("(%p, %08x, %s, %08x): stub.\n", hLineApp, dwDeviceID, lpszAddressIn, dwTollListOption);
1251 /***********************************************************************
1252 * lineSetupConference (TAPI32.@)
1254 DWORD WINAPI lineSetupConferenceA(HCALL hCall, HLINE hLine, LPHCALL lphConfCall, LPHCALL lphConsultCall, DWORD dwNumParties, LPLINECALLPARAMS lpCallParams)
1256 FIXME("(%p, %p, %p, %p, %08x, %p): stub.\n", hCall, hLine, lphConfCall, lphConsultCall, dwNumParties, lpCallParams);
1260 /***********************************************************************
1261 * lineSetupTransfer (TAPI32.@)
1263 DWORD WINAPI lineSetupTransferA(HCALL hCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
1265 FIXME("(%p, %p, %p): stub.\n", hCall, lphConsultCall, lpCallParams);
1269 /***********************************************************************
1270 * lineShutdown (TAPI32.@)
1272 DWORD WINAPI lineShutdown(HLINEAPP hLineApp)
1274 FIXME("(%p): stub.\n", hLineApp);
1278 /***********************************************************************
1279 * lineSwapHold (TAPI32.@)
1281 DWORD WINAPI lineSwapHold(HCALL hActiveCall, HCALL hHeldCall)
1283 FIXME("(active: %p, held: %p): stub.\n", hActiveCall, hHeldCall);
1287 /***********************************************************************
1288 * lineTranslateAddress (TAPI32.@)
1290 DWORD WINAPI lineTranslateAddressA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, LPCSTR lpszAddressIn, DWORD dwCard, DWORD dwTranslateOptions, LPLINETRANSLATEOUTPUT lpTranslateOutput)
1292 FIXME("(%p, %08x, %08x, %s, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, lpszAddressIn, dwCard, dwTranslateOptions, lpTranslateOutput);
1296 /***********************************************************************
1297 * lineTranslateDialog (TAPI32.@)
1299 DWORD WINAPI lineTranslateDialogA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, HWND hwndOwner, LPCSTR lpszAddressIn)
1301 FIXME("(%p, %08x, %08x, %p, %s): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, hwndOwner, lpszAddressIn);
1305 /***********************************************************************
1306 * lineUncompleteCall (TAPI32.@)
1308 DWORD WINAPI lineUncompleteCall(HLINE hLine, DWORD dwCompletionID)
1310 FIXME("(%p, %08x): stub.\n", hLine, dwCompletionID);
1314 /***********************************************************************
1315 * lineUnhold (TAPI32.@)
1317 DWORD WINAPI lineUnhold(HCALL hCall)
1319 FIXME("(%p): stub.\n", hCall);
1323 /***********************************************************************
1324 * lineUnpark (TAPI32.@)
1326 DWORD WINAPI lineUnparkA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress)
1328 FIXME("(%p, %08x, %p, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress);