1/**************************************************
2 * odbcinstext.h
3 *
4 **************************************************
5 * This code was created by Peter Harvey @ CodeByDesign.
6 * Released under LGPL 28.JAN.99
7 *
8 * Contributions from...
9 * -----------------------------------------------
10 * Peter Harvey - pharvey@codebydesign.com
11 **************************************************/
12#ifndef _ODBCINST_H
13#define _ODBCINST_H
14
15#ifdef UNIXODBC_SOURCE
16
17#include <ltdl.h>
18#ifdef HAVE_UNISTD_H
19#include <unistd.h>
20#endif
21#ifdef HAVE_PWD_H
22#include <pwd.h>
23#endif
24#ifdef HAVE_SYS_TYPES_H
25#include <sys/types.h>
26#endif
27#include <stdio.h>
28
29#ifndef ODBCVER
30#define ODBCVER 0x0380
31#endif
32
33#include <ini.h>
34#include <log.h>
35#include <odbcinst.h>
36
37/********************************************************
38 * CONSTANTS WHICH DO NOT EXIST ELSEWHERE
39 ********************************************************/
40#ifndef TRUE
41#define FALSE 0;
42#define TRUE 1;
43#endif
44
45#else /* not UNIXODBC_SOURCE */
46
47/********************************************************
48 * outside the unixODBC source tree only the *
49 * public interface is exposed *
50 ********************************************************/
51
52#include <odbcinst.h>
53
54/********************************************************
55 * these limits are originally defined in ini.h *
56 * but are needed to implement ODBCINSTGetProperties *
57 * for the Driver Setup *
58 ********************************************************/
59
60#define INI_MAX_LINE 1000
61#define INI_MAX_OBJECT_NAME INI_MAX_LINE
62#define INI_MAX_PROPERTY_NAME INI_MAX_LINE
63#define INI_MAX_PROPERTY_VALUE INI_MAX_LINE
64
65#endif /* UNIXODBC_SOURCE */
66
67/********************************************************
68 * PUBLIC API
69 ********************************************************/
70
71#ifdef __cplusplus
72extern "C"
73{
74#endif
75
76BOOL INSTAPI SQLConfigDataSource( HWND hWnd,
77 WORD nRequest,
78 LPCSTR pszDriver,
79 LPCSTR pszAttributes );
80
81BOOL INSTAPI SQLGetConfigMode( UWORD *pnConfigMode );
82
83BOOL INSTAPI SQLGetInstalledDrivers( LPSTR pszBuf,
84 WORD nBufMax,
85 WORD *pnBufOut );
86
87BOOL INSTAPI SQLInstallDriverEx( LPCSTR pszDriver,
88 LPCSTR pszPathIn,
89 LPSTR pszPathOut,
90 WORD nPathOutMax,
91 WORD *nPathOut,
92 WORD nRequest,
93 LPDWORD pnUsageCount );
94
95BOOL INSTAPI SQLInstallDriverManager( LPSTR pszPath,
96 WORD nPathMax,
97 WORD *pnPathOut );
98
99RETCODE INSTAPI SQLInstallerError( WORD nError,
100 DWORD *pnErrorCode,
101 LPSTR pszErrorMsg,
102 WORD nErrorMsgMax,
103 WORD *nErrorMsg );
104
105BOOL INSTAPI SQLManageDataSources( HWND hWnd );
106
107BOOL INSTAPI SQLReadFileDSN( LPCSTR pszFileName,
108 LPCSTR pszAppName,
109 LPCSTR pszKeyName,
110 LPSTR pszString,
111 WORD nString,
112 WORD *pnString );
113
114BOOL INSTAPI SQLRemoveDriver( LPCSTR pszDriver,
115 BOOL nRemoveDSN,
116 LPDWORD pnUsageCount );
117
118BOOL INSTAPI SQLRemoveDriverManager( LPDWORD pnUsageCount );
119
120BOOL INSTAPI SQLRemoveDSNFromIni( LPCSTR pszDSN );
121
122BOOL INSTAPI SQLRemoveTranslator( LPCSTR pszTranslator,
123 LPDWORD pnUsageCount );
124
125BOOL INSTAPI SQLSetConfigMode( UWORD nConfigMode );
126
127BOOL INSTAPI SQLValidDSN( LPCSTR pszDSN );
128
129BOOL INSTAPI SQLWriteDSNToIni( LPCSTR pszDSN,
130 LPCSTR pszDriver );
131
132BOOL INSTAPI SQLWriteFileDSN( LPCSTR pszFileName,
133 LPCSTR pszAppName,
134 LPCSTR pszKeyName,
135 LPCSTR pszString );
136
137BOOL INSTAPI SQLWritePrivateProfileString(
138 LPCSTR pszSection,
139 LPCSTR pszEntry,
140 LPCSTR pszString,
141 LPCSTR pszFileName );
142
143
144
145#ifdef __cplusplus
146}
147#endif
148
149#ifdef UNIXODBC_SOURCE
150
151/********************************************************
152 * PRIVATE API
153 ********************************************************/
154#if defined(__cplusplus)
155 extern "C" {
156#endif
157
158BOOL _odbcinst_UserINI(
159 char *pszFileName,
160 BOOL bVerify );
161
162BOOL _odbcinst_SystemINI(
163 char *pszFileName,
164 BOOL bVerify );
165
166BOOL _odbcinst_FileINI( char *pszPath );
167
168char * INSTAPI odbcinst_system_file_path( char *buffer );
169char * INSTAPI odbcinst_system_file_name( char *buffer );
170char * INSTAPI odbcinst_user_file_path( char *buffer );
171char * INSTAPI odbcinst_user_file_name( char *buffer );
172
173BOOL _odbcinst_ConfigModeINI(
174 char *pszFileName );
175
176int _odbcinst_GetSections(
177 HINI hIni,
178 LPSTR pRetBuffer,
179 int nRetBuffer,
180 int *pnBufPos );
181
182int _odbcinst_GetEntries(
183 HINI hIni,
184 LPCSTR pszSection,
185 LPSTR pRetBuffer,
186 int nRetBuffer,
187 int *pnBufPos );
188
189int _SQLGetInstalledDrivers(
190 LPCSTR pszSection,
191 LPCSTR pszEntry,
192 LPCSTR pszDefault,
193 LPCSTR pRetBuffer,
194 int nRetBuffer );
195
196BOOL _SQLWriteInstalledDrivers(
197 LPCSTR pszSection,
198 LPCSTR pszEntry,
199 LPCSTR pszString );
200
201BOOL _SQLDriverConnectPrompt(
202 HWND hwnd,
203 SQLCHAR *dsn,
204 SQLSMALLINT len_dsn );
205
206void __set_config_mode( int mode );
207int __get_config_mode( void );
208
209int inst_logPushMsg(
210 char *pszModule,
211 char *pszFunctionName,
212 int nLine,
213 int nSeverity,
214 int nCode,
215 char *pszMessage );
216
217int inst_logPeekMsg( long nMsg, HLOGMSG *phMsg );
218int inst_logClear();
219
220
221/*
222 * we should look at caching this info, the calls can become expensive
223 */
224
225#ifndef DISABLE_INI_CACHING
226
227struct ini_cache
228{
229 char *fname;
230 char *section;
231 char *entry;
232 char *value;
233 char *default_value;
234 int buffer_size;
235 int ret_value;
236 int config_mode;
237 long timestamp;
238 struct ini_cache *next;
239};
240
241#endif
242
243#ifdef __cplusplus
244}
245#endif
246
247#endif /* UNIXODBC_SOURCE */
248
249/*********************************
250 * ODBCINST - PROPERTIES
251 *********************************
252 *
253 * PURPOSE:
254 *
255 * To provide the caller a mechanism to interact with Data Source properties
256 * containing Driver specific options while avoiding embedding GUI code in
257 * the ODBC infrastructure.
258 *
259 * DETAILS:
260 *
261 * 1. Application calls libodbcinst.ODBCINSTConstructProperties()
262 * - odbcinst will load the driver and call libMyDrvS.ODBCINSTGetProperties() to build a list of all possible properties
263 * 2. Application calls libodbcinst.ODBCINSTSetProperty()
264 * - use, as required, to init values (ie if configuring existing DataSource)
265 * - use libodbcinst.SetConfigMode() & libodbcinst.SQLGetPrivateProfileString() to read existing Data Source info (do not forget to set the mode back)
266 * - do not forget to set mode back to ODBC_BOTH_DSN using SetConfigMode() when done reading
267 * - no call to Driver Setup
268 * 3. Application calls libodbcinst.ODBCINSTValidateProperty()
269 * - use as required (ie on leave widget event)
270 * - an assesment of the entire property list is also done
271 * - this is passed onto the driver setup DLL
272 * 4. Application should refresh widgets in case aPromptData or szValue has changed
273 * - refresh should occur for each property where bRefresh = 1
274 * 5. Application calls libodbcinst.ODBCINSTValidateProperties()
275 * - call this just before saving new Data Source or updating existing Data Source
276 * - should always call this before saving
277 * - use libodbcinst.SetConfigMode() & libodbcinst.SQLWritePrivateProfileString() to save Data Source info
278 * - do not forget to set mode back to ODBC_BOTH_DSN using SetConfigMode() when done saving
279 * - this is passed onto the driver setup DLL
280 * 6. Application calls ODBCINSTDestructProperties() to free up memory
281 * - unload Driver Setup DLL
282 * - frees memory (Driver Setup allocates most of the memory but we free ALL of it in odbcinst)
283 *
284 * NOTES
285 *
286 * 1. odbcinst implements 5 functions to support this GUI config stuff
287 * 2. Driver Setup DLL implements just 3 functions for its share of the work
288 *
289 *********************************/
290
291#define ODBCINST_SUCCESS 0
292#define ODBCINST_WARNING 1
293#define ODBCINST_ERROR 2
294
295#define ODBCINST_PROMPTTYPE_LABEL 0 /* readonly */
296#define ODBCINST_PROMPTTYPE_TEXTEDIT 1
297#define ODBCINST_PROMPTTYPE_LISTBOX 2
298#define ODBCINST_PROMPTTYPE_COMBOBOX 3
299#define ODBCINST_PROMPTTYPE_FILENAME 4
300#define ODBCINST_PROMPTTYPE_HIDDEN 5
301#define ODBCINST_PROMPTTYPE_TEXTEDIT_PASSWORD 6
302
303typedef struct tODBCINSTPROPERTY
304{
305 struct tODBCINSTPROPERTY *pNext; /* pointer to next property, NULL if last property */
306
307 char szName[INI_MAX_PROPERTY_NAME+1]; /* property name */
308 char szValue[INI_MAX_PROPERTY_VALUE+1]; /* property value */
309 int nPromptType; /* PROMPTTYPE_TEXTEDIT, PROMPTTYPE_LISTBOX, PROMPTTYPE_COMBOBOX, PROMPTTYPE_FILENAME */
310 char **aPromptData; /* array of pointers terminated with a NULL value in array. */
311 char *pszHelp; /* help on this property (driver setups should keep it short) */
312 void *pWidget; /* CALLER CAN STORE A POINTER TO ? HERE */
313 int bRefresh; /* app should refresh widget ie Driver Setup has changed aPromptData or szValue */
314 void *hDLL; /* for odbcinst internal use... only first property has valid one */
315} ODBCINSTPROPERTY, *HODBCINSTPROPERTY;
316
317/*
318 * Conversion routines for wide interface
319 */
320
321char* _multi_string_alloc_and_copy( LPCWSTR in );
322char* _single_string_alloc_and_copy( LPCWSTR in );
323void _single_string_copy_to_wide( SQLWCHAR *out, LPCSTR in, int len );
324void _multi_string_copy_to_wide( SQLWCHAR *out, LPCSTR in, int len );
325void _single_copy_to_wide( SQLWCHAR *out, LPCSTR in, int len );
326SQLWCHAR* _multi_string_alloc_and_expand( LPCSTR in );
327SQLWCHAR* _single_string_alloc_and_expand( LPCSTR in );
328void _single_copy_from_wide( SQLCHAR *out, LPCWSTR in, int len );
329
330/*
331 * To support finding UI plugin
332 */
333char *_getUIPluginName( char *pszName, char *pszUI );
334char *_appendUIPluginExtension( char *pszNameAndExtension, char *pszName );
335char *_prependUIPluginPath( char *pszPathAndName, char *pszName );
336
337#if defined(__cplusplus)
338 extern "C" {
339#endif
340
341/* ONLY IMPLEMENTED IN ODBCINST (not in Driver Setup) */
342int INSTAPI ODBCINSTConstructProperties( char *szDriver, HODBCINSTPROPERTY *hFirstProperty );
343int INSTAPI ODBCINSTSetProperty( HODBCINSTPROPERTY hFirstProperty, char *pszProperty, char *pszValue );
344int INSTAPI ODBCINSTDestructProperties( HODBCINSTPROPERTY *hFirstProperty );
345int INSTAPI ODBCINSTAddProperty( HODBCINSTPROPERTY hFirstProperty, char *pszProperty, char *pszValue );
346
347/* IMPLEMENTED IN ODBCINST AND DRIVER SETUP */
348int INSTAPI ODBCINSTValidateProperty( HODBCINSTPROPERTY hFirstProperty, char *pszProperty, char *pszMessage );
349int INSTAPI ODBCINSTValidateProperties( HODBCINSTPROPERTY hFirstProperty, HODBCINSTPROPERTY hBadProperty, char *pszMessage );
350
351/* ONLY IMPLEMENTED IN DRIVER SETUP (not in ODBCINST) */
352int INSTAPI ODBCINSTGetProperties( HODBCINSTPROPERTY hFirstProperty );
353
354#if defined(__cplusplus)
355 }
356#endif
357
358#endif
359
360