source: trunk/src/twain_32/initterm.cpp

Last change on this file was 21916, checked in by dmik, 14 years ago

Merge branch gcc-kmk to trunk.

File size: 3.9 KB
Line 
1/* $Id: initterm.cpp,v 1.13 2001-09-05 13:52:13 bird Exp $
2 *
3 * TWAIN_32 DLL entry point
4 *
5 * Copyright 1998 Sander van Leeuwen
6 * Copyright 1998 Peter Fitzsimmons
7 *
8 * Project Odin Software License can be found in LICENSE.TXT
9 */
10
11#define INCL_DOSMODULEMGR
12#define INCL_DOSPROCESS
13#include <os2wrap.h> //Odin32 OS/2 api wrappers
14#include <stdlib.h>
15#include <stdio.h>
16#include <string.h>
17#include <odin.h>
18#include <win32type.h>
19#include <winconst.h>
20#include <odinlx.h>
21#include <misc.h> /*PLF Wed 98-03-18 23:18:15*/
22#include <twain.h>
23#include <initdll.h>
24
25// Win32 resource table (produced by wrc)
26extern DWORD twain_32_PEResTab;
27
28#if 0
29extern FARPROC WINAPI GetProcAddress(HMODULE,LPCSTR);
30extern HMODULE WINAPI LoadLibraryA(LPCSTR);
31extern BOOL WINAPI FreeLibrary(HMODULE);
32#endif
33extern int WINAPI PROFILE_GetOdinIniInt(LPCSTR section,LPCSTR key_name,int def);
34TW_UINT16 (APIENTRY *TWAINOS2_DSM_Entry)( pTW_IDENTITY, pTW_IDENTITY,
35 TW_UINT32, TW_UINT16, TW_UINT16, TW_MEMREF) = 0;
36#if 0
37 static HINSTANCE hTWAIN = 0;
38#else
39 static HMODULE hTWAIN = 0;
40 char szLoadError[256];
41#endif
42
43static HMODULE dllHandle = 0;
44
45BOOL WINAPI LibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
46{
47 switch (fdwReason)
48 {
49 case DLL_PROCESS_ATTACH:
50 return TRUE;
51
52 case DLL_THREAD_ATTACH:
53 case DLL_THREAD_DETACH:
54 return TRUE;
55
56 case DLL_PROCESS_DETACH:
57#ifdef __IBMC__
58 ctordtorTerm();
59#endif
60 return TRUE;
61 }
62 return FALSE;
63}
64
65ULONG SYSTEM DLL_InitTwain32(ULONG hModule)
66{
67 CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed 98-03-18 05:28:48*/
68
69 ULONG twaintype = PROFILE_GetOdinIniInt("TWAIN","TwainIF",1);
70 switch(twaintype)
71 {
72 case 1:
73 default:
74 {
75 dprintf(("TWAIN_32: Using CFM-Twain as Twain Source.\n\n"));
76#if 0
77 hTWAIN = LoadLibraryA("TWAINOS2.DLL");
78 if (hTWAIN)
79 {
80 *(VOID **)&TWAINOS2_DSM_Entry=(void*)GetProcAddress(hTWAIN, (LPCSTR)"DSM_Entry");
81 }
82 else
83 {
84 return -1;
85 }
86#else
87 APIRET rc = DosLoadModule( szLoadError, sizeof(szLoadError), "TWAINOS2", &hTWAIN);
88 if (rc == 0)
89 {
90 rc = DosQueryProcAddr(hTWAIN, 0, "DSM_Entry",(PFN*)&TWAINOS2_DSM_Entry);
91 }
92 else
93 {
94 dprintf(("TWAIN_32: Error Loading DLL: %s",szLoadError));
95 }
96 if (rc != 0)
97 {
98 return -1;
99 }
100#endif
101 break;
102 }
103 case 2:
104 {
105 dprintf(("TWAIN_32: Using STI-Twain as Twain Source.\n\n"));
106#if 0
107 hTWAIN = LoadLibraryA("TWAIN.DLL");
108 if (hTWAIN)
109 {
110 *(VOID **)&TWAINOS2_DSM_Entry=(void*)GetProcAddress(hTWAIN, (LPCSTR)"DSM_ENTRY");
111 }
112 else
113 {
114 return -1;
115 }
116#else
117 APIRET rc = DosLoadModule( szLoadError, sizeof(szLoadError), "TWAIN", &hTWAIN);
118 if (rc == 0)
119 {
120 rc = DosQueryProcAddr(hTWAIN, 0, "DSM_Entry",(PFN*)&TWAINOS2_DSM_Entry);
121 }
122 else
123 {
124 dprintf(("TWAIN_32: Error Loading DLL: %s",szLoadError));
125 }
126 if (rc != 0)
127 {
128 return -1;
129 }
130#endif
131 break;
132 }
133 case 3:
134 {
135 dprintf(("TWAIN_32: Using SANE as Twain Source (currently not supported).\n\n"));
136 return -1;
137 }
138 }
139
140 dllHandle = RegisterLxDll(hModule, LibMain, (PVOID)&twain_32_PEResTab);
141 if(dllHandle == 0)
142 return -1;
143
144 return 0;
145}
146
147void SYSTEM DLL_TermTwain32(ULONG hModule)
148{
149 if (hTWAIN)
150 {
151#if 0
152 FreeLibrary(hTWAIN);
153#else
154 DosFreeModule(hTWAIN);
155#endif
156 hTWAIN = 0;
157 }
158
159 if (dllHandle)
160 UnregisterLxDll(dllHandle);
161}
162
163ULONG SYSTEM DLL_Init(ULONG hModule)
164{
165 if (DLL_InitDefault(hModule) == -1)
166 return -1;
167 return DLL_InitTwain32(hModule);
168}
169
170void SYSTEM DLL_Term(ULONG hModule)
171{
172 DLL_TermTwain32(hModule);
173 DLL_TermDefault(hModule);
174}
Note: See TracBrowser for help on using the repository browser.