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