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
24 static const char szCountrylistKey
[] =
25 "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Country List";
26 static const char szLocationsKey
[] =
27 "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Locations";
28 static const char szCardsKey
[] =
29 "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Cards";
32 /***********************************************************************
33 * lineAccept (TAPI32.@)
35 DWORD WINAPI
lineAccept(HCALL hCall
, LPCSTR lpsUserUserInfo
, DWORD dwSize
)
37 FIXME("(%p, %s, %d): stub.\n", hCall
, lpsUserUserInfo
, dwSize
);
41 /***********************************************************************
42 * lineAddProviderA (TAPI32.@)
44 DWORD WINAPI
lineAddProviderA(LPCSTR lpszProviderName
, HWND hwndOwner
, LPDWORD lpdwPermanentProviderID
)
46 FIXME("(%s, %p, %p): stub.\n", lpszProviderName
, hwndOwner
, lpdwPermanentProviderID
);
47 return LINEERR_OPERATIONFAILED
;
50 /***********************************************************************
51 * lineAddProviderW (TAPI32.@)
53 DWORD WINAPI
lineAddProviderW(LPCWSTR lpszProviderName
, HWND hwndOwner
, LPDWORD lpdwPermanentProviderID
)
55 FIXME("(%s, %p, %p): stub.\n", wine_dbgstr_w(lpszProviderName
), hwndOwner
, lpdwPermanentProviderID
);
56 return LINEERR_OPERATIONFAILED
;
59 /***********************************************************************
60 * lineAddToConference (TAPI32.@)
62 DWORD WINAPI
lineAddToConference(HCALL hConfCall
, HCALL hConsultCall
)
64 FIXME("(%p, %p): stub.\n", hConfCall
, hConsultCall
);
68 /***********************************************************************
69 * lineAnswer (TAPI32.@)
71 DWORD WINAPI
lineAnswer(HCALL hCall
, LPCSTR lpsUserUserInfo
, DWORD dwSize
)
73 FIXME("(%p, %s, %d): stub.\n", hCall
, lpsUserUserInfo
, dwSize
);
77 /***********************************************************************
78 * lineBlindTransfer (TAPI32.@)
80 DWORD WINAPI
lineBlindTransferA(HCALL hCall
, LPCSTR lpszDestAddress
, DWORD dwCountryCode
)
82 FIXME("(%p, %s, %08x): stub.\n", hCall
, lpszDestAddress
, dwCountryCode
);
86 /***********************************************************************
87 * lineClose (TAPI32.@)
89 DWORD WINAPI
lineClose(HLINE hLine
)
91 FIXME("(%p): stub.\n", hLine
);
95 /***********************************************************************
96 * lineCompleteCall (TAPI32.@)
98 DWORD WINAPI
lineCompleteCall(HCALL hCall
, LPDWORD lpdwCompletionID
, DWORD dwCompletionMode
, DWORD dwMessageID
)
100 FIXME("(%p, %p, %08x, %08x): stub.\n", hCall
, lpdwCompletionID
, dwCompletionMode
, dwMessageID
);
104 /***********************************************************************
105 * lineCompleteTransfer (TAPI32.@)
107 DWORD WINAPI
lineCompleteTransfer(HCALL hCall
, HCALL hConsultCall
, LPHCALL lphConfCall
, DWORD dwTransferMode
)
109 FIXME("(%p, %p, %p, %08x): stub.\n", hCall
, hConsultCall
, lphConfCall
, dwTransferMode
);
113 /***********************************************************************
114 * lineConfigDialog (TAPI32.@)
116 DWORD WINAPI
lineConfigDialogA(DWORD dwDeviceID
, HWND hwndOwner
, LPCSTR lpszDeviceClass
)
118 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID
, hwndOwner
, lpszDeviceClass
);
122 /***********************************************************************
123 * lineConfigDialogW (TAPI32.@)
125 DWORD WINAPI
lineConfigDialogW(DWORD dwDeviceID
, HWND hwndOwner
, LPCWSTR lpszDeviceClass
)
127 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID
, hwndOwner
, debugstr_w(lpszDeviceClass
));
131 /***********************************************************************
132 * lineConfigDialogEdit (TAPI32.@)
134 DWORD WINAPI
lineConfigDialogEditA(DWORD dwDeviceID
, HWND hwndOwner
, LPCSTR lpszDeviceClass
, LPVOID
const lpDeviceConfigIn
, DWORD dwSize
, LPVARSTRING lpDeviceConfigOut
)
140 /***********************************************************************
141 * lineConfigProvider (TAPI32.@)
143 DWORD WINAPI
lineConfigProvider(HWND hwndOwner
, DWORD dwPermanentProviderID
)
145 FIXME("(%p, %08x): stub.\n", hwndOwner
, dwPermanentProviderID
);
149 /***********************************************************************
150 * lineDeallocateCall (TAPI32.@)
152 DWORD WINAPI
lineDeallocateCall(HCALL hCall
)
154 FIXME("(%p): stub.\n", hCall
);
158 /***********************************************************************
159 * lineDevSpecific (TAPI32.@)
161 DWORD WINAPI
lineDevSpecific(HLINE hLine
, DWORD dwAddressId
, HCALL hCall
, LPVOID lpParams
, DWORD dwSize
)
163 FIXME("(%p, %08x, %p, %p, %d): stub.\n", hLine
, dwAddressId
, hCall
, lpParams
, dwSize
);
167 /***********************************************************************
168 * lineDevSpecificFeature (TAPI32.@)
170 DWORD WINAPI
lineDevSpecificFeature(HLINE hLine
, DWORD dwFeature
, LPVOID lpParams
, DWORD dwSize
)
172 FIXME("(%p, %08x, %p, %d): stub.\n", hLine
, dwFeature
, lpParams
, dwSize
);
176 /***********************************************************************
177 * lineDial (TAPI32.@)
179 DWORD WINAPI
lineDialA(HCALL hCall
, LPCSTR lpszDestAddress
, DWORD dwCountryCode
)
181 FIXME("(%p, %s, %08x): stub.\n", hCall
, lpszDestAddress
, dwCountryCode
);
185 /***********************************************************************
186 * lineDialW (TAPI32.@)
188 DWORD WINAPI
lineDialW(HCALL hCall
, LPCWSTR lpszDestAddress
, DWORD dwCountryCode
)
190 FIXME("(%p, %s, %08x): stub.\n", hCall
, debugstr_w(lpszDestAddress
), dwCountryCode
);
194 /***********************************************************************
195 * lineDrop (TAPI32.@)
197 DWORD WINAPI
lineDrop(HCALL hCall
, LPCSTR lpsUserUserInfo
, DWORD dwSize
)
199 FIXME("(%p, %s, %08x): stub.\n", hCall
, lpsUserUserInfo
, dwSize
);
203 /***********************************************************************
204 * lineForward (TAPI32.@)
206 DWORD WINAPI
lineForwardA(HLINE hLine
, DWORD bAllAddress
, DWORD dwAddressID
, LPLINEFORWARDLIST lpForwardList
, DWORD dwNumRingsNoAnswer
, LPHCALL lphConsultCall
, LPLINECALLPARAMS lpCallParams
)
212 /***********************************************************************
213 * lineGatherDigits (TAPI32.@)
215 DWORD WINAPI
lineGatherDigitsA(HCALL hCall
, DWORD dwDigitModes
, LPSTR lpsDigits
, DWORD dwNumDigits
, LPCSTR lpszTerminationDigits
, DWORD dwFirstDigitTimeout
, DWORD dwInterDigitTimeout
)
221 /***********************************************************************
222 * lineGenerateDigits (TAPI32.@)
224 DWORD WINAPI
lineGenerateDigitsA(HCALL hCall
, DWORD dwDigitModes
, LPCSTR lpszDigits
, DWORD dwDuration
)
226 FIXME("(%p, %08x, %s, %d): stub.\n", hCall
, dwDigitModes
, lpszDigits
, dwDuration
);
230 /***********************************************************************
231 * lineGenerateTone (TAPI32.@)
233 DWORD WINAPI
lineGenerateTone(HCALL hCall
, DWORD dwToneMode
, DWORD dwDuration
, DWORD dwNumTones
, LPLINEGENERATETONE lpTones
)
235 FIXME("(%p, %08x, %d, %d, %p): stub.\n", hCall
, dwToneMode
, dwDuration
, dwNumTones
, lpTones
);
239 /***********************************************************************
240 * lineGetAddressCaps (TAPI32.@)
242 DWORD WINAPI
lineGetAddressCapsA(HLINEAPP hLineApp
, DWORD dwDeviceID
, DWORD dwAddressID
, DWORD dwAPIVersion
, DWORD dwExtVersion
, LPLINEADDRESSCAPS lpAddressCaps
)
244 FIXME("(%p, %08x, %08x, %08x, %08x, %p): stub.\n", hLineApp
, dwDeviceID
, dwAddressID
, dwAPIVersion
, dwExtVersion
, lpAddressCaps
);
248 /***********************************************************************
249 * lineGetAddressID (TAPI32.@)
251 DWORD WINAPI
lineGetAddressIDA(HLINE hLine
, LPDWORD lpdwAddressID
, DWORD dwAddressMode
, LPCSTR lpsAddress
, DWORD dwSize
)
253 FIXME("%p, %p, %08x, %s, %d): stub.\n", hLine
, lpdwAddressID
, dwAddressMode
, lpsAddress
, dwSize
);
257 /***********************************************************************
258 * lineGetAddressStatus (TAPI32.@)
260 DWORD WINAPI
lineGetAddressStatusA(HLINE hLine
, DWORD dwAddressID
, LPLINEADDRESSSTATUS lpAddressStatus
)
262 FIXME("(%p, %08x, %p): stub.\n", hLine
, dwAddressID
, lpAddressStatus
);
266 /***********************************************************************
267 * lineGetAppPriority (TAPI32.@)
269 DWORD WINAPI
lineGetAppPriorityA(LPCSTR lpszAppFilename
, DWORD dwMediaMode
, LPLINEEXTENSIONID
const lpExtensionID
, DWORD dwRequestMode
, LPVARSTRING lpExtensionName
, LPDWORD lpdwPriority
)
271 FIXME("(%s, %08x, %p, %08x, %p, %p): stub.\n", lpszAppFilename
, dwMediaMode
, lpExtensionID
, dwRequestMode
, lpExtensionName
, lpdwPriority
);
275 /***********************************************************************
276 * lineGetCallInfo (TAPI32.@)
278 DWORD WINAPI
lineGetCallInfoA(HCALL hCall
, LPLINECALLINFO lpCallInfo
)
280 FIXME("(%p, %p): stub.\n", hCall
, lpCallInfo
);
284 /***********************************************************************
285 * lineGetCallStatus (TAPI32.@)
287 DWORD WINAPI
lineGetCallStatus(HCALL hCall
, LPLINECALLSTATUS lpCallStatus
)
289 FIXME("(%p, %p): stub.\n", hCall
, lpCallStatus
);
293 /***********************************************************************
294 * lineGetConfRelatedCalls (TAPI32.@)
296 DWORD WINAPI
lineGetConfRelatedCalls(HCALL hCall
, LPLINECALLLIST lpCallList
)
298 FIXME("(%p, %p): stub.\n", hCall
, lpCallList
);
302 /***********************************************************************
303 * lineGetCountryA (TAPI32.@)
305 DWORD WINAPI
lineGetCountryA(DWORD dwCountryID
, DWORD dwAPIVersion
, LPLINECOUNTRYLIST lpLineCountryList
)
307 DWORD dwAvailSize
, dwOffset
, i
, num_countries
, max_subkey_len
;
308 LPLINECOUNTRYENTRY lpLCE
;
312 if(!lpLineCountryList
) {
313 TRACE("(%08x, %08x, %p): stub. Returning LINEERR_INVALPOINTER\n",
314 dwCountryID
, dwAPIVersion
, lpLineCountryList
);
315 return LINEERR_INVALPOINTER
;
318 TRACE("(%08x, %08x, %p(%d)): stub.\n",
319 dwCountryID
, dwAPIVersion
, lpLineCountryList
,
320 lpLineCountryList
->dwTotalSize
);
322 if(RegOpenKeyA(HKEY_LOCAL_MACHINE
, szCountrylistKey
, &hkey
)
324 return LINEERR_INIFILECORRUPT
;
327 dwAvailSize
= lpLineCountryList
->dwTotalSize
;
328 dwOffset
= sizeof (LINECOUNTRYLIST
);
330 if(dwAvailSize
<dwOffset
)
331 return LINEERR_STRUCTURETOOSMALL
;
333 memset(lpLineCountryList
, 0, dwAvailSize
);
335 lpLineCountryList
->dwTotalSize
= dwAvailSize
;
336 lpLineCountryList
->dwUsedSize
= dwOffset
;
337 lpLineCountryList
->dwNumCountries
= 0;
338 lpLineCountryList
->dwCountryListSize
= 0;
339 lpLineCountryList
->dwCountryListOffset
= dwOffset
;
341 lpLCE
= (LPLINECOUNTRYENTRY
)(&lpLineCountryList
[1]);
343 if(RegQueryInfoKeyA(hkey
, NULL
, NULL
, NULL
, &num_countries
, &max_subkey_len
,
344 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
) != ERROR_SUCCESS
) {
346 return LINEERR_STRUCTURETOOSMALL
;
350 dwOffset
= sizeof (LINECOUNTRYENTRY
);
352 dwOffset
+= num_countries
* sizeof (LINECOUNTRYENTRY
);
355 subkey_name
= HeapAlloc(GetProcessHeap(), 0, max_subkey_len
);
356 for(i
= 0; i
< num_countries
; i
++)
358 DWORD len
, size
, size_int
, size_long
, size_name
, size_same
;
361 if(RegEnumKeyA(hkey
, i
, subkey_name
, max_subkey_len
) !=
365 if(dwCountryID
&& (atoi(subkey_name
) != dwCountryID
))
368 if(RegOpenKeyA(hkey
, subkey_name
, &hsubkey
) != ERROR_SUCCESS
)
371 RegQueryValueExA(hsubkey
, "InternationalRule", NULL
, NULL
,
375 RegQueryValueExA(hsubkey
, "LongDistanceRule", NULL
, NULL
,
379 RegQueryValueExA(hsubkey
, "Name", NULL
, NULL
,
383 RegQueryValueExA(hsubkey
, "SameAreaRule", NULL
, NULL
,
387 if(dwAvailSize
< (dwOffset
+len
))
390 RegCloseKey(hsubkey
);
396 lpLineCountryList
->dwNumCountries
++;
397 lpLineCountryList
->dwCountryListSize
+= sizeof (LINECOUNTRYENTRY
);
398 lpLineCountryList
->dwUsedSize
+= len
+ sizeof (LINECOUNTRYENTRY
);
403 lpLCE
[i
].dwCountryID
= atoi(subkey_name
);
404 size
= sizeof(DWORD
);
405 RegQueryValueExA(hsubkey
, "CountryCode", NULL
, NULL
,
406 (BYTE
*)&lpLCE
[i
].dwCountryCode
, &size
);
408 lpLCE
[i
].dwNextCountryID
= 0;
411 lpLCE
[i
-1].dwNextCountryID
= lpLCE
[i
].dwCountryID
;
413 /* add country name */
414 lpLCE
[i
].dwCountryNameSize
= size_name
;
415 lpLCE
[i
].dwCountryNameOffset
= dwOffset
;
416 RegQueryValueExA(hsubkey
, "Name", NULL
, NULL
,
417 ((LPBYTE
)lpLineCountryList
)+dwOffset
,
419 dwOffset
+= size_name
;
421 /* add Same Area Rule */
422 lpLCE
[i
].dwSameAreaRuleSize
= size_same
;
423 lpLCE
[i
].dwSameAreaRuleOffset
= dwOffset
;
424 RegQueryValueExA(hsubkey
, "SameAreaRule", NULL
, NULL
,
425 ((LPBYTE
)lpLineCountryList
)+dwOffset
,
427 dwOffset
+= size_same
;
429 /* add Long Distance Rule */
430 lpLCE
[i
].dwLongDistanceRuleSize
= size_long
;
431 lpLCE
[i
].dwLongDistanceRuleOffset
= dwOffset
;
432 RegQueryValueExA(hsubkey
, "LongDistanceRule", NULL
, NULL
,
433 ((LPBYTE
)lpLineCountryList
)+dwOffset
,
435 dwOffset
+= size_long
;
437 /* add Long Distance Rule */
438 lpLCE
[i
].dwInternationalRuleSize
= size_int
;
439 lpLCE
[i
].dwInternationalRuleOffset
= dwOffset
;
440 RegQueryValueExA(hsubkey
, "InternationalRule", NULL
, NULL
,
441 ((LPBYTE
)lpLineCountryList
)+dwOffset
,
443 dwOffset
+= size_int
;
444 RegCloseKey(hsubkey
);
446 TRACE("Added country %s at %p\n", (LPSTR
)lpLineCountryList
+ lpLCE
[i
].dwCountryNameOffset
,
449 if(dwCountryID
) break;
452 lpLineCountryList
->dwNeededSize
= dwOffset
;
454 TRACE("%d available %d required\n", dwAvailSize
, dwOffset
);
456 HeapFree(GetProcessHeap(), 0, subkey_name
);
462 /***********************************************************************
463 * lineGetCountryW (TAPI32.@)
465 DWORD WINAPI
lineGetCountryW(DWORD id
, DWORD version
, LPLINECOUNTRYLIST list
)
467 static const WCHAR country_listW
[] =
468 {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
469 'W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
470 'T','e','l','e','p','h','o','n','y','\\','C','o','u','n','t','r','y',' ','L','i','s','t',0};
471 static const WCHAR international_ruleW
[] =
472 {'I','n','t','e','r','n','a','t','i','o','n','a','l','R','u','l','e',0};
473 static const WCHAR longdistance_ruleW
[] =
474 {'L','o','n','g','D','i','s','t','a','n','c','e','R','u','l','e',0};
475 static const WCHAR samearea_ruleW
[] =
476 {'S','a','m','e','A','r','e','a','R','u','l','e',0};
477 static const WCHAR nameW
[] =
479 static const WCHAR country_codeW
[] =
480 {'C','o','u','n','t','r','y','C','o','d','e',0};
481 DWORD total_size
, offset
, i
, num_countries
, max_subkey_len
;
482 LINECOUNTRYENTRY
*entry
;
486 if (!list
) return LINEERR_INVALPOINTER
;
487 TRACE("(%08x, %08x, %p(%d))\n", id
, version
, list
, list
->dwTotalSize
);
489 if (RegOpenKeyW(HKEY_LOCAL_MACHINE
, country_listW
, &hkey
) != ERROR_SUCCESS
)
490 return LINEERR_INIFILECORRUPT
;
492 total_size
= list
->dwTotalSize
;
493 offset
= sizeof(LINECOUNTRYLIST
);
494 if (total_size
< offset
) return LINEERR_STRUCTURETOOSMALL
;
496 memset(list
, 0, total_size
);
497 list
->dwTotalSize
= total_size
;
498 list
->dwUsedSize
= offset
;
499 list
->dwNumCountries
= 0;
500 list
->dwCountryListSize
= 0;
501 list
->dwCountryListOffset
= offset
;
503 entry
= (LINECOUNTRYENTRY
*)(list
+ 1);
505 if (RegQueryInfoKeyW(hkey
, NULL
, NULL
, NULL
, &num_countries
, &max_subkey_len
,
506 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
) != ERROR_SUCCESS
)
509 return LINEERR_OPERATIONFAILED
;
511 if (id
) offset
= sizeof(LINECOUNTRYENTRY
);
512 else offset
+= num_countries
* sizeof(LINECOUNTRYENTRY
);
515 if (!(subkey_name
= HeapAlloc(GetProcessHeap(), 0, max_subkey_len
* sizeof(WCHAR
))))
518 return LINEERR_NOMEM
;
520 for (i
= 0; i
< num_countries
; i
++)
522 DWORD len
, size
, size_int
, size_long
, size_name
, size_same
;
525 if (RegEnumKeyW(hkey
, i
, subkey_name
, max_subkey_len
) != ERROR_SUCCESS
) continue;
526 if (id
&& (atoiW(subkey_name
) != id
)) continue;
527 if (RegOpenKeyW(hkey
, subkey_name
, &hsubkey
) != ERROR_SUCCESS
) continue;
529 RegQueryValueExW(hsubkey
, international_ruleW
, NULL
, NULL
, NULL
, &size_int
);
532 RegQueryValueExW(hsubkey
, longdistance_ruleW
, NULL
, NULL
, NULL
, &size_long
);
535 RegQueryValueExW(hsubkey
, nameW
, NULL
, NULL
, NULL
, &size_name
);
538 RegQueryValueExW(hsubkey
, samearea_ruleW
, NULL
, NULL
, NULL
, &size_same
);
541 if (total_size
< offset
+ len
)
544 RegCloseKey(hsubkey
);
548 list
->dwNumCountries
++;
549 list
->dwCountryListSize
+= sizeof(LINECOUNTRYENTRY
);
550 list
->dwUsedSize
+= len
+ sizeof(LINECOUNTRYENTRY
);
553 entry
[i
].dwCountryID
= atoiW(subkey_name
);
554 size
= sizeof(DWORD
);
555 RegQueryValueExW(hsubkey
, country_codeW
, NULL
, NULL
, (BYTE
*)&entry
[i
].dwCountryCode
, &size
);
556 entry
[i
].dwNextCountryID
= 0;
558 if (i
> 0) entry
[i
- 1].dwNextCountryID
= entry
[i
].dwCountryID
;
560 /* add country name */
561 entry
[i
].dwCountryNameSize
= size_name
;
562 entry
[i
].dwCountryNameOffset
= offset
;
563 RegQueryValueExW(hsubkey
, nameW
, NULL
, NULL
, (BYTE
*)list
+ offset
, &size_name
);
566 /* add Same Area Rule */
567 entry
[i
].dwSameAreaRuleSize
= size_same
;
568 entry
[i
].dwSameAreaRuleOffset
= offset
;
569 RegQueryValueExW(hsubkey
, samearea_ruleW
, NULL
, NULL
, (BYTE
*)list
+ offset
, &size_same
);
572 /* add Long Distance Rule */
573 entry
[i
].dwLongDistanceRuleSize
= size_long
;
574 entry
[i
].dwLongDistanceRuleOffset
= offset
;
575 RegQueryValueExW(hsubkey
, longdistance_ruleW
, NULL
, NULL
, (BYTE
*)list
+ offset
, &size_long
);
578 /* add Long Distance Rule */
579 entry
[i
].dwInternationalRuleSize
= size_int
;
580 entry
[i
].dwInternationalRuleOffset
= offset
;
581 RegQueryValueExW(hsubkey
, international_ruleW
, NULL
, NULL
, (BYTE
*)list
+ offset
, &size_int
);
583 RegCloseKey(hsubkey
);
585 TRACE("added country %s at %p\n",
586 debugstr_w((const WCHAR
*)((const char *)list
+ entry
[i
].dwCountryNameOffset
)), &entry
[i
]);
589 list
->dwNeededSize
= offset
;
591 TRACE("%d available %d required\n", total_size
, offset
);
593 HeapFree(GetProcessHeap(), 0, subkey_name
);
598 /***********************************************************************
599 * lineGetDevCapsW (TAPI32.@)
601 DWORD WINAPI
lineGetDevCapsW(HLINEAPP hLineApp
, DWORD dwDeviceID
, DWORD dwAPIVersion
,
602 DWORD dwExtVersion
, LPLINEDEVCAPS lpLineDevCaps
)
604 static int warn_once
;
607 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp
, dwDeviceID
, dwAPIVersion
,
608 dwExtVersion
, lpLineDevCaps
);
609 return LINEERR_OPERATIONFAILED
;
612 /***********************************************************************
613 * lineGetDevCapsA (TAPI32.@)
615 DWORD WINAPI
lineGetDevCapsA(HLINEAPP hLineApp
, DWORD dwDeviceID
, DWORD dwAPIVersion
,
616 DWORD dwExtVersion
, LPLINEDEVCAPS lpLineDevCaps
)
618 static int warn_once
;
621 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp
, dwDeviceID
, dwAPIVersion
,
622 dwExtVersion
, lpLineDevCaps
);
623 return LINEERR_OPERATIONFAILED
;
626 /***********************************************************************
627 * lineGetDevConfig (TAPI32.@)
629 DWORD WINAPI
lineGetDevConfigA(DWORD dwDeviceID
, LPVARSTRING lpDeviceConfig
, LPCSTR lpszDeviceClass
)
631 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID
, lpDeviceConfig
, lpszDeviceClass
);
635 /***********************************************************************
636 * lineGetIDW (TAPI32.@)
638 DWORD WINAPI
lineGetIDW(HLINE hLine
, DWORD dwAddressID
, HCALL hCall
, DWORD dwSelect
,
639 LPVARSTRING lpDeviceID
, LPCWSTR lpszDeviceClass
)
641 FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine
, dwAddressID
, hCall
,
642 dwSelect
, lpDeviceID
,
643 debugstr_w(lpszDeviceClass
));
644 return LINEERR_OPERATIONFAILED
;
647 /***********************************************************************
648 * lineGetIDA (TAPI32.@)
650 DWORD WINAPI
lineGetIDA(HLINE hLine
, DWORD dwAddressID
, HCALL hCall
, DWORD dwSelect
,
651 LPVARSTRING lpDeviceID
, LPCSTR lpszDeviceClass
)
653 FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine
, dwAddressID
, hCall
,
654 dwSelect
, lpDeviceID
, lpszDeviceClass
);
655 return LINEERR_OPERATIONFAILED
;
658 /***********************************************************************
659 * lineGetIcon (TAPI32.@)
661 DWORD WINAPI
lineGetIconA(DWORD dwDeviceID
, LPCSTR lpszDeviceClass
, HICON
*lphIcon
)
663 FIXME("(%08x, %s, %p): stub.\n", dwDeviceID
, lpszDeviceClass
, lphIcon
);
667 /***********************************************************************
668 * lineGetLineDevStatus (TAPI32.@)
670 DWORD WINAPI
lineGetLineDevStatusA(HLINE hLine
, LPLINEDEVSTATUS lpLineDevStatus
)
672 FIXME("(%p, %p): stub.\n", hLine
, lpLineDevStatus
);
676 /***********************************************************************
677 * lineGetMessage (TAPI32.@)
679 DWORD WINAPI
lineGetMessage(HLINEAPP hLineApp
, LPLINEMESSAGE lpMessage
, DWORD dwTimeout
)
681 FIXME("(%p, %p, %08x): stub.\n", hLineApp
, lpMessage
, dwTimeout
);
685 /***********************************************************************
686 * lineGetNewCalls (TAPI32.@)
688 DWORD WINAPI
lineGetNewCalls(HLINE hLine
, DWORD dwAddressID
, DWORD dwSelect
, LPLINECALLLIST lpCallList
)
690 FIXME("(%p, %08x, %08x, %p): stub.\n", hLine
, dwAddressID
, dwSelect
, lpCallList
);
694 /***********************************************************************
695 * lineGetNumRings (TAPI32.@)
697 DWORD WINAPI
lineGetNumRings(HLINE hLine
, DWORD dwAddressID
, LPDWORD lpdwNumRings
)
699 FIXME("(%p, %08x, %p): stub.\n", hLine
, dwAddressID
, lpdwNumRings
);
703 /***********************************************************************
704 * lineGetProviderListA (TAPI32.@)
706 DWORD WINAPI
lineGetProviderListA(DWORD dwAPIVersion
, LPLINEPROVIDERLIST lpProviderList
)
708 FIXME("(%08x, %p): stub.\n", dwAPIVersion
, lpProviderList
);
709 return LINEERR_OPERATIONFAILED
;
712 /***********************************************************************
713 * lineGetProviderListW (TAPI32.@)
715 DWORD WINAPI
lineGetProviderListW(DWORD dwAPIVersion
, LPLINEPROVIDERLIST lpProviderList
)
717 FIXME("(%08x, %p): stub.\n", dwAPIVersion
, lpProviderList
);
718 return LINEERR_OPERATIONFAILED
;
721 /***********************************************************************
722 * lineGetRequest (TAPI32.@)
724 DWORD WINAPI
lineGetRequestA(HLINEAPP hLineApp
, DWORD dwRequestMode
, LPVOID lpRequestBuffer
)
726 FIXME("%p, %08x, %p): stub.\n", hLineApp
, dwRequestMode
, lpRequestBuffer
);
730 /***********************************************************************
731 * lineGetStatusMessages (TAPI32.@)
733 DWORD WINAPI
lineGetStatusMessages(HLINE hLine
, LPDWORD lpdwLineStatus
, LPDWORD lpdwAddressStates
)
735 FIXME("(%p, %p, %p): stub.\n", hLine
, lpdwLineStatus
, lpdwAddressStates
);
739 /***********************************************************************
740 * lineGetTranslateCaps (TAPI32.@)
742 * get address translate capabilities. Returns a LINETRANSLATECAPS
745 * +-----------------------+
749 * +-----------------------+
751 * |LocationsListSize |
752 * |LocationsListOffset | -+
753 * |CurrentLocationID | |
754 * +-----------------------+ |
757 * |CardListOffset | -|--+
758 * |CurrentPreferredCardID | | |
759 * +-----------------------+ | |
761 * |LINELOCATIONENTRY #1 | |
763 * +-----------------------+ |
765 * +-----------------------+ |
767 * |LINELOCATIONENTRY | |
769 * +-----------------------+ |
771 * |LINECARDENTRY #1 |
773 * +-----------------------+
775 * +-----------------------+
777 * |LINECARDENTRY #NumCards|
779 * +-----------------------+
780 * | room for strings named|
781 * | in the structures |
783 * +-----------------------+
785 DWORD WINAPI
lineGetTranslateCapsA(HLINEAPP hLineApp
, DWORD dwAPIVersion
,
786 LPLINETRANSLATECAPS lpTranslateCaps
)
788 HKEY hkLocations
, hkCards
, hkCardLocations
, hsubkey
;
789 int numlocations
, numcards
;
792 char *loc_key_name
= NULL
;
793 char *card_key_name
= NULL
;
799 LPLINELOCATIONENTRY pLocEntry
;
800 LPLINECARDENTRY pCardEntry
;
802 TRACE("(%p, %08x, %p (tot. size %d)\n", hLineApp
, dwAPIVersion
,
803 lpTranslateCaps
, lpTranslateCaps
->dwTotalSize
);
804 if( lpTranslateCaps
->dwTotalSize
< sizeof(LINETRANSLATECAPS
))
805 return LINEERR_STRUCTURETOOSMALL
;
806 if( RegCreateKeyA(HKEY_LOCAL_MACHINE
, szLocationsKey
, &hkLocations
)
808 ERR("unexpected registry error 1.\n");
809 return LINEERR_INIFILECORRUPT
;
811 lendword
= sizeof( DWORD
);
812 if( RegQueryValueExA( hkLocations
, "CurrentID", NULL
, NULL
,
813 (LPBYTE
) ¤tid
, &lendword
) != ERROR_SUCCESS
)
814 currentid
= -1; /* change this later */
815 if(RegQueryInfoKeyA(hkLocations
, NULL
, NULL
, NULL
, NULL
, &maxlockeylen
,
816 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
) != ERROR_SUCCESS
) {
817 RegCloseKey(hkLocations
);
818 ERR("unexpected registry error 2.\n");
819 return LINEERR_INIFILECORRUPT
;
822 if( maxlockeylen
< 10)
823 maxlockeylen
= 10; /* need this also if there is no key */
824 loc_key_name
= HeapAlloc( GetProcessHeap(), 0, maxlockeylen
);
825 /* first time through: calculate needed space */
829 while( RegEnumKeyA(hkLocations
, i
, loc_key_name
, maxlockeylen
)
833 if( strncasecmp(loc_key_name
, "location", 8) ||
834 (RegOpenKeyA(hkLocations
, loc_key_name
, &hsubkey
)
838 length
+= sizeof(LINELOCATIONENTRY
);
839 RegQueryValueExA(hsubkey
, "Name",NULL
,NULL
,NULL
,&size_val
);
841 RegQueryValueExA(hsubkey
, "AreaCode",NULL
,NULL
,NULL
,&size_val
);
843 RegQueryValueExA(hsubkey
, "OutsideAccess",NULL
,NULL
,NULL
,&size_val
);
845 RegQueryValueExA(hsubkey
, "LongDistanceAccess",NULL
,NULL
,NULL
,&size_val
);
847 RegQueryValueExA(hsubkey
, "DisableCallWaiting",NULL
,NULL
,NULL
,&size_val
);
849 /* fixme: what about TollPrefixList???? */
850 RegCloseKey(hsubkey
);
852 if(numlocations
== 0) {
853 /* add one location */
854 if( RegCreateKeyA( hkLocations
, "Location1", &hsubkey
)
859 length
+= sizeof(LINELOCATIONENTRY
) + 20 ;
860 RegSetValueExA( hsubkey
, "AreaCode", 0, REG_SZ
, (const BYTE
*)"010", 4);
861 GetLocaleInfoA( LOCALE_SYSTEM_DEFAULT
, LOCALE_ICOUNTRY
, buf
, 8);
863 RegSetValueExA( hsubkey
, "Country", 0, REG_DWORD
, (LPBYTE
)&dwval
,
865 RegSetValueExA( hsubkey
, "DisableCallWaiting", 0, REG_SZ
, (const BYTE
*)"", 1);
867 RegSetValueExA( hsubkey
, "Flags", 0, REG_DWORD
, (LPBYTE
)&dwval
,
869 RegSetValueExA( hsubkey
, "LongDistanceAccess", 0, REG_SZ
, (const BYTE
*)"", 1);
870 RegSetValueExA( hsubkey
, "Name", 0, REG_SZ
, (const BYTE
*)"New Location", 13);
871 RegSetValueExA( hsubkey
, "OutsideAccess", 0, REG_SZ
, (const BYTE
*)"", 1);
872 RegCloseKey(hsubkey
);
874 RegSetValueExA( hkLocations
, "CurrentID", 0, REG_DWORD
,
875 (LPBYTE
)&dwval
, sizeof(DWORD
));
877 RegSetValueExA( hkLocations
, "NextID", 0, REG_DWORD
, (LPBYTE
)&dwval
,
881 /* do the card list */
883 if( RegCreateKeyA(HKEY_CURRENT_USER
, szCardsKey
, &hkCards
)
885 if(RegQueryInfoKeyA(hkCards
, NULL
, NULL
, NULL
, NULL
, &maxcardkeylen
,
886 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
) == ERROR_SUCCESS
) {
888 if( maxcardkeylen
< 6) maxcardkeylen
= 6;
889 card_key_name
= HeapAlloc(GetProcessHeap(), 0, maxcardkeylen
);
891 while( RegEnumKeyA(hkCards
, i
, card_key_name
, maxcardkeylen
) ==
895 if( strncasecmp(card_key_name
, "card", 4) || ERROR_SUCCESS
!=
896 (RegOpenKeyA(hkCards
, card_key_name
, &hsubkey
) ))
899 length
+= sizeof(LINECARDENTRY
);
900 RegQueryValueExA(hsubkey
, "Name",NULL
,NULL
,NULL
,&size_val
);
902 RegQueryValueExA(hsubkey
, "LocalRule",NULL
,NULL
,NULL
,&size_val
);
904 RegQueryValueExA(hsubkey
, "LDRule",NULL
,NULL
,NULL
,&size_val
);
906 RegQueryValueExA(hsubkey
, "InternationalRule",NULL
,NULL
,NULL
,
909 RegCloseKey(hsubkey
);
912 /* add one card (direct call) */
914 ERROR_SUCCESS
== RegCreateKeyA( hkCards
, "Card1", &hsubkey
)) {
917 length
+= sizeof(LINECARDENTRY
) + 22 ;
918 RegSetValueExA( hsubkey
, "Name", 0, REG_SZ
, (const BYTE
*)"None (Direct Call)", 19);
920 RegSetValueExA( hsubkey
, "Flags", 0, REG_DWORD
, (LPBYTE
)&dwval
,
922 RegSetValueExA( hsubkey
, "InternationalRule", 0, REG_SZ
, (const BYTE
*)"", 1);
923 RegSetValueExA( hsubkey
, "LDRule", 0, REG_SZ
, (const BYTE
*)"", 1);
924 RegSetValueExA( hsubkey
, "LocalRule", 0, REG_SZ
, (const BYTE
*)"", 1);
925 RegCloseKey(hsubkey
);
927 RegSetValueExA( hkCards
, "NextID", 0, REG_DWORD
, (LPBYTE
)&dwval
,
930 } else hkCards
= 0; /* should really fail */
931 /* check if sufficient room is available */
932 lpTranslateCaps
->dwNeededSize
= sizeof(LINETRANSLATECAPS
) + length
;
933 if ( lpTranslateCaps
->dwNeededSize
> lpTranslateCaps
->dwTotalSize
) {
934 RegCloseKey( hkLocations
);
935 if( hkCards
) RegCloseKey( hkCards
);
936 HeapFree(GetProcessHeap(), 0, loc_key_name
);
937 HeapFree(GetProcessHeap(), 0, card_key_name
);
938 lpTranslateCaps
->dwUsedSize
= sizeof(LINETRANSLATECAPS
);
939 TRACE("Insufficient space: total %d needed %d used %d\n",
940 lpTranslateCaps
->dwTotalSize
,
941 lpTranslateCaps
->dwNeededSize
,
942 lpTranslateCaps
->dwUsedSize
);
945 /* fill in the LINETRANSLATECAPS structure */
946 lpTranslateCaps
->dwUsedSize
= lpTranslateCaps
->dwNeededSize
;
947 lpTranslateCaps
->dwNumLocations
= numlocations
;
948 lpTranslateCaps
->dwLocationListSize
= sizeof(LINELOCATIONENTRY
) *
949 lpTranslateCaps
->dwNumLocations
;
950 lpTranslateCaps
->dwLocationListOffset
= sizeof(LINETRANSLATECAPS
);
951 lpTranslateCaps
->dwCurrentLocationID
= currentid
;
952 lpTranslateCaps
->dwNumCards
= numcards
;
953 lpTranslateCaps
->dwCardListSize
= sizeof(LINECARDENTRY
) *
954 lpTranslateCaps
->dwNumCards
;
955 lpTranslateCaps
->dwCardListOffset
= lpTranslateCaps
->dwLocationListOffset
+
956 lpTranslateCaps
->dwLocationListSize
;
957 lpTranslateCaps
->dwCurrentPreferredCardID
= 0;
958 /* this is where the strings will be stored */
959 strptr
= ((LPBYTE
) lpTranslateCaps
) +
960 lpTranslateCaps
->dwCardListOffset
+ lpTranslateCaps
->dwCardListSize
;
961 pLocEntry
= (LPLINELOCATIONENTRY
) (lpTranslateCaps
+ 1);
962 /* key with Preferred CardIDs */
963 if( RegOpenKeyA(HKEY_CURRENT_USER
, szLocationsKey
, &hkCardLocations
)
966 /* second time through all locations */
968 while(RegEnumKeyA(hkLocations
, i
, loc_key_name
, maxlockeylen
)
972 if( strncasecmp(loc_key_name
, "location", 8) ||
973 (RegOpenKeyA(hkLocations
, loc_key_name
, &hsubkey
)
976 size_val
=sizeof(DWORD
);
977 if( RegQueryValueExA(hsubkey
, "ID",NULL
, NULL
,
978 (LPBYTE
) &(pLocEntry
->dwPermanentLocationID
), &size_val
) !=
980 pLocEntry
->dwPermanentLocationID
= atoi( loc_key_name
+ 8);
982 RegQueryValueExA(hsubkey
, "Name",NULL
,NULL
, strptr
, &size_val
);
983 pLocEntry
->dwLocationNameSize
= size_val
;
984 pLocEntry
->dwLocationNameOffset
= strptr
- (LPBYTE
) lpTranslateCaps
;
988 RegQueryValueExA(hsubkey
, "AreaCode",NULL
,NULL
, strptr
, &size_val
);
989 pLocEntry
->dwCityCodeSize
= size_val
;
990 pLocEntry
->dwCityCodeOffset
= strptr
- (LPBYTE
) lpTranslateCaps
;
994 RegQueryValueExA(hsubkey
, "OutsideAccess",NULL
,NULL
, strptr
, &size_val
);
995 pLocEntry
->dwLocalAccessCodeSize
= size_val
;
996 pLocEntry
->dwLocalAccessCodeOffset
= strptr
- (LPBYTE
) lpTranslateCaps
;
999 RegQueryValueExA(hsubkey
, "LongDistanceAccess",NULL
,NULL
, strptr
,
1001 pLocEntry
->dwLongDistanceAccessCodeSize
= size_val
;
1002 pLocEntry
->dwLongDistanceAccessCodeOffset
= strptr
-
1003 (LPBYTE
) lpTranslateCaps
;
1006 RegQueryValueExA(hsubkey
, "DisableCallWaiting",NULL
,NULL
, strptr
,
1008 pLocEntry
->dwCancelCallWaitingSize
= size_val
;
1009 pLocEntry
->dwCancelCallWaitingOffset
= strptr
- (LPBYTE
) lpTranslateCaps
;
1012 pLocEntry
->dwTollPrefixListSize
= 0; /* FIXME */
1013 pLocEntry
->dwTollPrefixListOffset
= 0; /* FIXME */
1015 size_val
=sizeof(DWORD
);
1016 RegQueryValueExA(hsubkey
, "Country",NULL
,NULL
,
1017 (LPBYTE
) &(pLocEntry
->dwCountryCode
), &size_val
);
1018 pLocEntry
->dwCountryID
= pLocEntry
->dwCountryCode
; /* FIXME */
1019 RegQueryValueExA(hsubkey
, "Flags",NULL
,NULL
,
1020 (LPBYTE
) &(pLocEntry
->dwOptions
), &size_val
);
1021 RegCloseKey(hsubkey
);
1022 /* get preferred cardid */
1023 pLocEntry
->dwPreferredCardID
= 0;
1024 if ( hkCardLocations
) {
1025 size_val
=sizeof(DWORD
);
1026 if(RegOpenKeyA(hkCardLocations
, loc_key_name
, &hsubkey
) ==
1028 RegQueryValueExA(hsubkey
, "CallingCard",NULL
,NULL
,
1029 (LPBYTE
) &(pLocEntry
->dwPreferredCardID
), &size_val
);
1030 RegCloseKey(hsubkey
);
1034 /* make sure there is a currentID */
1035 if(currentid
== -1){
1036 currentid
= pLocEntry
->dwPermanentLocationID
;
1037 lpTranslateCaps
->dwCurrentLocationID
= currentid
;
1039 if(pLocEntry
->dwPermanentLocationID
== currentid
)
1040 lpTranslateCaps
->dwCurrentPreferredCardID
=
1041 pLocEntry
->dwPreferredCardID
;
1042 TRACE("added: ID %d %s CountryCode %d CityCode %s CardID %d "
1043 "LocalAccess: %s LongDistanceAccess: %s CountryID %d "
1044 "Options %d CancelCallWait %s\n",
1045 pLocEntry
->dwPermanentLocationID
,
1046 debugstr_a( (char*)lpTranslateCaps
+ pLocEntry
->dwLocationNameOffset
),
1047 pLocEntry
->dwCountryCode
,
1048 debugstr_a( (char*)lpTranslateCaps
+ pLocEntry
->dwCityCodeOffset
),
1049 pLocEntry
->dwPreferredCardID
,
1050 debugstr_a( (char*)lpTranslateCaps
+ pLocEntry
->dwLocalAccessCodeOffset
),
1051 debugstr_a( (char*)lpTranslateCaps
+ pLocEntry
->dwLongDistanceAccessCodeOffset
),
1052 pLocEntry
->dwCountryID
,
1053 pLocEntry
->dwOptions
,
1054 debugstr_a( (char*)lpTranslateCaps
+ pLocEntry
->dwCancelCallWaitingOffset
));
1057 pCardEntry
= (LPLINECARDENTRY
) pLocEntry
;
1058 /* do the card list */
1061 while( RegEnumKeyA(hkCards
, i
, card_key_name
, maxcardkeylen
) ==
1065 if( strncasecmp(card_key_name
, "card", 4) ||
1066 (RegOpenKeyA(hkCards
, card_key_name
, &hsubkey
) != ERROR_SUCCESS
))
1068 size_val
=sizeof(DWORD
);
1069 if( RegQueryValueExA(hsubkey
, "ID",NULL
, NULL
,
1070 (LPBYTE
) &(pCardEntry
->dwPermanentCardID
), &size_val
) !=
1072 pCardEntry
->dwPermanentCardID
= atoi( card_key_name
+ 4);
1074 RegQueryValueExA(hsubkey
, "Name",NULL
,NULL
, strptr
, &size_val
);
1075 pCardEntry
->dwCardNameSize
= size_val
;
1076 pCardEntry
->dwCardNameOffset
= strptr
- (LPBYTE
) lpTranslateCaps
;
1078 pCardEntry
->dwCardNumberDigits
= 1; /* FIXME */
1080 RegQueryValueExA(hsubkey
, "LocalRule",NULL
,NULL
, strptr
, &size_val
);
1081 pCardEntry
->dwSameAreaRuleSize
= size_val
;
1082 pCardEntry
->dwSameAreaRuleOffset
= strptr
- (LPBYTE
) lpTranslateCaps
;
1085 RegQueryValueExA(hsubkey
, "LDRule",NULL
,NULL
, strptr
, &size_val
);
1086 pCardEntry
->dwLongDistanceRuleSize
= size_val
;
1087 pCardEntry
->dwLongDistanceRuleOffset
= strptr
- (LPBYTE
) lpTranslateCaps
;
1090 RegQueryValueExA(hsubkey
, "InternationalRule",NULL
,NULL
, strptr
,
1092 pCardEntry
->dwInternationalRuleSize
= size_val
;
1093 pCardEntry
->dwInternationalRuleOffset
= strptr
-
1094 (LPBYTE
) lpTranslateCaps
;
1096 size_val
=sizeof(DWORD
);
1097 RegQueryValueExA(hsubkey
, "Flags",NULL
, NULL
,
1098 (LPBYTE
) &(pCardEntry
->dwOptions
), &size_val
);
1099 TRACE( "added card: ID %d name %s SameArea %s LongDistance %s International %s Options 0x%x\n",
1100 pCardEntry
->dwPermanentCardID
,
1101 debugstr_a( (char*)lpTranslateCaps
+ pCardEntry
->dwCardNameOffset
),
1102 debugstr_a( (char*)lpTranslateCaps
+ pCardEntry
->dwSameAreaRuleOffset
),
1103 debugstr_a( (char*)lpTranslateCaps
+ pCardEntry
->dwLongDistanceRuleOffset
),
1104 debugstr_a( (char*)lpTranslateCaps
+ pCardEntry
->dwInternationalRuleOffset
),
1105 pCardEntry
->dwOptions
);
1111 if(hkLocations
) RegCloseKey(hkLocations
);
1112 if(hkCards
) RegCloseKey(hkCards
);
1113 if(hkCardLocations
) RegCloseKey(hkCardLocations
);
1114 HeapFree(GetProcessHeap(), 0, loc_key_name
);
1115 HeapFree(GetProcessHeap(), 0, card_key_name
);
1116 TRACE(" returning success tot %d needed %d used %d\n",
1117 lpTranslateCaps
->dwTotalSize
,
1118 lpTranslateCaps
->dwNeededSize
,
1119 lpTranslateCaps
->dwUsedSize
);
1120 return 0; /* success */
1123 /***********************************************************************
1124 * lineHandoff (TAPI32.@)
1126 DWORD WINAPI
lineHandoffA(HCALL hCall
, LPCSTR lpszFileName
, DWORD dwMediaMode
)
1128 FIXME("(%p, %s, %08x): stub.\n", hCall
, lpszFileName
, dwMediaMode
);
1132 /***********************************************************************
1133 * lineHold (TAPI32.@)
1135 DWORD WINAPI
lineHold(HCALL hCall
)
1137 FIXME("(%p): stub.\n", hCall
);
1141 /***********************************************************************
1142 * lineInitialize (TAPI32.@)
1144 DWORD WINAPI
lineInitialize(
1145 LPHLINEAPP lphLineApp
,
1146 HINSTANCE hInstance
,
1147 LINECALLBACK lpfnCallback
,
1149 LPDWORD lpdwNumDevs
)
1151 FIXME("(%p, %p, %p, %s, %p): stub.\n", lphLineApp
, hInstance
,
1152 lpfnCallback
, debugstr_a(lpszAppName
), lpdwNumDevs
);
1156 /***********************************************************************
1157 * lineInitializeExA (TAPI32.@)
1159 LONG WINAPI
lineInitializeExA(LPHLINEAPP lphLineApp
, HINSTANCE hInstance
, LINECALLBACK lpfnCallback
, LPCSTR lpszFriendlyAppName
, LPDWORD lpdwNumDevs
, LPDWORD lpdwAPIVersion
, LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams
)
1161 FIXME("(%p, %p, %p, %s, %p, %p, %p): stub.\n", lphLineApp
, hInstance
,
1162 lpfnCallback
, debugstr_a(lpszFriendlyAppName
), lpdwNumDevs
, lpdwAPIVersion
, lpLineInitializeExParams
);
1166 /***********************************************************************
1167 * lineInitializeExW (TAPI32.@)
1169 LONG WINAPI
lineInitializeExW(LPHLINEAPP lphLineApp
, HINSTANCE hInstance
, LINECALLBACK lpfnCallback
, LPCWSTR lpszFriendlyAppName
, LPDWORD lpdwNumDevs
, LPDWORD lpdwAPIVersion
, LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams
)
1171 FIXME("(%p, %p, %p, %s, %p, %p, %p): stub.\n", lphLineApp
, hInstance
,
1172 lpfnCallback
, debugstr_w(lpszFriendlyAppName
), lpdwNumDevs
, lpdwAPIVersion
, lpLineInitializeExParams
);
1176 /***********************************************************************
1177 * lineMakeCallW (TAPI32.@)
1179 DWORD WINAPI
lineMakeCallW(HLINE hLine
, LPHCALL lphCall
, LPCWSTR lpszDestAddress
,
1180 DWORD dwCountryCode
, LPLINECALLPARAMS lpCallParams
)
1182 FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine
, lphCall
, debugstr_w(lpszDestAddress
),
1183 dwCountryCode
, lpCallParams
);
1184 return LINEERR_OPERATIONFAILED
;
1187 /***********************************************************************
1188 * lineMakeCallA (TAPI32.@)
1190 DWORD WINAPI
lineMakeCallA(HLINE hLine
, LPHCALL lphCall
, LPCSTR lpszDestAddress
,
1191 DWORD dwCountryCode
, LPLINECALLPARAMS lpCallParams
)
1193 FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine
, lphCall
, lpszDestAddress
,
1194 dwCountryCode
, lpCallParams
);
1195 return LINEERR_OPERATIONFAILED
;
1198 /***********************************************************************
1199 * lineMonitorDigits (TAPI32.@)
1201 DWORD WINAPI
lineMonitorDigits(HCALL hCall
, DWORD dwDigitModes
)
1203 FIXME("(%p, %08x): stub.\n", hCall
, dwDigitModes
);
1207 /***********************************************************************
1208 * lineMonitorMedia (TAPI32.@)
1210 DWORD WINAPI
lineMonitorMedia(HCALL hCall
, DWORD dwMediaModes
)
1212 FIXME("(%p, %08x): stub.\n", hCall
, dwMediaModes
);
1216 /***********************************************************************
1217 * lineMonitorTones (TAPI32.@)
1219 DWORD WINAPI
lineMonitorTones(HCALL hCall
, LPLINEMONITORTONE lpToneList
, DWORD dwNumEntries
)
1221 FIXME("(%p, %p, %08x): stub.\n", hCall
, lpToneList
, dwNumEntries
);
1225 /***********************************************************************
1226 * lineNegotiateAPIVersion (TAPI32.@)
1228 DWORD WINAPI
lineNegotiateAPIVersion(
1231 DWORD dwAPILowVersion
,
1232 DWORD dwAPIHighVersion
,
1233 LPDWORD lpdwAPIVersion
,
1234 LPLINEEXTENSIONID lpExtensionID
1237 static int warn_once
;
1240 FIXME("(%p, %d, %d, %d, %p, %p): stub.\n", hLineApp
, dwDeviceID
,
1241 dwAPILowVersion
, dwAPIHighVersion
, lpdwAPIVersion
, lpExtensionID
);
1242 *lpdwAPIVersion
= dwAPIHighVersion
;
1246 /***********************************************************************
1247 * lineNegotiateExtVersion (TAPI32.@)
1249 DWORD WINAPI
lineNegotiateExtVersion(HLINEAPP hLineApp
, DWORD dwDeviceID
, DWORD dwAPIVersion
, DWORD dwExtLowVersion
, DWORD dwExtHighVersion
, LPDWORD lpdwExtVersion
)
1255 /***********************************************************************
1256 * lineOpenW (TAPI32.@)
1258 DWORD WINAPI
lineOpenW(HLINEAPP hLineApp
, DWORD dwDeviceID
, LPHLINE lphLine
, DWORD dwAPIVersion
, DWORD dwExtVersion
, DWORD dwCallbackInstance
, DWORD dwPrivileges
, DWORD dwMediaModes
, LPLINECALLPARAMS lpCallParams
)
1264 /***********************************************************************
1265 * lineOpen (TAPI32.@)
1267 DWORD WINAPI
lineOpenA(HLINEAPP hLineApp
, DWORD dwDeviceID
, LPHLINE lphLine
, DWORD dwAPIVersion
, DWORD dwExtVersion
, DWORD dwCallbackInstance
, DWORD dwPrivileges
, DWORD dwMediaModes
, LPLINECALLPARAMS lpCallParams
)
1273 /***********************************************************************
1274 * linePark (TAPI32.@)
1276 DWORD WINAPI
lineParkA(HCALL hCall
, DWORD dwParkMode
, LPCSTR lpszDirAddress
, LPVARSTRING lpNonDirAddress
)
1278 FIXME("(%p, %08x, %s, %p): stub.\n", hCall
, dwParkMode
, lpszDirAddress
, lpNonDirAddress
);
1282 /***********************************************************************
1283 * linePickup (TAPI32.@)
1285 DWORD WINAPI
linePickupA(HLINE hLine
, DWORD dwAddressID
, LPHCALL lphCall
, LPCSTR lpszDestAddress
, LPCSTR lpszGroupID
)
1287 FIXME("(%p, %08x, %p, %s, %s): stub.\n", hLine
, dwAddressID
, lphCall
, lpszDestAddress
, lpszGroupID
);
1291 /***********************************************************************
1292 * linePrepareAddToConference (TAPI32.@)
1294 DWORD WINAPI
linePrepareAddToConferenceA(HCALL hConfCall
, LPHCALL lphConsultCall
, LPLINECALLPARAMS lpCallParams
)
1296 FIXME("(%p, %p, %p): stub.\n", hConfCall
, lphConsultCall
, lpCallParams
);
1300 /***********************************************************************
1301 * lineRedirect (TAPI32.@)
1303 DWORD WINAPI
lineRedirectA(
1305 LPCSTR lpszDestAddress
,
1306 DWORD dwCountryCode
) {
1312 /***********************************************************************
1313 * lineRegisterRequestRecipient (TAPI32.@)
1315 DWORD WINAPI
lineRegisterRequestRecipient(HLINEAPP hLineApp
, DWORD dwRegistrationInstance
, DWORD dwRequestMode
, DWORD dwEnable
)
1317 FIXME("(%p, %08x, %08x, %08x): stub.\n", hLineApp
, dwRegistrationInstance
, dwRequestMode
, dwEnable
);
1321 /***********************************************************************
1322 * lineReleaseUserUserInfo (TAPI32.@)
1324 DWORD WINAPI
lineReleaseUserUserInfo(HCALL hCall
)
1326 FIXME("(%p): stub.\n", hCall
);
1330 /***********************************************************************
1331 * lineRemoveFromConference (TAPI32.@)
1333 DWORD WINAPI
lineRemoveFromConference(HCALL hCall
)
1335 FIXME("(%p): stub.\n", hCall
);
1339 /***********************************************************************
1340 * lineRemoveProvider (TAPI32.@)
1342 DWORD WINAPI
lineRemoveProvider(DWORD dwPermanentProviderID
, HWND hwndOwner
)
1344 FIXME("(%08x, %p): stub.\n", dwPermanentProviderID
, hwndOwner
);
1348 /***********************************************************************
1349 * lineSecureCall (TAPI32.@)
1351 DWORD WINAPI
lineSecureCall(HCALL hCall
)
1353 FIXME("(%p): stub.\n", hCall
);
1357 /***********************************************************************
1358 * lineSendUserUserInfo (TAPI32.@)
1360 DWORD WINAPI
lineSendUserUserInfo(HCALL hCall
, LPCSTR lpsUserUserInfo
, DWORD dwSize
)
1362 FIXME("(%p, %s, %08x): stub.\n", hCall
, lpsUserUserInfo
, dwSize
);
1366 /***********************************************************************
1367 * lineSetAppPriority (TAPI32.@)
1369 DWORD WINAPI
lineSetAppPriorityA(LPCSTR lpszAppFilename
, DWORD dwMediaMode
, LPLINEEXTENSIONID
const lpExtensionID
, DWORD dwRequestMode
, LPCSTR lpszExtensionName
, DWORD dwPriority
)
1371 FIXME("(%s, %08x, %p, %08x, %s, %08x): stub.\n", lpszAppFilename
, dwMediaMode
, lpExtensionID
, dwRequestMode
, lpszExtensionName
, dwPriority
);
1375 /***********************************************************************
1376 * lineSetAppSpecific (TAPI32.@)
1378 DWORD WINAPI
lineSetAppSpecific(HCALL hCall
, DWORD dwAppSpecific
)
1380 FIXME("(%p, %08x): stub.\n", hCall
, dwAppSpecific
);
1384 /***********************************************************************
1385 * lineSetCallParams (TAPI32.@)
1387 DWORD WINAPI
lineSetCallParams(HCALL hCall
, DWORD dwBearerMode
, DWORD dwMinRate
, DWORD dwMaxRate
, LPLINEDIALPARAMS lpDialParams
)
1389 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hCall
, dwBearerMode
, dwMinRate
, dwMaxRate
, lpDialParams
);
1393 /***********************************************************************
1394 * lineSetCallPrivilege (TAPI32.@)
1396 DWORD WINAPI
lineSetCallPrivilege(HCALL hCall
, DWORD dwCallPrivilege
)
1398 FIXME("(%p, %08x): stub.\n", hCall
, dwCallPrivilege
);
1402 /***********************************************************************
1403 * lineSetCurrentLocation (TAPI32.@)
1405 DWORD WINAPI
lineSetCurrentLocation(HLINEAPP hLineApp
, DWORD dwLocation
)
1407 FIXME("(%p, %08x): stub.\n", hLineApp
, dwLocation
);
1411 /***********************************************************************
1412 * lineSetDevConfig (TAPI32.@)
1414 DWORD WINAPI
lineSetDevConfigA(DWORD dwDeviceID
, LPVOID lpDeviceConfig
, DWORD dwSize
, LPCSTR lpszDeviceClass
)
1416 FIXME("(%08x, %p, %08x, %s): stub.\n", dwDeviceID
, lpDeviceConfig
, dwSize
, lpszDeviceClass
);
1420 /***********************************************************************
1421 * lineSetMediaControl (TAPI32.@)
1423 DWORD WINAPI
lineSetMediaControl(
1428 LPLINEMEDIACONTROLDIGIT
const lpDigitList
,
1429 DWORD dwDigitNumEntries
,
1430 LPLINEMEDIACONTROLMEDIA
const lpMediaList
,
1431 DWORD dwMediaNumEntries
,
1432 LPLINEMEDIACONTROLTONE
const lpToneList
,
1433 DWORD dwToneNumEntries
,
1434 LPLINEMEDIACONTROLCALLSTATE
const lpCallStateList
,
1435 DWORD dwCallStateNumEntries
)
1441 /***********************************************************************
1442 * lineSetMediaMode (TAPI32.@)
1444 DWORD WINAPI
lineSetMediaMode(HCALL hCall
, DWORD dwMediaModes
)
1446 FIXME("(%p, %08x): stub.\n", hCall
, dwMediaModes
);
1450 /***********************************************************************
1451 * lineSetNumRings (TAPI32.@)
1453 DWORD WINAPI
lineSetNumRings(HLINE hLine
, DWORD dwAddressID
, DWORD dwNumRings
)
1455 FIXME("(%p, %08x, %08x): stub.\n", hLine
, dwAddressID
, dwNumRings
);
1459 /***********************************************************************
1460 * lineSetStatusMessages (TAPI32.@)
1462 DWORD WINAPI
lineSetStatusMessages(HLINE hLine
, DWORD dwLineStates
, DWORD dwAddressStates
)
1464 FIXME("(%p, %08x, %08x): stub.\n", hLine
, dwLineStates
, dwAddressStates
);
1468 /***********************************************************************
1469 * lineSetTerminal (TAPI32.@)
1471 DWORD WINAPI
lineSetTerminal(HLINE hLine
, DWORD dwAddressID
, HCALL hCall
, DWORD dwSelect
, DWORD dwTerminalModes
, DWORD dwTerminalID
, DWORD bEnable
)
1473 FIXME("(%p, %08x, %p, %08x, %08x, %08x, %08x): stub.\n", hLine
, dwAddressID
, hCall
, dwSelect
, dwTerminalModes
, dwTerminalID
, bEnable
);
1477 /***********************************************************************
1478 * lineSetTollList (TAPI32.@)
1480 DWORD WINAPI
lineSetTollListA(HLINEAPP hLineApp
, DWORD dwDeviceID
, LPCSTR lpszAddressIn
, DWORD dwTollListOption
)
1482 FIXME("(%p, %08x, %s, %08x): stub.\n", hLineApp
, dwDeviceID
, lpszAddressIn
, dwTollListOption
);
1486 /***********************************************************************
1487 * lineSetupConference (TAPI32.@)
1489 DWORD WINAPI
lineSetupConferenceA(HCALL hCall
, HLINE hLine
, LPHCALL lphConfCall
, LPHCALL lphConsultCall
, DWORD dwNumParties
, LPLINECALLPARAMS lpCallParams
)
1491 FIXME("(%p, %p, %p, %p, %08x, %p): stub.\n", hCall
, hLine
, lphConfCall
, lphConsultCall
, dwNumParties
, lpCallParams
);
1495 /***********************************************************************
1496 * lineSetupTransfer (TAPI32.@)
1498 DWORD WINAPI
lineSetupTransferA(HCALL hCall
, LPHCALL lphConsultCall
, LPLINECALLPARAMS lpCallParams
)
1500 FIXME("(%p, %p, %p): stub.\n", hCall
, lphConsultCall
, lpCallParams
);
1504 /***********************************************************************
1505 * lineShutdown (TAPI32.@)
1507 DWORD WINAPI
lineShutdown(HLINEAPP hLineApp
)
1509 FIXME("(%p): stub.\n", hLineApp
);
1513 /***********************************************************************
1514 * lineSwapHold (TAPI32.@)
1516 DWORD WINAPI
lineSwapHold(HCALL hActiveCall
, HCALL hHeldCall
)
1518 FIXME("(active: %p, held: %p): stub.\n", hActiveCall
, hHeldCall
);
1522 /***********************************************************************
1523 * lineTranslateAddress (TAPI32.@)
1525 DWORD WINAPI
lineTranslateAddressA(HLINEAPP hLineApp
, DWORD dwDeviceID
, DWORD dwAPIVersion
, LPCSTR lpszAddressIn
, DWORD dwCard
, DWORD dwTranslateOptions
, LPLINETRANSLATEOUTPUT lpTranslateOutput
)
1527 FIXME("(%p, %08x, %08x, %s, %08x, %08x, %p): stub.\n", hLineApp
, dwDeviceID
, dwAPIVersion
, lpszAddressIn
, dwCard
, dwTranslateOptions
, lpTranslateOutput
);
1531 /***********************************************************************
1532 * lineTranslateAddressW (TAPI32.@)
1534 DWORD WINAPI
lineTranslateAddressW(HLINEAPP hLineApp
, DWORD dwDeviceID
,
1535 DWORD dwAPIVersion
, LPCWSTR lpszAddressIn
, DWORD dwCard
,
1536 DWORD dwTranslateOptions
, LPLINETRANSLATEOUTPUT lpTranslateOutput
)
1538 FIXME("(%p, %08x, %08x, %s, %08x, %08x, %p): stub.\n", hLineApp
, dwDeviceID
, dwAPIVersion
,
1539 debugstr_w(lpszAddressIn
), dwCard
, dwTranslateOptions
, lpTranslateOutput
);
1543 /***********************************************************************
1544 * lineTranslateDialog (TAPI32.@)
1546 DWORD WINAPI
lineTranslateDialogA(HLINEAPP hLineApp
, DWORD dwDeviceID
, DWORD dwAPIVersion
, HWND hwndOwner
, LPCSTR lpszAddressIn
)
1548 FIXME("(%p, %08x, %08x, %p, %s): stub.\n", hLineApp
, dwDeviceID
, dwAPIVersion
, hwndOwner
, lpszAddressIn
);
1552 /***********************************************************************
1553 * lineTranslateDialogW (TAPI32.@)
1555 DWORD WINAPI
lineTranslateDialogW(HLINEAPP hLineApp
, DWORD dwDeviceID
,
1556 DWORD dwAPIVersion
, HWND hwndOwner
, LPCWSTR lpszAddressIn
)
1558 FIXME("(%p, %08x, %08x, %p, %s): stub.\n", hLineApp
, dwDeviceID
,
1559 dwAPIVersion
, hwndOwner
, debugstr_w(lpszAddressIn
));
1563 /***********************************************************************
1564 * lineUncompleteCall (TAPI32.@)
1566 DWORD WINAPI
lineUncompleteCall(HLINE hLine
, DWORD dwCompletionID
)
1568 FIXME("(%p, %08x): stub.\n", hLine
, dwCompletionID
);
1572 /***********************************************************************
1573 * lineUnhold (TAPI32.@)
1575 DWORD WINAPI
lineUnhold(HCALL hCall
)
1577 FIXME("(%p): stub.\n", hCall
);
1581 /***********************************************************************
1582 * lineUnpark (TAPI32.@)
1584 DWORD WINAPI
lineUnparkA(HLINE hLine
, DWORD dwAddressID
, LPHCALL lphCall
, LPCSTR lpszDestAddress
)
1586 FIXME("(%p, %08x, %p, %s): stub.\n", hLine
, dwAddressID
, lphCall
, lpszDestAddress
);