1*a76b9a7fSPedro Giffuni /*************************************************************************
2*a76b9a7fSPedro Giffuni
3*a76b9a7fSPedro Giffuni Copyright 2011 Yuri Dario <mc6530@mclink.it>
4*a76b9a7fSPedro Giffuni
5*a76b9a7fSPedro Giffuni Licensed under the Apache License, Version 2.0 (the "License");
6*a76b9a7fSPedro Giffuni you may not use this file except in compliance with the License.
7*a76b9a7fSPedro Giffuni You may obtain a copy of the License at
8*a76b9a7fSPedro Giffuni
9*a76b9a7fSPedro Giffuni http://www.apache.org/licenses/LICENSE-2.0
10*a76b9a7fSPedro Giffuni
11*a76b9a7fSPedro Giffuni Unless required by applicable law or agreed to in writing, software
12*a76b9a7fSPedro Giffuni distributed under the License is distributed on an "AS IS" BASIS,
13*a76b9a7fSPedro Giffuni WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*a76b9a7fSPedro Giffuni See the License for the specific language governing permissions and
15*a76b9a7fSPedro Giffuni limitations under the License.
16*a76b9a7fSPedro Giffuni
17*a76b9a7fSPedro Giffuni ************************************************************************/
18*a76b9a7fSPedro Giffuni
19*a76b9a7fSPedro Giffuni #define INCL_DOS
20*a76b9a7fSPedro Giffuni #ifdef OS2
21*a76b9a7fSPedro Giffuni #include <svpm.h>
22*a76b9a7fSPedro Giffuni #else
23*a76b9a7fSPedro Giffuni #include <os2.h>
24*a76b9a7fSPedro Giffuni #endif
25*a76b9a7fSPedro Giffuni #include <dlfcn.h>
26*a76b9a7fSPedro Giffuni #include <stdarg.h>
27*a76b9a7fSPedro Giffuni #include <stdlib.h>
28*a76b9a7fSPedro Giffuni #ifdef TESTME
29*a76b9a7fSPedro Giffuni #include <stdio.h>
30*a76b9a7fSPedro Giffuni #endif
31*a76b9a7fSPedro Giffuni
32*a76b9a7fSPedro Giffuni typedef APIRET _PMPRINTF(const char*, ...);
33*a76b9a7fSPedro Giffuni typedef _PMPRINTF* PMPRINTF;
34*a76b9a7fSPedro Giffuni
35*a76b9a7fSPedro Giffuni static void* hmodPmPrintf = NULL;
36*a76b9a7fSPedro Giffuni static PMPRINTF pfnPmPrintf = NULL;
37*a76b9a7fSPedro Giffuni
debug_printf(const char * format,...)38*a76b9a7fSPedro Giffuni int _Export debug_printf( const char* format, ...)
39*a76b9a7fSPedro Giffuni {
40*a76b9a7fSPedro Giffuni va_list args;
41*a76b9a7fSPedro Giffuni int cnt;
42*a76b9a7fSPedro Giffuni
43*a76b9a7fSPedro Giffuni if (hmodPmPrintf == NULL) {
44*a76b9a7fSPedro Giffuni // try dll loading
45*a76b9a7fSPedro Giffuni hmodPmPrintf = dlopen( "PMPRINTF", 0);
46*a76b9a7fSPedro Giffuni if (hmodPmPrintf == NULL)
47*a76b9a7fSPedro Giffuni return -1;
48*a76b9a7fSPedro Giffuni
49*a76b9a7fSPedro Giffuni // search function
50*a76b9a7fSPedro Giffuni pfnPmPrintf = dlsym(hmodPmPrintf, "PmPrintfVa");
51*a76b9a7fSPedro Giffuni if (!pfnPmPrintf)
52*a76b9a7fSPedro Giffuni return -1;
53*a76b9a7fSPedro Giffuni
54*a76b9a7fSPedro Giffuni }
55*a76b9a7fSPedro Giffuni
56*a76b9a7fSPedro Giffuni // function loaded, print data
57*a76b9a7fSPedro Giffuni va_start(args, format);
58*a76b9a7fSPedro Giffuni cnt = pfnPmPrintf(format, args);
59*a76b9a7fSPedro Giffuni va_end(args);
60*a76b9a7fSPedro Giffuni
61*a76b9a7fSPedro Giffuni return cnt;
62*a76b9a7fSPedro Giffuni }
63*a76b9a7fSPedro Giffuni
64*a76b9a7fSPedro Giffuni
65*a76b9a7fSPedro Giffuni #ifdef TESTME
main(void)66*a76b9a7fSPedro Giffuni int main( void)
67*a76b9a7fSPedro Giffuni {
68*a76b9a7fSPedro Giffuni printf( "Test PMPRINTF.DLL output, check PM window.\n");
69*a76b9a7fSPedro Giffuni debug_printf( "Test PMPRINTF.DLL output, check PM window.");
70*a76b9a7fSPedro Giffuni debug_printf( "Test PMPRINTF.DLL output: integer %d", 12345);
71*a76b9a7fSPedro Giffuni debug_printf( "Test PMPRINTF.DLL output: float %f", 123.45);
72*a76b9a7fSPedro Giffuni debug_printf( "Test PMPRINTF.DLL output: string '%s'", "Hello World");
73*a76b9a7fSPedro Giffuni exit(0);
74*a76b9a7fSPedro Giffuni }
75*a76b9a7fSPedro Giffuni #endif // TESTME
76