/* C K N T A P  --  Kermit Telephony interface for MS Win32 TAPI systems */

/*
  Author: Jeffrey Altman (jaltman@columbia.edu),
  Columbia University Academic Information Systems, New York City.

  Copyright (C) 1985, 1997, Trustees of Columbia University in the City of New
  York.  The C-Kermit software may not be, in whole or in part, licensed or
  sold for profit as a software product itself, nor may it be included in or
  distributed with commercial products or otherwise distributed by commercial
  concerns to their clients or customers without written permission of the
  Office of Kermit Development and Distribution, Columbia University.  This
  copyright notice must not be removed, altered, or obscured.
*/

#ifdef CK_TAPI
#ifdef COMMENT
#undef CK_TAPI
#endif /* COMMENT */
#else 
#ifndef COMMENT
#define CK_TAPI
#endif /* COMMENT */
#endif

_PROTOTYP( int cktapiinit, (HINSTANCE) ) ;
_PROTOTYP( int cktapiopen, (void) ) ;
_PROTOTYP( int cktapiclose, (void) ) ;
_PROTOTYP( int cktapiload, (void) ) ;
_PROTOTYP( int cktapiunload, (void) ) ;
_PROTOTYP( int cktapidial, (char *) ) ;
_PROTOTYP( int cktapihangup, (void) ) ;
_PROTOTYP( int cktapianswer, (void) ) ;
_PROTOTYP( int cktapiBuildLineTable, (struct keytab **, struct keytab **, int *) ) ;
_PROTOTYP( int cktapiGetLocationEntries, (LPLINETRANSLATECAPS*, LPLINELOCATIONENTRY*, int *) ) ;
_PROTOTYP( int cktapiGetCountryEntries, (LPLINECOUNTRYLIST*, int *) ) ;
_PROTOTYP( int cktapiFetchLocationInfoByID, (int) ) ;
_PROTOTYP( int cktapiFetchLocationInfoByName, (char *) ) ;
_PROTOTYP( int cktapiGetCurrentLocationID, (void) ) ;
_PROTOTYP( int cktapiSetCurrentLocationID, (DWORD) ) ;
_PROTOTYP( void CopyTapiLocationInfoToKermitDialCmd, ( void ));
_PROTOTYP( void cktapiConfigureLine, (int) );
_PROTOTYP( void cktapiDialingProp, (void) );
_PROTOTYP( int cktapiConvertPhoneNumber, (char * source, char ** converted));
_PROTOTYP( int cktapiCallInProgress, (void));
_PROTOTYP( int tapi_open, ( char * ) ) ;
_PROTOTYP( int tapi_clos, ( void ) ) ;
_PROTOTYP( HANDLE GetModemHandleFromLine, ( HLINE ) );
_PROTOTYP( struct mdminf * cktapiGetModemInf, (DWORD,HANDLE) );
_PROTOTYP( void DisplayCommProperties, (HANDLE));
_PROTOTYP( void cktapiDisplayRegistryModemInfo, (LPCSTR));
_PROTOTYP( void cktapiDisplayTapiLocationInfo, (VOID));

#define SUCCESS 0
extern int TAPIAvail ;

#ifdef COMMENT
From "comm/datamodem":

When using the lineGetDevConfig and lineSetDevConfig functions, some service 
providers require that the configuration data for this device class have the 
following format.
#endif /* COMMENT */
// Device setting information
typedef struct  tagDEVCFGDR  {
  DWORD       dwSize;
  DWORD       dwVersion;
  WORD        fwOptions;
  WORD        wWaitBong;
} DEVCFGHDR;

typedef struct  tagDEVCFG  {
  DEVCFGHDR   dfgHdr;
  COMMCONFIG  commconfig;
} DEVCFG, *PDEVCFG, FAR* LPDEVCFG;
 
#ifdef COMMENT
Contains device configuration information for use with the lineGetDevConfig 
and lineSetDevConfig functions.

dwSize 		Sum of the size of the DEVCFGHDR structure and the actual 
                size of COMMCONFIG structure.
dwVersion 	Version number of the Unimodem DevConfig structure. This 
                member can be MDMCFG_VERSION (0x00010003).
fwOptions 	Option flags that appear on the Unimodem Option page. 
                This member can be a combination of these values:
 
TERMINAL_PRE  (1) 	Displays the preterminal screen. 
TERMINAL_POST (2) 	Displays the post terminal screen. 
MANUAL_DIAL   (4) 	Dials the phone manually, if capable of doing so. 
LAUNCH_LIGHTS (8) 	Displays the modem tray icon. 
 
	        Only the LAUNCH_LIGHTS value is set by default. 
wWaitBong 	Number of seconds (in two seconds granularity) to replace 
                the wait for credit tone ($).
commconfig 	COMMCONFIGstructure that can be used with the Win32 
                communications and MCX functions.
#endif /* COMMENT */

#ifdef COMMENT
From lineSetDevConfig:

Typically, an application will call lineGetID to identify the media stream 
device associated with a line, and then call lineConfigDialog to allow the 
user to set up the device configuration. It could then call lineGetDevConfig
and save the configuration information in a phone book or other database 
associated with a particular call destination. When the user later wants 
to call the same destination again, this function lineSetDevConfig can be
used to restore the configuration settings selected by the user. 
lineSetDevConfig, lineConfigDialog, and lineGetDevConfigcan be used, in
that order, to allow the user to view and update the settings.

The exact format of the data contained within the structure is specific 
to the line and media stream API (device class), is undocumented, and is
undefined. The application must treat it as "opaque" and not manipulate the
contents directly. Generally, the structure can be sent using this function 
only to the same device from which it was obtained. Certain Telephony 
service providers may, however, permit structures to be interchanged between
identical devices (that is, multiple ports on the same multi-port modem card).
Such interchangability is not guaranteed in any way, even for devices of
the same device class.

Note that some service providers may permit the configuration to be set 
while a call is active, and others may not.
#endif /* COMMENT */

#ifdef COMMENT
Service providers that support LINEBEARERMODE_PASSTHROUGH indicate it in the 
dwBearerModes member of the LINEDEVCAPS structure. When 
LINEBEARERMODE_PASSTHROUGH is indicated, the Unimodem service provider will
also include in the DevSpecific area of the LINEDEVCAPS structure the registry 
key used to access information about the modem associated with the line device, 
in the following format:
#endif

typedef struct  tagDEVREGKEY {
    DWORD dwContents;   // Set to 1 (indicates containing key)  
    DWORD dwKeyOffset;  // Offset to key from start of this
                        // structure (not from start of
                        // LINEDEVCAPS structure). 8 in
                        // our case. 
    BYTE rgby[1];       // place containing null-terminated
                        // registry key. 
} DEVREGKEY;

#ifdef COMMENT
For example: 
    00000001 00000008 74737953 435c6d65  ........System\C
    65727275 6f43746e 6f72746e 7465536c  urrentControlSet
    7265535c 65636976 6c435c73 5c737361  urrentControlSet
    65646f4d 30305c6d xx003030 xxxxxxxx  Modem\0000.  

This registry key could then be opened using this function: 
RegOpenKey(HKEY_LOCAL_MACHINE, pszDevSpecificRegKey, &phkResult)
#endif

int cktapiGetModemSettings(LPDEVCFG *, LPMODEMSETTINGS *, LPCOMMCONFIG *, DCB **);
int cktapiDisplayModemSettings(LPDEVCFG, LPMODEMSETTINGS, LPCOMMCONFIG, DCB *);
int cktapiSetModemSettings(LPDEVCFG);

