Add support for WM_WINDOWPOSCHANGED to save new origin of window.
[wine] / dlls / tapi32 / line.c
1 /*
2  * TAPI32 line services
3  *
4  * Copyright 1999  Andreas Mohr
5  *
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.
10  *
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.
15  *
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #include <string.h>
22 #include <stdlib.h>
23 #include <stdio.h>
24 #include "winbase.h"
25 #include "windef.h"
26 #include "tapi.h"
27 #include "wine/debug.h"
28
29 WINE_DEFAULT_DEBUG_CHANNEL(tapi);
30
31 /***********************************************************************
32  *              lineAccept (TAPI32.@)
33  */
34 DWORD WINAPI lineAccept(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
35 {
36     FIXME("(%04x, %s, %ld): stub.\n", hCall, lpsUserUserInfo, dwSize);
37     return 1;
38 }
39
40 /***********************************************************************
41  *              lineAddProvider (TAPI32.@)
42  */
43 DWORD WINAPI lineAddProvider(LPCSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID)
44 {
45     FIXME("(%s, %04x, %p): stub.\n", lpszProviderName, hwndOwner, lpdwPermanentProviderID);
46     return 1;
47 }       
48
49 /***********************************************************************
50  *              lineAddToConference (TAPI32.@)
51  */
52 DWORD WINAPI lineAddToConference(HCALL hConfCall, HCALL hConsultCall)
53 {
54     FIXME("(%04x, %04x): stub.\n", hConfCall, hConsultCall);
55     return 1;
56 }
57
58 /***********************************************************************
59  *              lineAnswer (TAPI32.@)
60  */
61 DWORD WINAPI lineAnswer(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
62 {
63     FIXME("(%04x, %s, %ld): stub.\n", hCall, lpsUserUserInfo, dwSize);
64     return 1;
65 }       
66
67 /***********************************************************************
68  *              lineBlindTransfer (TAPI32.@)
69  */
70 DWORD WINAPI lineBlindTransfer(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
71 {
72     FIXME("(%04x, %s, %08lx): stub.\n", hCall, lpszDestAddress, dwCountryCode);
73     return 1;
74 }       
75
76 /***********************************************************************
77  *              lineClose (TAPI32.@)
78  */
79 DWORD WINAPI lineClose(HLINE hLine)
80 {
81     FIXME("(%04x): stub.\n", hLine);
82     return 0;
83 }       
84
85 /***********************************************************************
86  *              lineCompleteCall (TAPI32.@)
87  */
88 DWORD WINAPI lineCompleteCall(HCALL hCall, LPDWORD lpdwCompletionID, DWORD dwCompletionMode, DWORD dwMessageID)
89 {
90     FIXME("(%04x, %p, %08lx, %08lx): stub.\n", hCall, lpdwCompletionID, dwCompletionMode, dwMessageID);
91     return 1;
92 }       
93
94 /***********************************************************************
95  *              lineCompleteTransfer (TAPI32.@)
96  */
97 DWORD WINAPI lineCompleteTransfer(HCALL hCall, HCALL hConsultCall, LPHCALL lphConfCall, DWORD dwTransferMode)
98 {
99     FIXME("(%04x, %04x, %p, %08lx): stub.\n", hCall, hConsultCall, lphConfCall, dwTransferMode);
100     return 1;
101 }
102
103 /***********************************************************************
104  *              lineConfigDialog (TAPI32.@)
105  */
106 DWORD WINAPI lineConfigDialog(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass)
107 {
108     FIXME("(%08lx, %04x, %s): stub.\n", dwDeviceID, hwndOwner, lpszDeviceClass);
109     return 0;
110 }       
111
112 /***********************************************************************
113  *              lineConfigDialogEdit (TAPI32.@)
114  */
115 DWORD WINAPI lineConfigDialogEdit(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass, LPVOID const lpDeviceConfigIn, DWORD dwSize, LPVARSTRING lpDeviceConfigOut)
116 {
117     FIXME("stub.\n");
118     return 0;
119 }       
120
121 /***********************************************************************
122  *              lineConfigProvider (TAPI32.@)
123  */
124 DWORD WINAPI lineConfigProvider(HWND hwndOwner, DWORD dwPermanentProviderID)
125 {
126     FIXME("(%04x, %08lx): stub.\n", hwndOwner, dwPermanentProviderID);
127     return 0;
128 }
129
130 /***********************************************************************
131  *              lineDeallocateCall (TAPI32.@)
132  */
133 DWORD WINAPI lineDeallocateCall(HCALL hCall)
134 {
135     FIXME("(%04x): stub.\n", hCall);
136     return 0;
137 }
138
139 /***********************************************************************
140  *              lineDevSpecific (TAPI32.@)
141  */
142 DWORD WINAPI lineDevSpecific(HLINE hLine, DWORD dwAddressId, HCALL hCall, LPVOID lpParams, DWORD dwSize)
143 {
144     FIXME("(%04x, %08lx, %04x, %p, %ld): stub.\n", hLine, dwAddressId, hCall, lpParams, dwSize);
145     return 1;
146 }       
147
148 /***********************************************************************
149  *              lineDevSpecificFeature (TAPI32.@)
150  */
151 DWORD WINAPI lineDevSpecificFeature(HLINE hLine, DWORD dwFeature, LPVOID lpParams, DWORD dwSize)
152 {
153     FIXME("(%04x, %08lx, %p, %ld): stub.\n", hLine, dwFeature, lpParams, dwSize);
154     return 1;
155 }
156
157 /***********************************************************************
158  *              lineDial (TAPI32.@)
159  */
160 DWORD WINAPI lineDial(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode)
161 {
162     FIXME("(%04x, %s, %08lx): stub.\n", hCall, lpszDestAddress, dwCountryCode);
163     return 1;
164 }
165
166 /***********************************************************************
167  *              lineDrop (TAPI32.@)
168  */ 
169 DWORD WINAPI lineDrop(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
170 {
171     FIXME("(%04x, %s, %08lx): stub.\n", hCall, lpsUserUserInfo, dwSize);
172     return 1;
173 }
174
175 /***********************************************************************
176  *              lineForward (TAPI32.@)
177  */
178 DWORD WINAPI lineForward(HLINE hLine, DWORD bAllAddress, DWORD dwAdressID, LPLINEFORWARDLIST lpForwardList, DWORD dwNumRingsNoAnswer, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
179 {
180     FIXME("stub.\n");
181     return 1;
182 }
183
184 /***********************************************************************
185  *              lineGatherDigits (TAPI32.@)
186  */     
187 DWORD WINAPI lineGatherDigits(HCALL hCall, DWORD dwDigitModes, LPSTR lpsDigits, DWORD dwNumDigits, LPCSTR lpszTerminationDigits, DWORD dwFirstDigitTimeout, DWORD dwInterDigitTimeout)
188 {
189     FIXME("stub.\n");
190     return 0;
191 }
192
193 /***********************************************************************
194  *              lineGenerateDigits (TAPI32.@)
195  */
196 DWORD WINAPI lineGenerateDigits(HCALL hCall, DWORD dwDigitModes, LPCSTR lpszDigits, DWORD dwDuration)
197 {
198     FIXME("(%04x, %08lx, %s, %ld): stub.\n", hCall, dwDigitModes, lpszDigits, dwDuration);
199     return 0;
200 }
201
202 /***********************************************************************
203  *              lineGenerateTone (TAPI32.@)
204  */
205 DWORD WINAPI lineGenerateTone(HCALL hCall, DWORD dwToneMode, DWORD dwDuration, DWORD dwNumTones, LPLINEGENERATETONE lpTones)
206 {
207     FIXME("(%04x, %08lx, %ld, %ld, %p): stub.\n", hCall, dwToneMode, dwDuration, dwNumTones, lpTones);
208     return 0;
209 }       
210
211 /***********************************************************************
212  *              lineGetAddressCaps (TAPI32.@)
213  */
214 DWORD WINAPI lineGetAddressCaps(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAddressID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEADDRESSCAPS lpAddressCaps)
215 {
216     FIXME("(%04x, %08lx, %08lx, %08lx, %08lx, %p): stub.\n", hLineApp, dwDeviceID, dwAddressID, dwAPIVersion, dwExtVersion, lpAddressCaps);
217     return 0;
218 }
219
220 /***********************************************************************
221  *              lineGetAddressID (TAPI32.@)
222  */
223 DWORD WINAPI lineGetAddressID(HLINE hLine, LPDWORD lpdwAddressID, DWORD dwAddressMode, LPCSTR lpsAddress, DWORD dwSize)
224 {
225     FIXME("%04x, %p, %08lx, %s, %ld): stub.\n", hLine, lpdwAddressID, dwAddressMode, lpsAddress, dwSize);
226     return 0;
227 }
228
229 /***********************************************************************
230  *              lineGetAddressStatus (TAPI32.@)
231  */
232 DWORD WINAPI lineGetAddressStatus(HLINE hLine, DWORD dwAddressID, LPLINEADDRESSSTATUS lpAddressStatus)
233 {
234     FIXME("(%04x, %08lx, %p): stub.\n", hLine, dwAddressID, lpAddressStatus);
235     return 0;
236 }
237
238 /***********************************************************************
239  *              lineGetAppPriority (TAPI32.@)
240  */
241 DWORD WINAPI lineGetAppPriority(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPVARSTRING lpExtensionName, LPDWORD lpdwPriority)
242 {
243     FIXME("(%s, %08lx, %p, %08lx, %p, %p): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpExtensionName, lpdwPriority);
244     return 0;
245 }       
246
247 /***********************************************************************
248  *              lineGetCallInfo (TAPI32.@)
249  */
250 DWORD WINAPI lineGetCallInfo(HCALL hCall, LPLINECALLINFO lpCallInfo)
251 {
252     FIXME("(%04x, %p): stub.\n", hCall, lpCallInfo);
253     return 0;
254 }
255
256 /***********************************************************************
257  *              lineGetCallStatus (TAPI32.@)
258  */
259 DWORD WINAPI lineGetCallStatus(HCALL hCall, LPLINECALLSTATUS lpCallStatus)
260 {
261     FIXME("(%04x, %p): stub.\n", hCall, lpCallStatus);
262     return 0;
263 }
264
265 /***********************************************************************
266  *              lineGetConfRelatedCalls (TAPI32.@)
267  */
268 DWORD WINAPI lineGetConfRelatedCalls(HCALL hCall, LPLINECALLLIST lpCallList)
269 {
270     FIXME("(%04x, %p): stub.\n", hCall, lpCallList);
271     return 0;
272 }       
273
274 typedef struct tagTAPI_CountryInfo
275 {
276     DWORD  dwCountryID;
277     DWORD  dwCountryCode;
278     LPSTR  lpCountryName;
279     LPSTR  lpSameAreaRule; 
280     LPSTR  lpLongDistanceRule; 
281     LPSTR  lpInternationalRule; 
282 } TAPI_CountryInfo;
283
284 /* FIXME: this should be stored in an ini file... perhaps TAPI.INI */
285 static TAPI_CountryInfo TAPI_LCList[] =
286 {
287     { 1, 61, "Australia", "", "0", "0011" },
288     { 2, 86, "China", "", "0", "00" },
289     { 3, 82, "Korea", "", "0", "00" },
290     { 4, 1,  "USA", "", "0", "001" },
291 };
292
293 #define NUMCOUNTRIES (sizeof TAPI_LCList/sizeof (TAPI_CountryInfo))
294
295 /***********************************************************************
296  *              lineGetCountry (TAPI32.@)
297  */
298 DWORD WINAPI lineGetCountry(DWORD dwCountryID, DWORD dwAPIVersion, LPLINECOUNTRYLIST lpLineCountryList)
299 {
300     DWORD dwAvailSize, dwOffset, i;
301     LPLINECOUNTRYENTRY lpLCE;
302
303     if(!lpLineCountryList) {
304         TRACE("(%08lx, %08lx, %p): stub. Returning LINEERR_INVALPOINTER\n",
305               dwCountryID, dwAPIVersion, lpLineCountryList);
306         return LINEERR_INVALPOINTER;
307     }
308
309     TRACE("(%08lx, %08lx, %p(%ld)): stub.\n", 
310           dwCountryID, dwAPIVersion, lpLineCountryList,
311           lpLineCountryList->dwTotalSize);
312
313     dwAvailSize = lpLineCountryList->dwTotalSize;
314     dwOffset = sizeof (LINECOUNTRYLIST);
315
316     if(dwAvailSize<dwOffset)
317         return LINEERR_STRUCTURETOOSMALL;
318
319     memset(lpLineCountryList, 0, dwAvailSize);
320
321     lpLineCountryList->dwTotalSize         = dwAvailSize;
322     lpLineCountryList->dwUsedSize          = dwOffset;
323     lpLineCountryList->dwNumCountries      = 0;
324     lpLineCountryList->dwCountryListSize   = 0;
325     lpLineCountryList->dwCountryListOffset = dwOffset;
326
327     lpLCE = (LPLINECOUNTRYENTRY)(&lpLineCountryList[1]);
328     dwOffset+= NUMCOUNTRIES * sizeof (LINECOUNTRYENTRY);
329
330     for(i=0; i<NUMCOUNTRIES; i++)
331     {
332         LPSTR lpstr;
333         DWORD len;
334
335         if(dwCountryID && (TAPI_LCList[i].dwCountryID != dwCountryID))
336             continue;
337
338         len  = strlen (TAPI_LCList[i].lpCountryName)+1;
339         len += strlen (TAPI_LCList[i].lpSameAreaRule)+1;
340         len += strlen (TAPI_LCList[i].lpLongDistanceRule)+1;
341         len += strlen (TAPI_LCList[i].lpInternationalRule)+1;
342
343         if(dwAvailSize<(dwOffset+len))
344         {
345             dwOffset+=len;
346             continue;
347         }
348
349         lpLineCountryList->dwNumCountries++;
350         lpLineCountryList->dwCountryListSize += len;
351         lpLineCountryList->dwUsedSize += sizeof (LINECOUNTRYENTRY); /* maybe wrong */
352
353         TRACE("Adding country %s at %p\n", TAPI_LCList[i].lpCountryName, &lpLCE[i]);
354
355         lpLCE[i].dwCountryID   = TAPI_LCList[i].dwCountryID;
356         lpLCE[i].dwCountryCode = TAPI_LCList[i].dwCountryCode;
357
358         /* deal with troublesome dwNextCountryID */
359         if( (i+1) == NUMCOUNTRIES )
360             lpLCE[i].dwNextCountryID = 0;
361         else
362             lpLCE[i].dwNextCountryID = TAPI_LCList[i+1].dwCountryID;
363
364         /* add country name */
365         len = strlen(TAPI_LCList[i].lpCountryName)+1;
366         lpLCE[i].dwCountryNameSize = len;
367         lpLCE[i].dwCountryNameOffset = dwOffset;
368         lpstr = ((LPSTR)lpLineCountryList)+dwOffset;
369         strcpy(lpstr, TAPI_LCList[i].lpCountryName);
370         dwOffset+=len;
371
372         /* add Same Area Rule */
373         len = strlen (TAPI_LCList[i].lpSameAreaRule)+1;
374         lpLCE[i].dwSameAreaRuleSize = len;
375         lpLCE[i].dwSameAreaRuleOffset = dwOffset;
376         lpstr = ((LPSTR)lpLineCountryList)+dwOffset;
377         strcpy(lpstr, TAPI_LCList[i].lpSameAreaRule);
378         dwOffset+=len;
379
380         /* add Long Distance Rule */
381         len = strlen (TAPI_LCList[i].lpLongDistanceRule)+1;
382         lpLCE[i].dwLongDistanceRuleSize = len;
383         lpLCE[i].dwLongDistanceRuleOffset = dwOffset;
384         lpstr = ((LPSTR)lpLineCountryList)+dwOffset;
385         strcpy(lpstr, TAPI_LCList[i].lpLongDistanceRule);
386         dwOffset+=len;
387
388         /* add Long Distance Rule */
389         len = strlen (TAPI_LCList[i].lpInternationalRule)+1;
390         lpLCE[i].dwInternationalRuleSize = len;
391         lpLCE[i].dwInternationalRuleOffset = dwOffset;
392         lpstr = ((LPSTR)lpLineCountryList)+dwOffset;
393         strcpy(lpstr, TAPI_LCList[i].lpInternationalRule);
394         dwOffset+=len;
395     }
396
397     lpLineCountryList->dwNeededSize = dwOffset;
398
399     TRACE("%ld available %ld required\n", dwAvailSize, dwOffset);
400
401     return 0;
402 }
403
404 /***********************************************************************
405  *              lineGetDevCaps (TAPI32.@)
406  */
407 DWORD WINAPI lineGetDevCaps(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps)
408 {
409     FIXME("(%04x, %08lx, %08lx, %08lx, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, dwExtVersion, lpLineDevCaps);
410     return 0;
411 }       
412
413 /***********************************************************************
414  *              lineGetDevConfig (TAPI32.@)
415  */
416 DWORD WINAPI lineGetDevConfig(DWORD dwDeviceID, LPVARSTRING lpDeviceConfig, LPCSTR lpszDeviceClass)
417 {
418     FIXME("(%08lx, %p, %s): stub.\n", dwDeviceID, lpDeviceConfig, lpszDeviceClass);
419     return 0;
420 }
421
422 /***********************************************************************
423  *              lineGetID (TAPI32.@)
424  */
425 DWORD WINAPI lineGetID(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass)
426 {
427     FIXME("(%04x, %08lx, %04x, %08lx, %p, %s): stub.\n", hLine, dwAddressID, hCall, dwSelect, lpDeviceID, lpszDeviceClass);
428     return 0;
429 }
430
431 /***********************************************************************
432  *              lineGetIcon (TAPI32.@)
433  */
434 DWORD WINAPI lineGetIcon(DWORD dwDeviceID, LPCSTR lpszDeviceClass, HICON *lphIcon)
435 {
436     FIXME("(%08lx, %s, %p): stub.\n", dwDeviceID, lpszDeviceClass, lphIcon);
437     return 0;
438 }       
439
440 /***********************************************************************
441  *              lineGetLineDevStatus (TAPI32.@)
442  */
443 DWORD WINAPI lineGetLineDevStatus(HLINE hLine, LPLINEDEVSTATUS lpLineDevStatus)
444 {
445     FIXME("(%04x, %p): stub.\n", hLine, lpLineDevStatus);
446     return 0;
447 }       
448
449 /***********************************************************************
450  *              lineGetNewCalls (TAPI32.@)
451  */
452 DWORD WINAPI lineGetNewCalls(HLINE hLine, DWORD dwAddressID, DWORD dwSelect, LPLINECALLLIST lpCallList)
453 {
454     FIXME("(%04x, %08lx, %08lx, %p): stub.\n", hLine, dwAddressID, dwSelect, lpCallList);
455     return 0;
456 }
457
458 /***********************************************************************
459  *              lineGetNumRings (TAPI32.@)
460  */
461 DWORD WINAPI lineGetNumRings(HLINE hLine, DWORD dwAddressID, LPDWORD lpdwNumRings)
462 {
463     FIXME("(%04x, %08lx, %p): stub.\n", hLine, dwAddressID, lpdwNumRings);
464     return 0;
465 }
466
467 /***********************************************************************
468  *              lineGetProviderList (TAPI32.@)
469  */
470 DWORD WINAPI lineGetProviderList(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList)
471 {
472     FIXME("(%08lx, %p): stub.\n", dwAPIVersion, lpProviderList);
473     return 0;
474 }       
475
476 /***********************************************************************
477  *              lineGetRequest (TAPI32.@)
478  */
479 DWORD WINAPI lineGetRequest(HLINEAPP hLineApp, DWORD dwRequestMode, LPVOID lpRequestBuffer)
480 {
481     FIXME("%04x, %08lx, %p): stub.\n", hLineApp, dwRequestMode, lpRequestBuffer);
482     return 0;
483 }       
484
485 /***********************************************************************
486  *              lineGetStatusMessages (TAPI32.@)
487  */
488 DWORD WINAPI lineGetStatusMessages(HLINE hLine, LPDWORD lpdwLineStatus, LPDWORD lpdwAddressStates)
489 {
490     FIXME("(%04x, %p, %p): stub.\n", hLine, lpdwLineStatus, lpdwAddressStates);
491     return 0;
492 }       
493
494 /***********************************************************************
495  *              lineGetTranslateCaps (TAPI32.@)
496  */
497 DWORD WINAPI lineGetTranslateCaps(HLINEAPP hLineApp, DWORD dwAPIVersion, LPLINETRANSLATECAPS lpTranslateCaps)
498 {
499     FIXME("(%04x, %08lx, %p): stub.\n", hLineApp, dwAPIVersion, lpTranslateCaps);
500     return 0;
501 }
502
503 /***********************************************************************
504  *              lineHandoff (TAPI32.@)
505  */
506 DWORD WINAPI lineHandoff(HCALL hCall, LPCSTR lpszFileName, DWORD dwMediaMode)
507 {
508     FIXME("(%04x, %s, %08lx): stub.\n", hCall, lpszFileName, dwMediaMode);
509     return 0;
510 }       
511
512 /***********************************************************************
513  *              lineHold (TAPI32.@)
514  */
515 DWORD WINAPI lineHold(HCALL hCall)
516 {
517     FIXME("(%04x): stub.\n", hCall);
518     return 1;
519 }       
520
521 /***********************************************************************
522  *              lineInitialize (TAPI32.@)
523  */
524 DWORD WINAPI lineInitialize(
525   LPHLINEAPP lphLineApp,
526   HINSTANCE hInstance,
527   LINECALLBACK lpfnCallback,
528   LPCSTR lpszAppName,
529   LPDWORD lpdwNumDevs)
530 {
531     FIXME("(%p, %04x, %p, %s, %p): stub.\n", lphLineApp, hInstance,
532           lpfnCallback, debugstr_a(lpszAppName), lpdwNumDevs);
533     return 0;
534 }
535
536 /***********************************************************************
537  *              lineMakeCall (TAPI32.@)
538  */
539 DWORD WINAPI lineMakeCall(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress, DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams)
540 {
541     FIXME("(%04x, %p, %s, %08lx, %p): stub.\n", hLine, lphCall, lpszDestAddress, dwCountryCode, lpCallParams);
542     return 1;
543 }
544
545 /***********************************************************************
546  *              lineMonitorDigits (TAPI32.@)
547  */
548 DWORD WINAPI lineMonitorDigits(HCALL hCall, DWORD dwDigitModes)
549 {
550     FIXME("(%04x, %08lx): stub.\n", hCall, dwDigitModes);
551     return 0;
552 }
553
554 /***********************************************************************
555  *              lineMonitorMedia (TAPI32.@)
556  */
557 DWORD WINAPI lineMonitorMedia(HCALL hCall, DWORD dwMediaModes)
558 {
559     FIXME("(%04x, %08lx): stub.\n", hCall, dwMediaModes);
560     return 0;
561 }       
562
563 /***********************************************************************
564  *              lineMonitorTones (TAPI32.@)
565  */
566 DWORD WINAPI lineMonitorTones(HCALL hCall, LPLINEMONITORTONE lpToneList, DWORD dwNumEntries)
567 {
568     FIXME("(%04x, %p, %08lx): stub.\n", hCall, lpToneList, dwNumEntries);
569     return 0;
570 }       
571
572 /***********************************************************************
573  *              lineNegotiateAPIVersion (TAPI32.@)
574  */
575 DWORD WINAPI lineNegotiateAPIVersion(
576   HLINEAPP hLineApp,
577   DWORD dwDeviceID,
578   DWORD dwAPILowVersion,
579   DWORD dwAPIHighVersion,
580   LPDWORD lpdwAPIVersion,
581   LPLINEEXTENSIONID lpExtensionID
582 )
583 {
584     FIXME("(%04x, %ld, %ld, %ld, %p, %p): stub.\n", hLineApp, dwDeviceID, 
585           dwAPILowVersion, dwAPIHighVersion, lpdwAPIVersion, lpExtensionID);
586     *lpdwAPIVersion = dwAPIHighVersion;
587     return 0;
588 }
589
590 /***********************************************************************
591  *              lineNegotiateExtVersion (TAPI32.@)
592  */
593 DWORD WINAPI lineNegotiateExtVersion(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtLowVersion, DWORD dwExtHighVersion, LPDWORD lpdwExtVersion)
594 {
595     FIXME("stub.\n");
596     return 0;
597 }
598
599 /***********************************************************************
600  *              lineOpen (TAPI32.@)
601  */
602 DWORD WINAPI lineOpen(HLINEAPP hLineApp, DWORD dwDeviceID, LPHLINE lphLine, DWORD dwAPIVersion, DWORD dwExtVersion, DWORD dwCallbackInstance, DWORD dwPrivileges, DWORD dwMediaModes, LPLINECALLPARAMS lpCallParams)
603 {
604     FIXME("stub.\n");
605     return 0;
606 }
607
608 /***********************************************************************
609  *              linePark (TAPI32.@)
610  */
611 DWORD WINAPI linePark(HCALL hCall, DWORD dwParkMode, LPCSTR lpszDirAddress, LPVARSTRING lpNonDirAddress)
612 {
613     FIXME("(%04x, %08lx, %s, %p): stub.\n", hCall, dwParkMode, lpszDirAddress, lpNonDirAddress);
614     return 1;
615 }       
616
617 /***********************************************************************
618  *              linePickup (TAPI32.@)
619  */
620 DWORD WINAPI linePickup(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress, LPCSTR lpszGroupID)
621 {
622     FIXME("(%04x, %08lx, %p, %s, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress, lpszGroupID);
623     return 1;
624 }       
625
626 /***********************************************************************
627  *              linePrepareAddToConference (TAPI32.@)
628  */
629 DWORD WINAPI linePrepareAddToConference(HCALL hConfCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
630 {
631     FIXME("(%04x, %p, %p): stub.\n", hConfCall, lphConsultCall, lpCallParams);
632     return 1;
633 }       
634
635 /***********************************************************************
636  *              lineRedirect (TAPI32.@)
637  */
638 DWORD WINAPI lineRedirect(
639   HCALL hCall,
640   LPCSTR lpszDestAddress,
641   DWORD  dwCountryCode) {
642
643   FIXME(": stub.\n");
644   return 1;
645 }
646
647 /***********************************************************************
648  *              lineRegisterRequestRecipient (TAPI32.@)
649  */
650 DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP hLineApp, DWORD dwRegistrationInstance, DWORD dwRequestMode, DWORD dwEnable)
651 {
652     FIXME("(%04x, %08lx, %08lx, %08lx): stub.\n", hLineApp, dwRegistrationInstance, dwRequestMode, dwEnable);
653     return 1;
654 }
655
656 /***********************************************************************
657  *              lineReleaseUserUserInfo (TAPI32.@)
658  */
659 DWORD WINAPI lineReleaseUserUserInfo(HCALL hCall)
660 {
661     FIXME("(%04x): stub.\n", hCall);
662     return 1;
663 }       
664
665 /***********************************************************************
666  *              lineRemoveFromConference (TAPI32.@)
667  */
668 DWORD WINAPI lineRemoveFromConference(HCALL hCall)
669 {
670     FIXME("(%04x): stub.\n", hCall);
671     return 1;
672 }
673
674 /***********************************************************************
675  *              lineRemoveProvider (TAPI32.@)
676  */
677 DWORD WINAPI lineRemoveProvider(DWORD dwPermanentProviderID, HWND hwndOwner)
678 {
679     FIXME("(%08lx, %04x): stub.\n", dwPermanentProviderID, hwndOwner);
680     return 1;
681 }       
682
683 /***********************************************************************
684  *              lineSecureCall (TAPI32.@)
685  */
686 DWORD WINAPI lineSecureCall(HCALL hCall)
687 {
688     FIXME("(%04x): stub.\n", hCall);
689     return 1;
690 }
691
692 /***********************************************************************
693  *              lineSendUserUserInfo (TAPI32.@)
694  */
695 DWORD WINAPI lineSendUserUserInfo(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize)
696 {
697     FIXME("(%04x, %s, %08lx): stub.\n", hCall, lpsUserUserInfo, dwSize);
698     return 1;
699 }
700
701 /***********************************************************************
702  *              lineSetAppPriority (TAPI32.@)
703  */
704 DWORD WINAPI lineSetAppPriority(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPCSTR lpszExtensionName, DWORD dwPriority)
705 {
706     FIXME("(%s, %08lx, %p, %08lx, %s, %08lx): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpszExtensionName, dwPriority);
707     return 0;
708 }
709
710 /***********************************************************************
711  *              lineSetAppSpecific (TAPI32.@)
712  */
713 DWORD WINAPI lineSetAppSpecific(HCALL hCall, DWORD dwAppSpecific)
714 {
715     FIXME("(%04x, %08lx): stub.\n", hCall, dwAppSpecific);
716     return 0;
717 }
718
719 /***********************************************************************
720  *              lineSetCallParams (TAPI32.@)
721  */
722 DWORD WINAPI lineSetCallParams(HCALL hCall, DWORD dwBearerMode, DWORD dwMinRate, DWORD dwMaxRate, LPLINEDIALPARAMS lpDialParams)
723 {
724     FIXME("(%04x, %08lx, %08lx, %08lx, %p): stub.\n", hCall, dwBearerMode, dwMinRate, dwMaxRate, lpDialParams);
725     return 1;
726 }
727
728 /***********************************************************************
729  *              lineSetCallPrivilege (TAPI32.@)
730  */
731 DWORD WINAPI lineSetCallPrivilege(HCALL hCall, DWORD dwCallPrivilege)
732 {
733     FIXME("(%04x, %08lx): stub.\n", hCall, dwCallPrivilege);
734     return 0;
735 }       
736                 
737 /***********************************************************************
738  *              lineSetCurrentLocation (TAPI32.@)
739  */
740 DWORD WINAPI lineSetCurrentLocation(HLINEAPP hLineApp, DWORD dwLocation)
741 {
742     FIXME("(%04x, %08lx): stub.\n", hLineApp, dwLocation);
743     return 0;
744 }
745
746 /***********************************************************************
747  *              lineSetDevConfig (TAPI32.@)
748  */
749 DWORD WINAPI lineSetDevConfig(DWORD dwDeviceID, LPVOID lpDeviceConfig, DWORD dwSize, LPCSTR lpszDeviceClass)
750 {
751     FIXME("(%08lx, %p, %08lx, %s): stub.\n", dwDeviceID, lpDeviceConfig, dwSize, lpszDeviceClass);
752     return 0;
753 }
754
755 /***********************************************************************
756  *              lineSetMediaControl (TAPI32.@)
757  */
758 DWORD WINAPI lineSetMediaControl(
759 HLINE hLine,
760 DWORD dwAddressID,
761 HCALL hCall,
762 DWORD dwSelect,
763 LPLINEMEDIACONTROLDIGIT const lpDigitList,
764 DWORD dwDigitNumEntries,
765 LPLINEMEDIACONTROLMEDIA const lpMediaList,
766 DWORD dwMediaNumEntries,
767 LPLINEMEDIACONTROLTONE const lpToneList, 
768 DWORD dwToneNumEntries,
769 LPLINEMEDIACONTROLCALLSTATE const lpCallStateList,
770 DWORD dwCallStateNumEntries)
771 {
772     FIXME(": stub.\n");
773     return 0;
774 }
775
776 /***********************************************************************
777  *              lineSetMediaMode (TAPI32.@)
778  */
779 DWORD WINAPI lineSetMediaMode(HCALL hCall, DWORD dwMediaModes)
780 {
781     FIXME("(%04x, %08lx): stub.\n", hCall, dwMediaModes);
782     return 0;
783 }       
784
785 /***********************************************************************
786  *              lineSetNumRings (TAPI32.@)
787  */
788 DWORD WINAPI lineSetNumRings(HLINE hLine, DWORD dwAddressID, DWORD dwNumRings)
789 {
790     FIXME("(%04x, %08lx, %08lx): stub.\n", hLine, dwAddressID, dwNumRings);
791     return 0;
792 }       
793                 
794 /***********************************************************************
795  *              lineSetStatusMessages (TAPI32.@)
796  */
797 DWORD WINAPI lineSetStatusMessages(HLINE hLine, DWORD dwLineStates, DWORD dwAddressStates)
798 {
799     FIXME("(%04x, %08lx, %08lx): stub.\n", hLine, dwLineStates, dwAddressStates);
800     return 0;
801 }       
802                 
803 /***********************************************************************
804  *              lineSetTerminal (TAPI32.@)
805  */
806 DWORD WINAPI lineSetTerminal(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, DWORD dwTerminalModes, DWORD dwTerminalID, DWORD bEnable)
807 {
808     FIXME("(%04x, %08lx, %04x, %08lx, %08lx, %08lx, %08lx): stub.\n", hLine, dwAddressID, hCall, dwSelect, dwTerminalModes, dwTerminalID, bEnable);
809     return 1;
810 }       
811
812 /***********************************************************************
813  *              lineSetTollList (TAPI32.@)
814  */
815 DWORD WINAPI lineSetTollList(HLINEAPP hLineApp, DWORD dwDeviceID, LPCSTR lpszAddressIn, DWORD dwTollListOption)
816 {
817     FIXME("(%04x, %08lx, %s, %08lx): stub.\n", hLineApp, dwDeviceID, lpszAddressIn, dwTollListOption);
818     return 0;
819 }       
820                 
821 /***********************************************************************
822  *              lineSetupConference (TAPI32.@)
823  */
824 DWORD WINAPI lineSetupConference(HCALL hCall, HLINE hLine, LPHCALL lphConfCall, LPHCALL lphConsultCall, DWORD dwNumParties, LPLINECALLPARAMS lpCallParams)
825 {
826     FIXME("(%04x, %04x, %p, %p, %08lx, %p): stub.\n", hCall, hLine, lphConfCall, lphConsultCall, dwNumParties, lpCallParams);
827     return 1;
828 }
829
830 /***********************************************************************
831  *              lineSetupTransfer (TAPI32.@)
832  */
833 DWORD WINAPI lineSetupTransfer(HCALL hCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams)
834 {
835     FIXME("(%04x, %p, %p): stub.\n", hCall, lphConsultCall, lpCallParams);
836     return 1;
837 }       
838
839 /***********************************************************************
840  *              lineShutdown (TAPI32.@)
841  */
842 DWORD WINAPI lineShutdown(HLINEAPP hLineApp)
843 {
844     FIXME("(%04x): stub.\n", hLineApp);
845     return 0;
846 }
847
848 /***********************************************************************
849  *              lineSwapHold (TAPI32.@)
850  */
851 DWORD WINAPI lineSwapHold(HCALL hActiveCall, HCALL hHeldCall)
852 {
853     FIXME("(active: %04x, held: %04x): stub.\n", hActiveCall, hHeldCall);
854     return 1;
855 }
856
857 /***********************************************************************
858  *              lineTranslateAddress (TAPI32.@)
859  */
860 DWORD WINAPI lineTranslateAddress(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, LPCSTR lpszAddressIn, DWORD dwCard, DWORD dwTranslateOptions, LPLINETRANSLATEOUTPUT lpTranslateOutput)
861 {
862     FIXME("(%04x, %08lx, %08lx, %s, %08lx, %08lx, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, lpszAddressIn, dwCard, dwTranslateOptions, lpTranslateOutput);
863     return 0;
864 }
865
866 /***********************************************************************
867  *              lineTranslateDialog (TAPI32.@)
868  */
869 DWORD WINAPI lineTranslateDialog(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, HWND hwndOwner, LPCSTR lpszAddressIn)
870 {
871     FIXME("(%04x, %08lx, %08lx, %04x, %s): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, hwndOwner, lpszAddressIn);
872     return 0;
873 }
874
875 /***********************************************************************
876  *              lineUncompleteCall (TAPI32.@)
877  */
878 DWORD WINAPI lineUncompleteCall(HLINE hLine, DWORD dwCompletionID)
879 {
880     FIXME("(%04x, %08lx): stub.\n", hLine, dwCompletionID);
881     return 1;
882 }
883
884 /***********************************************************************
885  *              lineUnhold (TAPI32.@)
886  */
887 DWORD WINAPI lineUnhold(HCALL hCall)
888 {
889     FIXME("(%04x): stub.\n", hCall);
890     return 1;
891 }
892
893 /***********************************************************************
894  *              lineUnpark (TAPI32.@)
895  */
896 DWORD WINAPI lineUnpark(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress)
897 {
898     FIXME("(%04x, %08lx, %p, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress);
899     return 1;
900 }