wined3d: Pass a wined3d_resource_desc structure to wined3d_texture_create_3d().
[wine/multimedia.git] / dlls / tapi32 / line.c
blob264e07bc0278346da17faebfd77f7b219da87557
1 /*
2 * TAPI32 line services
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
21 #include <string.h>
22 #include <stdlib.h>
23 #include <stdarg.h>
24 #include <stdio.h>
25 #include "windef.h"
26 #include "winbase.h"
27 #include "wingdi.h"
28 #include "winreg.h"
29 #include "winnls.h"
30 #include "winerror.h"
31 #include "objbase.h"
32 #include "tapi.h"
33 #include "wine/debug.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(tapi);
37 /* registry keys */
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);
52 return 1;
55 /***********************************************************************
56 * lineAddProviderA (TAPI32.@)
58 DWORD WINAPI lineAddProviderA(LPCSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID)
60 FIXME("(%s, %p, %p): stub.\n", lpszProviderName, hwndOwner, lpdwPermanentProviderID);
61 return LINEERR_OPERATIONFAILED;
64 /***********************************************************************
65 * lineAddProviderW (TAPI32.@)
67 DWORD WINAPI lineAddProviderW(LPCWSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID)
69 FIXME("(%s, %p, %p): stub.\n", wine_dbgstr_w(lpszProviderName), hwndOwner, lpdwPermanentProviderID);
70 return LINEERR_OPERATIONFAILED;
73 /***********************************************************************
74 * lineAddToConference (TAPI32.@)
76 DWORD WINAPI lineAddToConference(HCALL hConfCall, HCALL hConsultCall)
78 FIXME("(%p, %p): stub.\n", hConfCall, hConsultCall);
79 return 1;
82 /***********************************************************************
83 * lineAnswer (TAPI32.@)
85 DWORD WINAPI lineAnswer(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
87 FIXME("(%p, %s, %d): stub.\n", hCall, lpsUserUserInfo, dwSize);
88 return 1;
91 /***********************************************************************
92 * lineBlindTransfer (TAPI32.@)
94 DWORD WINAPI lineBlindTransferA(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
96 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszDestAddress, dwCountryCode);
97 return 1;
100 /***********************************************************************
101 * lineClose (TAPI32.@)
103 DWORD WINAPI lineClose(HLINE hLine)
105 FIXME("(%p): stub.\n", hLine);
106 return 0;
109 /***********************************************************************
110 * lineCompleteCall (TAPI32.@)
112 DWORD WINAPI lineCompleteCall(HCALL hCall, LPDWORD lpdwCompletionID, DWORD dwCompletionMode, DWORD dwMessageID)
114 FIXME("(%p, %p, %08x, %08x): stub.\n", hCall, lpdwCompletionID, dwCompletionMode, dwMessageID);
115 return 1;
118 /***********************************************************************
119 * lineCompleteTransfer (TAPI32.@)
121 DWORD WINAPI lineCompleteTransfer(HCALL hCall, HCALL hConsultCall, LPHCALL lphConfCall, DWORD dwTransferMode)
123 FIXME("(%p, %p, %p, %08x): stub.\n", hCall, hConsultCall, lphConfCall, dwTransferMode);
124 return 1;
127 /***********************************************************************
128 * lineConfigDialog (TAPI32.@)
130 DWORD WINAPI lineConfigDialogA(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass)
132 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID, hwndOwner, lpszDeviceClass);
133 return 0;
136 /***********************************************************************
137 * lineConfigDialogW (TAPI32.@)
139 DWORD WINAPI lineConfigDialogW(DWORD dwDeviceID, HWND hwndOwner, LPCWSTR lpszDeviceClass)
141 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID, hwndOwner, debugstr_w(lpszDeviceClass));
142 return 0;
145 /***********************************************************************
146 * lineConfigDialogEdit (TAPI32.@)
148 DWORD WINAPI lineConfigDialogEditA(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass, LPVOID const lpDeviceConfigIn, DWORD dwSize, LPVARSTRING lpDeviceConfigOut)
150 FIXME("stub.\n");
151 return 0;
154 /***********************************************************************
155 * lineConfigProvider (TAPI32.@)
157 DWORD WINAPI lineConfigProvider(HWND hwndOwner, DWORD dwPermanentProviderID)
159 FIXME("(%p, %08x): stub.\n", hwndOwner, dwPermanentProviderID);
160 return 0;
163 /***********************************************************************
164 * lineDeallocateCall (TAPI32.@)
166 DWORD WINAPI lineDeallocateCall(HCALL hCall)
168 FIXME("(%p): stub.\n", hCall);
169 return 0;
172 /***********************************************************************
173 * lineDevSpecific (TAPI32.@)
175 DWORD WINAPI lineDevSpecific(HLINE hLine, DWORD dwAddressId, HCALL hCall, LPVOID lpParams, DWORD dwSize)
177 FIXME("(%p, %08x, %p, %p, %d): stub.\n", hLine, dwAddressId, hCall, lpParams, dwSize);
178 return 1;
181 /***********************************************************************
182 * lineDevSpecificFeature (TAPI32.@)
184 DWORD WINAPI lineDevSpecificFeature(HLINE hLine, DWORD dwFeature, LPVOID lpParams, DWORD dwSize)
186 FIXME("(%p, %08x, %p, %d): stub.\n", hLine, dwFeature, lpParams, dwSize);
187 return 1;
190 /***********************************************************************
191 * lineDial (TAPI32.@)
193 DWORD WINAPI lineDialA(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
195 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszDestAddress, dwCountryCode);
196 return 1;
199 /***********************************************************************
200 * lineDialW (TAPI32.@)
202 DWORD WINAPI lineDialW(HCALL hCall, LPCWSTR lpszDestAddress, DWORD dwCountryCode)
204 FIXME("(%p, %s, %08x): stub.\n", hCall, debugstr_w(lpszDestAddress), dwCountryCode);
205 return 1;
208 /***********************************************************************
209 * lineDrop (TAPI32.@)
211 DWORD WINAPI lineDrop(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
213 FIXME("(%p, %s, %08x): stub.\n", hCall, lpsUserUserInfo, dwSize);
214 return 1;
217 /***********************************************************************
218 * lineForward (TAPI32.@)
220 DWORD WINAPI lineForwardA(HLINE hLine, DWORD bAllAddress, DWORD dwAddressID, LPLINEFORWARDLIST lpForwardList, DWORD dwNumRingsNoAnswer, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
222 FIXME("stub.\n");
223 return 1;
226 /***********************************************************************
227 * lineGatherDigits (TAPI32.@)
229 DWORD WINAPI lineGatherDigitsA(HCALL hCall, DWORD dwDigitModes, LPSTR lpsDigits, DWORD dwNumDigits, LPCSTR lpszTerminationDigits, DWORD dwFirstDigitTimeout, DWORD dwInterDigitTimeout)
231 FIXME("stub.\n");
232 return 0;
235 /***********************************************************************
236 * lineGenerateDigits (TAPI32.@)
238 DWORD WINAPI lineGenerateDigitsA(HCALL hCall, DWORD dwDigitModes, LPCSTR lpszDigits, DWORD dwDuration)
240 FIXME("(%p, %08x, %s, %d): stub.\n", hCall, dwDigitModes, lpszDigits, dwDuration);
241 return 0;
244 /***********************************************************************
245 * lineGenerateTone (TAPI32.@)
247 DWORD WINAPI lineGenerateTone(HCALL hCall, DWORD dwToneMode, DWORD dwDuration, DWORD dwNumTones, LPLINEGENERATETONE lpTones)
249 FIXME("(%p, %08x, %d, %d, %p): stub.\n", hCall, dwToneMode, dwDuration, dwNumTones, lpTones);
250 return 0;
253 /***********************************************************************
254 * lineGetAddressCaps (TAPI32.@)
256 DWORD WINAPI lineGetAddressCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAddressID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEADDRESSCAPS lpAddressCaps)
258 FIXME("(%p, %08x, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAddressID, dwAPIVersion, dwExtVersion, lpAddressCaps);
259 return 0;
262 /***********************************************************************
263 * lineGetAddressID (TAPI32.@)
265 DWORD WINAPI lineGetAddressIDA(HLINE hLine, LPDWORD lpdwAddressID, DWORD dwAddressMode, LPCSTR lpsAddress, DWORD dwSize)
267 FIXME("%p, %p, %08x, %s, %d): stub.\n", hLine, lpdwAddressID, dwAddressMode, lpsAddress, dwSize);
268 return 0;
271 /***********************************************************************
272 * lineGetAddressStatus (TAPI32.@)
274 DWORD WINAPI lineGetAddressStatusA(HLINE hLine, DWORD dwAddressID, LPLINEADDRESSSTATUS lpAddressStatus)
276 FIXME("(%p, %08x, %p): stub.\n", hLine, dwAddressID, lpAddressStatus);
277 return 0;
280 /***********************************************************************
281 * lineGetAppPriority (TAPI32.@)
283 DWORD WINAPI lineGetAppPriorityA(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPVARSTRING lpExtensionName, LPDWORD lpdwPriority)
285 FIXME("(%s, %08x, %p, %08x, %p, %p): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpExtensionName, lpdwPriority);
286 return 0;
289 /***********************************************************************
290 * lineGetCallInfo (TAPI32.@)
292 DWORD WINAPI lineGetCallInfoA(HCALL hCall, LPLINECALLINFO lpCallInfo)
294 FIXME("(%p, %p): stub.\n", hCall, lpCallInfo);
295 return 0;
298 /***********************************************************************
299 * lineGetCallStatus (TAPI32.@)
301 DWORD WINAPI lineGetCallStatus(HCALL hCall, LPLINECALLSTATUS lpCallStatus)
303 FIXME("(%p, %p): stub.\n", hCall, lpCallStatus);
304 return 0;
307 /***********************************************************************
308 * lineGetConfRelatedCalls (TAPI32.@)
310 DWORD WINAPI lineGetConfRelatedCalls(HCALL hCall, LPLINECALLLIST lpCallList)
312 FIXME("(%p, %p): stub.\n", hCall, lpCallList);
313 return 0;
316 typedef struct tagTAPI_CountryInfo
318 DWORD dwCountryID;
319 DWORD dwCountryCode;
320 LPSTR lpCountryName;
321 LPSTR lpSameAreaRule;
322 LPSTR lpLongDistanceRule;
323 LPSTR lpInternationalRule;
324 } TAPI_CountryInfo;
326 /***********************************************************************
327 * lineGetCountry (TAPI32.@)
329 DWORD WINAPI lineGetCountryA(DWORD dwCountryID, DWORD dwAPIVersion, LPLINECOUNTRYLIST lpLineCountryList)
331 DWORD dwAvailSize, dwOffset, i, num_countries, max_subkey_len;
332 LPLINECOUNTRYENTRY lpLCE;
333 HKEY hkey;
334 char *subkey_name;
336 if(!lpLineCountryList) {
337 TRACE("(%08x, %08x, %p): stub. Returning LINEERR_INVALPOINTER\n",
338 dwCountryID, dwAPIVersion, lpLineCountryList);
339 return LINEERR_INVALPOINTER;
342 TRACE("(%08x, %08x, %p(%d)): stub.\n",
343 dwCountryID, dwAPIVersion, lpLineCountryList,
344 lpLineCountryList->dwTotalSize);
346 if(RegOpenKeyA(HKEY_LOCAL_MACHINE, szCountrylistKey, &hkey)
347 != ERROR_SUCCESS)
348 return LINEERR_INIFILECORRUPT;
351 dwAvailSize = lpLineCountryList->dwTotalSize;
352 dwOffset = sizeof (LINECOUNTRYLIST);
354 if(dwAvailSize<dwOffset)
355 return LINEERR_STRUCTURETOOSMALL;
357 memset(lpLineCountryList, 0, dwAvailSize);
359 lpLineCountryList->dwTotalSize = dwAvailSize;
360 lpLineCountryList->dwUsedSize = dwOffset;
361 lpLineCountryList->dwNumCountries = 0;
362 lpLineCountryList->dwCountryListSize = 0;
363 lpLineCountryList->dwCountryListOffset = dwOffset;
365 lpLCE = (LPLINECOUNTRYENTRY)(&lpLineCountryList[1]);
367 if(RegQueryInfoKeyA(hkey, NULL, NULL, NULL, &num_countries, &max_subkey_len,
368 NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
369 RegCloseKey(hkey);
370 return LINEERR_STRUCTURETOOSMALL;
373 if(dwCountryID)
374 dwOffset = sizeof (LINECOUNTRYENTRY);
375 else
376 dwOffset += num_countries * sizeof (LINECOUNTRYENTRY);
378 max_subkey_len++;
379 subkey_name = HeapAlloc(GetProcessHeap(), 0, max_subkey_len);
380 for(i = 0; i < num_countries; i++)
382 DWORD len, size, size_int, size_long, size_name, size_same;
383 HKEY hsubkey;
385 if(RegEnumKeyA(hkey, i, subkey_name, max_subkey_len) !=
386 ERROR_SUCCESS)
387 continue;
389 if(dwCountryID && (atoi(subkey_name) != dwCountryID))
390 continue;
392 if(RegOpenKeyA(hkey, subkey_name, &hsubkey) != ERROR_SUCCESS)
393 continue;
395 RegQueryValueExA(hsubkey, "InternationalRule", NULL, NULL,
396 NULL, &size_int);
397 len = size_int;
399 RegQueryValueExA(hsubkey, "LongDistanceRule", NULL, NULL,
400 NULL, &size_long);
401 len += size_long;
403 RegQueryValueExA(hsubkey, "Name", NULL, NULL,
404 NULL, &size_name);
405 len += size_name;
407 RegQueryValueExA(hsubkey, "SameAreaRule", NULL, NULL,
408 NULL, &size_same);
409 len += size_same;
411 if(dwAvailSize < (dwOffset+len))
413 dwOffset += len;
414 RegCloseKey(hsubkey);
415 if(dwCountryID)
416 break;
417 continue;
420 lpLineCountryList->dwNumCountries++;
421 lpLineCountryList->dwCountryListSize += sizeof (LINECOUNTRYENTRY);
422 lpLineCountryList->dwUsedSize += len + sizeof (LINECOUNTRYENTRY);
424 if(dwCountryID)
425 i = 0;
427 lpLCE[i].dwCountryID = atoi(subkey_name);
428 size = sizeof(DWORD);
429 RegQueryValueExA(hsubkey, "CountryCode", NULL, NULL,
430 (BYTE*)&lpLCE[i].dwCountryCode, &size);
432 lpLCE[i].dwNextCountryID = 0;
434 if(i > 0)
435 lpLCE[i-1].dwNextCountryID = lpLCE[i].dwCountryID;
437 /* add country name */
438 lpLCE[i].dwCountryNameSize = size_name;
439 lpLCE[i].dwCountryNameOffset = dwOffset;
440 RegQueryValueExA(hsubkey, "Name", NULL, NULL,
441 ((LPBYTE)lpLineCountryList)+dwOffset,
442 &size_name);
443 dwOffset += size_name;
445 /* add Same Area Rule */
446 lpLCE[i].dwSameAreaRuleSize = size_same;
447 lpLCE[i].dwSameAreaRuleOffset = dwOffset;
448 RegQueryValueExA(hsubkey, "SameAreaRule", NULL, NULL,
449 ((LPBYTE)lpLineCountryList)+dwOffset,
450 &size_same);
451 dwOffset += size_same;
453 /* add Long Distance Rule */
454 lpLCE[i].dwLongDistanceRuleSize = size_long;
455 lpLCE[i].dwLongDistanceRuleOffset = dwOffset;
456 RegQueryValueExA(hsubkey, "LongDistanceRule", NULL, NULL,
457 ((LPBYTE)lpLineCountryList)+dwOffset,
458 &size_long);
459 dwOffset += size_long;
461 /* add Long Distance Rule */
462 lpLCE[i].dwInternationalRuleSize = size_int;
463 lpLCE[i].dwInternationalRuleOffset = dwOffset;
464 RegQueryValueExA(hsubkey, "InternationalRule", NULL, NULL,
465 ((LPBYTE)lpLineCountryList)+dwOffset,
466 &size_int);
467 dwOffset += size_int;
468 RegCloseKey(hsubkey);
470 TRACE("Added country %s at %p\n", (LPSTR)lpLineCountryList + lpLCE[i].dwCountryNameOffset,
471 &lpLCE[i]);
473 if(dwCountryID) break;
476 lpLineCountryList->dwNeededSize = dwOffset;
478 TRACE("%d available %d required\n", dwAvailSize, dwOffset);
480 HeapFree(GetProcessHeap(), 0, subkey_name);
481 RegCloseKey(hkey);
483 return 0;
486 /***********************************************************************
487 * lineGetCountry (TAPI32.@)
489 DWORD WINAPI lineGetCountryW(DWORD dwCountryID, DWORD dwAPIVersion, LPLINECOUNTRYLIST lpLineCountryList)
491 return lineGetCountryA(dwCountryID, dwAPIVersion, lpLineCountryList);
494 /***********************************************************************
495 * lineGetDevCapsW (TAPI32.@)
497 DWORD WINAPI lineGetDevCapsW(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion,
498 DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps)
500 static int warn_once;
502 if(!warn_once++)
503 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion,
504 dwExtVersion, lpLineDevCaps);
505 return LINEERR_OPERATIONFAILED;
508 /***********************************************************************
509 * lineGetDevCapsA (TAPI32.@)
511 DWORD WINAPI lineGetDevCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion,
512 DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps)
514 static int warn_once;
516 if(!warn_once++)
517 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion,
518 dwExtVersion, lpLineDevCaps);
519 return LINEERR_OPERATIONFAILED;
522 /***********************************************************************
523 * lineGetDevConfig (TAPI32.@)
525 DWORD WINAPI lineGetDevConfigA(DWORD dwDeviceID, LPVARSTRING lpDeviceConfig, LPCSTR lpszDeviceClass)
527 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID, lpDeviceConfig, lpszDeviceClass);
528 return 0;
531 /***********************************************************************
532 * lineGetIDW (TAPI32.@)
534 DWORD WINAPI lineGetIDW(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect,
535 LPVARSTRING lpDeviceID, LPCWSTR lpszDeviceClass)
537 FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine, dwAddressID, hCall,
538 dwSelect, lpDeviceID,
539 debugstr_w(lpszDeviceClass));
540 return LINEERR_OPERATIONFAILED;
543 /***********************************************************************
544 * lineGetIDA (TAPI32.@)
546 DWORD WINAPI lineGetIDA(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect,
547 LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass)
549 FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine, dwAddressID, hCall,
550 dwSelect, lpDeviceID, lpszDeviceClass);
551 return LINEERR_OPERATIONFAILED;
554 /***********************************************************************
555 * lineGetIcon (TAPI32.@)
557 DWORD WINAPI lineGetIconA(DWORD dwDeviceID, LPCSTR lpszDeviceClass, HICON *lphIcon)
559 FIXME("(%08x, %s, %p): stub.\n", dwDeviceID, lpszDeviceClass, lphIcon);
560 return 0;
563 /***********************************************************************
564 * lineGetLineDevStatus (TAPI32.@)
566 DWORD WINAPI lineGetLineDevStatusA(HLINE hLine, LPLINEDEVSTATUS lpLineDevStatus)
568 FIXME("(%p, %p): stub.\n", hLine, lpLineDevStatus);
569 return 0;
572 /***********************************************************************
573 * lineGetMessage (TAPI32.@)
575 DWORD WINAPI lineGetMessage(HLINEAPP hLineApp, LPLINEMESSAGE lpMessage, DWORD dwTimeout)
577 FIXME("(%p, %p, %08x): stub.\n", hLineApp, lpMessage, dwTimeout);
578 return 0;
581 /***********************************************************************
582 * lineGetNewCalls (TAPI32.@)
584 DWORD WINAPI lineGetNewCalls(HLINE hLine, DWORD dwAddressID, DWORD dwSelect, LPLINECALLLIST lpCallList)
586 FIXME("(%p, %08x, %08x, %p): stub.\n", hLine, dwAddressID, dwSelect, lpCallList);
587 return 0;
590 /***********************************************************************
591 * lineGetNumRings (TAPI32.@)
593 DWORD WINAPI lineGetNumRings(HLINE hLine, DWORD dwAddressID, LPDWORD lpdwNumRings)
595 FIXME("(%p, %08x, %p): stub.\n", hLine, dwAddressID, lpdwNumRings);
596 return 0;
599 /***********************************************************************
600 * lineGetProviderListA (TAPI32.@)
602 DWORD WINAPI lineGetProviderListA(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList)
604 FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList);
605 return LINEERR_OPERATIONFAILED;
608 /***********************************************************************
609 * lineGetProviderListW (TAPI32.@)
611 DWORD WINAPI lineGetProviderListW(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList)
613 FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList);
614 return LINEERR_OPERATIONFAILED;
617 /***********************************************************************
618 * lineGetRequest (TAPI32.@)
620 DWORD WINAPI lineGetRequestA(HLINEAPP hLineApp, DWORD dwRequestMode, LPVOID lpRequestBuffer)
622 FIXME("%p, %08x, %p): stub.\n", hLineApp, dwRequestMode, lpRequestBuffer);
623 return 0;
626 /***********************************************************************
627 * lineGetStatusMessages (TAPI32.@)
629 DWORD WINAPI lineGetStatusMessages(HLINE hLine, LPDWORD lpdwLineStatus, LPDWORD lpdwAddressStates)
631 FIXME("(%p, %p, %p): stub.\n", hLine, lpdwLineStatus, lpdwAddressStates);
632 return 0;
635 /***********************************************************************
636 * lineGetTranslateCaps (TAPI32.@)
638 * get address translate capabilities. Returns a LINETRANSLATECAPS
639 * structure:
641 * +-----------------------+
642 * |TotalSize |
643 * |NeededSize |
644 * |UsedSize |
645 * +-----------------------+
646 * |NumLocations |
647 * |LocationsListSize |
648 * |LocationsListOffset | -+
649 * |CurrentLocationID | |
650 * +-----------------------+ |
651 * |NumCards | |
652 * |CardListSize | |
653 * |CardListOffset | -|--+
654 * |CurrentPreferredCardID | | |
655 * +-----------------------+ | |
656 * | | <+ |
657 * |LINELOCATIONENTRY #1 | |
658 * | | |
659 * +-----------------------+ |
660 * ~ ~ |
661 * +-----------------------+ |
662 * | | |
663 * |LINELOCATIONENTRY | |
664 * | #NumLocations| |
665 * +-----------------------+ |
666 * | | <---+
667 * |LINECARDENTRY #1 |
668 * | |
669 * +-----------------------+
670 * ~ ~
671 * +-----------------------+
672 * | |
673 * |LINECARDENTRY #NumCards|
674 * | |
675 * +-----------------------+
676 * | room for strings named|
677 * | in the structures |
678 * | above. |
679 * +-----------------------+
681 DWORD WINAPI lineGetTranslateCapsA(HLINEAPP hLineApp, DWORD dwAPIVersion,
682 LPLINETRANSLATECAPS lpTranslateCaps)
684 HKEY hkLocations, hkCards, hkCardLocations, hsubkey;
685 int numlocations, numcards;
686 DWORD maxlockeylen,
687 maxcardkeylen;
688 char *loc_key_name = NULL;
689 char *card_key_name = NULL;
690 LPBYTE strptr;
691 int length;
692 int i;
693 DWORD lendword;
694 DWORD currentid;
695 LPLINELOCATIONENTRY pLocEntry;
696 LPLINECARDENTRY pCardEntry;
698 TRACE("(%p, %08x, %p (tot. size %d)\n", hLineApp, dwAPIVersion,
699 lpTranslateCaps, lpTranslateCaps->dwTotalSize );
700 if( lpTranslateCaps->dwTotalSize < sizeof(LINETRANSLATECAPS))
701 return LINEERR_STRUCTURETOOSMALL;
702 if( RegCreateKeyA(HKEY_LOCAL_MACHINE, szLocationsKey, &hkLocations)
703 != ERROR_SUCCESS ) {
704 ERR("unexpected registry error 1.\n");
705 return LINEERR_INIFILECORRUPT;
707 lendword = sizeof( DWORD);
708 if( RegQueryValueExA( hkLocations, "CurrentID", NULL, NULL,
709 (LPBYTE) &currentid, &lendword) != ERROR_SUCCESS )
710 currentid = -1; /* change this later */
711 if(RegQueryInfoKeyA(hkLocations, NULL, NULL, NULL, NULL, &maxlockeylen,
712 NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
713 RegCloseKey(hkLocations);
714 ERR("unexpected registry error 2.\n");
715 return LINEERR_INIFILECORRUPT;
717 maxlockeylen++;
718 if( maxlockeylen < 10)
719 maxlockeylen = 10; /* need this also if there is no key */
720 loc_key_name = HeapAlloc( GetProcessHeap(), 0, maxlockeylen);
721 /* first time through: calculate needed space */
722 length=0;
723 i=0;
724 numlocations=0;
725 while( RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen)
726 == ERROR_SUCCESS){
727 DWORD size_val;
728 i++;
729 if( strncasecmp(loc_key_name, "location", 8) ||
730 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey)
731 != ERROR_SUCCESS))
732 continue;
733 numlocations++;
734 length += sizeof(LINELOCATIONENTRY);
735 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val);
736 length += size_val;
737 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL,NULL,&size_val);
738 length += size_val;
739 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL,NULL,&size_val);
740 length += size_val;
741 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL,NULL,&size_val);
742 length += size_val;
743 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL,NULL,&size_val);
744 length += size_val;
745 /* fixme: what about TollPrefixList???? */
746 RegCloseKey(hsubkey);
748 if(numlocations == 0) {
749 /* add one location */
750 if( RegCreateKeyA( hkLocations, "Location1", &hsubkey)
751 == ERROR_SUCCESS) {
752 DWORD dwval;
753 char buf[10];
754 numlocations = 1;
755 length += sizeof(LINELOCATIONENTRY) + 20 ;
756 RegSetValueExA( hsubkey, "AreaCode", 0, REG_SZ, (const BYTE *)"010", 4);
757 GetLocaleInfoA( LOCALE_SYSTEM_DEFAULT, LOCALE_ICOUNTRY, buf, 8);
758 dwval = atoi(buf);
759 RegSetValueExA( hsubkey, "Country", 0, REG_DWORD, (LPBYTE)&dwval,
760 sizeof(DWORD));
761 RegSetValueExA( hsubkey, "DisableCallWaiting", 0, REG_SZ, (const BYTE *)"", 1);
762 dwval = 1;
763 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval,
764 sizeof(DWORD));
765 RegSetValueExA( hsubkey, "LongDistanceAccess", 0, REG_SZ, (const BYTE *)"", 1);
766 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"New Location", 13);
767 RegSetValueExA( hsubkey, "OutsideAccess", 0, REG_SZ, (const BYTE *)"", 1);
768 RegCloseKey(hsubkey);
769 dwval = 1;
770 RegSetValueExA( hkLocations, "CurrentID", 0, REG_DWORD,
771 (LPBYTE)&dwval, sizeof(DWORD));
772 dwval = 2;
773 RegSetValueExA( hkLocations, "NextID", 0, REG_DWORD, (LPBYTE)&dwval,
774 sizeof(DWORD));
777 /* do the card list */
778 numcards=0;
779 if( RegCreateKeyA(HKEY_CURRENT_USER, szCardsKey, &hkCards)
780 == ERROR_SUCCESS ) {
781 if(RegQueryInfoKeyA(hkCards, NULL, NULL, NULL, NULL, &maxcardkeylen,
782 NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
783 maxcardkeylen++;
784 if( maxcardkeylen < 6) maxcardkeylen = 6;
785 card_key_name = HeapAlloc(GetProcessHeap(), 0, maxcardkeylen);
786 i=0;
787 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) ==
788 ERROR_SUCCESS){
789 DWORD size_val;
790 i++;
791 if( strncasecmp(card_key_name, "card", 4) || ERROR_SUCCESS !=
792 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) ))
793 continue;
794 numcards++;
795 length += sizeof(LINECARDENTRY);
796 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val);
797 length += size_val;
798 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL,NULL,&size_val);
799 length += size_val;
800 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL,NULL,&size_val);
801 length += size_val;
802 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL,NULL,
803 &size_val);
804 length += size_val;
805 RegCloseKey(hsubkey);
808 /* add one card (direct call) */
809 if (numcards == 0 &&
810 ERROR_SUCCESS == RegCreateKeyA( hkCards, "Card1", &hsubkey)) {
811 DWORD dwval;
812 numcards = 1;
813 length += sizeof(LINECARDENTRY) + 22 ;
814 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"None (Direct Call)", 19);
815 dwval = 1;
816 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval,
817 sizeof(DWORD));
818 RegSetValueExA( hsubkey, "InternationalRule", 0, REG_SZ, (const BYTE *)"", 1);
819 RegSetValueExA( hsubkey, "LDRule", 0, REG_SZ, (const BYTE *)"", 1);
820 RegSetValueExA( hsubkey, "LocalRule", 0, REG_SZ, (const BYTE *)"", 1);
821 RegCloseKey(hsubkey);
822 dwval = 2;
823 RegSetValueExA( hkCards, "NextID", 0, REG_DWORD, (LPBYTE)&dwval,
824 sizeof(DWORD));
826 } else hkCards = 0; /* should really fail */
827 /* check if sufficient room is available */
828 lpTranslateCaps->dwNeededSize = sizeof(LINETRANSLATECAPS) + length;
829 if ( lpTranslateCaps->dwNeededSize > lpTranslateCaps->dwTotalSize ) {
830 RegCloseKey( hkLocations);
831 if( hkCards) RegCloseKey( hkCards);
832 HeapFree(GetProcessHeap(), 0, loc_key_name);
833 HeapFree(GetProcessHeap(), 0, card_key_name);
834 lpTranslateCaps->dwUsedSize = sizeof(LINETRANSLATECAPS);
835 TRACE("Insufficient space: total %d needed %d used %d\n",
836 lpTranslateCaps->dwTotalSize,
837 lpTranslateCaps->dwNeededSize,
838 lpTranslateCaps->dwUsedSize);
839 return 0;
841 /* fill in the LINETRANSLATECAPS structure */
842 lpTranslateCaps->dwUsedSize = lpTranslateCaps->dwNeededSize;
843 lpTranslateCaps->dwNumLocations = numlocations;
844 lpTranslateCaps->dwLocationListSize = sizeof(LINELOCATIONENTRY) *
845 lpTranslateCaps->dwNumLocations;
846 lpTranslateCaps->dwLocationListOffset = sizeof(LINETRANSLATECAPS);
847 lpTranslateCaps->dwCurrentLocationID = currentid;
848 lpTranslateCaps->dwNumCards = numcards;
849 lpTranslateCaps->dwCardListSize = sizeof(LINECARDENTRY) *
850 lpTranslateCaps->dwNumCards;
851 lpTranslateCaps->dwCardListOffset = lpTranslateCaps->dwLocationListOffset +
852 lpTranslateCaps->dwLocationListSize;
853 lpTranslateCaps->dwCurrentPreferredCardID = 0;
854 /* this is where the strings will be stored */
855 strptr = ((LPBYTE) lpTranslateCaps) +
856 lpTranslateCaps->dwCardListOffset + lpTranslateCaps->dwCardListSize;
857 pLocEntry = (LPLINELOCATIONENTRY) (lpTranslateCaps + 1);
858 /* key with Preferred CardIDs */
859 if( RegOpenKeyA(HKEY_CURRENT_USER, szLocationsKey, &hkCardLocations)
860 != ERROR_SUCCESS )
861 hkCardLocations = 0;
862 /* second time through all locations */
863 i=0;
864 while(RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen)
865 == ERROR_SUCCESS){
866 DWORD size_val;
867 i++;
868 if( strncasecmp(loc_key_name, "location", 8) ||
869 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey)
870 != ERROR_SUCCESS))
871 continue;
872 size_val=sizeof(DWORD);
873 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL,
874 (LPBYTE) &(pLocEntry->dwPermanentLocationID), &size_val) !=
875 ERROR_SUCCESS)
876 pLocEntry->dwPermanentLocationID = atoi( loc_key_name + 8);
877 size_val=2048;
878 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val);
879 pLocEntry->dwLocationNameSize = size_val;
880 pLocEntry->dwLocationNameOffset = strptr - (LPBYTE) lpTranslateCaps;
881 strptr += size_val;
883 size_val=2048;
884 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL, strptr, &size_val);
885 pLocEntry->dwCityCodeSize = size_val;
886 pLocEntry->dwCityCodeOffset = strptr - (LPBYTE) lpTranslateCaps;
887 strptr += size_val;
889 size_val=2048;
890 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL, strptr, &size_val);
891 pLocEntry->dwLocalAccessCodeSize = size_val;
892 pLocEntry->dwLocalAccessCodeOffset = strptr - (LPBYTE) lpTranslateCaps;
893 strptr += size_val;
894 size_val=2048;
895 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL, strptr,
896 &size_val);
897 pLocEntry->dwLongDistanceAccessCodeSize= size_val;
898 pLocEntry->dwLongDistanceAccessCodeOffset= strptr -
899 (LPBYTE) lpTranslateCaps;
900 strptr += size_val;
901 size_val=2048;
902 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL, strptr,
903 &size_val);
904 pLocEntry->dwCancelCallWaitingSize= size_val;
905 pLocEntry->dwCancelCallWaitingOffset= strptr - (LPBYTE) lpTranslateCaps;
906 strptr += size_val;
908 pLocEntry->dwTollPrefixListSize = 0; /* FIXME */
909 pLocEntry->dwTollPrefixListOffset = 0; /* FIXME */
911 size_val=sizeof(DWORD);
912 RegQueryValueExA(hsubkey, "Country",NULL,NULL,
913 (LPBYTE) &(pLocEntry->dwCountryCode), &size_val);
914 pLocEntry->dwCountryID = pLocEntry->dwCountryCode; /* FIXME */
915 RegQueryValueExA(hsubkey, "Flags",NULL,NULL,
916 (LPBYTE) &(pLocEntry->dwOptions), &size_val);
917 RegCloseKey(hsubkey);
918 /* get preferred cardid */
919 pLocEntry->dwPreferredCardID = 0;
920 if ( hkCardLocations) {
921 size_val=sizeof(DWORD);
922 if(RegOpenKeyA(hkCardLocations, loc_key_name, &hsubkey) ==
923 ERROR_SUCCESS) {
924 RegQueryValueExA(hsubkey, "CallingCard",NULL,NULL,
925 (LPBYTE) &(pLocEntry->dwPreferredCardID), &size_val);
926 RegCloseKey(hsubkey);
930 /* make sure there is a currentID */
931 if(currentid == -1){
932 currentid = pLocEntry->dwPermanentLocationID;
933 lpTranslateCaps->dwCurrentLocationID = currentid;
935 if(pLocEntry->dwPermanentLocationID == currentid )
936 lpTranslateCaps->dwCurrentPreferredCardID =
937 pLocEntry->dwPreferredCardID;
938 TRACE("added: ID %d %s CountryCode %d CityCode %s CardID %d "
939 "LocalAccess: %s LongDistanceAccess: %s CountryID %d "
940 "Options %d CancelCallWait %s\n",
941 pLocEntry->dwPermanentLocationID,
942 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocationNameOffset),
943 pLocEntry->dwCountryCode,
944 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCityCodeOffset),
945 pLocEntry->dwPreferredCardID,
946 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocalAccessCodeOffset),
947 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLongDistanceAccessCodeOffset),
948 pLocEntry->dwCountryID,
949 pLocEntry->dwOptions,
950 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCancelCallWaitingOffset));
951 pLocEntry++;
953 pCardEntry= (LPLINECARDENTRY) pLocEntry;
954 /* do the card list */
955 if( hkCards) {
956 i=0;
957 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) ==
958 ERROR_SUCCESS){
959 DWORD size_val;
960 i++;
961 if( strncasecmp(card_key_name, "card", 4) ||
962 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) != ERROR_SUCCESS))
963 continue;
964 size_val=sizeof(DWORD);
965 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL,
966 (LPBYTE) &(pCardEntry->dwPermanentCardID), &size_val) !=
967 ERROR_SUCCESS)
968 pCardEntry->dwPermanentCardID= atoi( card_key_name + 4);
969 size_val=2048;
970 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val);
971 pCardEntry->dwCardNameSize = size_val;
972 pCardEntry->dwCardNameOffset = strptr - (LPBYTE) lpTranslateCaps;
973 strptr += size_val;
974 pCardEntry->dwCardNumberDigits = 1; /* FIXME */
975 size_val=2048;
976 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL, strptr, &size_val);
977 pCardEntry->dwSameAreaRuleSize= size_val;
978 pCardEntry->dwSameAreaRuleOffset= strptr - (LPBYTE) lpTranslateCaps;
979 strptr += size_val;
980 size_val=2048;
981 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL, strptr, &size_val);
982 pCardEntry->dwLongDistanceRuleSize = size_val;
983 pCardEntry->dwLongDistanceRuleOffset = strptr - (LPBYTE) lpTranslateCaps;
984 strptr += size_val;
985 size_val=2048;
986 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL, strptr,
987 &size_val);
988 pCardEntry->dwInternationalRuleSize = size_val;
989 pCardEntry->dwInternationalRuleOffset = strptr -
990 (LPBYTE) lpTranslateCaps;
991 strptr += size_val;
992 size_val=sizeof(DWORD);
993 RegQueryValueExA(hsubkey, "Flags",NULL, NULL,
994 (LPBYTE) &(pCardEntry->dwOptions), &size_val);
995 TRACE( "added card: ID %d name %s SameArea %s LongDistance %s International %s Options 0x%x\n",
996 pCardEntry->dwPermanentCardID,
997 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwCardNameOffset),
998 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwSameAreaRuleOffset),
999 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwLongDistanceRuleOffset),
1000 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwInternationalRuleOffset),
1001 pCardEntry->dwOptions);
1003 pCardEntry++;
1007 if(hkLocations) RegCloseKey(hkLocations);
1008 if(hkCards) RegCloseKey(hkCards);
1009 if(hkCardLocations) RegCloseKey(hkCardLocations);
1010 HeapFree(GetProcessHeap(), 0, loc_key_name);
1011 HeapFree(GetProcessHeap(), 0, card_key_name);
1012 TRACE(" returning success tot %d needed %d used %d\n",
1013 lpTranslateCaps->dwTotalSize,
1014 lpTranslateCaps->dwNeededSize,
1015 lpTranslateCaps->dwUsedSize );
1016 return 0; /* success */
1019 /***********************************************************************
1020 * lineHandoff (TAPI32.@)
1022 DWORD WINAPI lineHandoffA(HCALL hCall, LPCSTR lpszFileName, DWORD dwMediaMode)
1024 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszFileName, dwMediaMode);
1025 return 0;
1028 /***********************************************************************
1029 * lineHold (TAPI32.@)
1031 DWORD WINAPI lineHold(HCALL hCall)
1033 FIXME("(%p): stub.\n", hCall);
1034 return 1;
1037 /***********************************************************************
1038 * lineInitialize (TAPI32.@)
1040 DWORD WINAPI lineInitialize(
1041 LPHLINEAPP lphLineApp,
1042 HINSTANCE hInstance,
1043 LINECALLBACK lpfnCallback,
1044 LPCSTR lpszAppName,
1045 LPDWORD lpdwNumDevs)
1047 FIXME("(%p, %p, %p, %s, %p): stub.\n", lphLineApp, hInstance,
1048 lpfnCallback, debugstr_a(lpszAppName), lpdwNumDevs);
1049 return 0;
1052 /***********************************************************************
1053 * lineInitializeExA (TAPI32.@)
1055 LONG WINAPI lineInitializeExA(LPHLINEAPP lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, LPCSTR lpszFriendlyAppName, LPDWORD lpdwNumDevs, LPDWORD lpdwAPIVersion, LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams)
1057 FIXME("(%p, %p, %p, %s, %p, %p, %p): stub.\n", lphLineApp, hInstance,
1058 lpfnCallback, debugstr_a(lpszFriendlyAppName), lpdwNumDevs, lpdwAPIVersion, lpLineInitializeExParams);
1059 return 0;
1062 /***********************************************************************
1063 * lineInitializeExW (TAPI32.@)
1065 LONG WINAPI lineInitializeExW(LPHLINEAPP lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, LPCWSTR lpszFriendlyAppName, LPDWORD lpdwNumDevs, LPDWORD lpdwAPIVersion, LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams)
1067 FIXME("(%p, %p, %p, %s, %p, %p, %p): stub.\n", lphLineApp, hInstance,
1068 lpfnCallback, debugstr_w(lpszFriendlyAppName), lpdwNumDevs, lpdwAPIVersion, lpLineInitializeExParams);
1069 return 0;
1072 /***********************************************************************
1073 * lineMakeCallW (TAPI32.@)
1075 DWORD WINAPI lineMakeCallW(HLINE hLine, LPHCALL lphCall, LPCWSTR lpszDestAddress,
1076 DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams)
1078 FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, debugstr_w(lpszDestAddress),
1079 dwCountryCode, lpCallParams);
1080 return LINEERR_OPERATIONFAILED;
1083 /***********************************************************************
1084 * lineMakeCallA (TAPI32.@)
1086 DWORD WINAPI lineMakeCallA(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress,
1087 DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams)
1089 FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, lpszDestAddress,
1090 dwCountryCode, lpCallParams);
1091 return LINEERR_OPERATIONFAILED;
1094 /***********************************************************************
1095 * lineMonitorDigits (TAPI32.@)
1097 DWORD WINAPI lineMonitorDigits(HCALL hCall, DWORD dwDigitModes)
1099 FIXME("(%p, %08x): stub.\n", hCall, dwDigitModes);
1100 return 0;
1103 /***********************************************************************
1104 * lineMonitorMedia (TAPI32.@)
1106 DWORD WINAPI lineMonitorMedia(HCALL hCall, DWORD dwMediaModes)
1108 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes);
1109 return 0;
1112 /***********************************************************************
1113 * lineMonitorTones (TAPI32.@)
1115 DWORD WINAPI lineMonitorTones(HCALL hCall, LPLINEMONITORTONE lpToneList, DWORD dwNumEntries)
1117 FIXME("(%p, %p, %08x): stub.\n", hCall, lpToneList, dwNumEntries);
1118 return 0;
1121 /***********************************************************************
1122 * lineNegotiateAPIVersion (TAPI32.@)
1124 DWORD WINAPI lineNegotiateAPIVersion(
1125 HLINEAPP hLineApp,
1126 DWORD dwDeviceID,
1127 DWORD dwAPILowVersion,
1128 DWORD dwAPIHighVersion,
1129 LPDWORD lpdwAPIVersion,
1130 LPLINEEXTENSIONID lpExtensionID
1133 static int warn_once;
1135 if(!warn_once++)
1136 FIXME("(%p, %d, %d, %d, %p, %p): stub.\n", hLineApp, dwDeviceID,
1137 dwAPILowVersion, dwAPIHighVersion, lpdwAPIVersion, lpExtensionID);
1138 *lpdwAPIVersion = dwAPIHighVersion;
1139 return 0;
1142 /***********************************************************************
1143 * lineNegotiateExtVersion (TAPI32.@)
1145 DWORD WINAPI lineNegotiateExtVersion(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtLowVersion, DWORD dwExtHighVersion, LPDWORD lpdwExtVersion)
1147 FIXME("stub.\n");
1148 return 0;
1151 /***********************************************************************
1152 * lineOpen (TAPI32.@)
1154 DWORD WINAPI lineOpenA(HLINEAPP hLineApp, DWORD dwDeviceID, LPHLINE lphLine, DWORD dwAPIVersion, DWORD dwExtVersion, DWORD dwCallbackInstance, DWORD dwPrivileges, DWORD dwMediaModes, LPLINECALLPARAMS lpCallParams)
1156 FIXME("stub.\n");
1157 return 0;
1160 /***********************************************************************
1161 * linePark (TAPI32.@)
1163 DWORD WINAPI lineParkA(HCALL hCall, DWORD dwParkMode, LPCSTR lpszDirAddress, LPVARSTRING lpNonDirAddress)
1165 FIXME("(%p, %08x, %s, %p): stub.\n", hCall, dwParkMode, lpszDirAddress, lpNonDirAddress);
1166 return 1;
1169 /***********************************************************************
1170 * linePickup (TAPI32.@)
1172 DWORD WINAPI linePickupA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress, LPCSTR lpszGroupID)
1174 FIXME("(%p, %08x, %p, %s, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress, lpszGroupID);
1175 return 1;
1178 /***********************************************************************
1179 * linePrepareAddToConference (TAPI32.@)
1181 DWORD WINAPI linePrepareAddToConferenceA(HCALL hConfCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
1183 FIXME("(%p, %p, %p): stub.\n", hConfCall, lphConsultCall, lpCallParams);
1184 return 1;
1187 /***********************************************************************
1188 * lineRedirect (TAPI32.@)
1190 DWORD WINAPI lineRedirectA(
1191 HCALL hCall,
1192 LPCSTR lpszDestAddress,
1193 DWORD dwCountryCode) {
1195 FIXME(": stub.\n");
1196 return 1;
1199 /***********************************************************************
1200 * lineRegisterRequestRecipient (TAPI32.@)
1202 DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP hLineApp, DWORD dwRegistrationInstance, DWORD dwRequestMode, DWORD dwEnable)
1204 FIXME("(%p, %08x, %08x, %08x): stub.\n", hLineApp, dwRegistrationInstance, dwRequestMode, dwEnable);
1205 return 1;
1208 /***********************************************************************
1209 * lineReleaseUserUserInfo (TAPI32.@)
1211 DWORD WINAPI lineReleaseUserUserInfo(HCALL hCall)
1213 FIXME("(%p): stub.\n", hCall);
1214 return 1;
1217 /***********************************************************************
1218 * lineRemoveFromConference (TAPI32.@)
1220 DWORD WINAPI lineRemoveFromConference(HCALL hCall)
1222 FIXME("(%p): stub.\n", hCall);
1223 return 1;
1226 /***********************************************************************
1227 * lineRemoveProvider (TAPI32.@)
1229 DWORD WINAPI lineRemoveProvider(DWORD dwPermanentProviderID, HWND hwndOwner)
1231 FIXME("(%08x, %p): stub.\n", dwPermanentProviderID, hwndOwner);
1232 return 1;
1235 /***********************************************************************
1236 * lineSecureCall (TAPI32.@)
1238 DWORD WINAPI lineSecureCall(HCALL hCall)
1240 FIXME("(%p): stub.\n", hCall);
1241 return 1;
1244 /***********************************************************************
1245 * lineSendUserUserInfo (TAPI32.@)
1247 DWORD WINAPI lineSendUserUserInfo(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
1249 FIXME("(%p, %s, %08x): stub.\n", hCall, lpsUserUserInfo, dwSize);
1250 return 1;
1253 /***********************************************************************
1254 * lineSetAppPriority (TAPI32.@)
1256 DWORD WINAPI lineSetAppPriorityA(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPCSTR lpszExtensionName, DWORD dwPriority)
1258 FIXME("(%s, %08x, %p, %08x, %s, %08x): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpszExtensionName, dwPriority);
1259 return 0;
1262 /***********************************************************************
1263 * lineSetAppSpecific (TAPI32.@)
1265 DWORD WINAPI lineSetAppSpecific(HCALL hCall, DWORD dwAppSpecific)
1267 FIXME("(%p, %08x): stub.\n", hCall, dwAppSpecific);
1268 return 0;
1271 /***********************************************************************
1272 * lineSetCallParams (TAPI32.@)
1274 DWORD WINAPI lineSetCallParams(HCALL hCall, DWORD dwBearerMode, DWORD dwMinRate, DWORD dwMaxRate, LPLINEDIALPARAMS lpDialParams)
1276 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hCall, dwBearerMode, dwMinRate, dwMaxRate, lpDialParams);
1277 return 1;
1280 /***********************************************************************
1281 * lineSetCallPrivilege (TAPI32.@)
1283 DWORD WINAPI lineSetCallPrivilege(HCALL hCall, DWORD dwCallPrivilege)
1285 FIXME("(%p, %08x): stub.\n", hCall, dwCallPrivilege);
1286 return 0;
1289 /***********************************************************************
1290 * lineSetCurrentLocation (TAPI32.@)
1292 DWORD WINAPI lineSetCurrentLocation(HLINEAPP hLineApp, DWORD dwLocation)
1294 FIXME("(%p, %08x): stub.\n", hLineApp, dwLocation);
1295 return 0;
1298 /***********************************************************************
1299 * lineSetDevConfig (TAPI32.@)
1301 DWORD WINAPI lineSetDevConfigA(DWORD dwDeviceID, LPVOID lpDeviceConfig, DWORD dwSize, LPCSTR lpszDeviceClass)
1303 FIXME("(%08x, %p, %08x, %s): stub.\n", dwDeviceID, lpDeviceConfig, dwSize, lpszDeviceClass);
1304 return 0;
1307 /***********************************************************************
1308 * lineSetMediaControl (TAPI32.@)
1310 DWORD WINAPI lineSetMediaControl(
1311 HLINE hLine,
1312 DWORD dwAddressID,
1313 HCALL hCall,
1314 DWORD dwSelect,
1315 LPLINEMEDIACONTROLDIGIT const lpDigitList,
1316 DWORD dwDigitNumEntries,
1317 LPLINEMEDIACONTROLMEDIA const lpMediaList,
1318 DWORD dwMediaNumEntries,
1319 LPLINEMEDIACONTROLTONE const lpToneList,
1320 DWORD dwToneNumEntries,
1321 LPLINEMEDIACONTROLCALLSTATE const lpCallStateList,
1322 DWORD dwCallStateNumEntries)
1324 FIXME(": stub.\n");
1325 return 0;
1328 /***********************************************************************
1329 * lineSetMediaMode (TAPI32.@)
1331 DWORD WINAPI lineSetMediaMode(HCALL hCall, DWORD dwMediaModes)
1333 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes);
1334 return 0;
1337 /***********************************************************************
1338 * lineSetNumRings (TAPI32.@)
1340 DWORD WINAPI lineSetNumRings(HLINE hLine, DWORD dwAddressID, DWORD dwNumRings)
1342 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwAddressID, dwNumRings);
1343 return 0;
1346 /***********************************************************************
1347 * lineSetStatusMessages (TAPI32.@)
1349 DWORD WINAPI lineSetStatusMessages(HLINE hLine, DWORD dwLineStates, DWORD dwAddressStates)
1351 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwLineStates, dwAddressStates);
1352 return 0;
1355 /***********************************************************************
1356 * lineSetTerminal (TAPI32.@)
1358 DWORD WINAPI lineSetTerminal(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, DWORD dwTerminalModes, DWORD dwTerminalID, DWORD bEnable)
1360 FIXME("(%p, %08x, %p, %08x, %08x, %08x, %08x): stub.\n", hLine, dwAddressID, hCall, dwSelect, dwTerminalModes, dwTerminalID, bEnable);
1361 return 1;
1364 /***********************************************************************
1365 * lineSetTollList (TAPI32.@)
1367 DWORD WINAPI lineSetTollListA(HLINEAPP hLineApp, DWORD dwDeviceID, LPCSTR lpszAddressIn, DWORD dwTollListOption)
1369 FIXME("(%p, %08x, %s, %08x): stub.\n", hLineApp, dwDeviceID, lpszAddressIn, dwTollListOption);
1370 return 0;
1373 /***********************************************************************
1374 * lineSetupConference (TAPI32.@)
1376 DWORD WINAPI lineSetupConferenceA(HCALL hCall, HLINE hLine, LPHCALL lphConfCall, LPHCALL lphConsultCall, DWORD dwNumParties, LPLINECALLPARAMS lpCallParams)
1378 FIXME("(%p, %p, %p, %p, %08x, %p): stub.\n", hCall, hLine, lphConfCall, lphConsultCall, dwNumParties, lpCallParams);
1379 return 1;
1382 /***********************************************************************
1383 * lineSetupTransfer (TAPI32.@)
1385 DWORD WINAPI lineSetupTransferA(HCALL hCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
1387 FIXME("(%p, %p, %p): stub.\n", hCall, lphConsultCall, lpCallParams);
1388 return 1;
1391 /***********************************************************************
1392 * lineShutdown (TAPI32.@)
1394 DWORD WINAPI lineShutdown(HLINEAPP hLineApp)
1396 FIXME("(%p): stub.\n", hLineApp);
1397 return 0;
1400 /***********************************************************************
1401 * lineSwapHold (TAPI32.@)
1403 DWORD WINAPI lineSwapHold(HCALL hActiveCall, HCALL hHeldCall)
1405 FIXME("(active: %p, held: %p): stub.\n", hActiveCall, hHeldCall);
1406 return 1;
1409 /***********************************************************************
1410 * lineTranslateAddress (TAPI32.@)
1412 DWORD WINAPI lineTranslateAddressA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, LPCSTR lpszAddressIn, DWORD dwCard, DWORD dwTranslateOptions, LPLINETRANSLATEOUTPUT lpTranslateOutput)
1414 FIXME("(%p, %08x, %08x, %s, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, lpszAddressIn, dwCard, dwTranslateOptions, lpTranslateOutput);
1415 return 0;
1418 /***********************************************************************
1419 * lineTranslateAddressW (TAPI32.@)
1421 DWORD WINAPI lineTranslateAddressW(HLINEAPP hLineApp, DWORD dwDeviceID,
1422 DWORD dwAPIVersion, LPCWSTR lpszAddressIn, DWORD dwCard,
1423 DWORD dwTranslateOptions, LPLINETRANSLATEOUTPUT lpTranslateOutput)
1425 FIXME("(%p, %08x, %08x, %s, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion,
1426 debugstr_w(lpszAddressIn), dwCard, dwTranslateOptions, lpTranslateOutput);
1427 return 0;
1430 /***********************************************************************
1431 * lineTranslateDialog (TAPI32.@)
1433 DWORD WINAPI lineTranslateDialogA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, HWND hwndOwner, LPCSTR lpszAddressIn)
1435 FIXME("(%p, %08x, %08x, %p, %s): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, hwndOwner, lpszAddressIn);
1436 return 0;
1439 /***********************************************************************
1440 * lineTranslateDialogW (TAPI32.@)
1442 DWORD WINAPI lineTranslateDialogW(HLINEAPP hLineApp, DWORD dwDeviceID,
1443 DWORD dwAPIVersion, HWND hwndOwner, LPCWSTR lpszAddressIn)
1445 FIXME("(%p, %08x, %08x, %p, %s): stub.\n", hLineApp, dwDeviceID,
1446 dwAPIVersion, hwndOwner, debugstr_w(lpszAddressIn));
1447 return 0;
1450 /***********************************************************************
1451 * lineUncompleteCall (TAPI32.@)
1453 DWORD WINAPI lineUncompleteCall(HLINE hLine, DWORD dwCompletionID)
1455 FIXME("(%p, %08x): stub.\n", hLine, dwCompletionID);
1456 return 1;
1459 /***********************************************************************
1460 * lineUnhold (TAPI32.@)
1462 DWORD WINAPI lineUnhold(HCALL hCall)
1464 FIXME("(%p): stub.\n", hCall);
1465 return 1;
1468 /***********************************************************************
1469 * lineUnpark (TAPI32.@)
1471 DWORD WINAPI lineUnparkA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress)
1473 FIXME("(%p, %08x, %p, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress);
1474 return 1;