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